Submission #437678

#TimeUsernameProblemLanguageResultExecution timeMemory
437678dutchHorses (IOI15_horses)C++17
17 / 100
758 ms53584 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #include "horses.h" const int MOD = 1e9+7; template<class T> struct SegmentTree{ function<T(T, T)> comb = [](T u, T v){ return ((u % MOD) * (v % MOD)) % MOD; }; T ID = 1; int n = 1, i; vector<T> a; void init(int N){ while((n+=n) < N); a.assign(2*n, ID); } SegmentTree& operator[](int j){ i=j+n; return *this; } void operator=(T v){ for(a[i]=v; i/=2; ) a[i] = comb(a[2*i], a[2*i+1]); } T operator()(int l, int r){ T lx = ID, rx = ID; for(l+=n, r+=n+1; l<r; l/=2, r/=2){ if(l & 1) lx = comb(lx, a[l++]); if(r & 1) rx = comb(a[--r], rx); } return comb(lx, rx); } }; int n; SegmentTree<ll> x; SegmentTree<int> y; set<int> s; int find(){ vector<array<int, 2>> a; int cnt = 0, j = n; s.insert(0); for(int i : s){ if(++cnt > 32) break; a.push_back({-i, y(-i, j-1)}); j = -i; } reverse(a.begin(), a.end()); array<ll, 3> c = {1, 0, 0}; for(auto &i : a){ c[0] *= x(i[0], i[0]); if(c[0] * i[1] > c[2]){ c[2] = c[0] * i[1]; c[1] = ((x(0, i[0]) % MOD) * i[1]) % MOD; } } return c[1]; } int init(int N, int X[], int Y[]){ x.init(n=N); y.init(n); y.ID = -1; y.comb = [](int u, int v){ return max(u, v); }; for(int i=0; i<n; ++i){ y[i] = Y[i]; x[i] = X[i]; if(X[i] > 1) s.insert(-i); } return find(); } int updateX(int i, int v){ auto f = s.find(-i); if(v < 2 && f != s.end()) s.erase(f); if(v > 1) s.insert(-i); x[i] = v; return find(); } int updateY(int i, int v){ y[i] = v; return find(); }

Compilation message (stderr)

horses.cpp: In function 'int find()':
horses.cpp:48:12: warning: conversion from 'std::array<long long int, 3>::value_type' {aka 'long long int'} to 'int' may change value [-Wconversion]
   48 |  return c[1];
      |            ^
#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...