제출 #1245451

#제출 시각아이디문제언어결과실행 시간메모리
1245451wedonttalkanymoreJob Scheduling (CEOI12_jobs)C++20
100 / 100
958 ms29860 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; // #define int long long #define pii pair<ll, ll> #define fi first #define se second const ll N = 2e5 + 5, inf = 1e18, mod = 1e9 + 7, block = 320, lim = 1 << 16; int n,d,m; vector<pii> jobs; vector<int> days[N]; priority_queue<pii,vector<pii>,greater<pii>> pq; bool check(int mid) { for(int i=1;i<=n;i++) days[i].clear(); while(!pq.empty()) pq.pop(); int idx=0; for(int i=1;i<=n;i++) { while(idx<m && jobs[idx].fi<=i) { pq.push(make_pair(jobs[idx].fi + d,jobs[idx].se)); idx++; } int cap=mid; while(cap>0 && !pq.empty()) { pii cur=pq.top(); pq.pop(); if(cur.fi < i) return false; days[i].push_back(cur.se); cap--; } } return pq.empty(); } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin>>n>>d>>m; for(int i=1;i<=m;i++) { int s; cin>>s; jobs.push_back(make_pair(s,i)); } sort(jobs.begin(),jobs.end()); int l=1, r=m, ans=m; while(l<=r) { int mid=(l+r)/2; if(check(mid)) { ans=mid; r=mid-1; } else { l=mid+1; } } check(ans); cout<<ans<<"\n"; for(int i=1;i<=n;i++) { for(int id:days[i]) cout<<id<<" "; cout<<"0\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...