1 条题解
-
0

#include <cstdio> #include <iostream> #include <map> using namespace std; const int M = 100005; #define int long long int read() { int x=0,f=1;char c; while((c=getchar())<'0' || c>'9') {if(c=='-') f=-1;} while(c>='0' && c<='9') {x=(x<<3)+(x<<1)+(c^48);c=getchar();} return x*f; } int n,m,k,a[M],s[M];map<int,int> mp; signed main() { n=read();m=read();s[++k]=n; for(int i=1;i<=m;i++) { int x=read(); while(k && s[k]>=x) k--; s[++k]=x; } mp[s[k]]=1; while(!mp.empty()) { auto it=mp.end();it--; if(it->first<=s[1]) a[it->first]+=it->second; else { int t=s[lower_bound(s+1,s+1+k,it->first)-s-1]; mp[t]+=(it->second)*(it->first/t); mp[it->first%t]+=it->second; } mp.erase(it); } for(int i=n;i>=1;i--) a[i]+=a[i+1]; for(int i=1;i<=n;i++) printf("%lld\n",a[i]); }
- 1
信息
- ID
- 8792
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者