제출 #515620

#제출 시각아이디문제언어결과실행 시간메모리
515620Aldas25Boat (APIO16_boat)C++14
0 / 100
2068 ms469380 KiB
#include<bits/stdc++.h> using namespace std; #define FAST_IO ios_base::sync_with_stdio(0); cin.tie(nullptr) #define FOR(i, a, b) for(int i = (a); i <= (b); i++) #define REP(n) FOR(i, 1, (n)) #define f first #define s second #define pb push_back typedef long long ll; const int MAXN = 500; const ll INF = 1e18; const ll MOD = 1e9+7; struct segtree { struct node { node * le; node * ri; ll fr, to; ll sum = 0; node (ll _fr, ll _to) { sum = 0; le = nullptr; ri = nullptr; fr = _fr; to = _to; } void upd () { ll m = (fr+to)/2; if (!le) le = new node (fr, m); if (!ri) ri = new node (m+1, to); } }; void add (ll p, ll x, node * cur) { if ((cur->fr) == (cur->to)) { (cur->sum) += x; return; } cur->upd(); ll m = ((cur->fr) + (cur->to)) / 2; if (p <= m) add (p, x, cur->le); else add (p, x, cur->ri); (cur->sum) = (cur->le->sum) + (cur->ri->sum); } ll getSum (ll x, ll y, node * cur) { ll fr = (cur->fr); ll to = (cur->to); if (x > to || y < fr) return 0; if (x <= fr && to <= y) return (cur->sum); cur->upd(); return getSum(x, y, cur->le) + getSum(x, y, cur->ri); } node * root = new node (0, 1e9+1); void add (ll p, ll x) { add (p, x, root); } ll get (ll p) { return getSum(0, p, root); } } tree; //vector<ll> dp[MAXN]; int n; ll a[MAXN], b[MAXN]; int main() { FAST_IO; cin >> n; FOR(i, 1, n) { cin >> a[i] >> b[i]; } //dp[0].pb(1); tree.add(0, 1); // cout << " h" << endl; FOR(i, 1, n) { for (int j = b[i]; j >= a[i]; j--) { //cout << " i = " << i << " j = " << j << endl; ll cur = tree.get(j-1); //cout << " a " << endl; tree.add(j, cur); // cout << " b" << endl; } } ll ans = tree.get(1e9); ans--; cout << ans << "\n"; 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...