Submission #787704

#TimeUsernameProblemLanguageResultExecution timeMemory
7877048pete8trapezoid (balkan11_trapezoid)C++14
100 / 100
162 ms18800 KiB
#include<iostream> #include<stack> #include<map> #include<vector> #include<string> #include<unordered_map> #include <queue> #include<cstring> #include<limits.h> #include<cmath> #include<set> #include<algorithm> #include<bitset> #include<stack> using namespace std; #define ll long long #define f first #define endl "\n" #define s second #define pii pair<int,int> #define pppiiii pair<pii,pii> #define ppii pair<pii,pii> #define all(x) x.begin(),x.end() #define pb push_back #define mp make_pair #define lb lower_bound #define ub upper_bound #define fastio ios::sync_with_stdio(false);cin.tie(NULL); const int mxn=2*1e5+1,mx=1e6; #define int long long pii seg[3*mxn+10]; //mx size + way int n; pii comp(pii a,pii b){ pii tmp=max(a,b); if(a.f==b.f)tmp.s=(a.s+b.s)%30013; if(tmp.f==0)tmp.s=1; return tmp; } void upd(int pos,pii val){ pos+=n; seg[pos]=comp(seg[pos],val); for(;pos>1;pos>>=1)seg[pos>>1]=comp(seg[pos],seg[pos^1]); } pii qry(int l,int r){ pii ans={0,0}; for(l+=n,r+=n;l<r;l>>=1,r>>=1){ if(l&1)ans=comp(ans,seg[l++]); if((r&1))ans=comp(ans,seg[--r]); } if(ans.f==0)ans.s=1; return ans; } vector<int>up; int getpos(int val){return lb(all(up),val)-up.begin();} pii ans[mxn+10]; int32_t main(){ //bot start = qry the up start //bot end = update up end cin>>n; vector<ppii>v; for(int i=0;i<n;i++){ pii a,b;cin>>a.s>>b.s>>a.f>>b.f; //up start, up end,bot start, bot end up.pb(a.s); up.pb(b.s); v.pb({a,{1,i}}); v.pb({b,{-1,i}}); } sort(all(up)); sort(all(v)); n*=2; for(auto i:v){ if(i.s.f==1){ int pos=getpos(i.f.s); ans[i.s.s]=qry(0,pos); ans[i.s.s].f++; } else upd(getpos(i.f.s),ans[i.s.s]); } pii ans=qry(0,n); cout<<ans.f<<" "<<ans.s<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...