Submission #106014

#TimeUsernameProblemLanguageResultExecution timeMemory
106014MrTEKtrapezoid (balkan11_trapezoid)C++14
30 / 100
311 ms22128 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef pair<int,int> ii; const int N = 1e5 + 5; const int mod = 30013; const int inf = 1e9; #define ul first.first #define ur first.second #define dl second.first #define dr second.second pair <ii,ii> a[N]; int n; ii ans,dp[N],tree[N << 3]; map <int,int> ind; vector <int> v,updates[N]; int add(int x,int y) { return x + y >= mod ? x + y - mod : x + y; } ii merge(ii x,ii y) { if (x.first == y.first) return {x.first,add(x.second,y.second)}; if (x.first > y.first) return x; return y; } ii query(int ind,int l,int r,int lw,int rw) { if (l > rw || r < lw) return {-inf,-inf}; if (l >= lw && r <= rw) return tree[ind]; int mid = (l + r) / 2; return merge(query(ind + ind,l,mid,lw,rw),query(ind + ind + 1,mid + 1,r,lw,rw)); } void update(int ind,int l,int r,int w,ii val) { if (l > w || r < w) return; if (l == w && r == w) { tree[ind] = merge(tree[ind],val); return; } int mid = (l + r) / 2; update(ind + ind,l,mid,w,val); update(ind + ind + 1,mid + 1,r,w,val); tree[ind] = merge(tree[ind + ind],tree[ind + ind + 1]); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n; for (int i = 1 ; i <= n ; i++) { cin >> a[i].ul >> a[i].ur >> a[i].dl >> a[i].dr; v.push_back(a[i].dl); v.push_back(a[i].dr); } sort(v.begin(),v.end()); for (int i = 0 , j = 0 ; i < v.size() ; i++) { if (i == 0 || v[i] != v[i - 1]) j++; ind[v[i]] = j; } sort(a + 1,a + n + 1); for (int i = 1 ; i < (N << 3) ; i++) tree[i] = {-inf,-inf}; for (int i = n , j = n ; i >= 1 ; i--) { for (auto k : updates[i]) update(1,1,2 * n,ind[a[k].dl],dp[k]); ii tut = query(1,1,2 * n,ind[a[i].dr] + 1,2 * n); tut.first++; dp[i] = merge({1,1},tut); while(j > 0 && a[j].ur >= a[i].ul) j--; updates[j].push_back(i); ans = merge(ans,dp[i]); } cout << ans.first << " " << ans.second << endl; }

Compilation message (stderr)

trapezoid.cpp: In function 'int main()':
trapezoid.cpp:67:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0 , j = 0 ; i < v.size() ; i++) {
                            ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...