社区讨论
90分,long long爆MLE
P5190[COCI 2009/2010 #5] PROGRAM参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mliwlvkh
- 此快照首次捕获于
- 2026/02/12 11:33 上周
- 此快照最后确认于
- 2026/02/14 17:50 5 天前
CPP
#include<bits/stdc++.h>
using namespace std;
struct s{
unsigned int lz,sum;
}t[4000005];
long long n,k,q,sum,p[1000005];
void pushup(int x,int l,int r){
int mid=l+r>>1;
t[x<<1].lz+=t[x].lz;
t[x<<1|1].lz+=t[x].lz;
t[x<<1].sum+=(mid-l+1)*t[x].lz;
t[x<<1|1].sum+=(r-mid)*t[x].lz;
t[x].lz=0;
}void modify(int x,int l,int r,int ql,int qr,int v){
if(l>=ql&&r<=qr){
t[x].lz+=v;
t[x].sum+=(r-l+1)*v;
return;
}pushup(x,l,r);
int mid=l+r>>1;
if(ql<=mid) modify(x<<1,l,mid,ql,qr,v);
if(qr>mid) modify(x<<1|1,mid+1,r,ql,qr,v);
t[x].sum=t[x<<1].sum+t[x<<1|1].sum;
}long long qurry(int x,int l,int r,int ql,int qr){
if(l>=ql&&r<=qr) return t[x].sum;
pushup(x,l,r);
long long mid=l+r>>1,res=0;
if(mid>=ql) res=qurry(x<<1,l,mid,ql,qr);
if(qr>mid) res+=qurry(x<<1|1,mid+1,r,ql,qr);
return res;
}void st(int x,int v){
for(int i=1;i<=n;i+=x) modify(1,1,n,i,i,v);
}int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>k;
for(int i=1;i<=k;i++){
int x;
cin>>x;
p[x]++;
}for(int i=1;i<=n;i++){
if(p[i]) st(i,p[i]);
}cin>>q;
while(q--){
int l,r;
cin>>l>>r;
cout<<qurry(1,1,n,l+1,r+1)<<"\n";
}return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...