Submission #954168

#TimeUsernameProblemLanguageResultExecution timeMemory
954168browntoadInspections (NOI23_inspections)C++14
100 / 100
200 ms30916 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define int ll #define FOR(i, a, b) for (int i = (a); i < (b); i++) #define REP(i, n) FOR(i, 0, n) #define REP1(i, n) FOR(i, 1, n+1) #define pii pair<int, int> #define ppi pair<pii, int> #define ALL(x) (x).begin(), (x).end() #define SZ(x) (int)((x).size()) #define f first #define s second #define pb push_back #define IOS() ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) #define endl '\n' const ll maxn = 1e6+5; const ll inf = 1ll<<60; const ll mod = 1e9+7; inline char gc() { const static int SZ = 1 << 16; static char buf[SZ], *p1, *p2; if (p1 == p2 && (p2 = buf + fread(p1 = buf, 1, SZ, stdin), p1 == p2)) return -1; return *p1++; } void rd() {} template <typename T, typename... U> void rd(T &x, U &...y) { x = 0; bool f = 0; char c = gc(); while (!isdigit(c)) f ^= !(c ^ 45), c = gc(); while (isdigit(c)) x = (x << 1) + (x << 3) + (c ^ 48), c = gc(); f && (x = -x), rd(y...); } template <typename T> void prt(T x) { if (x < 0) putchar('-'), x = -x; if (x > 9) prt(x / 10); putchar((x % 10) ^ 48); } int n, m, q; vector<pii> tag; // lazy tag to modify suffix multiset<ppi> st; set<ppi> ::iterator rep(set<ppi> ::iterator it, int L, int R, int v){ ppi cur = (*it); int l = cur.f.f; int r = cur.f.s; //cout<<l<<' '<<r<<' '<<L<<' '<<R<<' '<<cur.s<<' '<<v<<endl; if (r < L || l > R) return next(it); if (l < L && r > R){ tag.pb({v-(cur.s+L-l)-1, R-L+1}); st.insert({{l, L-1}, cur.s}); st.insert({{R+1, r}, cur.s+R+1-l}); return st.erase(it); } if (l < L){ //cout<<"toad"<<endl; tag.pb({v-(cur.s+L-l)-1, r-L+1}); st.insert({{l, L-1}, cur.s}); return st.erase(it); } if (r > R){ tag.pb({v-(cur.s-(l-L))-1, R-l+1}); st.insert({{R+1, r}, cur.s+R+1-l}); return st.erase(it); } tag.pb({v-(cur.s-(l-L))-1, r-l+1}); return st.erase(it); } signed main(){ IOS(); rd(n, m, q); int cval = 0; REP(i, m){ int L, R; rd(L, R); if (SZ(st) > 0){ auto tt = st.lower_bound({{L+1, 0}, 0}); if (tt != st.begin()){ tt = prev(tt); } while(tt != st.end() && (*tt).f.f <= R){ tt = rep(tt, L, R, cval); } } st.insert({{L, R}, cval}); cval += R-L+1; } sort(ALL(tag), greater<pii> ()); vector<pii> quer(q); REP(i, q){ rd(quer[i].f); quer[i].s = i; } vector<int> ans(q); sort(ALL(quer), greater<pii> ()); int ptr = 0, woo = 0; REP(i, q){ while(ptr < SZ(tag) && tag[ptr].f >= quer[i].f){ woo += tag[ptr].s; ptr++; } ans[quer[i].s] = woo; } REP(i, q) { prt(ans[i]), putchar(' '); } putchar('\n'); } /* 5 3 7 1 3 3 5 2 3 */
#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...