Submission #557232

#TimeUsernameProblemLanguageResultExecution timeMemory
557232NintsiChkhaidzetrapezoid (balkan11_trapezoid)C++14
0 / 100
194 ms46664 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; queue <pair<pair<int,int>,pair<int,int> > > q; vector <pair<pair<int,int>,int> > vec; void build(int h,int l,int r){ if (l == r){ t[h] = {0,0}; return; } build(left),build(right); 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}; } 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; 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; build(1,1,N-5); 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]); int mn = min({a[i],b[i],c[i],d[i]}); vec.pb({{a[i],b[i]},i}); } sort(v.begin(),v.end()); sort(vec.begin(),vec.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 = 0; i < vec.size(); i++){ int id = vec[i].s,x=vec[i].f.f,y=vec[i].f.s; while(q.size() && q.front().f.f < x){ upd(1,1,N-5,q.front().f.s,q.front().s.f,q.front().s.s); q.pop(); } pair <int,int> pr = get(1,1,N-5,1,c[id]); // cout<<"id = "<<id<<" "<<mn<<" "<<mx<<" | "<<pr.f<<" & "<<pr.s<<endl; int len = pr.f,cnt = pr.s; if (len == 0) cnt=1; q.push({{b[id],d[id]},{len+1,cnt}}); } cout<<t[1].f<<" "<<t[1].s; }

Compilation message (stderr)

trapezoid.cpp: In function 'int main()':
trapezoid.cpp:61:13: warning: unused variable 'mn' [-Wunused-variable]
   61 |         int mn = min({a[i],b[i],c[i],d[i]});
      |             ^~
trapezoid.cpp:67: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]
   67 |     for (int i=0;i<v.size();i++){
      |                  ~^~~~~~~~~
trapezoid.cpp:72: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]
   72 |     for (int i = 0; i < vec.size(); i++){
      |                     ~~^~~~~~~~~~~~
trapezoid.cpp:73:40: warning: unused variable 'y' [-Wunused-variable]
   73 |         int id = vec[i].s,x=vec[i].f.f,y=vec[i].f.s;
      |                                        ^
#Verdict Execution timeMemoryGrader output
Fetching results...