• hdu 1166【树状数组】


    一道简单的树状数组,但是存在坑爹的问题。。。是我自己的问题。。。。。。~~~~(>_<)~~~~

    首先说一下输出,输出案例,是在输入那些阵营的人数之后在输出(再次表示不满,acm就一定要有案例输出吗,这个问题输出错了竟然判wa,害人不浅,我根本就没有想到这里会出错,浪费精力。。。~~~~(>_<)~~~~ )

    第二,我判别了一下人数删除时是否符合要删除的数量时就错了。。。。。。有问题吗?难道你要别人减去的人比本来的人数还要多。。。。。。你很喜欢负债吗?(~ o ~)~zZ

    View Code
     1 #include <cstdio>
    2 #include <cstring>
    3
    4 int per[50010];
    5 int vis[50010];
    6 int n;
    7
    8 void insert(int t,int num)
    9 {
    10 for(int i = t;i <= n; i += (i&(-i)))
    11 {
    12 per[i] += num;
    13 }
    14 }
    15
    16 int getsum(int t)
    17 {
    18 int sum = 0;
    19 for(int i = t; i > 0;i -= (i&(-i)))
    20 {
    21 sum += per[i];
    22 }
    23
    24 return sum;
    25 }
    26
    27 void init()
    28 {
    29 for(int i =1;i <= n;i ++)
    30 {
    31 insert(i,vis[i]);
    32 }
    33 }
    34
    35 int main()
    36 {
    37 int T,cas = 1;
    38 scanf("%d",&T);
    39 while(T--)
    40 {
    41 scanf("%d",&n);
    42 memset(per,0,sizeof(per));
    43 for(int i = 1;i <= n;i ++)
    44 scanf("%d",&vis[i]);
    45
    46 init();
    47 printf("Case %d:\n",cas ++);//
    48 char s[7];
    49 while(scanf("%s",s) == 1)
    50 {
    51 if(!strcmp(s,"End"))
    52 break;
    53 int a,b;
    54 scanf("%d%d",&a,&b);
    55 if(!strcmp(s,"Query"))
    56 {
    57 printf("%d\n",getsum(b) - getsum(a-1));
    58 }
    59 else if(!strcmp(s,"Add"))
    60 {
    61 insert(a,b);
    62 }
    63 else if(!strcmp(s,"Sub"))
    64 {
    65 /*int num = getsum(a) - getsum(a-1);
    66 if(num < b)
    67 b = num;*/
    68 insert(a,-b);
    69 }
    70 }
    71 }
    72
    73 return 0;
    74 }

    那个注释的地方到底是为什么啊,真的要减去比原来人数还要多的人吗?求解啊~~~~

  • 相关阅读:
    第十次Java作业
    第七周Java作业
    第十二周作业
    上机练习
    第十一周作业
    第十一周上机练习
    第十周上机练习
    第九周上机作业
    第八周作业
    第八周上机作业
  • 原文地址:https://www.cnblogs.com/Shirlies/p/2416427.html
Copyright © 2020-2023  润新知