Submission #1277627

#TimeUsernameProblemLanguageResultExecution timeMemory
1277627random_nameJob Scheduling (CEOI12_jobs)C++20
0 / 100
148 ms11676 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main(){
	ll n,d,m; cin>>n>>d>>m;
	vector<vector<ll>> J(n);
	for(ll i=0;i<m;i++){
		ll a;cin>>a;
		J[a-1].push_back(i);
	}

	ll l=1,r=m;
	while(l<r){
		ll mid=(l+r)/2;
		bool able=true;
		queue<pair<ll, ll>> q;
		for(ll i=0;i<n;i++){
			q.push({i, J[i].size()});

			if(q.front().first + d < i){
				able = false;
				break;
			}
			
			ll diff = mid;
			while(!q.empty() && diff > 0){
				if(q.front().second <= diff){
					diff -= q.front().second;
					q.pop();
				}

				else{
					q.front().second -= diff;
					diff = 0;
				}
			}
		}

		if(q.size() != 0){
			able = false;
		}

		if(able){
			r = mid;
		}

		else
			l = mid+1;
	}

	cout << l << '\n';

	// queue<pair<ll, ll>> q;
	// for(ll i=0;i<n;i++){
	// 	q.push({i, J[i].size()});
		
	// 	ll diff = l;
	// 	while(!q.empty() && diff > 0){
	// 		if(q.front().second <= diff){
	// 			diff -= q.front().second;
	// 			for(ll j=0;j<q.front().second;j++){
	// 				cout << J[q.front().first].back()+1 << ' ';
	// 				J[q.front().first].pop_back();
	// 			}
	// 			q.pop();
	// 		}

	// 		else{
	// 			for(ll j=0;j<diff;j++){
	// 				cout << J[q.front().first].back()+1 << ' ';
	// 				J[q.front().first].pop_back();
	// 			}

	// 			q.front().second -= diff;
	// 			diff = 0;
	// 		}
	// 	}

	// 	cout << 0 << '\n';
	// }
}
#Verdict Execution timeMemoryGrader output
Fetching results...