线段树,第十个点wa了
查看原帖
线段树,第十个点wa了
283742
liusizhe楼主2021/8/21 12:17

前九个数据过了,就是第十个数据不过,我写的程序如下

#include<iostream>
#include<cstdio>
using namespace std;
inline int read()
{
  char ch=getchar();
  int x=0;
  while(ch>'9'||ch<'0') ch=getchar();
  while(ch>='0'&&ch<='9')                 {
    x=x*10+ch'0';
    ch=getchar();
  }
  return x;
}
inline int max(int a,int b)
{
  return a>b?a:b;
}
int a=0;
const int M=200000+10;
int cnt,tree[M*4],p,m;
void change(int k,int l,int r,int x,int v)
{
  if(x<l||x>r) return ;
  if(l==r&&l==x) {tree[k]=v;return;}
  int mid=(l+r)>>1;
  change(k*2,l,mid,x,v);
  change(k*2+1,mid+1,r,x,v);
  tree[k]=max(tree[k*2],tree[k*2+1]);
  return ;
}
int query(int k,int l,int r,int x,int y)
{
  if(x>r||y<l) return -99999999;
  if(x<=l&&y>=r) return tree[k];
  int mid=(l+r)>>1;
  return max(query(k*2,l,mid,x,y),query(k*2+1,mid+1,r,x,y));
}
int main()
{
  m=read(),p=read();
  for(int i=1;i<=m;i++)
  {
    int t;
	char ch;
	cin>>ch;
	if(ch=='A')
	{
	  t=((read()%p)+(a%p))%p;
      cnt++;
      change(1,1,M,cnt,t);
	}
	else  
	{
	    int x=read();
	    if(x==0) a=0;
	    else a=query(1,1,M,cnt-x+1,cnt);
	    printf("%d\n",a);
	}
  }
  return 0;
}

麻烦各位大佬帮看一下,谢谢。

2021/8/21 12:17
加载中...