标签:lib img += algo 分享图片 技术 return root ide
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std; struct node { int l,r,ls,rs; int val,tag; }T[60*250010]; int A[100010]; iny root[100010]; int cnt=0,n,m; void build(int l,int r) { if(l==r) {T[++cnt].val=A[l];T[cnt].l=l;T[cnt].r=r;return;} int mid=(l+r)/2,tmp; build(l,mid); tmp=cnt; build(mid+1,r); T[++cnt].ls=tmp; T[cnt].rs=cnt-1; T[cnt].l=l;T[cnt].r=r; T[cnt].val=T[cnt-1].val+T[tmp].val; } void pushdown(int id) { if(id) { T[T[id].ls].tag+=T[id].tag; T[T[id].rs].tag+=T[id].tag; T[id].val=T[T[id].ls].tag*(T[T[id].ls].r-T[T[id].ls].l)+T[T[id].ls].val; T[id].val+=T[T[id].rs].tag*(T[T[id].rs].r-T[T[id].rs].l)+T[T[id].rs].val; T[id].tag=0; } return; } void change(int id,int v,int l,int r) { T[++cnt]=T[id]; if(T[cnt].r==r&&T[cnt].l==l) T[cnt].val+=v; pushdown(cnt); int mid=(l+r)/2; if(mid>l) change(T[cnt].ls,l,min(mid,r)); if(mid<r) change(T[cnt].rs,max(mid+1,l),r); return; } int query(int id,int l,int r) { if(T[id].r==r&&T[id].l==l) return T[id].val; pushdown(id); int tmp=0,mid=(l+r)/2; if(mid>l) tmp+=query(T[id].ls,l,min(mid,r)); if(mid<r) tmp+=query(T[id].rs,max(mid+1,l),r); return tmp; } int main() { scanf("%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&A[i]); } build(1,n); root[0]=cnt; for(int i=1;i<=m;i++) { } }
标签:lib img += algo 分享图片 技术 return root ide
原文地址:http://www.cnblogs.com/wjxgy/p/7906156.html