답안 #890700

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
890700 2023-12-21T18:47:37 Z AkibAzmain 말 (IOI15_horses) C++17
34 / 100
1500 ms 24508 KB
#include <bits/stdc++.h>
#include "horses.h"
using namespace std;
using ll = long long;

const ll MOD = ((ll) 1e9) + 7;

ll n;
vector < ll > ma;
vector < ll > bit;
int sts = 1;
vector < ll > mst;
set < ll > cs;

ll
binpow (ll a, ll b)
{
  ll ans = 1;
  while (b)
    {
      if (b % 2) (ans *= a) %= MOD;
      b /= 2;
      if (b) (a *= a) %= MOD;
    }
  return ans;
}

ll
bitp (ll x)
{
  ll ans = 1;
  for (int i = 0; i <= x; ++i) (ans *= ma[i]) %= MOD;
  // while (x >= 0)
  //   {
  //     (ans *= bit[x]) %= MOD;
  //     x -= (x + 1) & -(x + 1);
  //   }
  return ans;
}

ll
bitr (ll l, ll r)
{
  ll ans = bitp (r);
  if (l) (ans *= binpow (bitp (l - 1), MOD - 2)) %= MOD;
  return ans;
}

ll
stm (ll l, ll r)
{
  l += sts, r += sts;
  ll mx = -1;
  for (int i = l; i <= r; ++i) mx = max (mx, mst[i]);
  // while (l <= r)
  //   {
  //     if (l % 2 == 1) mx = max (mx, mst[l++]);
  //     if (r % 2 == 0) mx = max (mx, mst[r--]);
  //     l /= 2, r /= 2;
  //   }
  return mx;
}

int
calc ()
{
  auto it = cs.end (), pit = prev (it);
  ll vl = 0;
  ll i = n - 1;
  while (vl < MOD)
    {
      vl = max (vl, mst[sts + i]);
      vl *= ma[i];
      --i;
      if (i < 0) break;
      // --it, --pit;
      // vl = max (vl, mst[sts + *it]);
      // vl *= ma[*it];
      // if (vl >= MOD) break;
      // if (*it && *pit + 1 <= *it - 1)
      //   vl = max (vl, stm (*pit + 1, *it - 1));
      // if (!*pit) ++pit;
      // if (!*it) break;
    }
  vl %= MOD;
  if (i >= 0)
    (vl *= bitp (i)) %= MOD;
  // if (*it)
  //   (vl *= bitp (*it - 1)) %= MOD;
  return vl;
}

int init(int N, int x[], int y[]) {
  n = N;
  ma.resize (n);
  bit.resize (n);
  while (sts < n) sts *= 2;
  mst.resize (sts * 2);
  for (int i = 0; i < n; ++i)
    {
      if (x[i] > 1) cs.insert (i);
      ma[i] = x[i];
      mst[sts + i] = y[i];
      bit[i] = x[i] * (i ? bitr (i - ((i + 1) & -(i + 1)) + 1, i - 1) : 1ll);
    }
  for (int i = sts - 1; i > 0; --i) mst[i] = max (mst[i * 2], mst[i * 2 + 1]);
  cs.insert (0);
  cs.insert (n - 1);
  return calc ();
}

int updateX(int pos, int val) {
  cs.erase (pos);
  if (val > 1) cs.insert (pos);
  ll dl = val * binpow (ma[pos], MOD - 2) % MOD;
  ma[pos] = val;
  for (int i = pos; i < n; i += (i + 1) & -(i + 1)) (bit[i] *= dl) %= MOD;
  cs.insert (0);
  cs.insert (n - 1);
  return calc ();
}

int updateY(int pos, int val) {
  int i = sts + pos;
  mst[i] = val;
  for (i /= 2; i > 0; i /= 2) mst[i] = max (mst[i * 2], mst[i * 2 + 1]);
  return calc ();
}

Compilation message

horses.cpp: In function 'll stm(ll, ll)':
horses.cpp:54:16: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   54 |   for (int i = l; i <= r; ++i) mx = max (mx, mst[i]);
      |                ^
horses.cpp: In function 'int calc()':
horses.cpp:90:10: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   90 |   return vl;
      |          ^~
horses.cpp:67:24: warning: variable 'pit' set but not used [-Wunused-but-set-variable]
   67 |   auto it = cs.end (), pit = prev (it);
      |                        ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 1 ms 604 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 0 ms 348 KB Output is correct
23 Correct 9 ms 480 KB Output is correct
24 Correct 9 ms 348 KB Output is correct
25 Correct 10 ms 344 KB Output is correct
26 Correct 9 ms 344 KB Output is correct
27 Correct 9 ms 348 KB Output is correct
28 Correct 9 ms 344 KB Output is correct
29 Correct 7 ms 600 KB Output is correct
30 Correct 9 ms 348 KB Output is correct
31 Correct 7 ms 484 KB Output is correct
32 Correct 8 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1550 ms 21368 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 1 ms 348 KB Output is correct
15 Correct 0 ms 344 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 1 ms 344 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 0 ms 348 KB Output is correct
23 Correct 9 ms 496 KB Output is correct
24 Correct 9 ms 348 KB Output is correct
25 Correct 9 ms 348 KB Output is correct
26 Correct 9 ms 448 KB Output is correct
27 Correct 9 ms 348 KB Output is correct
28 Correct 9 ms 348 KB Output is correct
29 Correct 7 ms 484 KB Output is correct
30 Correct 9 ms 548 KB Output is correct
31 Correct 7 ms 348 KB Output is correct
32 Correct 8 ms 348 KB Output is correct
33 Execution timed out 1567 ms 24508 KB Time limit exceeded
34 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 344 KB Output is correct
10 Correct 1 ms 344 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 1 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 1 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 1 ms 344 KB Output is correct
23 Correct 9 ms 344 KB Output is correct
24 Correct 10 ms 348 KB Output is correct
25 Correct 9 ms 348 KB Output is correct
26 Correct 9 ms 348 KB Output is correct
27 Correct 9 ms 500 KB Output is correct
28 Correct 9 ms 444 KB Output is correct
29 Correct 7 ms 348 KB Output is correct
30 Correct 9 ms 532 KB Output is correct
31 Correct 7 ms 348 KB Output is correct
32 Correct 8 ms 492 KB Output is correct
33 Execution timed out 1527 ms 23380 KB Time limit exceeded
34 Halted 0 ms 0 KB -