zoukankan      html  css  js  c++  java
  • P3396 哈希冲突 分块

      

    众所周知,模数的hash会产生冲突。例如,如果模的数p=7,那么411便冲突了。

    B君对hash冲突很感兴趣。他会给出一个正整数序列value[]

    自然,B君会把这些数据存进hash池。第value[k]会被存进(k%p)这个池。这样就能造成很多冲突。

    B君会给定许多个px,询问在模p时,x这个池内数的总和

    另外,B君会随时更改value[k]。每次更改立即生效。

    保证1<=p<n1<=p<n.

    输入输出格式

    输入格式:

    第一行,两个正整数n,m,其中n代表序列长度,m代表B君的操作次数。

    第一行,n个正整数,代表初始序列。

    接下来m行,首先是一个字符cmd,然后是两个整数x,y

    • cmd='A',则询问在模x时,y池内数的总和。

    • cmd='C',则将value[x]修改为y

    输出格式:

    对于每个询问输出一个正整数,进行回答。

    输入输出样例

    输入样例#1: 复制
    10 5
    1 2 3 4 5 6 7 8 9 10
    A 2 1
    C 1 20
    A 3 1
    C 5 1
    A 5 0
    输出样例#1: 复制
    25
    41
    11



    直接暴力会超时一个点
    可以将 siz=sqrt n 预处理1-siz 的情况 如果询问 小于siz 直接输出 大于则暴力枚举即可
    #include<bits/stdc++.h>
    using namespace std;
    //input by bxd
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define repp(i,a,b) for(int i=(a);i>=(b);--i)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m)
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s)
    #define ll long long
    #define see(x) (cerr<<(#x)<<'='<<(x)<<endl)
    #define pb push_back
    #define inf 0x3f3f3f3f
    #define pb push_back
    #define CLR(A,v)  memset(A,v,sizeof A)
    #define lson l,m,pos<<1
    #define rson m+1,r,pos<<1|1
    typedef pair<int,int>pii;
    //////////////////////////////////
    const int N=200010;
    
    int ans[2000][2000],a[N];
    int n,m,b;char s[3];int p,x;
    int main()
    {
        RII(n,m);
        int siz=sqrt(n);
        rep(i,1,n)
        {
            RI(a[i]);
            for(int j=1;j<=siz;j++)
            ans[j][i%j]+=a[i];
        }
        while(m--)
        {
            RS(s);
            if(s[0]=='A')
            {
                RII(p,x);
                if(p<=siz)
                printf("%d
    ",ans[p][x]);
                else
                {
                    int ans=0;
                    for(int i=x;i<=n;i+=p)
                        ans+=a[i];
                    printf("%d
    ",ans);
                }
            }
            else
            {
                RII(p,x);
                for(int i=1;i<=siz;i++)
                ans[i][p%i]+=x-a[p];
                a[p]=x;
            }
        }
        return 0;
    }
    View Code







  • 相关阅读:
    (8)Normalization
    (7)Drop out/Drop block
    (6)data augmentation——遮挡
    (5)label smooth
    (4)Focal loss
    (3)data augmentation——pixel-wise
    ostringstream 性能测试
    CPU & 多线程
    PC 常备软件(windows)
    编译器前端简介
  • 原文地址:https://www.cnblogs.com/bxd123/p/11193263.html
Copyright © 2011-2022 走看看