校內OJ3755 資料結構題(線段樹)

2021-09-25 09:39:45 字數 1677 閱讀 7329

給出乙個長為n的序列

編號輸入格式含義1

1 l r

求區間 [l,r]的和

22 l r

求區間[l,r]的最大值

33 l r

求區間 [l,r]的最小值

44 l r x

將區間 [l,r]內的所有數加上 x

55 i x

將第i個數按位異或 x

66 l r

求區間[l,r]內所有數的平均值(保留兩位小數)

77 l r

將區間 [l,r]內的所有數都變為原來的相反數

88 l r x

將區間[l,r]內的所有數賦值為 x

99 l r

求區間 [l,r]內所有數的平方和

對於操作 1 和 9,輸出要對 1e9+7取模。

碼碼碼碼碼碼農題。

標記我是先覆蓋再取反再加,覆蓋加和取反的標記要清零。

然後就是細節,比如區間加平方和的修改要在區間和之前,詳見**。

#includeusing namespace std;

typedef long long ll;

const ll maxn=1e5+10;

const ll mod=1e9+7;

ll n,q,cz,x,y;

ll a[maxn];

struct treetr[maxn<<4];

ll add(ll x,ll y)

ll read()

void push_up(ll root)

void push_add(ll root,ll key)

void push_rev(ll root)

void push_cov(ll root,ll key)

void push_down(ll root)

if(tr[root].rev)

if(tr[root].add)

}void build(ll root,ll l,ll r)

ll mid=l+r>>1;

build(root<<1,l,mid);

build(root<<1|1,mid+1,r);

push_up(root);

}void update(ll root,ll l,ll r,ll l,ll r,ll type,ll key)

push_up(root);

}void update2(ll root,ll l,ll r,ll id,ll key)

push_down(root);

int mid=l+r>>1;

if(id<=mid)

update2(root<<1,l,mid,id,key);

else

update2(root<<1|1,mid+1,r,id,key);

push_up(root);

}ll query(ll root,ll l,ll r,ll l,ll r,ll type) }}

int main()

if(cz==2)

if(cz==3)

if(cz==4)

if(cz==5)

if(cz==6)

if(cz==7)

if(cz==8)

if(cz==9)

} return 0;

}

刷題 資料結構 樹狀陣列 線段樹

1 數星星 複製自他人部落格 由於題目中給的資料是按y軸排序,我們只需構建x軸的樹狀陣列,也就是說我們只需統計星星i之前一共有多少個x座標小於或等於xi的星星,這個數值也就是星星i的等級 又因為樹狀陣列無法處理下標為0的元素 會死迴圈 所以要把每個x座標 1 include include incl...

資料結構 線段樹

啦啦啦啦啦啦線段樹是個好東西 好吧並沒有什麼好的 但貌似還是很好啊 線段樹就是一棵樹!顧名思義 又是這個詞 就是求關於一段的某些什麼什麼東西。比如區間最大值啊什麼的。引用百科知識 線段樹是一種二叉搜尋樹,與區間樹相似,它將乙個區間劃分成一些單元區間,每個單元區間對應線段樹中的乙個葉結點。對於線段樹中...

資料結構 線段樹

一 目標 1.如何快速的查詢出下列陣列arr 2,5 的和 2。以及更新arr 4 為6。用普通的方法查詢的複雜度為o n 更新的複雜度為o 1 這時候我們可以用線段樹來快速完成這些操作,複雜度為logn。二 內容 如何建立,查詢,更新線段樹。public class qurqpd int tree...