HDU

来源:互联网 发布:mac电脑怎么截长图 编辑:程序博客网 时间:2024/05/20 05:29

HDU - 1166  题目

思路: 最基础的线段树,之前写过了(单点更新 + 区间求和)试了试树状数组,毕竟今天的补题也用到了。

#include <cstdio>#include <iostream>#include <cstring>using namespace std;#define met(a,b) memset(a,b,sizeof(a))const int maxn = 5e4 + 10;int c[maxn];int a[maxn];int n;int lowbit(int x)   {  return x&-x; }int add(int x,int v){    for(int i = x; i <= n; i += lowbit(i))    {   c[i] += v;    }    return 0;}int query(int x){    int ans = 0;    for(int i = x; i > 0; i -= lowbit(i))        ans += c[i];    return ans;}int main(){    int t,x;    scanf("%d",&t);    for(int kase = 1; kase <= t; kase ++)    {        met(c,0);        scanf("%d",&n);        for(int i = 1; i <= n ; i++)        {   scanf("%d",&x); add(i,x);}        char s[20];        printf("Case %d:\n",kase);        int a,b;        while(~scanf("%s%d%d",s,&a,&b) && s[0] != 'E')        {            if(s[0] == 'Q')                printf("%d\n",query(b) - query(a-1));            else                s[0] == 'S' ? add(a, -b) : add(a, b);        }    }    return 0;}


原创粉丝点击