これは難しいことではありません、ただ勉強を見ないアイデアはチャンクなかったです
アイデア:と
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;
}