• hdu 1166 敌兵布阵


    http://acm.hdu.edu.cn/showproblem.php?pid=1166

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <algorithm>
      4 #define maxn 50010
      5 using namespace std;
      6 
      7 int a[maxn];
      8 struct node
      9 {
     10     int l,r;
     11     int sum;
     12 }tree[maxn*4];
     13 
     14 void build(int i,int l,int r)
     15 {
     16     tree[i].l=l;
     17     tree[i].r=r;
     18     if(l==r)
     19     {
     20         tree[i].sum=a[l];
     21         return ;
     22     }
     23     int mid=(l+r)>>1;
     24     build(i<<1,l,mid);
     25     build(i<<1|1,mid+1,r);
     26     tree[i].sum=tree[i<<1].sum+tree[i<<1|1].sum;
     27 }
     28 
     29 void add1(int i,int l,int r,int add)
     30 {
     31     if(tree[i].l==l&&tree[i].r==r)
     32     {
     33         tree[i].sum+=add;
     34         return ;
     35     }
     36     int mid=(tree[i].l+tree[i].r)>>1;
     37     if(r<=mid)
     38     {
     39         add1(i<<1,l,r,add);
     40     }
     41     else if(l>mid)
     42     {
     43         add1(i<<1|1,l,r,add);
     44     }
     45     else
     46     {
     47         add1(i<<1,l,mid,add);
     48         add1(i<<1|1,mid+1,r,add);
     49     }
     50     tree[i].sum=tree[i<<1].sum+tree[i<<1|1].sum;
     51 }
     52 
     53 int search1(int i,int l,int r)
     54 {
     55     if(tree[i].l==l&&tree[i].r==r)
     56     {
     57         return tree[i].sum;
     58     }
     59     int mid=(tree[i].l+tree[i].r)>>1;
     60     if(r<=mid)
     61     {
     62         return search1(i<<1,l,r);
     63     }
     64     else if(l>mid)
     65     {
     66         return search1(i<<1|1,l,r);
     67     }
     68     else
     69     {
     70         return (search1(i<<1,l,mid)+search1(i<<1|1,mid+1,r));
     71     }
     72 }
     73 
     74 int main()
     75 {
     76     int T,N,aa,bb;
     77     char s1[maxn];
     78     scanf("%d",&T);
     79     int case1=0;
     80     while(T--)
     81     {
     82         scanf("%d",&N);
     83         for(int i=1; i<=N; i++)
     84         {
     85             scanf("%d",&a[i]);
     86         }
     87         build(1,1,N);
     88         printf("Case %d:
    ",++case1);
     89         while(1)
     90         {
     91             scanf("%s",s1);
     92             if(!strcmp(s1,"Add"))
     93             {
     94                 scanf("%d%d",&aa,&bb);
     95                 add1(1,aa,aa,bb);
     96             }
     97             else if(!strcmp(s1,"Query"))
     98             {
     99                 scanf("%d%d",&aa,&bb);
    100                 printf("%d
    ",search1(1,aa,bb));
    101             }
    102             else if(!strcmp(s1,"Sub"))
    103             {
    104                 scanf("%d%d",&aa,&bb);
    105                 add1(1,aa,aa,-bb);
    106             }
    107             else if(!strcmp(s1,"End")) break;
    108         }
    109     }
    110     return 0;
    111 }
    View Code
  • 相关阅读:
    java 24
    java 24
    java 24
    java 24
    一个用httpPost,get访问外网接口,参数json,返回json的示例
    几个强大的oracle自带函数,可根据日期算年纪,根据数值匹配字段
    sql对日期的处理,一个存储过程示例
    一条sql,有分页,表合并查询,多表连接,用于oracle数据库
    后台返回data直接在页面转换
    JQuery的$和其它JS发生冲突的快速解决方法
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3578960.html
Copyright © 2020-2023  润新知