hdu1166 线段树单点更新区间查询
2018-02-25 13:52
441 查看
题意:
单点修改:人数+= c区间查询:【l,r】人数和
思路:
单点暴力修改到叶子区间信息:维护加法和
难度:0.5
866ms#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;
const int inf=0x3f3f3f;
struct Stree
{
int val;//sum
//int lazy;
} sts[4*50005]; //开4倍
int a[50005];
int pushup(int root)
{
sts[root].val=sts[root<<1].val+sts[root<<1|1].val;
}
void build(int l,int r,int root)//根节点从1开始吧
{
if(l==r)//到达子节点
{
sts[root].val=a[l];
}
else
{
//sts[root].val=sts[root].lazy=0;//没了这句会WA,清空lazy跟val
int mid=(l+r)>>1;//(l+r)/2
build(l,mid,root<<1);
build(mid+1,r,root<<1|1);
pushup(root);//更新本节点
}
}
int query(int nowl,int nowr,int ql,int qr,int root)
{
if(nowl>=ql&&nowr<=qr)
{
return sts[root].val;
}
// pushdown(root);
int mid=(nowl+nowr)>>1;
int ans=0;
if(ql<=mid)ans+=query(nowl,mid,ql,qr,root<<1);
if(qr>mid)ans+=query(mid+1,nowr,ql,qr,root<<1|1);
return ans;
}
void updateone(int nowl,int nowr,int idx,int addval,int root)
{
if(nowl==nowr)
{
if(idx==nowl) sts[root].val+=addval;
return ;
}
// pushdown(root);
int mid=(nowl+nowr)>>1;
if(idx<=mid)
updateone(nowl,mid,idx,addval,root<<1);
else
updateone(mid+1,nowr,idx,addval,root<<1|1);
pushup(root);
}
int main()
{
int T;
cin>>T;
int kase=0;
while(T--)
{
int n;
cin>>n;
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
build(1,n,1);
// op(n);
string s;int l,r;
printf("Case %d:\n",++kase);
while(cin>>s)
{
if(s[0]=='E')break;
scanf("%d %d",&l,&r);
if(s[0]=='A')
updateone(1,n,l,r,1);
else if(s[0]=='S')
updateone(1,n,l,-r,1);
else if(s[0]=='Q')
printf("%d\n",query(1,n,l,r,1));
}
}
}
相关文章推荐
- 【单点更新,区间查询,线段树】【HDU1166】【敌兵布阵】
- 【单点更新,区间查询,线段树】【HDU1166】【敌兵布阵】
- 单点更新 “区间和”最值查询 线段树解法 和 BIT解法 杭电hdu1166
- HDU1166(线段树单点更新区间查询)
- HDU1166 敌兵布阵(线段树 单点更新 区间查询)
- hdu1166 敌兵布阵 线段树 单点更新区间查询
- hdu1166(线段树单点更新区间查询)
- ny 123 士兵杀敌(四)-- 线段树(区间更新,单点查询)
- HDU 3308 线段树 最长连续上升子序列 单点更新 区间查询
- hdu1166 敌兵布阵 线段树单点更新+区间求和
- HDU 1166 敌兵布阵 (线段树单点更新 区间查询)
- 线段树之建树,单点更新以及区间查询
- HDU 1556 给连续个球涂色-线段树-(区间更新,单点查询)
- HDU1166 线段树 单点修改、区间查询
- 线段树入门 单点更新区间查询 南阳oj 116
- 牛客网NowCoder 2018年全国多校算法寒假训练营练习比赛(第五场)A.逆序数 B.Big Water Problem(线段树-区间查询求和和单点更新) F.The Biggest Water Problem H.Tree Recovery(线段树-区间查询求和和区间更新)
- 线段树区间最大值查询,单点更新,建立模板
- NYOJ 123 士兵杀敌(四)(线段树--区间更新+单点查询)
- hdu1394 Minimum Inversion Number 最小逆序数 线段树单点更新区间查询
- HDU 1166 敌兵布阵 (线段树单点更新 区间查询)