Submission #401390

#TimeUsernameProblemLanguageResultExecution timeMemory
401390ja_kingyFish (IOI08_fish)C++14
100 / 100
661 ms43464 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int,int> pii; const int mxF = 5e5; int f,k,m,cnt[mxF],ord[mxF],st[1<<20],ans; vector<int> of_type[mxF]; void upd(int x, int v) { st[x += k] = v%m; for (; x/=2; ) st[x] = st[x*2]*st[x*2+1]%m; } int qry(int l, int r) { int res = 1; for (l += k, r += k; l < r; l/=2, r/=2) { if (l&1) res=res*st[l++]%m; if (r&1) res=res*st[--r]%m; } return res; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); fill(st, end(st), 1); cin >> f >> k >> m; vector<pii> fish(f); for (int i = 0,l,x; i < f; ++i) { cin >> l >> x; x--; of_type[x].push_back(l); fish[i] = {l, x}; } sort(fish.begin(), fish.end()); for (int x = 0; x < k; ++x) sort(of_type[x].begin(), of_type[x].end()); vector<pii> types(k); for (int i = 0; i < k; ++i) { types[i] = {of_type[i].back(), i}; } sort(types.begin(), types.end()); for (int i = 0; i < k; ++i) ord[types[i].second] = i; int smallest = 0; for (auto [l,x]: types) { while (fish[smallest].first <= l/2) { cnt[fish[smallest].second]++; upd(ord[fish[smallest].second], cnt[fish[smallest].second]+1); smallest++; } int ltm = qry(0, ord[x]); ans = (ans+(ltm*(cnt[x]%m)))%m; int sm_of_type = *upper_bound(of_type[x].begin(), of_type[x].end(), l/2); ans = (ans+(ltm*qry(ord[x]+1, lower_bound(types.begin(), types.end(), make_pair(2*sm_of_type,0))-types.begin())))%m; } cout << ans; }

Compilation message (stderr)

fish.cpp: In function 'int main()':
fish.cpp:44:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   44 |     for (auto [l,x]: types) {
      |               ^
#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...