社区讨论

线段树WA80

P1531I Hate It参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m1ucsbix
此快照首次捕获于
2024/10/04 14:37
去年
此快照最后确认于
2024/10/04 15:57
去年
查看原帖
WA on #2 #9
CPP
#include <bits/stdc++.h>
using namespace std;
const int maxn = 200005;
int n, m;
int w[maxn * 4], a[maxn];
bool InRange(int L, int R, int l, int r)
{
  return (L >= l) && (R <= r);
}
bool OutofRange(int L, int R, int l, int r)
{
  return (L > r) || (R < l);
}
void pushup(int u)
{
  w[u] = max(w[u * 2], w[u * 2 + 1]);
}
void build(int u, int L, int R)
{
  if (L == R)
  {
      w[u] = a[L];
      return;
  }
  int M = (L + R) / 2;
  build(u * 2, L, M);
  build(u * 2 + 1, M + 1, R);
  pushup(u);
}
void insert(int u, int L, int R, int l, int x)
{
  if (L == R)
  {
      w[u] = max(w[u], x);
      return;
  }
  else if ((L<=l)&&(R>=l))
  {
      int M = (L + R) / 2;
      insert(u * 2, L, M, l, x);
      insert(u * 2 + 1, M + 1, R, l, x);
      pushup(u);
  }
  else
  {
      return;
  }
}
int query(int u, int L, int R, int l, int r)
{
  if (InRange(L, R, l, r))
  {
      return w[u];
  }
  else if (!OutofRange(L, R, l, r))
  {
      int M = (L + R) / 2;
      return max(query(u * 2, L, M, l, r), query(u * 2 + 1, M + 1, R, l, r));
  }
  else
  {
      return 0;
  }
}
int main()
{
  cin >> n >> m;
  for (int i = 1; i <= n; i++)
  {
      cin >> a[i];
  }
  build(1, 1, n);
  char op;
  int x, y;
  for (int i = 1; i <= m; i++)
  {
      cin >> op >> x >> y;
      if (op == 'Q')
      {
          cout << query(1, 1, n, x, y) << endl;
      }
      else
      {
          insert(1, 1, n, x, y);
      }
  }
  return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...