标签:turn 区间 bsp scan 树状 ace 题目 限制 can
给定一个长度为n(n<=100000),初始值都为0的序列,x(x<=10000)次的修改某些位置上的数字,每次加上一个数,然后提出y (y<=10000)个问题,求每段区间的和。时间限制1秒。
输入格式:
第一行1个数,表示序列的长度n
第二行1个数,表示操作的次数w
后面依次是w行,分别表示加入和询问操作
其中,加入用x表示,询问用y表示
x的格式为"x a b" 表示在序列a的位置加上b
y的格式为"y a b" 表示询问a到b区间的加和
输出格式:
每行一个数,分别是每次询问的结果
5 4 x 3 8 y 1 3 x 4 9 y 3 4
8 17
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> using namespace std; int n,m,xx,yy; char a; int c[100000],tree[100000]; int lowbit(int t){ return t&(-t); } int getsum(int x){ int ans=0; for(int i=x;i;i-=lowbit(i)){ ans+=c[i]; } return ans; } void add(int x,int y){ for(int i=x;i<=n;i+=lowbit(i)){ c[i]+=y; } } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d",&tree[i]); add(i,tree[i]); } while(m--){ cin>>a; scanf("%d %d",&xx,&yy); if(a==‘x‘){add(xx,yy);} if(a==‘y‘){ printf("%d\n",getsum(yy)-getsum(xx-1)); } } return 0; }
终于,能较为熟练的使用树状数组了。
orz YG & YYR .
标签:turn 区间 bsp scan 树状 ace 题目 限制 can
原文地址:https://www.cnblogs.com/xiongchongwen/p/11148796.html