提交时间:2026-06-13 15:26:39

运行 ID: 42119

#include<bits/stdc++.h> using namespace std; long long n,m,q,ans[300005],st[1200005]; struct sss{ long long l,r; }p[600005]; inline bool cmp(sss a,sss b){ return a.r-a.l<b.r-b.l; } inline void up(long long i){ st[i]=st[i<<1]+st[i<<1|1]; } inline void ad(long long i,long long l,long long r,long long x,long long y){ if(x<=l && r<=y){ st[i]++; return; } long long mid=(l+r)>>1; if(x<=mid)ad(i<<1,l,mid,x,y); if(y>mid)ad(i<<1|1,mid+1,r,x,y); up(i); return; } inline long long qq(long long i,long long l,long long r,long long x){ if(l==r){ return st[i]; } long long mid=(l+r)>>1; if(x<=mid)return qq(i<<1,l,mid,x); else return qq(i<<1|1,mid+1,r,x); } int main(){ scanf("%lld%lld%lld",&n,&m,&q); for(int i=1;i<=m;i++){ scanf("%lld%lld",&p[i].l,&p[i].r); } sort(p+1,p+m+1,cmp); long long now=1; for(int i=1;i<=n;i++){ while(p[now].r-p[now].l+1<i && now<=n){ ad(1,1,n,p[now].l,p[now].r); now++; } ans[i]=n-now+1; for(int j=0;;j++){ if(j*i>n)break; ans[i]+=qq(1,1,n,j*i); } } while(q--){ long long x; scanf("%lld",&x); printf("%lld\n",ans[x]); } }