Submission #1010252

#TimeUsernameProblemLanguageResultExecution timeMemory
1010252hotboy2703Horses (IOI15_horses)C++17
0 / 100
296 ms53844 KiB
#include "horses.h" #include<bits/stdc++.h> using namespace std; using ll = long long; #define pll pair <ll,ll> #define fi first #define se second #define MP make_pair #define sz(a) (ll((a).size())) #define BIT(mask,i) (((mask) >> (i))&1) #define MASK(i) (1LL << (i)) set <ll> bigX; const ll MAXN = 5e5+100; const ll MOD = 1e9 + 7; ll n; set <ll> s; namespace X{ ll tree[MAXN*4]; ll a[MAXN]; void build(ll id,ll l,ll r){ if (l==r)tree[id] = a[l]; else{ ll mid = (l + r) >> 1; build(id<<1,l,mid); build(id<<1|1,mid+1,r); tree[id] = tree[id<<1] * tree[id<<1|1] % MOD; } } void update(ll id,ll l,ll r,ll i){ if (l > i || r < i)return; if (l == r){ tree[id] = a[l]; return; } ll mid = (l + r) >> 1; update(id<<1,l,mid,i); update(id<<1|1,mid+1,r,i); tree[id] = tree[id<<1] * tree[id<<1|1] % MOD; } ll get(ll id,ll l,ll r,ll i){ if (l > i)return 1; if (r <= i)return tree[id]; ll mid = (l + r) >> 1; return get(id<<1,l,mid,i)*get(id<<1|1,mid+1,r,i)%MOD; } void init(int X[]){ for (ll i = 0;i < n;i ++)a[i] = X[i]; for (ll i = 0;i < n;i ++){ if (a[i] > 1)s.insert(i); } build(1,0,n-1); } void update(ll pos,ll val){ s.erase(pos); a[pos]=val; if (val > 1)s.insert(pos); update(1,0,n-1,val); } ll get(ll x){ return get(1,0,n-1,x); } } namespace Y{ ll a[MAXN]; ll tree[MAXN]; ll better(ll x,ll y){ if (x==-1)return y; if (y==-1)return x; if (a[x] > a[y])return x; return y; } void build(ll id,ll l,ll r){ if (l==r)tree[id] = l; else{ ll mid = (l + r) >> 1; build(id<<1,l,mid); build(id<<1|1,mid+1,r); tree[id] = better(tree[id<<1],tree[id<<1|1]); } } void update(ll id,ll l,ll r,ll i){ if (l > i || r < i)return; if (l == r){ return; } ll mid = (l + r) >> 1; update(id<<1,l,mid,i); update(id<<1|1,mid+1,r,i); tree[id] = better(tree[id<<1],tree[id<<1|1]); } ll get(ll id,ll l,ll r,ll l1,ll r1){ if (l > r1 || l1 > r)return -1; if (l1 <= l && r <= r1)return tree[id]; ll mid = (l + r) >> 1; return better(get(id<<1,l,mid,l1,r1),get(id<<1|1,mid+1,r,l1,r1)); } void init(int Y[]){ for (ll i = 0;i < n;i ++)a[i] = Y[i]; build(1,0,n-1); } void update(ll pos,ll val){ a[pos] = val; update(1,0,n-1,pos); } ll get(ll l,ll r){ return get(1,0,n-1,l,r); } } ll solve(){ ll best = 0; ll best_id = -1; ll last = n; s.insert(1); for (auto it = s.rbegin();it != s.rend();it ++){ ll tmp = Y::get(*it,last-1); if (Y::a[tmp] > best){ best = Y::a[tmp]; best_id = tmp; } best *= X::a[*it]; const static ll INF = 1e9; if (best > INF){ break; } last = *it; } s.erase(1); cout<<best_id<<'\n'; return Y::a[best_id] * X::get(best_id) % MOD; } int init(int N, int X[], int Y[]) { n=N; X::init(X); Y::init(Y); return solve(); } int updateX(int pos, int val) { X::update(pos,val); return solve(); } int updateY(int pos, int val) { Y::update(pos,val); return solve(); }

Compilation message (stderr)

horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:136:14: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  136 |  return solve();
      |         ~~~~~^~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:141:14: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  141 |  return solve();
      |         ~~~~~^~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:146:14: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  146 |  return solve();
      |         ~~~~~^~
#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...