大佬救命,样例和额外测试点过了
查看原帖
大佬救命,样例和额外测试点过了
1042314
AIBEYOND楼主2024/3/14 21:18

大佬救命,样例和额外测试点过了,其余都没过,用的二分的方法 提交记录https://www.luogu.com.cn/record/150854380

#include <iostream>
using namespace std;
long long D;
int len = 1;
long long t = 0;
long long num[200006][20] = { 0 };
long long Search(int head, int tail)
{
	long long max = -200000000;
	int d = 0;
	while (head != tail)
	{
		if (head % 2 == 1)
		{
			head = head / 2 + 1;
		}
		else
		{
			max = max > num[head][d] ? max : num[head][d];
			head = head / 2;
		}
		if (tail % 2 == 1)
		{
			max = max > num[tail][d] ? max : num[tail][d];
			tail = tail / 2;
		}
		else
		{
			tail = tail / 2;
		}
		d++;
	}
	max = max > num[head][d] ? max : num[head][d];
	return max;
}
int main()
{
	int M;
	cin >> M >> D;
	for (int i = 1; i <= M; i++)
	{
		char c;
		long long x;
		cin >> c >> x;
		if (c == 'A')
		{
			num[len][0] = (t + x) % D;
			len++;
			int d = 0;
			int length = len - 1;
			while (length % 2 == 0)
			{
				d++;
				num[length / 2][d] = num[length][d - 1] >= num[length - 1][d - 1] ? num[length][d - 1] : num[length - 1][d - 1];
				length = length / 2;
			}
		}
		else
		{
			int tail = len - 1;
			int head = len - x;
			t = Search(head, tail);
			cout << t << endl;
		}
	}
	return 0;
}

提交记录https://www.luogu.com.cn/record/150854380

2024/3/14 21:18
加载中...