剰余問題

F.剰余問題

これは難しいことではありません、ただ勉強を見ないアイデアはチャンクなかったです

アイデア:とans[i][j]すべて記録するk=(1~5e5)すべての中をa[k]%i==j(1)と、クエリの時に複雑ビットOを実現することができます

多くのデータは、多くの部分に分割することができないので、もちろん、だけでなく、なぜならもし中に、多くのブロックに分割する必要がない2場合は、動作時x=1e5,y=1e5-1スキップ各ことができ、データは5の数だけが条件を満たすために、その後の範囲で、x数を数えます値と操作:

ll Ans=0;
for(int i=y;i<=int(5e5);i+=x) Ans+=a[i];
cout<<Ans<<endl;

また:また、とき出力トランスデューサラインで、見つかったcout<<'\n'よりもcout<<endlいるので、違いを倍増しても、多くの作品cout<<endlにもキャッシュを空に、それは少し遅くなります

コード:

// Created by CAD on 2019/8/24.
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int blo=280;
const int maxn=5e5+5;
ll ans[blo+5][blo+5];
int a[maxn];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int t; cin>>t;
    while(t--)
    {
        int op,x,y; cin>>op>>x>>y;
        if(op==1)
        {
            a[x]+=y;
            for(int i=1;i<=blo;++i) ans[i][x%i]+=y;
        }
        else
        {
            if(x<=blo) cout<<ans[x][y]<<'\n';
            else
            {
                ll Ans=0;
                for(int i=y;i<=int(5e5);i+=x) Ans+=a[i];
                cout<<Ans<<'\n';
            }
        }
    }
    return 0;
}

おすすめ

転載: www.cnblogs.com/CADCADCAD/p/11404517.html