# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
649514 | 2022-10-10T11:18:13 Z | ToroTN | Horses (IOI15_horses) | C++14 | 437 ms | 29904 KB |
#include<bits/stdc++.h> using namespace std; #include "horses.h" #define ll long long #define X first #define Y second ll n,x[500005],y[500005],md=1e9+7,nw,fight; ll seg[2000005],val,str,ans,last,mul[2000005],big; void build(ll tree,ll st,ll ed) { ll md=(st+ed)/2; if(st==ed) { seg[tree]=y[ed]; mul[tree]=x[ed]; return; } build(2*tree,st,md); build(2*tree+1,md+1,ed); seg[tree]=max(seg[2*tree],seg[2*tree+1]); mul[tree]=1; if(mul[2*tree]!=0) { mul[tree]=(mul[tree]*mul[2*tree]); mul[tree]%=1000000007; } if(mul[2*tree+1]!=0) { mul[tree]=(mul[tree]*mul[2*tree+1]); mul[tree]%=1000000007; } } void update(ll tree,ll st,ll ed,ll idx,ll val) { ll md=(st+ed)/2; if(st==ed) { seg[tree]=y[idx]; mul[tree]=x[idx]; return; } if(idx<=md) { update(2*tree,st,md,idx,val); }else { update(2*tree+1,md+1,ed,idx,val); } seg[tree]=max(seg[2*tree],seg[2*tree+1]); mul[tree]=1; if(mul[2*tree]!=0) { mul[tree]=(mul[tree]*mul[2*tree]); mul[tree]%=1000000007; } if(mul[2*tree+1]!=0) { mul[tree]=(mul[tree]*mul[2*tree+1]); mul[tree]%=1000000007; } } ll query(ll tree,ll st,ll ed,ll l,ll r) { ll md=(st+ed)/2; if(st>r||ed<l)return -1e9; if(st>=l&&ed<=r)return seg[tree]; return max(query(2*tree,st,md,l,r),query(2*tree+1,md+1,ed,l,r)); } ll query2(ll tree,ll st,ll ed,ll l,ll r) { ll md=(st+ed)/2; if(st>r||ed<l)return 1; if(st>=l&&ed<=r)return mul[tree]; return (query2(2*tree,st,md,l,r)*query2(2*tree+1,md+1,ed,l,r))%1000000007; } set<ll> s; stack<pair<ll,ll> > stk; ll solve() { for(auto it=s.begin();it!=s.end();it++) { stk.push({*it,query(1,1,n,(*it)+1,n)}); } nw=n; str=y[n]; ans=str; while(!stk.empty()) { fight=stk.top().X; val=stk.top().Y; //printf("%lld %lld\n",fight,val); stk.pop(); if(str>1e9) { str=1e18; ans*=x[nw]; ans%=md; }else { if(val>str*x[nw]) { str=val; ans=val; }else { str*=x[nw]; ans*=x[nw]; ans%=md; } } if(y[fight]>str) { str=y[fight]; ans=y[fight]; } nw=fight; } big=query2(1,1,n,1,nw); //printf("%lld\n",big); if(str>1e9) { str=1e18; ans*=big; ans%=md; return ans; }else { last=seg[1]; if(last>str*big) { return last; }else { ans*=big; ans%=md; return ans; } } } int init(int N, int X[], int Y[]) { n=N; for(int i=1;i<=n;i++) { x[i]=X[i-1]; y[i]=Y[i-1]; } build(1,1,n); for(int i=1;i<n;i++) { if(x[i]>1)s.insert(i); if((int)s.size()>20) { if(s.find(*s.begin())!=s.end()) { s.erase(s.begin()); } } } return solve(); } int updateX(int pos, int val) { ++pos; x[pos]=val; update(1,1,n,pos,val); if(pos<n) { if(x[pos]>1) { s.insert(pos); }else { if(s.find(pos)!=s.end()) { s.erase(pos); } } if(s.size()>20) { if(s.find(*s.begin())!=s.end()) { s.erase(*s.begin()); } } } return solve(); } int updateY(int pos, int val) { ++pos; y[pos]=val; update(1,1,n,pos,val); return solve(); }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 340 KB | Output is correct |
2 | Correct | 1 ms | 312 KB | Output is correct |
3 | Correct | 1 ms | 212 KB | Output is correct |
4 | Correct | 1 ms | 212 KB | Output is correct |
5 | Correct | 1 ms | 212 KB | Output is correct |
6 | Correct | 0 ms | 212 KB | Output is correct |
7 | Correct | 1 ms | 212 KB | Output is correct |
8 | Correct | 1 ms | 212 KB | Output is correct |
9 | Correct | 0 ms | 212 KB | Output is correct |
10 | Correct | 1 ms | 212 KB | Output is correct |
11 | Correct | 1 ms | 312 KB | Output is correct |
12 | Correct | 1 ms | 212 KB | Output is correct |
13 | Correct | 1 ms | 212 KB | Output is correct |
14 | Correct | 1 ms | 212 KB | Output is correct |
15 | Correct | 1 ms | 212 KB | Output is correct |
16 | Correct | 1 ms | 212 KB | Output is correct |
17 | Correct | 1 ms | 304 KB | Output is correct |
18 | Correct | 1 ms | 340 KB | Output is correct |
19 | Correct | 1 ms | 340 KB | Output is correct |
20 | Correct | 1 ms | 212 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 212 KB | Output is correct |
2 | Correct | 1 ms | 212 KB | Output is correct |
3 | Correct | 1 ms | 304 KB | Output is correct |
4 | Correct | 1 ms | 308 KB | Output is correct |
5 | Correct | 1 ms | 212 KB | Output is correct |
6 | Correct | 1 ms | 212 KB | Output is correct |
7 | Correct | 1 ms | 212 KB | Output is correct |
8 | Correct | 1 ms | 212 KB | Output is correct |
9 | Correct | 1 ms | 212 KB | Output is correct |
10 | Correct | 1 ms | 304 KB | Output is correct |
11 | Correct | 1 ms | 212 KB | Output is correct |
12 | Correct | 1 ms | 212 KB | Output is correct |
13 | Correct | 1 ms | 212 KB | Output is correct |
14 | Correct | 1 ms | 340 KB | Output is correct |
15 | Correct | 1 ms | 212 KB | Output is correct |
16 | Correct | 1 ms | 212 KB | Output is correct |
17 | Correct | 1 ms | 212 KB | Output is correct |
18 | Correct | 1 ms | 212 KB | Output is correct |
19 | Correct | 1 ms | 212 KB | Output is correct |
20 | Correct | 1 ms | 304 KB | Output is correct |
21 | Correct | 1 ms | 212 KB | Output is correct |
22 | Correct | 1 ms | 212 KB | Output is correct |
23 | Incorrect | 3 ms | 320 KB | Output isn't correct |
24 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 437 ms | 29904 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 212 KB | Output is correct |
2 | Correct | 1 ms | 212 KB | Output is correct |
3 | Correct | 1 ms | 212 KB | Output is correct |
4 | Correct | 0 ms | 340 KB | Output is correct |
5 | Correct | 1 ms | 308 KB | Output is correct |
6 | Correct | 1 ms | 212 KB | Output is correct |
7 | Correct | 1 ms | 308 KB | Output is correct |
8 | Correct | 1 ms | 304 KB | Output is correct |
9 | Correct | 1 ms | 340 KB | Output is correct |
10 | Correct | 1 ms | 304 KB | Output is correct |
11 | Correct | 1 ms | 212 KB | Output is correct |
12 | Correct | 1 ms | 212 KB | Output is correct |
13 | Correct | 0 ms | 212 KB | Output is correct |
14 | Correct | 1 ms | 212 KB | Output is correct |
15 | Correct | 1 ms | 212 KB | Output is correct |
16 | Correct | 1 ms | 304 KB | Output is correct |
17 | Correct | 1 ms | 212 KB | Output is correct |
18 | Correct | 1 ms | 308 KB | Output is correct |
19 | Correct | 1 ms | 212 KB | Output is correct |
20 | Correct | 1 ms | 212 KB | Output is correct |
21 | Correct | 1 ms | 308 KB | Output is correct |
22 | Correct | 1 ms | 212 KB | Output is correct |
23 | Incorrect | 3 ms | 340 KB | Output isn't correct |
24 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 340 KB | Output is correct |
2 | Correct | 1 ms | 212 KB | Output is correct |
3 | Correct | 1 ms | 212 KB | Output is correct |
4 | Correct | 1 ms | 212 KB | Output is correct |
5 | Correct | 1 ms | 212 KB | Output is correct |
6 | Correct | 1 ms | 212 KB | Output is correct |
7 | Correct | 1 ms | 212 KB | Output is correct |
8 | Correct | 1 ms | 212 KB | Output is correct |
9 | Correct | 1 ms | 212 KB | Output is correct |
10 | Correct | 1 ms | 308 KB | Output is correct |
11 | Correct | 1 ms | 212 KB | Output is correct |
12 | Correct | 1 ms | 304 KB | Output is correct |
13 | Correct | 1 ms | 384 KB | Output is correct |
14 | Correct | 1 ms | 212 KB | Output is correct |
15 | Correct | 1 ms | 212 KB | Output is correct |
16 | Correct | 1 ms | 212 KB | Output is correct |
17 | Correct | 1 ms | 340 KB | Output is correct |
18 | Correct | 0 ms | 212 KB | Output is correct |
19 | Correct | 1 ms | 212 KB | Output is correct |
20 | Correct | 1 ms | 304 KB | Output is correct |
21 | Correct | 1 ms | 212 KB | Output is correct |
22 | Correct | 1 ms | 304 KB | Output is correct |
23 | Incorrect | 4 ms | 340 KB | Output isn't correct |
24 | Halted | 0 ms | 0 KB | - |