Submission #1149064

#TimeUsernameProblemLanguageResultExecution timeMemory
1149064dostsExamination (JOI19_examination)C++17
0 / 100
2452 ms45056 KiB
#include <bits/stdc++.h> #pragma GCC target("avx2") #pragma GCC optimize("O3,unroll-loops") using namespace std; #define int long long #define pii pair<int,int> #define ff first #define ss second #define sp << " " << #define all(cont) cont.begin(),cont.end() #define vi vector<int> const int inf = 1e18,N = 1e6+1,MOD = 998244353,BL = 400; vi v; int idx(int x) { return (upper_bound(all(v),x)-v.begin()); } vi acta(N,0),actb(N,0); struct Query { int A,B,C,id; }; struct FT { vi bit; int n; int total = 0; FT(int nn) { n = nn; bit.assign(n+1,0); } void put(int p,int v) { total+=v; for (int i=p;i<=n;i+=i&-i) bit[i]+=v; } int get(int p) { int ans = 0; for (int i = p;i>0;i-=i&-i) ans+=bit[i]; return ans; } }; void solve() { int n,q; cin >> n >> q; vi s(n+1),t(n+1),sm(n+1); for (int i=1;i<=n;i++) { cin >> s[i] >> t[i]; sm[i] = s[i]+t[i]; v.push_back(s[i]); v.push_back(t[i]); v.push_back(sm[i]); } vi ans(q+1); vector<Query> queries(q+1); for (int i=1;i<=q;i++){ Query& Q = queries[i]; cin >> Q.A >> Q.B >> Q.C; Q.id = i; v.push_back(Q.A),v.push_back(Q.B),v.push_back(Q.C); } sort(all(v)); v.erase(unique(all(v)),v.end()); int sz = v.size(); vi px[sz+1],py[sz+1],ps[sz+1]; for (int i=1;i<=n;i++) { s[i] = idx(s[i]); px[s[i]].push_back(i); t[i] = idx(t[i]); py[t[i]].push_back(i); sm[i] = idx(sm[i]); ps[sm[i]].push_back(i); } for (int i=1;i<=q;i++) { Query& Q = queries[i]; Q.A = idx(Q.A); Q.B = idx(Q.B); Q.C = idx(Q.C); } sort(queries.begin()+1,queries.end(),[&](const Query& q1,const Query& q2) { return pii{(q1.A+BL-1)/BL,q1.B} < pii{(q2.A+BL-1)/BL,q2.B}; }); FT ft(sz); auto ins = [&](int p,bool page) -> void { if (!page) { for (auto it : px[p]) { acta[it]++; if (acta[it] && actb[it]) { ft.put(sm[it],1); } } } else { for (auto it : py[p]) { actb[it]++; if (acta[it] && actb[it]) { ft.put(sm[it],1); } } } }; auto rem = [&](int p,bool page) -> void { if (!page) { for (auto it : px[p]) { acta[it]--; if (acta[it] == 0 || actb[it] == 0) { ft.put(sm[it],-1); } } } else { for (auto it : py[p]) { actb[it]--; if (acta[it] == 0 || actb[it] == 0) { ft.put(sm[it],-1); } } } }; /* for (int i=1;i<=n;i++) cout << s[i] sp t[i] sp sm[i] << '\n'; for (int i=1;i<=q;i++) cout << queries[i].A sp queries[i].B sp queries[i].C sp queries[i].id << '\n'; */ int L = sz+1, R = sz+1; for (auto it : queries) { if (it.id == 0) continue; while (L > it.A) ins(--L,0); while (R > it.B) ins(--R,1); while (L < it.A) rem(L++,0); while (R < it.B) rem(R++,1); ans[it.id] = ft.total-ft.get(it.C-1); } for (int i=1;i<=q;i++) cout << ans[i] << '\n'; } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #ifdef Dodi freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; //cin >> t; while (t --> 0) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...