zoukankan      html  css  js  c++  java
  • 【HDOJ】1892 See you~

    wa了十次,原来变量名写错。二维树状数组。

     1 #include <cstdio>
     2 #include <cstring>
     3 
     4 #define MAXN 1002
     5 
     6 int nums[MAXN][MAXN];
     7 
     8 void swap(int *x, int *y) {
     9     int tmp;
    10     tmp = *x;
    11     *x = *y;
    12     *y = tmp;
    13 }
    14 
    15 int lowbit(int i) {
    16     return i & (-i);
    17 }
    18 
    19 void add(int x, int y, int v) {
    20     for (int i=x; i<MAXN; i+=lowbit(i))
    21         for (int j=y; j<MAXN; j+=lowbit(j))
    22             nums[i][j] += v;
    23 }
    24 
    25 void build() {
    26     int i, j;
    27     memset(nums, 0, sizeof(nums));
    28     for (i=1; i<MAXN; ++i)
    29         for (j=1; j<MAXN; ++j)
    30             add(i, j, 1);
    31 }
    32 
    33 int query(int x, int y) {
    34     int val = 0;
    35     for (int i=x; i>0; i-=lowbit(i))
    36         for (int j=y; j>0; j-=lowbit(j))
    37             val += nums[i][j];
    38     return val;
    39 }
    40 
    41 int main() {
    42     int t, n;
    43     int x1, y1, x2, y2, v, tmp;
    44     int in;
    45     char cmd[3];
    46 
    47     scanf("%d", &t);
    48     for (in=1; in<=t; ++in) {
    49         build();
    50         scanf("%d", &n);
    51         printf("Case %d:
    ", in);
    52         while (n--) {
    53             scanf("%s", cmd);
    54             if (cmd[0] == 'S') {
    55                 scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
    56                 ++x1; ++y1; ++x2; ++y2;
    57                 if (x1 > x2)
    58                     swap(&x1, &x2);
    59                 if (y1 > y2)
    60                     swap(&y1, &y2);
    61                 v = query(x2,y2) - query(x1-1,y2) - query(x2,y1-1) + query(x1-1,y1-1);
    62                 printf("%d
    ", v);
    63             } else if (cmd[0] == 'M') {
    64                 scanf("%d %d %d %d %d", &x1,&y1,&x2,&y2,&v);
    65                 ++x1; ++y1; ++x2; ++y2;
    66                 tmp = query(x1-1,y1-1) - query(x1-1,y1) - query(x1,y1-1) + query(x1,y1);
    67                 if (v > tmp)
    68                     v = tmp;
    69                 add(x1, y1, -v);
    70                 add(x2, y2, v);
    71             } else if (cmd[0] == 'A') {
    72                 scanf("%d %d %d", &x1, &y1, &v);
    73                 ++x1; ++y1;
    74                 add(x1, y1, v);
    75             } else if (cmd[0] == 'D') {
    76                 scanf("%d %d %d", &x1, &y1, &v);
    77                 ++x1; ++y1;
    78                 tmp = query(x1-1,y1-1) - query(x1-1,y1) - query(x1,y1-1) + query(x1,y1);
    79                 if (v > tmp)
    80                     v = tmp;
    81                 add(x1, y1, -v);
    82             }
    83         }
    84     }
    85 
    86     return 0;
    87 }
  • 相关阅读:
    C51学习 之 中断
    C51学习 之 动态数码管
    C51学习 之 LED流水灯
    锁存器 工作功能
    keil 5下载地址
    成本与利润最大化问题
    记一次VS下LINK1169的错误
    合并链表
    设计推特
    线段求交点
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3783678.html
Copyright © 2011-2022 走看看