給定乙個長度為
n 序列,有
m個操作,要求支援動態插入乙個數,刪除乙個數,修改乙個位置的數。詢問乙個區間內所有子區間的最大極差和最小極差。
data constraint n,
m≤100000
可以發現,乙個區間內最大極差肯定可以是整個區間,最小極差肯定是相鄰兩項組成的子區間。
然後就可以splay隨便維護一下了。
時間複雜度:o(
nlog
n)
#include#include#include#include#include#includeusing namespace std ;
#define n 300000 + 10
int son[n][2] , pre[n] ;
int val[n] , size[n] , minv[n] , maxv[n] , di[n] , left[n] , right[n] ;
int a[n] ;
int n , m , cnt , root ;
void update( int v )
left[v] = left[l] ;
right[v] = right[r] ;
if ( !left[v] ) left[v] = val[v] ;
if ( !right[v] ) right[v] = val[v] ;
}int
get( int x )
return 0 ;
}void rotate( int x )
void splay( int x , int goal )
rotate(x) ;
}update(x) ;
if ( !goal ) root = x ;
}int build( int l , int r , int f )
void insert( int x , int e )
void merge( int x , int e )
int searchmax( int x , int y )
int searchmin( int x , int y )
int main() else
if ( op[2] == 'a' )
if ( op[2] == 'i' ) }}
return 0 ;
}
以上. nyoj498子節點計數
時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給定一棵樹的前序和中序序列,求以指定關鍵字節點為根的子樹的節點個數。輸入第一行包含乙個整數 t t 20 表示有幾組測試資料 每組測試資料第一行為整數 n 1 n 50 表示樹的總結點數 接下來兩行為前序和中序序列 第三行有正整...
遍歷對角線 力扣498
給定乙個含有 m x n 個元素的矩陣 m 行,n 列 請以對角線遍歷的順序返回這個矩陣中的所有元素,對角線遍歷如下圖所示。示例 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,4,7,5,3,6,8,9 解釋 對角線遍歷,那麼我們可以先遍歷所有的正向對角線,即 1 2,4 3,5,7 由題...
每日一題力扣498
給定乙個含有 m x n 個元素的矩陣 m 行,n 列 請以對角線遍歷的順序返回這個矩陣中的所有元素,對角線遍歷如下圖所示。正解 這道題太焦心了!class solution def finddiagonalorder self,matrix list list int list int ifnot...