給出乙個長為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...