제출 #1189733

#제출 시각아이디문제언어결과실행 시간메모리
1189733boclobanchatJob Scheduling (CEOI12_jobs)C++20
100 / 100
91 ms20292 KiB
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+5;
vector<int> vi[MAXN/10],aa[MAXN/10];
int cnt[MAXN];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,d,m;
    cin>>n>>d>>m;
    for(int i=1;i<=m;i++)
    {
    	int res;
    	cin>>res;
    	vi[res].push_back(i);
	}
	int l=1,r=m,ans=0;
	while(l<=r)
	{
		int mid=(l+r)/2,pt=n;
		for(int i=1;i<=n;i++) cnt[i]=vi[i].size();
		for(int i=n;i;i--)
		{
			if(pt>i) break;
			int c=0;
			while(pt>=i-d&&pt>0&&c<mid)
			{
				while(cnt[pt]>0&&c<mid) cnt[pt]--,c++;
				if(cnt[pt]==0) pt--;
			}
		}
		if(!pt) r=mid-1,ans=mid;
		else l=mid+1;
	}
	cout<<ans<<"\n";
	int pt=n;
	for(int i=n;i;i--)
	{
		int c=0;
		while(pt>=i-d&&pt>0&&c<ans)
		{
			while(!vi[pt].empty()&&c<ans) aa[i].push_back(vi[pt][vi[pt].size()-1]),vi[pt].pop_back(),c++;
			if(vi[pt].empty()) pt--;
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(auto v:aa[i]) cout<<v<<" ";
		cout<<"0\n";
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...