Submission #756885

#TimeUsernameProblemLanguageResultExecution timeMemory
756885SanguineChameleonFish (IOI08_fish)C++17
75 / 100
3057 ms26368 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 = 5e5 + 20; pair<int, int> a[maxn]; vector<int> pos[maxn]; int cnt[maxn]; int tree[maxn]; int id[maxn]; int max_id[maxn]; int mod; void update(int id, int lt, int rt, int pos, int val) { tree[pos] = val; } void just_do_it() { int n, k; cin >> n >> k >> mod; for (int i = 1; i <= n; i++) { cin >> a[i].first >> a[i].second; } sort(a + 1, a + n + 1); k = 0; for (int i = n; i >= 1; i--) { if (!id[a[i].second]) { id[a[i].second] = ++k; } a[i].second = id[a[i].second]; } for (int i = 1; i <= n; i++) { cnt[a[i].second]++; pos[a[i].second].push_back(i); } for (int i = 1; i <= k; i++) { cnt[i]++; } for (int i = n; i >= 1; i--) { max_id[i] = max(max_id[i + 1], a[i].second); } int lt = n; int res = 0; for (int i = n; i >= 1; i--) { while (lt > 0 && a[lt].first * 2 > a[i].first) { cnt[a[lt].second]--; //update(a[lt].second, cnt[a[lt].second]); lt--; } if (max_id[i] != max_id[i + 1]) { int x = max_id[i]; int prod = cnt[x] - 1; for (int j = x; j <= k; j++) { if (j != x) { prod = prod * (cnt[j] % mod) % mod; } } res += prod; res %= mod; int low = max_id[lower_bound(a + 1, a + n + 1, make_pair(a[pos[x][cnt[x] - 1]].first * 2, -1)) - a] + 1; prod = 1; for (int j = low; j <= k; j++) { if (j != x) { prod = prod * (cnt[j] % mod) % mod; } } res += prod; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...