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 }
  • 相关阅读:
    freemarker ,DEFAULT_INCOMPATIBLE_IMPROVEMENTS 找不到
    git clone的时候filename too long解决办法
    什么是CPU密集型、IO密集型?
    Mysql中联合索引的最左匹配原则(百度)
    linux利用grep查看打印匹配的下几行或前后几行的命令
    手机号码验证的正则表达式
    Http、Socket、WebSocket之间联系与区别
    thrift 是rpc协议
    面试小结之Elasticsearch篇
    maven 左边空了
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3783678.html
Copyright © 2011-2022 走看看