Submission #620826

#TimeUsernameProblemLanguageResultExecution timeMemory
620826HazemHorses (IOI15_horses)C++14
0 / 100
264 ms44740 KiB
#include <bits/stdc++.h> #define LL long long using namespace std; const int M = 5e5+10; const int MOD = 1e9+7; LL add(LL a,LL b){ return (a+b)%MOD; } LL mult(LL a,LL b){ return (a*b)%MOD; } LL fastpow(LL n,LL k){ LL ret = 1; while(k){ if(k&1)ret = mult(ret,n); k /= 2; n = mult(n,n); } return ret; } LL divide(LL a,LL b){ return mult(a,fastpow(b,MOD-2)); } LL a[M],b[M],tree[M*4],n; LL pr = 1; set<int>st; void update(int v,int tl,int tr,int pos,int val){ if(tl==tr){ tree[v] = val; return ; } int mid = (tl+tr)/2; if(pos<=mid) update(v*2,tl,mid,pos,val); else update(v*2+1,mid+1,tr,pos,val); tree[v] = max(tree[v*2],tree[v*2+1]); } LL get(int v,int tl,int tr,int l,int r){ if(tl>r||tr<l) return 1; if(tl>=l&&tr<=r) return tree[v]; int mid = (tl+tr)/2; return max(get(v*2,tl,mid,l,r),get(v*2+1,mid+1,tr,l,r)); } LL calc(){ vector<pair<LL,LL>>vec; int cnt = 0; int last = n+1; for(auto it = st.begin();it!=st.end();it++){ if(cnt==30) break; cnt++; int idx = -(*it); if(last-idx>1) vec.push_back({1,get(1,1,n,idx+1,last-1)}); last = idx; vec.push_back({a[idx],b[idx]}); } reverse(vec.begin(),vec.end()); LL idx = 0,cur = 1; for(int i = 1;i<vec.size();i++){ if((cur*vec[i].first>vec[idx].second)||(cur*vec[i].first*vec[i].second>vec[idx].second)) idx = i,cur = 1; else cur *= vec[i].first; } cur = 1; for(int i=0;i<=idx;i++) cur = mult(cur,vec[i].first); return mult(cur,vec[idx].second); } int init(int N, int X[], int Y[]) { n = N; a[0] = 1; for(int i=1;i<=n;i++){ a[i] = X[i-1]; b[i] = Y[i-1]; update(1,1,n,i,b[i]); if(a[i]>1) st.insert(-i); } return calc(); } int updateX(int pos, int val) { if(a[pos+1]>1) st.erase(-pos-1); a[pos+1] = val; if(a[pos+1]>1) st.insert(-pos-1); return calc(); } int updateY(int pos, int val) { b[pos+1] = val; update(1,1,n,pos+1,b[pos+1]); return calc(); }

Compilation message (stderr)

horses.cpp: In function 'long long int calc()':
horses.cpp:70:14: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   70 |  int last = n+1;
      |             ~^~
horses.cpp:78:29: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   78 |    vec.push_back({1,get(1,1,n,idx+1,last-1)});
      |                             ^
horses.cpp:86:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |  for(int i = 1;i<vec.size();i++){
      |                ~^~~~~~~~~~~
horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:109:14: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  109 |   update(1,1,n,i,b[i]);
      |              ^
horses.cpp:109:21: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  109 |   update(1,1,n,i,b[i]);
      |                  ~~~^
horses.cpp:115:13: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  115 |  return calc();
      |         ~~~~^~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:127:13: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  127 |  return calc();
      |         ~~~~^~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:133:13: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  133 |  update(1,1,n,pos+1,b[pos+1]);
      |             ^
horses.cpp:133:28: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  133 |  update(1,1,n,pos+1,b[pos+1]);
      |                     ~~~~~~~^
horses.cpp:135:13: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  135 |  return calc();
      |         ~~~~^~
#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...