Submission #210010

#TimeUsernameProblemLanguageResultExecution timeMemory
210010Alexa2001RMQ (NOI17_rmq)C++17
100 / 100
66 ms8824 KiB
#include <bits/stdc++.h> //#define no_sol { cout << "-1\n"; exit(0); } using namespace std; ///11:12 const int Nmax = 1e5 + 5; set<int> S; int last, n, m; vector<pair<int,int>> v[Nmax]; bool used[Nmax]; int ans[Nmax]; void no_sol() { int i; for(i=0; i<n; ++i) cout << "-1 "; exit(0); } void add(int val, int start, int finish, int L, int R) { set<int> :: iterator it = S.lower_bound(start), it2 = it; bool added = 0; while(it != S.end() && *it <= finish) { if(*it >= L && *it <= R && !added) { assert(used[val] == 0); ans[*it] = val; used[val] = 1; added = 1; } else { while(last>=0 && used[last]) --last; if(last <= val) no_sol(); used[last] = 1; ans[*it] = last; } ++it; } if(!added) no_sol(); S.erase(it2, it); } int main() { // freopen("input", "r", stdin); cin.sync_with_stdio(false); cin.tie(0); cin >> n >> m; int i; for(i=1; i<=m; ++i) { int x, y, val; cin >> x >> y >> val; v[val].push_back({x, y}); } for(i=0; i<n; ++i) S.insert(i); last = n-1; for(i=n-1; i>=0; --i) if(v[i].size()) { int lmin, rmax, lmax, rmin; lmin = rmin = n-1; lmax = rmax = 0; for(auto it : v[i]) { int x, y; tie(x, y) = it; lmin = min(lmin, x); lmax = max(lmax, x); rmin = min(rmin, y); rmax = max(rmax, y); } if(lmax > rmin) no_sol(); add(i, lmin, rmax, lmax, rmin); } for(auto it : S) { while(last>=0 && used[last]) --last; if(last < 0) no_sol(); ans[it] = last; used[last] = 1; } for(i=0; i<n; ++i) cout << ans[i] << ' '; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...