士兵杀敌(二)(线段树模板)
来源:互联网 发布:ov7670 丢失像素数据 编辑:程序博客网 时间:2024/06/08 05:23
士兵杀敌(二)
时间限制:1000 ms | 内存限制:65535 KB
难度:5
- 描述
南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。
小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。
南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。
- 输入
- 只有一组测试数据
第一行是两个整数N,M,其中N表示士兵的个数(1<N<1000000),M表示指令的条数。(1<M<100000)
随后的一行是N个整数,ai表示第i号士兵杀敌数目。(0<=ai<=100)
随后的M行每行是一条指令,这条指令包含了一个字符串和两个整数,首先是一个字符串,如果是字符串QUERY则表示南将军进行了查询操作,后面的两个整数m,n,表示查询的起始与终止士兵编号;如果是字符串ADD则后面跟的两个整数I,A(1<=I<=N,1<=A<=100),表示第I个士兵新增杀敌数为A. - 输出
- 对于每次查询,输出一个整数R表示第m号士兵到第n号士兵的总杀敌数,每组输出占一行
- 样例输入
5 61 2 3 4 5QUERY 1 3ADD 1 2QUERY 1 3ADD 2 3QUERY 1 2QUERY 1 5
- 样例输出
68820
- 来源
- [张云聪]原创
- 上传者
张云聪
线段树模板题目,再加深一遍印象,有些细节还是要记住
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <cmath>using namespace std;const int maxx=1000005;int sum;struct node{ int l,r,val;}tree[maxx<<2];int data[maxx];void build(int rt,int p,int q){ tree[rt].l=p; tree[rt].r=q; if(p==q) { tree[rt].val=data[p]; return ; } int mid=(p+q)/2; build(rt*2,p,mid); build(rt*2+1,mid+1,q); tree[rt].val=tree[2*rt].val+tree[rt*2+1].val; return ;}void update(int rt,int pos,int novel){ if(tree[rt].l==pos&&tree[rt].r==pos) { tree[rt].val+=novel; return ; } int mid=(tree[rt].l+tree[rt].r)/2; if(pos<=mid) { update(rt*2,pos,novel); } else { update(rt*2+1,pos,novel); } tree[rt].val=tree[rt*2].val+tree[rt*2+1].val; return ;}void query(int rt,int p,int q){ if(tree[rt].l==p&&tree[rt].r==q) { sum+=tree[rt].val; return ; } int mid=(tree[rt].l+tree[rt].r)/2; if(q<=mid) //此处一定要注意换一种说法不一定能实现 { query(rt*2,p,q); } else if(p>mid) { query(rt*2+1,p,q); } else { query(2*rt,p,mid); query(2*rt+1,mid+1,q); } return ;}int main(){ int n,m; scanf("%d %d",&n,&m); char a[10]; int x,y; for(int i=1;i<=n;i++) { scanf("%d",&data[i]); } build(1,1,n); while(m--) { scanf("%s %d %d",a,&x,&y); if(a[0]=='Q') { sum=0; query(1,x,y); printf("%d\n",sum); } else if(a[0]=='A') { update(1,x,y); } } return 0;}
0 0
- nyoj 士兵杀敌(二) 116 (线段树模板)
- 士兵杀敌(二)(线段树模板)
- 士兵杀敌(二)(线段树)
- 士兵杀敌(二)(线段树)
- 士兵杀敌(二)(线段树)
- 【nyoj116】士兵杀敌二(线段树)
- NYOJ 【108】士兵杀敌 一 (线段树 + 模板题)
- 南阳OJ 108 士兵杀敌(一)【线段树模板】
- nyoj-108-士兵杀敌(一)【线段树模板】
- 南阳116士兵杀敌(二)(线段树)
- nyoj116 士兵杀敌(二)(线段树)
- 【南阳OJ116】士兵杀敌(二)(线段树)
- NYIST 116 士兵杀敌(二) --- 线段树区间更新
- NYOJ 116 士兵杀敌(二)【线段树 单点更新】
- nyoj116士兵杀敌(二)线段树单点更新
- NYOJ 116 士兵杀敌(二) 树状数组 & 线段树
- nyoj 116 士兵杀敌(二)【线段树】区间求和
- nyoj116士兵杀敌(二)【线段树||树状数组】
- 在tomcat上发布项目路径应注意的问题
- ios开发——支付宝SDK集成流程
- JS实现字符串反转
- POJ2560Freckles
- 【bzoj 2005】[Noi2010]能量采集
- 士兵杀敌(二)(线段树模板)
- HDU
- dwr通过WebContextFactory获取请求对象
- UML各种图形及作用
- CentOS kafka dockerfile
- 【bzoj 3223】Tyvj 1729 文艺平衡树
- 使用广播监听短信到来并获取短信内容
- Window之删除IE图标
- Unity3D如何创建多个UIRoot?