제출 #135932

#제출 시각아이디문제언어결과실행 시간메모리
135932gs14004Arranging Tickets (JOI17_arranging_tickets)C++17
45 / 100
12 ms600 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 5005; using pi = pair<int, int>; int n, m; int a[MAXN], b[MAXN], c[MAXN]; bool Do(vector<int> l, vector<int> r, vector<pi> intv, int K){ l[0] = r[0] = 1e9; for(int i=1; i<l.size(); i++) l[i] = min(l[i], l[i - 1]); for(int i=1; i<r.size(); i++) r[i] = min(r[i], r[i - 1]); l.push_back(0); r.push_back(0); sort(intv.begin(), intv.end()); priority_queue<int, vector<int>, greater<int>> pq; int ptr = 0; vector<int> opt(r.size()); for(int i=0; i + 1<l.size(); i++){ while(ptr < intv.size() && intv[ptr].first <= i){ pq.push(intv[ptr++].second); } while(l[i + 1] < K){ if(pq.empty()) return 0; int nxt = pq.top(); pq.pop(); opt[nxt]++; K--; } } for(int i=opt.size()-2; i>=0; i--) opt[i] += opt[i + 1]; for(int i=0; i<r.size(); i++){ if(opt[i] > r[i]) return false; } return true; } int cnt[MAXN]; bool trial(int x){ int maxpos = max_element(cnt + 1, cnt + n + 1) - cnt; int mx = cnt[maxpos]; if(mx <= x) return true; for(int i=mx-x; i<=mx-x+1 && i<=m; i++){ vector<int> surp(n - 1); for(int j=0; j<n-1; j++){ surp[j] = x + i - cnt[j + 1]; surp[j] /= 2; } // number of reversal int j = maxpos; assert(j - 1 < surp.size() && surp[j - 1] == 0); vector<pi> intv; for(int k=0; k<m; k++){ if(a[k] <= j && b[k] > j){ intv.emplace_back(a[k] - 1, n - b[k]); } } vector<int> l = {0}; vector<int> r = {0}; for(int k=0; k<j-1; k++) l.push_back(surp[k]); for(int k=n-2; k>=j; k--) r.push_back(surp[k]); if(Do(l, r, intv, i)) return true; } return false; } int main(){ cin >> n >> m; for(int i=0; i<m; i++){ cin >> a[i] >> b[i] >> c[i]; if(a[i] > b[i]) swap(a[i], b[i]); cnt[a[i]]++; cnt[b[i]]--; } for(int i=1; i<=n; i++) cnt[i] += cnt[i-1]; int s = 0, e = 10000; while(s != e){ int m = (s+e)/2; if(trial(m)) e = m; else s = m+1; } cout << s << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...