您的位置:首页 > 其它

bzoj 2793 [Poi2012]Vouchers 调和级数求和

2016-11-14 20:25 387 查看
就是维护一下每个值现在取到几。复杂度调和级数求和nlogn

#include <bits/stdc++.h>
using namespace std;
#define N 1100000
#define ll long long
int n,m,mx,top;
int a
,pos
;
ll now,bel
,st
;
int main()
{
//freopen("tt.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]),mx=max(mx,a[i]);
scanf("%d",&m);
for(int x;m--;)
{
scanf("%d",&x);
for(int i=pos[x]+x,cnt=0;cnt<x&&i<=mx;i+=x)
if(!bel[pos[x]=i])
{
bel[i]=now+cnt+1;
cnt++;
}
now+=x;
}
for(int i=1;i<=n;i++)
if(bel[a[i]])
st[++top]=bel[a[i]];
printf("%d\n",top);
sort(st+1,st+1+top);
for(int i=1;i<=top;i++)
printf("%lld\n",st[i]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: