Submission #1197737

#TimeUsernameProblemLanguageResultExecution timeMemory
1197737abdelhakimHorses (IOI15_horses)C++20
17 / 100
41 ms28744 KiB
#include <bits/stdc++.h> #include "horses.h" using namespace std; #define ll long long #define mod (ll)(1e9+7) #define inf (ll)(1e18) #define dbg(x) cerr << #x<< ' '<<x << endl; ll maxn = 5e5; vector<ll> tree(4*maxn+7,1); ll n=0; vector<ll> x; vector<ll> y; void update(ll node, ll l, ll r, ll pos, ll val) { if(r<l)return; if(pos < l || pos > r) { return; } if(l==r) { tree[node]=val;return; } ll mid=(l+r)/2; update(node*2+1,l,mid,pos,val); update(node*2+2,mid+1,r,pos,val); tree[node]=tree[node*2+1]*tree[node*2+2]%mod; } ll query(ll node, ll l, ll r, ll x, ll y) { if(max(l,x)>min(r,y)) { return 1; } if(x<=l && r<=y) { return tree[node]; } ll mid=(l+r)/2; return query(node*2+1,l,mid,x,y)%mod*query(node*2+2,mid+1,r,x,y)%mod; } int init(int N, int X[], int Y[]) { x.resize(N); y.resize(N); for (int i = 0;i<N;i++) { x[i]=X[i]; y[i]=Y[i]; } n=N; ll ans=0; ll cur=1; for (int i = max(0,N-30);i<N;i++) { cur*=x[i]; ans=max(ans,y[i]*cur); } ans%=mod; ll cur2 = query(0,0,n-1,0,max(0,N-31)); cur2%=mod; int lst = ans%mod*(cur2%mod)%mod; return lst; } int updateX(int ops, int val) { x[ops]=val; update(0,0,n-1,ops,x[ops]); ll ans=0; ll cur=1; for (int i = max(0,(int)n-30);i<n;i++) { cur*=x[i]; ans=max(ans,y[i]*cur); } ans%=mod; ll cur2 = query(0,0,n-1,0,max(0,(int)n-31)); cur2%=mod; int lst = ans%mod*(cur2%mod)%mod; return lst; } int updateY(int ops, int val) { y[ops]=val; ll ans=0; ll cur=1; for (int i = max(0,(int)n-30);i<n;i++) { cur*=x[i]; ans=max(ans,y[i]*cur); } ans%=mod; ll cur2 = query(0,0,n-1,0,max(0,(int)n-31)); cur2%=mod; int lst = ans%mod*(cur2%mod)%mod; return lst; }
#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...