Submission #107002

#TimeUsernameProblemLanguageResultExecution timeMemory
107002kekBoat (APIO16_boat)C++14
0 / 100
2025 ms81484 KiB
// #include "gap.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define int ll #define all(v) v.begin(), v.end() #define len(v) ((int)(v).size()) #define pb push_back #define kek pop_back #define pii pair<int, int> #define mp make_pair #define debug(x) cout << #x << " = " << x << endl; const int INF = 1e18 + 666; template<class t1, class t2> bool cmin(t1 &a, const t2 &b) { if (a > b) { a = b; return true; } return false; } template<class t1, class t2> bool cmax(t1 &a, const t2 &b) { if (a < b) { a = b; return true; } return false; } // void MinMax(ll, ll, ll*, ll*); // ll firstGroup(int); // ll secondGroup(int); // ll calc_ans(vector<ll> a) { // sort(all(a)); // ll ans = 0; // for (int i = 0; i + 1 < len(a); ++i) { // cmax(ans, a[i + 1] - a[i]); // } // return ans; // } // ll findGap(int t, int n) { // if (t == 1) { // return firstGroup(n); // } else { // return secondGroup(n); // } // } // ll firstGroup(int n) { // vector<ll> a; // ll l = 0, r = 1e18; // while (len(a) < n) { // MinMax(l, r, &l, &r); // if (l == -1) { // break; // } // a.pb(l); // if (l != r) { // a.pb(r); // } // ++l; // --r; // } // return calc_ans(a); // } // vector<ll> restore(ll l, ll r) { // if (l > r) { // return {}; // } // MinMax(l, r, &l, &r); // if (l == -1) { // return {}; // } // if (l == r) { // return {l}; // } // ll m = (l + r) >> 1; // vector<ll> ans = {l, r}; // for (auto &x : restore(l + 1, m)) { // ans.pb(x); // } // for (auto &x : restore(m + 1, r - 1)) { // ans.pb(x); // } // return ans; // } // ll secondGroup(int n) { // return calc_ans(restore(0, 1e18)); // } void run(); signed main() { iostream::sync_with_stdio(0); cin.tie(0); cout.tie(0); run(); } const int mod = 1e9 + 7; const int maxn = 1e9 + 100; struct fenv { unordered_map<int, int> tree; int maxn; fenv() { tree.rehash(1e7 + 100); } int get(int i) { ++i; int sm = 0; for (; i > 0; i -= f(i)) { auto it = tree.find(i); if (it != tree.end()) { sm += it->second; if (sm >= mod) { sm -= mod; } } } return sm; } void plus(int i, int v) { ++i; for (; i < maxn; i += f(i)) { int &cur = tree[i]; cur += v; // if (cur < 0) { // cur += mod; // } if (cur >= mod) { cur -= mod; } } } int f(int i) { return i & (-i); } }; void run() { fenv t; t.plus(0, 1); // unordered_map<int, int> cur; // cur.rehash(1e7 + 100); // cur[0] = 1; int n; cin >> n; for (int kek = 0; kek < n; ++kek) { int a, b; cin >> a >> b; for (int i = b; i >= a; --i) { int s = t.get(i - 1); t.plus(i, s); // cur[i] = s; } } int ans = t.get(maxn - 20) - 1; if (ans < 0) { ans += mod; } assert(ans >= 0); cout << ans % mod << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...