Submission #387096

#TimeUsernameProblemLanguageResultExecution timeMemory
387096achibasadzishviliFish (IOI08_fish)C++17
100 / 100
1884 ms46940 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],X[500005],Y[500005],raod[500005]; vector<ll>v[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; } bool cmp(vector<int>a,vector<int>b){ return a[a.size() - 1] < b[b.size() - 1]; } 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; y--; v[y].pb(x); } for(int i=0; i<k; i++){ sort(v[i].begin() , v[i].end()); change(i); } sort(v , v + k , cmp); ll l,r,mid,ind; vector<pair<int,int> >q; for(int i=0; i<k; i++){ m[i] = v[i][(int)v[i].size() - 1]; for(int j=0; j<v[i].size(); j++){ q.pb(mp(v[i][j] , i)); } } sort(q.begin() , q.end()); ll op = 0; pair<ll,ll>p; for(int i=0; i<k; i++){ while(op < q.size() && q[op].f * 2 <= m[i]){ change(q[op].s); in[q[op].s]++; op++; } 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:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |         for(int j=0; j<v[i].size(); j++){
      |                      ~^~~~~~~~~~~~
fish.cpp:59:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |         while(op < q.size() && q[op].f * 2 <= m[i]){
      |               ~~~^~~~~~~~~~
fish.cpp:64:39: warning: right operand of comma operator has no effect [-Wunused-value]
   64 |         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...