Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
用扩展过的树状数组过的这道题,树状数组部分只用了1600.008个K的内存inline int Max(int a,int b){return a>b?a:b;} inline int Lowbit(int a){return a&-a;} int tree1[200001],tree2[200001],Big; void addvalue(int key,int v){key+=100000; int m; if (key%2)m=(tree2[key]+=v);else m=(tree1[key]+=v); for (int j=key;j<Big;j+=Lowbit(j+1))tree1[j]=Max(tree1[j],m); for (int j=key;j;j-=Lowbit(j))tree2[j]=Max(tree2[j],m); } int findMax(int l,int r){l+=100000;r+=100000; int j,s;s=-2100000000; for (j=r;j-Lowbit(j+1)+1>=l;j-=Lowbit(j+1))s=Max(s,tree1[j]); if (l)for (j=l;j+Lowbit(j)-1<=r;j+=Lowbit(j))s=Max(s,tree2[j]); return s; } void iniTree(){ Big=200001; memset(tree1,0,sizeof(tree1)); memset(tree2,0,sizeof(tree2)); } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator