萌新求助,思路感觉是对的,但是样例无法通过,希望各位大佬能帮我看看我的错误
查看原帖
萌新求助,思路感觉是对的,但是样例无法通过,希望各位大佬能帮我看看我的错误
352217
H1910821046楼主2021/6/10 17:32
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;

int arr[N], tree[N];
int m, T, t, H;
char ch;
long long D;

int Cha_tree(int node, int begin, int end, int L, int R){//查找线段树 
	if(begin>R || end<L) return 0;
	else if(begin==end || (begin>=L && end<=R)) return tree[node];
	int zhong=(begin+end)>>1;
	int L_tree=2*node+1;
	int R_tree=2*node+2;
	int L_max=Cha_tree(L_tree, begin, zhong, L, R);
	int R_max=Cha_tree(R_tree, zhong+1, end, L, R);
	return max(L_max, R_max);
}

void add_tree(int node, int begin, int end, int idx, int val){//添加新的节点并更新线段树 
	if(begin==end){
		tree[node]=val;
		return;
	}
	int zhong=(begin+end)>>1;
	int L_tree=2*node+1;
	int R_tree=2*node+2;
	if(idx>=begin && idx<=zhong) add_tree(L_tree, begin, zhong, idx, val);
	else add_tree(R_tree, zhong+1, end, idx, val);
	tree[node]=max(tree[L_tree], tree[R_tree]);
}

void Jian_tree(int node, int begin, int end){//建立线段树 
	if(begin==end){
		tree[node]=arr[end];
		return;
	}
	int zhong=(begin+end)>>1;
	int l_tree=2*node+1;
	int r_tree=2*node+2;
	Jian_tree(l_tree, begin, zhong);
	Jian_tree(r_tree, zhong+1, end);
	tree[node]=max(tree[l_tree], tree[r_tree]);
}

int main()
{
	cin>>m>>D;
	while(m--){
		cin>>ch>>H;
		if(ch=='A'){
			arr[T++]=(H+t)%D;
			add_tree(0, 0, T-1, T-1, (H+t)%D);
			//Jian_tree(0, 0, T);
		}
		else {
			t=Cha_tree(0, 0, T-1, T-H, T-1);
			cout<<t<<endl;
		}
	}
	return 0;
}

思路我觉得是对的呀,可是过不了样例最后一个查询,如果我插入哪里用Jian_tree的话就能过样例,但是提交只能过2个点,会超时,我想请问各位大佬能指出我的不足点吗?

2021/6/10 17:32
加载中...