Submission #218193

#TimeUsernameProblemLanguageResultExecution timeMemory
218193quocnguyen1012RMQ (NOI17_rmq)C++14
100 / 100
67 ms10104 KiB
#include <bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long long ll; typedef pair<int, int> ii; const int maxn = 1e5 + 5; vector<ii> vec[maxn]; int N, a[maxn], used[maxn], last, Q; set<int> se; void no_sol(void) { for(int i = 1; i <= N; ++i) cout << -1 << ' '; exit(0); } void add(int val, int l, int r, int L, int R) { auto it = se.lower_bound(l); bool add = false; while(it != se.end() && *it <= r){ if(L <= *it && *it <= R && !add){ used[val] = 1; a[*it] = val; add = 1; } else{ while(last >= 1 && used[last]) --last; if(last <= val){ no_sol(); } used[last] = 1; a[*it] = last; } ++it; se.erase(prev(it)); } if(!add) no_sol(); } signed main(void) { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #ifdef LOCAL freopen("A.INP", "r", stdin); freopen("A.OUT", "w", stdout); #endif // LOCAL cin >> N >> Q; last = N; while(Q--){ int l, r, v; cin >> l >> r >> v; ++l; ++r; ++v; vec[v].eb(l, r); } for(int i = 1; i <= N; ++i) se.insert(i); for(int i = N; i >= 1; --i) if(vec[i].size()){ used[i] = true; int lmax = 0, rmin = N, lmin = N, rmax = 0; for(auto & it : vec[i]){ lmax = max(lmax, it.fi); rmin = min(rmin, it.se); lmin = min(lmin, it.fi); rmax = max(rmax, it.se); } if(lmax > rmin){ no_sol(); } add(i, lmin, rmax, lmax, rmin); } for(auto it : se){ while(last >= 1 && used[last]) --last; if(last < 1) no_sol(); a[it] = last; used[last] = 1; } for(int i = 1; i <= N; ++i) cout << a[i] - 1 << ' '; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...