Submission #557238

#TimeUsernameProblemLanguageResultExecution timeMemory
557238NintsiChkhaidzetrapezoid (balkan11_trapezoid)C++14
100 / 100
327 ms44260 KiB
#include <bits/stdc++.h> #define pb push_back #define s second #define f first #define ll long long #define int ll #define left (h<<1),l,((l+r)>>1) #define right ((h<<1)|1),((l+r)>>1) + 1,r using namespace std; const int N = 400005,mod = 30013; map <int,int> mp; int a[N],b[N],c[N],d[N]; pair <int,int> t[4*N]; vector <int> v; set <pair<pair<int,int>,pair<int,int> > > st; vector <pair<pair<int,int>,int> > vec; void upd(int h,int l,int r,int idx,int val1,int val2){ if (l == r){ if (val1 == t[h].f) t[h].s = (val2 + t[h].s)%mod; else if (val1 > t[h].f) t[h] = {val1,val2}; return; } if(idx > (l+r)/2) upd(right,idx,val1,val2); else upd(left,idx,val1,val2); if (t[h*2].f > t[h*2 + 1].f) t[h] = t[h*2]; else if (t[h*2].f < t[h*2 + 1].f) t[h] = t[h*2 + 1]; else t[h] = {t[h*2].f,(t[h*2].s + t[h*2+1].s)%mod}; } pair<int,int> get(int h,int l,int r,int L,int R){ if (r < L || R < l) return {0,0}; if (L <= l && r <= R) return t[h]; pair <int,int> a = get(left,L,R),b = get(right,L,R); if (a.f > b.f) return a; if (b.f > a.f) return b; return {a.f,(a.s + b.s)%mod}; } signed main() { ios_base::sync_with_stdio(0),cin.tie(NULL),cout.tie(NULL); int n; cin>>n; for (int i = 1; i <= n; i++){ cin>>a[i]>>b[i]>>c[i]>>d[i]; v.pb(a[i]); v.pb(b[i]); v.pb(c[i]); v.pb(d[i]); } sort(v.begin(),v.end()); int k=0; for (int i=0;i<v.size();i++){ if (!i || v[i] != v[i - 1]) k++; mp[v[i]] = k; } for (int i = 1; i <= n; i++){ a[i] = mp[a[i]]; b[i] = mp[b[i]]; c[i] = mp[c[i]]; d[i] = mp[d[i]]; vec.pb({{a[i],b[i]},i}); } sort(vec.begin(),vec.end()); for (int i = 0; i < vec.size(); i++){ int id = vec[i].s,x=vec[i].f.f,y=vec[i].f.s; while(st.size() && (st.begin()->f).f < x){ upd(1,1,N-5,(st.begin()->f).s,(st.begin()->s).f,(st.begin()->s).s); st.erase(st.begin()); } pair <int,int> pr = get(1,1,N-5,1,c[id]); int len = pr.f,cnt = pr.s; if (len == 0) cnt=1; st.insert({{b[id],d[id]},{len+1,cnt}}); } while(st.size()){ upd(1,1,N-5,(st.begin()->f).s,(st.begin()->s).f,(st.begin()->s).s); st.erase(st.begin()); } cout<<t[1].f<<" "<<t[1].s; }

Compilation message (stderr)

trapezoid.cpp: In function 'int main()':
trapezoid.cpp:54:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |     for (int i=0;i<v.size();i++){
      |                  ~^~~~~~~~~
trapezoid.cpp:68:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<std::pair<long long int, long long int>, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |     for (int i = 0; i < vec.size(); i++){
      |                     ~~^~~~~~~~~~~~
trapezoid.cpp:69:40: warning: unused variable 'y' [-Wunused-variable]
   69 |         int id = vec[i].s,x=vec[i].f.f,y=vec[i].f.s;
      |                                        ^
#Verdict Execution timeMemoryGrader output
Fetching results...