Submission #288368

#TimeUsernameProblemLanguageResultExecution timeMemory
288368KastandaHorses (IOI15_horses)C++11
100 / 100
183 ms50296 KiB
// M #include<bits/stdc++.h> #include "horses.h" #define lc (id << 1) #define rc (lc ^ 1) #define md ((l + r) >> 1) using namespace std; typedef long long ll; const int N = 500005, Mod = 1e9 + 7; const ll INF = 1e9 + 100; struct Data {int rs, mlx; ll pref, suff, opty, multx;}; int n, X[N], Y[N]; Data D[N * 4]; inline void Recalc(int id) { D[id].mlx = D[lc].mlx * (ll)D[rc].mlx % Mod; D[id].multx = min(D[lc].multx * (ll)D[rc].multx, INF); if (D[lc].opty > D[lc].suff * (ll)D[rc].pref) { D[id].opty = D[lc].opty; D[id].rs = D[lc].rs; D[id].pref = D[lc].pref; D[id].suff = min((ll)D[lc].suff * D[rc].multx, INF); } else { D[id].opty = D[rc].opty; D[id].rs = D[lc].mlx * (ll)D[rc].rs % Mod; D[id].pref = min(D[lc].multx * (ll)D[rc].pref, INF); D[id].suff = D[rc].suff; } } void Build(int id = 1, int l = 0, int r = n) { if (r - l < 2) { D[id].rs = (ll)X[l] * Y[l] % Mod; D[id].mlx = X[l] % Mod; D[id].multx = min((ll)X[l], INF); D[id].pref = min((ll)X[l] * Y[l], INF); D[id].suff = 1LL; D[id].opty = Y[l]; return ; } Build(lc, l, md); Build(rc, md, r); Recalc(id); } void UpdXVal(int i, int id = 1, int l = 0, int r = n) { if (r - l < 2) { D[id].rs = (ll)X[l] * Y[l] % Mod; D[id].mlx = X[l] % Mod; D[id].multx = min((ll)X[l], INF); D[id].pref = min((ll)X[l] * Y[l], INF); D[id].suff = 1LL; D[id].opty = Y[l]; return ; } if (i < md) UpdXVal(i, lc, l, md); else UpdXVal(i, rc, md, r); Recalc(id); } int init(int _n, int _X[], int _Y[]) { n = _n; for (int i = 0; i < n; i ++) X[i] = _X[i], Y[i] = _Y[i]; Build(); return D[1].rs; } int updateX(int pos, int val) { X[pos] = val; UpdXVal(pos); return D[1].rs; } int updateY(int pos, int val) { Y[pos] = val; UpdXVal(pos); return D[1].rs; }

Compilation message (stderr)

horses.cpp: In function 'void Recalc(int)':
horses.cpp:16:47: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   16 |         D[id].mlx = D[lc].mlx * (ll)D[rc].mlx % Mod;
      |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
horses.cpp:28:53: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   28 |                 D[id].rs = D[lc].mlx * (ll)D[rc].rs % Mod;
      |                            ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
horses.cpp: In function 'void Build(int, int, int)':
horses.cpp:37:44: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   37 |                 D[id].rs = (ll)X[l] * Y[l] % Mod;
      |                            ~~~~~~~~~~~~~~~~^~~~~
horses.cpp: In function 'void UpdXVal(int, int, int, int)':
horses.cpp:53:44: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   53 |                 D[id].rs = (ll)X[l] * Y[l] % Mod;
      |                            ~~~~~~~~~~~~~~~~^~~~~
#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...