评测机水还是我自己的问题
查看原帖
评测机水还是我自己的问题
550970
Aliya_Hyacinth楼主2024/5/30 17:36

AC但是机上没有一个过

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=5e5+5;

struct node{
	ll l,r;
	ll maxx;
}tree[N*4];

ll input[N],n,m,p,a,x;
char op;

inline void build(ll i,ll l,ll r){
	tree[i].l=l;
	tree[i].r=r;
	if(l==r){
		tree[i].maxx=input[l];
		return ;
	}
	ll mid=(l+r)>>1;
	build(i*2,l,mid);
	build(i*2+1,mid+1,r);
	tree[i].maxx=max(tree[i*2].maxx,tree[i*2+1].maxx);
	return ;
}

inline void add(ll i,ll dis,ll k){
	if(tree[i].l==tree[i].r){
		tree[i].maxx=k;
		return ;
	}
	if(dis<=tree[i*2].r)
		add(i*2,dis,k);
	else
		add(i*2+1,dis,k);
	tree[i].maxx=max(tree[i*2].maxx,tree[i*2+1].maxx);
	return ;
}

inline ll search(ll i,ll l,ll r){
	if(tree[i].l>=l&&tree[i].r<=r)
		return tree[i].maxx;
	if(tree[i].l>r||tree[i].r<l)
		return -0x7ffffff;
	ll s=-0x7fffffff;
	if(tree[i*2].r>=l)
		s=max(s,search(i*2,l,r));
	if(tree[i*2+1].l<=r)	
		s=max(s,search(i*2+1,l,r));
	return s;
}

int main(){
	scanf("%lld%lld",&m,&p);
	for(int i=1;i<=N;i++)
		input[i]=-0x7fffffff;
	build(1,1,N);
	while(m--){
		scanf(" %c ",&op);
		scanf("%lld",&x);
		if(op=='A')
			add(1,++n,(x+a)%p);
		else{
			a=search(1,n-x+1,n);
			printf("%lld\n",a);
		}
	}
	return 0;
}
2024/5/30 17:36
加载中...