调和级数:
code:
#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#include<string>#include<vector>#include<cstdio>#include<cstdlib>#include<cstring>#include<climits>#include<complex>#include<iostream>#include<algorithm>#define ll long long#define lowbit(x) x&(-x)using namespace std;void read(int &x){ char c; while(!((c=getchar())>='0'&&c<='9')); x=c-'0'; while((c=getchar())>='0'&&c<='9') x=(x<<3)+(x<<1)+c-'0';}const int maxn = 1001000;int n,m;int head[maxn],v[maxn];bool vi[maxn];ll ans[maxn],an;int main(){ read(m); for(int i=1;i<=m;i++) { int x; read(x); v[x]=1; } for(int i=1;i<maxn;i++) head[i]=i; read(n); ll id=0; an=0; for(int i=1;i<=n;i++) { int x; read(x); int k=head[x]; int ti=x; while(k<maxn&&ti) { if(vi[k]) k+=x; else { id++; ti--; vi[k]=true; while(v[k]--) ans[++an]=id; } } head[x]=k; id+=(ll)ti; } PRintf("%lld/n",an); for(int i=1;i<=an;i++) printf("%lld/n",ans[i]); return 0;}新闻热点
疑难解答