线段树求助
  • 板块题目总版
  • 楼主cmaths
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/6/3 17:27
  • 上次更新2023/10/28 00:01:27
查看原帖
线段树求助
300098
cmaths楼主2022/6/3 17:27

题目链接

#include <cstdio>
#include <iostream>
#include <algorithm>
typedef long long ll;
typedef unsigned long long ull;

using namespace std;

struct orz
{
	int l, r, num;
}c[800010];
void pushup(int p)
{
	c[p].num = max(c[p * 2].num, c[p * 2 + 1].num);
}
void update(int p, int x, int v)
{
	if(c[p].l == x && c[p].r == x)
	{
		c[p].num = v;
		return;
	}
	int mid = (c[p].l + c[p].r) / 2;
	if(x <= mid)
	{
		update(p * 2, x, v);
	}
	else
	{
		update(p * 2 + 1, x, v);
	}
	pushup(p);
}
int query(int p, int l, int r)
{
	if(c[p].l >= l && c[p].r <= r)
	{
		return c[p].num;
	}
	int ans = -1;
	int mid = (c[p].l + c[p].r) / 2;
	if(l <= mid)
	{
		ans = max(ans, query(p * 2, l, r));
	}
	if(r > mid)
	{
		ans = max(ans, query(p * 2 + 1, l, r));
	}
	return ans;
}
int main()
{
	int m, p;
	scanf("%d %d", &m, &p);
	int L = 0, a = 0;
	while(m--)
	{
		string op;
		cin >> op;
		if(op == "Q")
		{
			int l;
			scanf("%d", &l);
			a = query(1, L - l + 1, L);
			printf("%d\n", a);
		}
		else
		{
			int t;
			scanf("%d", &t);
			update(1, ++L, (t + a) % p);
		}
	}
	return 0;
}

样例过了,洛谷线段树1这份代码也过了,但是全Wa/kk

求助

2022/6/3 17:27
加载中...