UVA 11235 線段樹加區間合併

2021-08-01 00:13:44 字數 997 閱讀 3798

記錄每個位置的左邊界和又邊界,然後建起線段樹如果左區間的尾部和右區間的頭部是一樣的數值,可能這個尾部這個數在裡面出現次數會變成最大

所以要更新一下這個這段的最大出現次數

題目鏈結

#include#include#include#include#define inf 0x3f3f3f3f

#define mid (l+r)/2

#define lson 2*i,l,mid

#define rson 2*i|1,mid+1,r

using namespace std;

const int mx = 1e6+5;

int v[mx],lp[mx],rp[mx];

int sum[mx<<2];

void built(int i,int l,int r)

built(lson);

built(rson);

sum[i] = max(sum[2*i],sum[2*i+1]);

if(v[mid+1] == v[mid]) //更新一下最大出現次數

sum[i] = max(sum[i],min(rp[mid],r)-max(lp[mid],l)+1);

}int query(int i,int l,int r,int l,int r)

int sum1 = 0;

if(r <= mid) sum1 = query(lson,l,r);

else if(l > mid) sum1 = query(rson,l,r);

else

return sum1;

}int n,m;

int main()

for(int i = n; i >= 1; i--)

rp[i] = v[i] == v[i+1]?rp[i+1]:i;

built(1,1,n);

while(m--)

} return 0;

}

線段樹 區間加區間乘

給出序列 a1,a2,an 0 ai 109 有關序列的四種操作 1.al,al 1,ar 1 l r n 加上 x 103 x 103 2.al,al 1,ar 1 l r n 乘上 x 103 x 103 3.al,al 1,ar 1 l r n 變成 x al,x al 1 x ar 103 ...

線段樹動態開點區間加區間求和

陝西師範大學第七屆程式設計競賽網路同步賽 h.萬惡的柯怡 保證葉子節點被完整的覆蓋,需要開節點,就把左右兒子都開出來,其餘和普通線段樹一樣。用結構體內部函式,記憶體不足,第一次遇見本地問題不嚴重 不明嚼慄?include typedef long long ll const int n 400001...

ZKW線段樹區間加區間取最值

本來以為是和zkw單點修改之類的簡單技巧,但是今天卡常的時候學習了一下發現有點離譜。rx tr x trx 表示max f ax max x max max maxfax maxx 也就是線段樹上乙個節點和他父親區間最大值的差分,我們現在可以知道乙個線段樹上乙個整區間的最大值就是他到根的和。那麼我們...