Submission #408715

#TimeUsernameProblemLanguageResultExecution timeMemory
408715nathanlee726Examination (JOI19_examination)C++14
100 / 100
560 ms52964 KiB
//#include<i_am_noob_orz> #include<bits/stdc++.h> #include <ext/pb_ds/tree_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; using namespace std; #define ll long long #define int ll #define ull unsigned long long #define pii pair<int,int> #define X first #define Y second #define mod ((ll)1e9+7) #define pb push_back #define mp make_pair #define abs(x) ((x)>0?(x):(-(x))) #define F(n) Fi(i,n) #define Fi(i,n) Fl(i,0,n) #define Fl(i,l,n) for(int i=l;i<n;i++) #define memres(a) memset(a,0,sizeof(a)) #define all(a) a.begin(),a.end() #define sz(a) ((int)a.size()) #define ceiling(a,b) (((a)+(b)-1)/(b)) #define endl '\n' #define bit_count(x) __builtin_popcountll((x)) #define ykh mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); #define jimmy_is_kind false typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> rbtree; //#define LOCAL #ifdef LOCAL #define bug(...) cerr<<"#"<<__LINE__<<' '<<#__VA_ARGS__<<"- ", _do(__VA_ARGS__) template<typename T> void _do(T && x) {cerr<<x<<endl;} template<typename T, typename ...S> void _do(T && x, S&&...y) {cerr<<x<<", "; _do(y...);} #define IOS() #else #define IOS() ios_base::sync_with_stdio(0), cin.tie(0) #define endl '\n' #define bug(...) #endif int add(int a,int b){return(a+b>=mod?a+b-mod:a+b);} int sub(int a,int b){return(a<b?a+mod-b:a-b);} int po(int a,int b){ if(b==0)return 1; if(b==1)return(a%mod); int tem=po(a,b/2); if(b&1)return(((tem*tem)%mod)*a)%mod; else return(tem*tem)%mod; } int GCD(int a,int b){ int x=0; int ra,rb; while(a&&b){ if(((a&1)==0)&&((b&1)==0)){ a>>=1,b>>=1,x++; } else if((a^b)&1){ if(a&1)b>>=1; else a>>=1; } else{ ra=abs(a-b),rb=min(a,b); a=ra,b=rb; } } return max(a,b)<<x; } int gcd(int a,int b){if(b==0)return a;return gcd(b,a%b);} int balbit[200010],o[100010]; bool cmp1(pair<pii,pii> x,pair<pii,pii> y){ if(x.X.Y==y.X.Y){return x.Y.Y>=y.Y.Y;} else return x.X.Y>y.X.Y; } bool cmp(pair<pii,pii> x,pair<pii,pii> y){ if(x.X.X==y.X.X){return x.Y.Y>=y.Y.Y;} else return x.X.X>y.X.X; } void ADD(int x,int vl){ for(;x>0;x-=(x&(-x)))balbit[x]+=vl; } int QRY(int x){ int re=0; for(;x<=200000;x+=(x&-x))re+=balbit[x]; return re; } void CDQ(int l,int r,vector<pair<pii,pii> >& a){ if(l==r)return; int mi=(l+r)/2; vector<pair<pii,pii> >lv,rv; for(int i=l;i<=mi;i++)lv.pb(a[i-l]); for(int i=mi+1;i<=r;i++)rv.pb(a[i-l]); CDQ(l,mi,lv),CDQ(mi+1,r,rv); //for(auto &pt:lv)cout<<"lv "<<l<<" "<<r<<" "<<pt.X.X<<" "<<pt.X.Y<<" "<<pt.Y.X<<" "<<pt.Y.Y<<endl; //for(auto &pt:rv)cout<<"rv "<<l<<" "<<r<<" "<<pt.X.X<<" "<<pt.X.Y<<" "<<pt.Y.X<<" "<<pt.Y.Y<<endl; vector<pair<pii,pii> > b; vector<int> rem; int pl=0,pr=0; while(pl<sz(lv)&&pr<sz(rv)){ if(cmp1(lv[pl],rv[pr])){ if(lv[pl].Y.Y>=0){ ADD(lv[pl].Y.X,1); rem.pb(lv[pl].Y.X); } b.pb(lv[pl]); pl++; } else{ if(rv[pr].Y.Y<0){ o[-rv[pr].Y.Y]+=QRY(rv[pr].Y.X); bug(-rv[pr].Y.Y,QRY(rv[pr].Y.X)); } b.pb(rv[pr]); pr++; } } while(pl<sz(lv)){ if(lv[pl].Y.Y>=0){ ADD(lv[pl].Y.X,1); rem.pb(lv[pl].Y.X); } b.pb(lv[pl]); pl++; } while(pr<sz(rv)){ if(rv[pr].Y.Y<0){ o[-rv[pr].Y.Y]+=QRY(rv[pr].Y.X); bug(-rv[pr].Y.Y,QRY(rv[pr].Y.X)); } b.pb(rv[pr]); pr++; } for(int x:rem)ADD(x,-1); assert(sz(a)==sz(b)); F(sz(a))a[i]=b[i]; return; } signed main(){ IOS(); int n,q; cin>>n>>q; vector<pair<pii,pii> > ar; vector<int> v; map<int,int> m; memres(o); F(n){ int x,y; cin>>x>>y; ar.pb({{x,y},{x+y,i}}); v.pb(x+y); } F(q){ int x,y,z; cin>>x>>y>>z; ar.pb({{x,y},{z,-i-1}}); v.pb(z); } sort(all(v)); v.resize(unique(all(v))-v.begin()); F(sz(v))m[v[i]]=i+1; for(auto &pt:ar)pt.Y.X=m[pt.Y.X]; sort(all(ar),cmp); //for(auto &pt:ar)cout<<pt.X.X<<" "<<pt.X.Y<<" "<<pt.Y.X<<" "<<pt.Y.Y<<endl; CDQ(0,n+q-1,ar); F(q)cout<<o[i+1]<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...