Submission #566601

#TimeUsernameProblemLanguageResultExecution timeMemory
566601zuhaib786Job Scheduling (CEOI12_jobs)C++14
0 / 100
456 ms9944 KiB
#include<bits/stdc++.h> using namespace std; using lli = long long int; using pii = pair<lli, lli>; using vc = vector<lli>; #define FOR(i, n) for(int i= 0; i< n; i++) #define ROF(i, n) for(int i = n - 1; i>= 0; i--) #define ff first #define ss second const int maxN = 1e5 + 5; pii arr[maxN]; map<lli, vector<int>>mp; vector<vector<int>>simulate(lli mid, lli n, lli m, lli d) { multiset<pii>s; vector<vector<int>>v; FOR(i, n) { if(mp.count(i + 1)) { for(auto x : mp[i + 1]) { s.insert({i + 1, x}); } } if(s.size() <= mid) { vector<int>temp; for(auto x: s) { temp.push_back(x .second + 1); } temp.push_back(0); v.push_back(temp); s = multiset<pii>(); } else { int k = mid; vector<int>temp; while(k-- ) { temp.push_back((*s.begin()).ss + 1); s.erase(s.find(*s.begin())); } temp.push_back(0); v.push_back(temp); } } return v; } bool Poss(lli mid, lli n, lli m, lli d) { multiset<lli>s; FOR(i, n) { if(mp.count(i + 1)) { for(auto x : mp[i + 1]) { s.insert(i + 1); } } if(s.size()!= 0 &&*s.begin() + d <= i + 1) { return false; } if(s.size() <= mid) { s = multiset<lli>(); } else { int k = mid; while(k-- ) { s.erase(s.find(*s.begin())); } } } return s.size() == 0; } int main() { int n, m, d; cin>>n>>d>>m; FOR(i, m) { cin>>arr[i].ff; arr[i].ss = i; mp[arr[i].ff].push_back(i); } sort(arr, arr + n); lli left = 1; lli right = m; lli ans = m; while(left <= right) { lli mid = left + (right - left )/2; if(Poss(mid, n, m, d)) { ans = mid; right = mid - 1; } else { left = mid + 1; } } cout<<ans<<'\n'; vector<vector<int>>v = simulate(ans, n, m, d); for(auto x : v) { for(auto w: x) { cout<<w<<" "; } cout<<'\n'; } }

Compilation message (stderr)

jobs.cpp: In function 'std::vector<std::vector<int> > simulate(lli, lli, lli, lli)':
jobs.cpp:27:21: warning: comparison of integer expressions of different signedness: 'std::multiset<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} and 'lli' {aka 'long long int'} [-Wsign-compare]
   27 |         if(s.size() <= mid)
      |            ~~~~~~~~~^~~~~~
jobs.cpp: In function 'bool Poss(lli, lli, lli, lli)':
jobs.cpp:60:22: warning: unused variable 'x' [-Wunused-variable]
   60 |             for(auto x : mp[i + 1])
      |                      ^
jobs.cpp:70:21: warning: comparison of integer expressions of different signedness: 'std::multiset<long long int>::size_type' {aka 'long unsigned int'} and 'lli' {aka 'long long int'} [-Wsign-compare]
   70 |         if(s.size() <= mid)
      |            ~~~~~~~~~^~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...