线段树—hdu1166
来源:互联网 发布:java垃圾回收原理 编辑:程序博客网 时间:2024/06/01 09:19
hdu1166
#include<cstdio>#include<cstring>using namespace std;struct node{ int l,r,n;}t[50005*3];//一定要是三倍,结构体!!!别问我为什么要强调这个int sum;void build(int l,int r,int k){ t[k].l=l;t[k].r=r;t[k].n=0; if(l==r) return; int mid=(r+l)>>1; build(l,mid,2*k); build(mid+1,r,2*k+1);}void updata(int a,int n,int k){ if(t[k].l==t[k].r&&t[k].l==a) { t[k].n+=n; return ; } int mid=(t[k].l+t[k].r)>>1; if(a<=mid) updata(a,n,2*k); else updata(a,n,2*k+1); t[k].n=t[2*k].n+t[2*k+1].n;}void sea(int l,int r,int k){ if(t[k].l==l&&t[k].r==r) { sum+=t[k].n; return; } int mid=(t[k].l+t[k].r)>>1; if(r<=mid) sea(l,r,2*k); else if(l>mid) sea(l,r,2*k+1); else { sea(l,mid,2*k); sea(mid+1,r,2*k+1); }}int main(){ char s[10]; int T,cnt=1; scanf("%d",&T); while(T--) { int n; printf("Case %d:\n",cnt++); scanf("%d",&n); build(1,n,1); for(int i=1;i<=n;i++) { int temp; scanf("%d",&temp); updata(i,temp,1); } while(scanf("%s",s)&&strcmp(s,"End")) { int a,b; scanf("%d%d",&a,&b); if(!strcmp(s,"Add")) updata(a,b,1); if(!strcmp(s,"Sub")) updata(a,-b,1); if(!strcmp(s,"Query")) { sum=0; sea(a,b,1); printf("%d\n",sum); } } } return 0;}
0 0
- 线段树—hdu1166
- HDU1166 线段树入门
- 初步线段树 hdu1166
- hdu1166 线段树
- hdu1166线段树
- hdu1166之线段树
- hdu1166 简单线段树
- 线段树之hdu1166
- hdu1166--简单线段树
- Hdu1166-- 线段树模板
- hdu1166简单线段树
- hdu1166(线段树)
- hdu1166 线段树
- hdu1166(线段树)
- 线段树模板 hdu1166
- hdu1166线段树
- 线段树hdu1166
- 线段树hdu1166
- C语言FLOAT类型
- Unit2.11 文档
- Mybatis中example类的使用
- AbstractExecutorService源码理解
- Flask中SqlAlchemy的读写分离配置
- 线段树—hdu1166
- uva1149(贪心)
- [李景山php] 利用redis 作为session的处理程序
- C++实验五—数组分离
- HttpUrl --post请求数据
- java向EXCEL文件中写入数据使用jxljar包
- 本地更改网页
- 开发机器学习应用程序的步骤
- Travis Node pm2