Submission #825570

#TimeUsernameProblemLanguageResultExecution timeMemory
825570boyliguanhantrapezoid (balkan11_trapezoid)C++17
33 / 100
406 ms22384 KiB
#include<bits/stdc++.h> using namespace std; struct trap{ int a,b,c,d; bool operator < (trap c) { return a==c.a?b<c.b:a<c.a; } } t[400100]; map<int, int> mp; struct make{ int v = 0, cnt = 0; make operator + (make b) { make c; c.v = max(v, b.v); if(v==c.v) c.cnt=cnt; if(b.v==c.v) c.cnt+=b.cnt; c.cnt%=30013; return c; } } tre[400100], ans[400100]; void upd(make x, int p) { while(p<=2e5) tre[p] = tre[p] + x, p+=p&-p; } void Upd(int p, int up) { while(p) ans[up]=ans[up]+tre[p],p-=p&-p; } void clear(int x) { while(x<=2e5) tre[x] = {0,0}, x+=x&-x; } void cdq(int l, int r) { if(l==r) { ans[l].v++; return; } int mid = l+r>>1; cdq(l, mid); vector<tuple<int, int, int>> tp; for(int i = l; i <= mid; i++) tp.push_back({t[i].b, t[i].d, i}); for(int j = mid+1; j <= r; j++) tp.push_back({t[j].a, t[j].c, j}); sort(tp.begin(), tp.end()); for(auto i: tp) { int a, b, c; tie(a,b,c) = i; if(c<=mid) upd(ans[c],b); else Upd(b,c); } for(int i = l; i <= mid; i++) clear(t[i].d); tp.clear(); cdq(mid+1, r); } int main() { ans[0].cnt = 1; int n; cin >> n; for(int i = 0; i < n; i++) cin >> t[i].a >> t[i].b >> t[i].c >> t[i].d,mp[t[i].d], mp[t[i].a], mp[t[i].c], mp[t[i].b]; int x = 0; for(auto &i: mp) i.second=++x; for(int i = 0; i < n; i++) t[i].a=mp[t[i].a], t[i].b = mp[t[i].b], t[i].c = mp[t[i].c], t[i].d = mp[t[i].d]; sort(t, t+n); cdq(0,n-1); for(int i = 0; i < n; i++) ans[n]=ans[n]+ans[i]; cout << ans[n].v << ' ' << ans[n].cnt << '\n'; }

Compilation message (stderr)

trapezoid.cpp: In function 'void cdq(int, int)':
trapezoid.cpp:40:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   40 |     int mid = l+r>>1;
      |               ~^~
#Verdict Execution timeMemoryGrader output
Fetching results...