Submission #1174772

#TimeUsernameProblemLanguageResultExecution timeMemory
1174772rafsanamin2020Simple game (IZhO17_game)C++20
0 / 100
10 ms19780 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAX = 1E6 + 11;

vector<int> tree(4 * MAX + 1, 0);
vector<int> val(MAX + 1, 0);

void update(int l, int r, bool del, int at = 1, int lo = 1, int hi = MAX)
{
  int lc = at * 2, rc = at * 2 + 1, mid = (lo + hi) / 2;

  int temp = min(l, r);
  r = max(l, r);
  l = temp;

  if (l == lo && r == hi)
  {
    if (!del)
    {
      tree[at]++;
    }
    else
    {
      tree[at]--;
    }
    return;
  }
  else if (l >= lo && r <= hi)
  {

    update(l, min(r, mid), del, lc, lo, mid);
    update(max(l, mid + 1), r, del, rc, mid + 1, hi);
  }
}

int query(int v, int at = 1, int lo = 1, int hi = MAX)
{
  int lc = at * 2, rc = at * 2 + 1, mid = (lo + hi) / 2;
  if (v > hi || v < lo)
  {
    return 0;
  }
  if (lo == hi || hi == v)
  {
    return tree[at];
  }
  return tree[at] + query(v, lc, lo, mid) + query(v, rc, mid + 1, hi);
}

int main()
{
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int N, M;
  cin >> N >> M;

  for (int i = 0; i < N; i++)
    cin >> val[i];

  for (int i = 0; i < N - 1; i++)
  {
    update(val[i], val[i + 1], false);
  }

  for (int i = 0; i < M; i++)
  {
    int t;
    cin >> t;
    if (t == 1)
    {
      int j, v;
      cin >> j >> v;
      j--;
      // delete ager value
      update(val[j], val[j + 1], true);
      update(val[j - 1], val[j], true);
      // add  new value
      update(val[j - 1], v, false);
      update(v, val[j + 1], false);

      val[j] = v;
    }
    else
    {
      int k;
      cin >> k;
      cout << query(k) << "\n";
    }
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...