zoukankan      html  css  js  c++  java
  • 洛谷P3396 哈希冲突

    分块还真是应用广泛啊......

    题意:求

    解:以n0.5为界。

    当p小于n0.5的时候,直接用p²大小的数组储存答案。

    预处理n1.5,修改n0.5

    当p大于n0.5的时候,直接按照定义计算,复杂度n0.5

    所以总复杂度n1.5,实在是巧妙不堪啊......(什么SB词汇)

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <cmath>
     4 
     5 const int N = 150010;
     6 
     7 int fr[N], le[N], re[N];
     8 int ans[400][400], a[N];
     9 char str[3];
    10 
    11 int main() {
    12     int n, m;
    13     scanf("%d%d", &n, &m);
    14     int T = sqrt(n);
    15     for(int i = 1; i <= n; i++) {
    16         scanf("%d", &a[i]);
    17         fr[i] = (i - 1) / T + 1;
    18     }
    19     for(int i = 1; i <= fr[n]; i++) {
    20         le[i] = re[i - 1] + 1;
    21         re[i] = le[i] + T - 1;
    22         if(i == fr[n]) {
    23             re[i] = n;
    24         }
    25     }
    26     for(int i = 1; i <= T; i++) {
    27         for(int j = 1; j <= n; j++) {
    28             ans[i][j % i] += a[j];
    29         }
    30     }
    31 
    32     for(int i = 1, x, y; i <= m; i++) {
    33         scanf("%s%d%d", str, &x, &y);
    34         if(str[0] == 'A') { // ask
    35             if(x <= T) {
    36                 printf("%d
    ", ans[x][y]);
    37             }
    38             else {
    39                 int ans = 0;
    40                 for(int k = 0; k * x + y <= n; k++) {
    41                     ans += a[k * x + y];
    42                 }
    43                 printf("%d
    ", ans);
    44             }
    45         }
    46         else { // change
    47             for(int j = 1; j <= T; j++) {
    48                 ans[j][x % j] += y - a[x];
    49             }
    50             a[x] = y;
    51         }
    52     }
    53 
    54     return 0;
    55 }
    AC代码
  • 相关阅读:
    杜教筛
    虚树
    带修莫队
    线性基
    区间修改区间求和cdq分治
    矩阵快速幂求斐波那契数列
    点分治成品
    Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1) C(二分+KMP)
    线性筛
    矩阵快速幂
  • 原文地址:https://www.cnblogs.com/huyufeifei/p/10187465.html
Copyright © 2011-2022 走看看