Submission #387073

#TimeUsernameProblemLanguageResultExecution timeMemory
387073achibasadzishviliFish (IOI08_fish)C++17
95 / 100
848 ms65540 KiB
#include<bits/stdc++.h> #define ll int #define f first #define s second #define pb push_back #define mp make_pair using namespace std; ll ans; ll n,k,mod,in[500005],s[1500005],pown=1,m[500005]; vector<ll>v[500005],t[500005],ad[500005]; void change(ll x){ x = pown + x; s[x]++; s[x] %= mod; x /= 2; while(x){ s[x] = s[2 * x] * s[2 * x + 1] % mod; x /= 2; } } ll get(ll x,ll L,ll R,ll l,ll r){ if(L > r || R < l)return 1; if(L >= l && R <= r)return s[x]; ll k1 = get(2 * x , L , (L + R) / 2 , l , r); ll k2 = get(2 * x + 1 , (L + R) / 2 + 1 , R , l , r); return k1 * k2 % mod; } int main(){ ios::sync_with_stdio(false); cin >> n >> k >> mod; while(pown <= k + 2) pown *= 2; ll x,y; for(int i=1; i<=n; i++){ cin >> x >> y; v[y].pb(x); } vector<pair<ll,ll> >g; for(int i=1; i<=k; i++){ sort(v[i].begin() , v[i].end()); if(v[i].size()){ g.pb(mp(v[i][v[i].size() - 1] , i)); } } for(int i=0; i<k; i++){ change(i); } sort(g.begin() , g.end()); for(int i=0; i<g.size(); i++){ t[i] = v[g[i].s]; } ll l,r,mid,ind; for(int i=0; i<k; i++){ v[i] = t[i]; m[i] = v[i][(int)v[i].size() - 1]; } for(int i=0; i<k; i++){ for(int j=0; j<v[i].size(); j++){ l = 0,r = k - 1,ind = -1; while(r >= l){ mid = (l + r) / 2; if(m[mid] >= 2 * v[i][j]){ r = mid - 1; ind = mid; } else { l = mid + 1; } } if(ind != -1){ ad[ind].pb(i); } } } pair<ll,ll>p; for(int i=0; i<k; i++){ for(int j=0; j<ad[i].size(); j++){ in[ad[i][j]]++; change(ad[i][j]); } l = i + 1,r = k - 1,mid,ind = k; while(r >= l){ mid = (l + r) / 2; if(m[mid] >= 2 * v[i][in[i]]){ r = mid - 1; ind = mid; } else { l = mid + 1; } } ind--; ans = (ans + get(1 , 1 , pown , 1 , i) * get(1 , 1 , pown , i + 2 , ind + 1)) % mod; ans = (ans + in[i] % mod * get(1 , 1 , pown , 1 , i)) % mod; } cout << ans << '\n'; return 0; }

Compilation message (stderr)

fish.cpp: In function 'int main()':
fish.cpp:51:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |     for(int i=0; i<g.size(); i++){
      |                  ~^~~~~~~~~
fish.cpp:60:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |         for(int j=0; j<v[i].size(); j++){
      |                      ~^~~~~~~~~~~~
fish.cpp:79:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |         for(int j=0; j<ad[i].size(); j++){
      |                      ~^~~~~~~~~~~~~
fish.cpp:83:39: warning: right operand of comma operator has no effect [-Wunused-value]
   83 |         l = i + 1,r = k - 1,mid,ind = k;
      |                                       ^
#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...