Submission #1098687

#TimeUsernameProblemLanguageResultExecution timeMemory
1098687TymondHorses (IOI15_horses)C++17
17 / 100
1561 ms26488 KiB
#include <bits/stdc++.h> #include "horses.h" using namespace std; using ll = long long; using ld = long double; #define fi first #define se second #define vi vector<int> #define vll vector<long long> #define pii pair<int, int> #define pll pair<long long, long long> #define pb push_back #define mp make_pair #define eb emplace_back #define all(x) (x).begin(), (x).end() #define sz(x) (int)(x).size() mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); mt19937_64 rng64(chrono::high_resolution_clock::now().time_since_epoch().count()); inline int rand(int l,int r){return uniform_int_distribution<int>(l, r)(rng);} inline ll rand(ll l,ll r){return uniform_int_distribution<ll>(l, r)(rng64);} #ifdef DEBUG auto&operator<<(auto&o,pair<auto,auto>p){return o<<"("<<p.first<<", "<<p.second<<")";} auto operator<<(auto&o,auto x)->decltype(x.end(),o){o<<"{";int i=0;for(auto e:x)o<<","+!i++<<e;return o<<"}";} #define debug(X...)cerr<<"["#X"]: ",[](auto...$){((cerr<<$<<"; "),...)<<endl;}(X) #else #define debug(...){} #endif struct custom_hash { static uint64_t splitmix64(uint64_t x) { x += 0x9e3779b97f4a7c15; x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; x = (x ^ (x >> 27)) * 0x94d049bb133111eb; return x ^ (x >> 31); } size_t operator()(uint64_t x) const { static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count(); return splitmix64(x + FIXED_RANDOM); } }; const int MOD = 1e9 + 7; const int MAXN = 5e5 + 7; const int BASE = (1 << 19); ll tree[2 * BASE + 7]; ll lazy[2 * BASE + 7]; int Y[MAXN]; int X[MAXN]; int n; ll inv(ll a){ if(a <= 1){ return a; } return MOD - (ll)(MOD / a) * inv(MOD % a) % MOD; } void Push(int v){ tree[2 * v] = (ll)tree[2 * v] * lazy[v]; tree[2 * v] %= MOD; tree[2 * v + 1] = (ll)tree[2 * v + 1] * lazy[v]; tree[2 * v + 1] %= MOD; lazy[v] = 1LL; } int init(int N, int Xn[], int Yn[]){ n = N; for(int i = 0; i < n; i++){ X[i] = Xn[i]; Y[i] = Yn[i]; } for(int i = 1; i < 2 * BASE + 7; i++){ lazy[i] = 1LL; } ll mul = 1LL; for(int i = 0; i < n; i++){ mul = (ll)mul * X[i]; mul %= MOD; tree[i + BASE] = (ll)mul * Y[i]; tree[i + BASE] %= MOD; } for(int i = BASE - 1; i >= 1; i--){ tree[i] = max(tree[2 * i], tree[2 * i + 1]); } return (int)tree[1]; } void change(int v, int l, int p, int a, int b, ll val){ if(p < a || b < l){ return; } if(a <= l && p <= b){ tree[v] = (ll)tree[v] * val; tree[v] %= MOD; lazy[v] = (ll)lazy[v] * val; lazy[v] %= MOD; return; } Push(v); int mid = (l + p) / 2; change(2 * v, l, mid ,a ,b ,val); change(2 * v + 1, mid + 1, p, a, b, val); tree[v] = max(tree[2 * v], tree[2 * v + 1]); } int updateX(int pos, int val){ X[pos] = val; ll ans = 0LL; ll mul = 1LL; for(int i = 0; i < n; i++){ mul = (ll)mul * X[i] % MOD; ans = max(ans, (ll)mul * Y[i] % MOD); } return ans; } int updateY(int pos, int val){ Y[pos] = val; ll ans = 0LL; ll mul = 1LL; for(int i = 0; i < n; i++){ mul = (ll)mul * X[i] % MOD; ans = max(ans, (ll)mul * Y[i] % MOD); } return ans; } /*int main(){ int p[3] = {2, 1, 3}; int d[3] = {3, 4, 1}; cout << init(3, p, d) << '\n'; cout << updateY(1, 2) << '\n'; return 0; }*/

Compilation message (stderr)

horses.cpp: In function 'int updateX(int, int)':
horses.cpp:122:12: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  122 |     return ans;
      |            ^~~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:134:12: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  134 |     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...