zoukankan      html  css  js  c++  java
  • 敌兵布阵

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

    Input
    第一行一个整数T,表示有T组数据。
    每组数据第一行一个正整数N(N<=50000),表示敌人有N个工兵营地,接下来有N个正整数,第i个正整数ai代表第i个工兵营地里开始时有ai个人(1<=ai<=50)。
    接下来每行有一条命令,命令有4种形式:
    (1) Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30)
    (2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30);
    (3)Query i j ,i和j为正整数,i<=j,表示询问第i到第j个营地的总人数;
    (4)End 表示结束,这条命令在每组数据最后出现;
    每组数据最多有40000条命令
     
    Output
    对第i组数据,首先输出“Case i:”和回车,
    对于每个Query询问,输出一个整数并回车,表示询问的段中的总人数,这个数最多不超过1000000。
     
    Sample Input
    1 10
    1 2 3 4 5 6 7 8 9 10
    Query 1 3
    Add 3 6
    Query 2 7
    Sub 10 2
    Add 6 3
    Query 3 10
    End 
    Sample Output
    Case 1:
    6
    33
    59
    View Code
     1 #include <cstdio>
    2
    3 #define lson l , m , rt << 1
    4 #define rson m + 1 , r , rt << 1 | 1
    5 const int maxn = 55555;
    6 int sum[maxn<<2];
    7 void PushUP(int rt) {
    8 sum[rt] = sum[rt<<1] + sum[rt<<1|1];
    9 }
    10 void build(int l,int r,int rt) {
    11 if (l == r) {
    12 scanf("%d",&sum[rt]);
    13 return ;
    14 }
    15 int m = (l + r) >> 1;
    16 build(lson);
    17 build(rson);
    18 PushUP(rt);
    19 }
    20 void update(int p,int add,int l,int r,int rt) {
    21 if (l == r) {
    22 sum[rt] += add;
    23 return ;
    24 }
    25 int m = (l + r) >> 1;
    26 if (p <= m) update(p , add , lson);
    27 else update(p , add , rson);
    28 PushUP(rt);
    29 }
    30 int query(int L,int R,int l,int r,int rt) {
    31 if (L <= l && r <= R) {
    32 return sum[rt];
    33 }
    34 int m = (l + r) >> 1;
    35 int ret = 0;
    36 if (L <= m) ret += query(L , R , lson);
    37 if (R > m) ret += query(L , R , rson);
    38 return ret;
    39 }
    40 int main() {
    41 int T , n;
    42 scanf("%d",&T);
    43 for (int cas = 1 ; cas <= T ; cas ++) {
    44 printf("Case %d:\n",cas);
    45 scanf("%d",&n);
    46 build(1 , n , 1);
    47 char op[10];
    48 while (scanf("%s",op)) {
    49 if (op[0] == 'E') break;
    50 int a , b;
    51 scanf("%d%d",&a,&b);
    52 if (op[0] == 'Q') printf("%d\n",query(a , b , 1 , n , 1));
    53 else if (op[0] == 'S') update(a , -b , 1 , n , 1);
    54 else update(a , b , 1 , n , 1);
    55 }
    56 }
    57 return 0;
    58 }
  • 相关阅读:
    Laravel 服务容器、服务提供器、契约实例讲解
    通过event记录sql
    laravel log改为时间格式
    array_column函数
    linux 安装ssh以及ssh用法与免密登录
    scp复制文件到远程服务器上
    nginx配置ssl证书后无法访问https
    Mac 在terminal 上用命令打开sublime
    Mac上通过iterm 上传文件到服务器
    基于visual Studio2013解决算法导论之044最短路径
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2412108.html
Copyright © 2011-2022 走看看