Submission #620809

#TimeUsernameProblemLanguageResultExecution timeMemory
620809aminHorses (IOI15_horses)C++14
34 / 100
1573 ms38960 KiB
#include "horses.h" #include<bits/stdc++.h> using namespace std; long long x[500001]; long long seg[1000002],segg[1000002],mu[1000002]; long long y[500001]; long long h=(1e9+1); long long mod=1e9+7; void build(long v,long tl,long tr) { if(tl==tr) { seg[v]=x[tl]; mu[v]=seg[v]; return ; } long tm=(tl+tr)/2; build(v*2,tl,tm); build(v*2+1,tm+1,tr); seg[v]=seg[v*2]*seg[v*2+1]; mu[v]=(mu[v*2]*mu[v*2+1])%mod; if(seg[v]>h) { seg[v]=h; } } void update(long v,long tl,long tr,long in) { if(tl==tr&&tl==in) { seg[v]=x[in]; mu[v]=seg[v]; return ; } long tm=(tl+tr)/2; if(tm>=in) { update(v*2,tl,tm,in); }else { update(v*2+1,tm+1,tr,in); } seg[v]=seg[v*2]*seg[v*2+1]; mu[v]=(mu[v*2]*mu[v*2+1])%mod; if(seg[v]>h) { seg[v]=h; } } long long get(long v,long tl,long tr,long l,long r) { if(l==tl&&r==tr) { return seg[v]; } long tm=(tl+tr)/2; if(r<=tm) { return get(v*2,tl,tm,l,r); } if(l>tm) { return get(v*2+1,tm+1,tr,l,r); } long long j=get(v*2,tl,tm,l,tm)*get(v*2+1,tm+1,tr,tm+1,r); if(j>h) { j=h; } return j; } long n; void build2(long v,long tl,long tr) { if(tl==tr) { segg[v]=tl; return ; } long tm=(tl+tr)/2; build2(v*2,tl,tm); build2(v*2+1,tm+1,tr); long long a=segg[v*2]; long long b=segg[v*2+1]; // cout<<a<<' '<<b<<' '; // cout<<y[a]<<' '<<y[b]*get(1,0,n-1,a+1,b)<<endl; if(y[a]>(y[b]*get(1,0,n-1,a+1,b))) { segg[v]=a; }else { segg[v]=b; } } void update2(long v,long tl,long tr,long in) { if(tl==tr) { segg[v]=tl; return ; } long tm=(tl+tr)/2; if(tm>=in) { update2(v*2,tl,tm,in); }else { update2(v*2+1,tm+1,tr,in); } long long a=segg[v*2]; long long b=segg[v*2+1]; // cout<<a<<' '<<b<<' '; // cout<<y[a]<<' '<<y[b]*get(1,0,n-1,a+1,b)<<endl; if(y[a]>(y[b]*get(1,0,n-1,a+1,b))) { segg[v]=a; }else { segg[v]=b; } } long long get2(long v,long tl,long tr,long l,long r) { if(l==tl&&r==tr) { return mu[v]; } long tm=(tl+tr)/2; if(r<=tm) { return get2(v*2,tl,tm,l,r); } if(l>tm) { return get2(v*2+1,tm+1,tr,l,r); } long long j=(get2(v*2,tl,tm,l,tm)*get2(v*2+1,tm+1,tr,tm+1,r))%mod; return j; } int init(int N, int X[], int Y[]) { // cout<<mod<<endl; n=N; for(long i=0;i<n;i++) { x[i]=X[i]; y[i]=Y[i]; } build(1,0,n-1); build2(1,0,n-1); long long ans=((get2(1,0,n-1,0,segg[1])*y[segg[1]])%mod); return ans; } int updateX(int pos, int val) { // pos--; x[pos]=val; update(1,0,n-1,pos); update2(1,0,n-1,pos); // build(1,0,n-1); //build2(1,0,n-1); long long ans=((get2(1,0,n-1,0,segg[1])*y[segg[1]])%mod); return ans; } int updateY(int pos, int val) { // pos--; y[pos]=val; update(1,0,n-1,pos); update2(1,0,n-1,pos); // build(1,0,n-1); //build2(1,0,n-1); long long ans=((get2(1,0,n-1,0,segg[1])*y[segg[1]])%mod); return ans; }

Compilation message (stderr)

horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:160:9: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  160 |  return ans;
      |         ^~~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:171:9: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  171 |  return ans;
      |         ^~~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:182:9: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  182 |  return ans;
      |         ^~~
#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...