Submission #221443

#TimeUsernameProblemLanguageResultExecution timeMemory
221443AutoratchExamination (JOI19_examination)C++14
100 / 100
1398 ms20696 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2e5 + 1; int n,m; tuple<int,int,int,int> a[N]; int ans[N],fw[N]; vector<int> tmp; map<int,int> ma; stack<int> st; bool cmp(tuple<int,int,int,int> a,tuple<int,int,int,int> b){ return get<1>(a)<get<1>(b); } void update(int idx,int val) { if(val==1) st.push(idx); idx = ma[idx]; while(idx<N) fw[idx]+=val,idx+=(idx & -idx); } int read(int idx) { if(idx==INT_MAX) idx = N-1; else idx = ma[idx]; int val = 0; while(idx>0) val+=fw[idx],idx-=(idx & -idx); return val; } void clear() { while(!st.empty()) update(st.top(),-1),st.pop(); } void solve(int l,int r) { if(l==r) return; int m = (l+r)/2; solve(l,m),solve(m+1,r); sort(a+l,a+m+1,cmp),sort(a+m+1,a+r+1,cmp); int i = l,j = m+1; while(i<=m+1 and j<=r) { int x = get<1>(a[i]),y = get<1>(a[j]),k = get<2>(a[i]),l = get<2>(a[j]),ix = get<3>(a[i]),iy = get<3>(a[j]); if(x<=y){ if(!ix and i<=m) update(k,1); i++; } else{ if(iy) ans[iy]+=read(l); j++; } } while(j<=r) { int l = get<2>(a[j]),iy = get<3>(a[j]); ans[iy]+=read(l); j++; } clear(); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for(int i = 1;i <= n;i++) { int x,y; cin >> x >> y; x = -x,y = -y; a[i] = {x,y,x+y,0}; tmp.push_back(x+y); } for(int i = 1;i <= m;i++) { int x,y,z; cin >> x >> y >> z; x = -x,y = -y,z = -z; a[i+n] = {x,y,z,i}; tmp.push_back(z); } sort(tmp.begin(),tmp.end()); for(int i = 1;i <= tmp.size();i++) ma[tmp[i-1]] = i; sort(a+1,a+n+m+1); solve(1,n+m); for(int i = 1;i <= m;i++) cout << ans[i] << '\n'; }

Compilation message (stderr)

examination.cpp: In function 'int main()':
examination.cpp:79:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 1;i <= tmp.size();i++) ma[tmp[i-1]] = i;
                   ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...