Submission #1297219

#TimeUsernameProblemLanguageResultExecution timeMemory
1297219AnphatRMQ (NOI17_rmq)C++20
0 / 100
2 ms1848 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define f first #define s second #define sz(a) ((int)(a).size()) #define all(a) (a).begin(), (a).end() #define uni(a) sort(all(a)), (a).resize(unique(all(a)) - (a).begin()) typedef pair <int, int> ii; const int N = 1e5 + 10; int n, q, ans[N], lz[N << 2], t[N]; multiset <int> pos; vector <int> fp, fv; vector <ii> s[N]; void upd(int l, int r, int id, int u, int v, int x) { if (l > v || r < u) return; if (l >= u && r <= v) { lz[id] = min(lz[id], x); return; } int mid = (l + r) >> 1; upd(l, mid, id << 1, u, v, x); upd(mid + 1, r, id << 1 | 1, u, v, x); } int get(int x) { int l = 0, r = n - 1, id = 1, ans = 1e9; while (l < r) { int mid = (l + r) >> 1; ans = min(ans, lz[id]); if (x <= mid) { id = id << 1; r = mid; } else { id = id << 1 | 1; l = mid + 1; } } return ans; } void solve() { cin >> n >> q; memset(lz, 0x3f, sizeof(lz)); for (int i = 1; i <= q; i++) { int l, r, x; cin >> l >> r >> x; upd(0, n - 1, 1, l, r, x); s[x].push_back({l, r}); } for (int i = 0; i < n; i++) { t[i] = get(i); pos.insert(i); if (t[i] >= 1e9) { t[i] = -1; } ans[i] = -1; } bool found = 1; for (int i = n - 1; i >= 0; i--) { if (sz(s[i]) == 0) continue; int x = s[i][0].f, y = s[i][0].s; for (auto v : s[i]) { x = max(x, v.f), y = min(y, v.s); } if (x <= y) { auto it = pos.lower_bound(x); if (it == pos.end() || *it > y) { found = 0; break; } ans[*it] = i; pos.erase(it); } for (auto x : s[i]) { for (auto it = pos.lower_bound(x.f); it != pos.end() && *it <= x.s; ) it = pos.erase(it); } } for (int i = 0; i < n; i++) { if (ans[i] == -1) { fp.push_back(i); } if (!sz(s[i])) { fv.push_back(i); } } sort(all(fp), [&](int x, int y){return t[x] < t[y];}); sort(all(fv)); for (int i = 0; i < sz(fv); i++) { if (t[fp[i]] > fv[i]) { found = 0; break; } ans[fp[i]] = fv[i]; } if (found) { for (int i = 0; i < n; i++) { cout << ans[i] << ' '; } cout << '\n'; } else { for (int i = 0; i < n; i++) { cout << -1 << ' '; } cout << '\n'; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("a.inp", "r", stdin); // freopen("a.out", "w", stdout); int t = 1; // cin >> t; while (t--) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...