华华开始学信息学
作者:
我已经不想再做刺客了
,
2022-09-14 22:38:32
,
所有人可见
,
阅读 243
传送门
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int n,tr[N],m,d[N];
void add(int x,int c){
for(int i=x;i<=n;i+=i&-i)tr[i]+=c;
}
int sum(int x){
if(x==0)return 0;
int ans=0;
for(int i=x;i;i-=i&-i)ans+=tr[i];
return ans;
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;
while(m--){
int op;
cin>>op;
if(op==1){
int D,K;
cin>>D>>K;
if(D>400)for(int i=D;i<=n;i+=D)add(i,K);
if(D<=400) d[D]+=K;
}
else{
int l,r;
cin>>l>>r;
int ans=sum(r)-sum(l-1);
for(int i=1;i<=400;i++)ans+=(r/i-(l-1)/i)*d[i];
cout<<ans<<'\n';
}
}
}