이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "horses.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define fi first
#define se second
constexpr int MAXN = 1 << 2;
constexpr int MOD = 1e9 + 7;
pair<int, bool> segX[2 * MAXN];
int* Y;
int segM[2 * MAXN];
pair<int, bool> joinX(pair<int, bool>& a, pair<int, bool>& b) {
ll r = 1ll * a.fi * b.fi;
bool o = (r >= MOD) || a.se || b.se;
return make_pair(r % MOD, o);
}
pair<int, bool> queryX(int l, int r) {
pair<int, bool> ans{1, false};
for (l += MAXN, r += MAXN; l < r; l /= 2, r /= 2) {
if (l & 1) ans = joinX(ans, segX[l++]);
if (r & 1) ans = joinX(ans, segX[--r]);
}
return ans;
}
int joinM(int a, int b) {
pair<int, bool> mulX = queryX(a + 1, b + 1);
if (mulX.se) return b;
return Y[a] > 1ll * mulX.fi * Y[b] ? a : b;
}
int init(int N, int* X, int*_Y) {
Y =_Y;
for (int i = 0; i < N; i++) {
segX[i + MAXN] = make_pair(X[i], false);
}
iota(segM + MAXN, segM + 2 * MAXN, 0);
for (int i = MAXN - 1; i > 0; i--) {
segX[i] = joinX(segX[2 * i], segX[2 * i + 1]);
segM[i] = joinM(segM[2 * i], segM[2 * i + 1]);
}
return 1ll * queryX(0, segM[1] + 1).fi * Y[segM[1]] % MOD;
}
int updateX(int pos, int val) {
for (segX[pos += MAXN] = make_pair(val, false); pos > 1; pos /= 2) {
segX[pos / 2] = joinX(segX[pos & -2], segX[pos | 1]);
segM[pos / 2] = joinM(segM[pos & -2], segM[pos | 1]);
}
return 1ll * queryX(0, segM[1] + 1).fi * Y[segM[1]] % MOD;
}
int updateY(int pos, int val) {
for (Y[pos] = val, pos += MAXN; pos > 1; pos /= 2) {
segX[pos / 2] = joinX(segX[pos & -2], segX[pos | 1]);
segM[pos / 2] = joinM(segM[pos & -2], segM[pos | 1]);
}
return 1ll * queryX(0, segM[1] + 1).fi * Y[segM[1]] % MOD;
}
컴파일 시 표준 에러 (stderr) 메시지
horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:46:54: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
return 1ll * queryX(0, segM[1] + 1).fi * Y[segM[1]] % MOD;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:54:54: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
return 1ll * queryX(0, segM[1] + 1).fi * Y[segM[1]] % MOD;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:62:54: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
return 1ll * queryX(0, segM[1] + 1).fi * Y[segM[1]] % MOD;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |