1 条题解

  • 0
    @ 2026-7-4 11:28:24

    #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

    [AGC003E] Sequential operations on Sequence

    信息

    ID
    8792
    时间
    2000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者