• 【HDOJ】5057 Argestes and Sequence


    树状数组,其实很简单。只是MLE。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 #define MAXN 100005
     7 
     8 short sum[10][10][MAXN];
     9 char bit[10][10][MAXN];
    10 int a[MAXN];
    11 int t, n, m;
    12 int d, p;
    13 const int MOD = 32768;
    14 
    15 int lowbit(int x) {
    16     return x & -x;
    17 }
    18 
    19 int getSum(int x, int d, int p) {
    20     int ret = 0;
    21     while (x > 0) {
    22         ret += (int)sum[d][p][x] + ((int)bit[d][p][x]) * MOD;
    23         x -= lowbit(x);
    24     }
    25     return ret;
    26 }
    27 
    28 void update(int x, int d, int p, int r) {
    29     int tmp;
    30     while (x <= n) {
    31         tmp = (int)sum[d][p][x] + r;
    32         sum[d][p][x] = tmp%MOD;
    33         bit[d][p][x] += tmp/MOD;
    34         x += lowbit(x);
    35     }
    36 }
    37 
    38 int query(int l, int r) {
    39     return getSum(r, d-1, p) - getSum(l-1, d-1, p);
    40 }
    41 
    42 void insert(int x, int i, int delta) {
    43     int j;
    44     for (j=1; j<=10; ++j) {
    45         update(i, j-1, x%10, delta);
    46         x /= 10;
    47     }
    48 }
    49 
    50 int main() {
    51     int i, j, ans;
    52     int x, y;
    53     char cmd[3];
    54 
    55     scanf("%d", &t);
    56     while (t--) {
    57         scanf("%d %d", &n, &m);
    58         for(i=0; i<10; i++) {
    59             for(j=0; j<10; j++) {
    60                 memset(sum[i][j], 0, sizeof(short)*(n+1));
    61                 memset(bit[i][j], 0, sizeof(char)*(n+1));
    62             }
    63         }
    64         for (i=1; i<=n; ++i) {
    65             scanf("%d", &a[i]);
    66             insert(a[i], i, 1);
    67         }
    68         while (m--) {
    69             scanf("%*c%s %d %d", cmd, &x, &y);
    70             if (cmd[0] == 'S') {
    71                 insert(a[x], x, -1);
    72                 a[x] = y;
    73                 insert(a[x], x, 1);
    74             } else {
    75                 scanf("%d %d", &d, &p);
    76                 ans = query(x, y);
    77                 printf("%d
    ", ans);
    78             }
    79         }
    80     }
    81 
    82     return 0;
    83 }
  • 相关阅读:
    码云安装SSH私钥步骤
    关于在Python3中:字典在迭代过程中,字典的长度是不允许改变的
    Selenium ChromeDriver与Chrome版本映射表(更新到v78)
    web driver下载地址(selenium-3.141_浏览器版本对应)
    Python报错pip超时
    LoginRequiredMixin类
    pycharm断点调试django
    js克隆
    索引
    java8date
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3999145.html
Copyright © 2020-2023  润新知