제출 #688139

#제출 시각아이디문제언어결과실행 시간메모리
688139finn__Fish (IOI08_fish)C++17
21 / 100
307 ms65536 KiB
#include <bits/stdc++.h> using namespace std; class SegmentTree { vector<unsigned> t; size_t l, m; public: SegmentTree(size_t _n, size_t _m) { l = 1 << (32 - __builtin_clz(_n)); m = _m; t = vector<unsigned>(2 * l, 1); } void increment(size_t i) { i += l; t[i] = (t[i] + 1) % m; while (i >>= 1) t[i] = (t[2 * i] * t[2 * i + 1]) % m; } unsigned range_prod(size_t i, size_t j) { if (j > l) return 1; unsigned x = 1; i += l, j += l; while (i <= j) { if (i & 1) x = (x * t[i++]) % m; if (!(j & 1)) x = (x * t[j--]) % m; i >>= 1; j >>= 1; } return x; } }; int main() { ios_base::sync_with_stdio(0); cin.tie(0); size_t n, k, m; cin >> n >> k >> m; vector<pair<unsigned, unsigned>> fish(n); vector<pair<unsigned, unsigned>> largest(k, {0, 0}); vector<unsigned> F(k); for (auto &[l, g] : fish) { cin >> l >> g; g--; largest[g] = max(largest[g], {l, g}); F[g] = max(F[g], l); } sort(fish.begin(), fish.end()); sort(largest.begin(), largest.end()); vector<unsigned> c(k); vector<vector<unsigned>> e(k, vector<unsigned>(k)); unsigned ans = 0; SegmentTree tree(k, m); size_t p = 0; for (size_t i = 0; i < k; i++) { while (p < n && 2 * fish[p].first <= largest[i].first) { c[fish[p].second]++; p++; } for (size_t j = 0; j < k; j++) { e[largest[i].second][j] = c[j] % m; } } for (size_t i = 0; i < k; i++) { unsigned x = 1, y = 1; for (size_t j = 0; j < k; j++) { if (!(e[j][i] >= e[i][i] + 1) && F[j] > F[i]) y = (y * (e[i][j] + 1)) % m; else if (F[i] > F[j]) x = (x * (e[i][j] + 1)) % m, y = (y * (e[i][j] + 1)) % m; } ans = (ans + x * e[i][i]) % m; ans = (ans + y) % m; } cout << ans << '\n'; }
#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...