Submission #1197821

#TimeUsernameProblemLanguageResultExecution timeMemory
1197821orzdraiduwu말 (IOI15_horses)C++20
17 / 100
1596 ms8256 KiB
#include <bits/stdc++.h>
#include "horses.h"

using namespace std;
#define pb push_back
// #define log log2
// #define int long long
using ll = long long;
// const int INF = 1e12;
const int INF = 1e17;
const int MOD = 1e9 + 7;
vector<int> x, y;
int _init() {
  int n = x.size();
  if(n == 1) return (x[0]*y[0])%MOD;
  int a = 0;
  // long double u = 0;
  ll u = 0;
  for(int i = n-1 ; i >= 0 ; i--) {
    if(u < y[i]) {
      u = x[i] * y[i];
      a = i;
    }

    else u *= x[i];
    if(u > INF) break;
  }
  
  ll res = 1;
  for(int i = 0 ; i <= a ; i++) { // sob
    // res = max()
    res *= x[i];
    res %= MOD;
  }

  return (int)(res%MOD * y[a]%MOD)%MOD;
}

int init(int N, int X[], int Y[]) {
  // int id = 0;
  x.resize(N);
  y.resize(N);
  for(int i = 0 ; i < N ; i++) x[i] = X[i];
  for(int i = 0 ; i < N ; i++) y[i] = Y[i];
  return _init();
}

int updateX(int pos, int val) {
  x[pos] = val;
  return _init();
}

int updateY(int pos, int val) {
  y[pos] = val;
  return _init();
}

Compilation message (stderr)

horses.cpp:10:17: warning: overflow in conversion from 'double' to 'int' changes value from '1.0e+17' to '2147483647' [-Woverflow]
   10 | const int INF = 1e17;
      |                 ^~~~
#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...