Submission #1149340

#TimeUsernameProblemLanguageResultExecution timeMemory
1149340dostsExamination (JOI19_examination)C++20
2 / 100
3095 ms32940 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 = 3e5+1,MOD = 998244353,BL = 600; vi v; int idx(int x) { return (upper_bound(all(v),x)-v.begin()); } int acta[N],actb[N]; struct Query { int A,B,C,id; }; int bit[N]; struct FT { int n; int total = 0; FT(int nn) { n = nn; } 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; } } ft(N); vi px[N],py[N]; int sm[N],s[N],t[N]; void ins(int p,bool page) { if (!page) { for (auto it : px[p]) { if (actb[it]) ft.put(sm[it],1); acta[it]++; } } else { for (auto it : py[p]) { if (acta[it]) ft.put(sm[it],1); actb[it]++; } } }; void rem(int p,bool page) { if (!page) { for (auto it : px[p]) { if (acta[it] && actb[it] == 1) { ft.put(sm[it],-1); } acta[it]--; } } else { for (auto it : py[p]) { if (acta[it] && actb[it] == 1) { ft.put(sm[it],-1); } actb[it]--; } } }; void solve() { int n,q; cin >> n >> q; 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(); 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]); } 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}; }); int L = sz+1, R = sz+1; for (int ii=1;ii<=q;ii++) { Query& it = queries[ii]; 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...