zoukankan      html  css  js  c++  java
  • 【Luogu】P3396哈希冲突(根号算法)

      题目链接

      根号算法真的是博大精深啊……明明是暴力但复杂度就是能过

      这也太强了吧!!!

      预处理出p<=sqrt(n)的所有情况,耗时n根n

      查询:

      如果p<=根n,O1查表

      如果p>=根n,因为只有小于根n个数对答案有贡献,所以枚举,耗时根n

      修改:

      因为单点修改,直接修改1~size所有的情况,耗时根n

      然后这个暴力一般的暴力就卡过了!!!!!

      这也  太强  了   吧!!!!

      

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #define maxn 160000
    #define sqtn 400
    using namespace std;
    
    inline long long read(){
        long long num=0,f=1;
        char ch=getchar();
        while(!isdigit(ch)){
            if(ch=='-')    f=-1;
            ch=getchar();
        }
        while(isdigit(ch)){
            num=num*10+ch-'0';
            ch=getchar();
        }
        return num*f;
    }
    
    long long s[sqtn][maxn],q[maxn];
    int sqt;
    inline void update(int i,int v){
        for(int j=1;j<=sqt;++j)    s[j][i%j]=s[j][i%j]-q[i]+v;
        q[i]=v;
    }
    
    int main(){
        int n=read(),m=read();
        for(int i=1;i<=n;++i)    q[i]=read();
        sqt=sqrt(n);
        for(int i=1;i<=n;++i)
            for(int j=1;j<=sqt;++j)    s[j][i%j]+=q[i];
        for(int i=1;i<=m;++i){
            char c[10];int x,y;
            scanf("%s%d%d",c,&x,&y);
            if(c[0]=='A'){
                if(x<=sqt)    printf("%lld
    ",s[x][y]);
                else{
                    long long ans=0;
                    for(int j=y;j<=n;j+=x)    ans+=q[j];
                    printf("%lld
    ",ans);
                }
            }
            else    update(x,y);
        }
        return 0;
    }
  • 相关阅读:
    区块链:交易收发机制
    区块链:POA委员会选举机制
    区块链:POA区块生成机制
    区块链:最小可行区块链原理解析2
    基于 react 的Java web 应用—— 组件复用(后续需更新)
    struts2验证码
    struts2验证码
    struts2验证码
    struts2验证码
    axis2 411
  • 原文地址:https://www.cnblogs.com/cellular-automaton/p/8320522.html
Copyright © 2011-2022 走看看