NYOJ 123 士兵杀敌 四

来源:互联网 发布:阿里云et是哪个缩写 编辑:程序博客网 时间:2024/05/10 03:20

          区间插线  求点,倒着用树状数组,想明白了,代码很简单,直接套模板。

 http://acm.nyist.net/JudgeOnline/problem.php?pid=123

#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;int T,M;int c[1000010];int lowbit(int x){    return x & (-x);}int sum (int x){    int num = 0;    while(x > 0)    {        num += c[x];        x -= lowbit(x);    }    return num;}void add(int x,int y){    while(x <= M)    {        c[x] += y;        x += lowbit(x);    }}int main(){    int a,b,d;    char s[6];    scanf("%d%d",&T,&M);    for(int i = 0; i < T; i++)    {        scanf("%s",&s);        if(s[0] == 'A')        {            scanf("%d%d%d",&a,&b,&d);            add(a,d);            add(b+1,-d);        }        if(s[0] == 'Q')        {            scanf("%d",&a);            //cout<<sum(a)<<"**"<<endl;            //cout<<sum(a - 1)<<endl;            printf("%d\n",sum(a));        }    }return 0;}


0 0
原创粉丝点击