hdu-1166
来源:互联网 发布:用excel数据分析方法 编辑:程序博客网 时间:2024/05/17 08:25
这题让我树状数组和线段树都入门了!不错的题目。
树状数组
#include<iostream>#include<cstdio>#include<string>using namespace std;int c[50005],a[50005],N;int lowbit(int x){return x & (-x);}int sum(int n){int ans=0;while(n){ans+=c[n];n-=lowbit(n);}return ans;}void add(int n,int num){while(n<=N){c[n]+=num;n+=lowbit(n);}}int main(){int i,j,n;//freopen("d:\\test.txt","r",stdin);scanf("%d",&n);for(i=1;i<=n;++i){char s[10];int x,y,m;a[0]=0;//c[0]=0;scanf("%d",&N);for(j=1;j<=N;++j){scanf("%d",&x);a[j]=a[j-1]+x;c[j]=a[j]-a[j-lowbit(j)];}printf("Case %d:\n",i);while(scanf("%s",s) && s[0]!='E'){scanf("%d%d",&x,&y);if(s[0]=='Q')printf("%d\n",sum(y)-sum(x-1));else if(s[0]=='A')add(x,y);else add(x,-y);}}return 0;}
线段树
#include<iostream>#include<cstdio>#include<string>using namespace std;#define maxn 50000int sum,a,b;struct node { int l,r,sum; int mid() { return (l+r)>>1; }}tree[maxn*4];void btree(int l,int r,int p){ tree[p].l=l; tree[p].r=r; if(l==r) { scanf("%d",&tree[p].sum); return ; } int m=tree[p].mid(); btree(l,m,p<<1); btree(m+1,r,p<<1|1); tree[p].sum=tree[p<<1].sum+tree[p<<1|1].sum;}void query(int l,int r,int p){ if(a<=l && r<=b) { sum+=tree[p].sum; return; } int m=tree[p].mid(); if(b<=m) query(l,m,p<<1); else if(a>m) query(m+1,r,p<<1|1); else { query(l,m,p<<1); query(m+1,r,p<<1|1); }}void update(int l,int r,int p){ if(l==r) { tree[p].sum+=b; return; } int m=tree[p].mid(); if(a<=m) update(l,m,p<<1); else update(m+1,r,p<<1|1); tree[p].sum=tree[p<<1].sum+tree[p<<1|1].sum;}int main(){ int t,n,cnt; char s[10]; cnt=1;//freopen("d:\\test.txt","r",stdin); scanf("%d",&t); while(t--) { scanf("%d",&n); btree(1,n,1); printf("Case %d:\n",cnt++); while(scanf("%s",s)) { if(s[0]=='E') break; scanf("%d%d",&a,&b); if(s[0]=='Q') { sum=0; query(1,n,1); printf("%d\n",sum);continue; } if(s[0]=='S')b=-b; update(1,n,1); } } return 0;}
- hdu 1166
- hdu 1166
- hdu 1166
- hdu 1166
- HDU 1166
- HDU 1166
- hdu 1166 ~
- hdu-1166
- hdu 1166
- hdu 1166
- HDU 1166
- hdu 1166
- hdu 1166
- HDU 1166
- HDU 1166
- hdu 1166
- hdu 1166
- hdu 1166
- poj-2389
- poj-1604
- poj-1220
- poj-3185
- hdu-1559
- hdu-1166
- uva-1388
- 训练计划
- hdu-2674
- hdu-2824
- UML中数据流图,用例图,类图,对象图,角色图,活动图,序列图详细讲述保存供参考
- nyoj分类-语言入门
- 关于with as 作为查询片段的使用和与临时表#Table的比较
- nyoj分类-数学