Submission #733005

#TimeUsernameProblemLanguageResultExecution timeMemory
733005SanguineChameleonBoat (APIO16_boat)C++17
9 / 100
130 ms468 KiB
#include <bits/stdc++.h> using namespace std; void just_do_it(); int main() { #ifdef KAMIRULEZ freopen("kamirulez.inp", "r", stdin); freopen("kamirulez.out", "w", stdout); #endif ios_base::sync_with_stdio(0); cin.tie(0); just_do_it(); return 0; } const int maxn = 5e2 + 20; const long long mod = 1e9 + 7; bool flag[maxn]; long long cur[maxn]; long long nxt[maxn]; pair<int, int> events[maxn * 2]; int n; void trans() { for (int i = 1; i <= n; i++) { nxt[i] = cur[i]; if (flag[i]) { nxt[i] = (nxt[i] + 1) % mod; } } for (int i = 1; i <= n; i++) { for (int j = i + 1; j <= n; j++) { if (flag[j]) { nxt[j] = (nxt[j] + cur[i]) % mod; } } } swap(cur, nxt); } void just_do_it() { cin >> n; for (int i = 1; i <= n; i++) { int a, b; cin >> a >> b; events[i * 2 - 1] = make_pair(a, i); events[i * 2] = make_pair(b + 1, -i); } sort(events + 1, events + n * 2 + 1); int cur_t = 0; for (int i = 1; i <= n * 2; i++) { int nxt_t = events[i].first; int id = events[i].second; bool begin_t = (i == 1 || events[i].first != events[i - 1].first); bool end_t = (i == n * 2 || events[i].first != events[i + 1].first); if (begin_t) { if (cur_t < nxt_t - 1) { for (int i = 1; i <= n; i++) { assert(!flag[i]); } cur_t = nxt_t - 1; } } if (id > 0) { flag[id] = true; } else { flag[-id] = false; } if (end_t && cur_t == nxt_t - 1) { trans(); cur_t = nxt_t; } } long long res = 0; for (int i = 1; i <= n; i++) { res += cur[i]; res %= mod; } cout << res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...