Submission #403138

#TimeUsernameProblemLanguageResultExecution timeMemory
403138amunduzbaevBoat (APIO16_boat)C++14
9 / 100
1707 ms5608 KiB
/* made by amunduzbaev */ //~ #include <ext/pb_ds/assoc_container.hpp> //~ #include <ext/pb_ds/tree_policy.hpp> #include "bits/stdc++.h" using namespace std; //~ using namespace __gnu_pbds; #define ff first #define ss second #define pb push_back #define mp make_pair #define ub upper_bound #define lb lower_bound #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(),x.rend() #define NeedForSpeed ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define vv vector #define tut(x) array<int, x> #define int long long typedef long long ll; typedef long double ld; typedef pair<int, int> pii; typedef vector<int> vii; typedef vector<pii> vpii; template<class T> bool umin(T& a, const T& b) {return a > b? a = b, true:false;} template<class T> bool umax(T& a, const T& b) {return a < b? a = b, true:false;} //~ void usaco(string s) { freopen((s+".in").c_str(),"r",stdin); //~ freopen((s+".out").c_str(),"w",stdout); NeedForSpeed } //~ template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; const int N = 505; const int mod = 1e9+7; const ll inf = 1e18; const ld Pi = acos(-1); const int B = 455; #define MULTI 0 int n, m, k, s, t, q, ans, res, a[N]; int b[N]; map<int, int> dp[N]; void solve(int t_case){ cin>>n; vii tmp, tt; for(int i=0;i<n;i++) cin>>a[i]>>b[i]; for(int i=0;i<n;i++) tmp.pb(a[i]), tmp.pb(b[i]); sort(all(tmp)); for(int i=0;i<2*n;){ int j = i; while(j < 2*n && tmp[j] == tmp[i]) j++; tt.pb(tmp[i]); i = j; } dp[0][a[0]] = 1; dp[0][b[0]] = (b[0] - a[0] + 1); for(int i=1;i<n;i++){ vii tmp, tt; for(int j=0;j<=i;j++){ if(a[j] >= a[i] && a[j] <= b[i]) tmp.pb(a[j]); if(b[j] >= a[i] && b[j] <= b[i]) tmp.pb(b[j]); } sort(all(tmp)); for(int i=0;i<sz(tmp);){ int j = i; while(j < sz(tmp) && tmp[j] == tmp[i]) j++; tt.pb(tmp[i]); i = j; } int cost = 0; for(auto x : tt){ cost = (cost + 1) % mod; for(int j=0;j<i;j++){ auto it = dp[j].lb(x); if(it != dp[j].begin()) --it, cost = (cost + (*it).ss) % mod; } dp[i][x] = cost; } } for(int i=0;i<n;i++){ res = (res + (*--dp[i].end()).ss) % mod; } cout<<res<<"\n"; } signed main(){ NeedForSpeed if(MULTI){ int t; cin>>t; for(int t_case = 1; t_case <= t; t_case++) solve(t_case); } else solve(1); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...