Submission #763725

#TimeUsernameProblemLanguageResultExecution timeMemory
763725KriptonFish (IOI08_fish)C++14
75 / 100
3083 ms11300 KiB
#include <bits/stdc++.h> using namespace std; pair <int, int> v[500001]; int vf[500001]; int done[500001], last_drop[500001]; bitset <500001> checc, deact; int k, m; int recalc() { int rez = 1; for(int i = 1; i <= k; i++) if(!checc[i]) rez = 1LL * rez * (vf[i] + 1) % m; return rez; } int recalc_fara(int j) { int rez = 1; for(int i = 1; i <= k; i++) if(i != j && (!checc[i] || done[i] < 2 * last_drop[j])) rez = 1LL * rez * (vf[i] + 1) % m; return rez; } int main() { #ifdef HOME freopen("test.in", "r", stdin); freopen("test.out", "w", stdout); #endif // HOME int n; cin >> n >> k >> m; for(int i = 1; i <= n; i++) cin >> v[i].first >> v[i].second; sort(v + 1, v + n + 1); int j = 1; while(j <= n && 2 * v[j].first <= v[n].first) { vf[v[j].second]++; j++; } j--; for(int i = 1; i <= k; i++) last_drop[i] = 1e9; int cate = 0; for(int i = n; i >= 1; i--) { while(j >= 1 && 2 * v[j].first > v[i].first) { vf[v[j].second]--; last_drop[v[j].second] = v[j].first; j--; } if(!checc[v[i].second]) { cate = (cate + recalc_fara(v[i].second)) % m; vf[v[i].second]--; cate = (cate + recalc()) % m;///this is good vf[v[i].second]++; checc[v[i].second] = 1; done[v[i].second] = v[i].first; } //cout << cate << " "; } cout << cate; 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...
#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...