我是菜鸡我不知道P4392这道题我哪里错了所以我来问问题了
  • 板块灌水区
  • 楼主expnoi
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/2/9 10:33
  • 上次更新2023/11/5 03:30:40
查看原帖
我是菜鸡我不知道P4392这道题我哪里错了所以我来问问题了
218205
expnoi楼主2021/2/9 10:33
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
   return s*w;
}
const int maxn=1e6+5;
int n,m,c,Max[maxn<<2],Min[maxn<<2],a[maxn];
inline void pushup(int id)
{
	Max[id]=max(Max[id<<1],Max[id<<1|1]);
	Min[id]=min(Min[id<<1],Min[id<<1|1]);
}
inline void build(int id,int l,int r)
{
	if(l==r)
	{
		Max[id]=Min[id]=a[l];
		return;
	}
	int mid=(l+r)>>1;
	build(id<<1,l,mid);
	build(id<<1,mid+1,r);
	pushup(id);
}
inline int query1(int id,int l,int r,int x,int y)
{
	if(x<=l&&r<=y)
	{
		return Max[id];
	}
	int mid=(l+r)>>1,ans=-0x7fffffff;
	if(x<=mid)
	{
		ans=max(ans,query1(id<<1,l,mid,x,y));
	}
	if(y>mid)
	{
		ans=max(ans,query1(id<<1|1,mid+1,r,x,y));
	}
	return ans;
}
inline int query2(int id,int l,int r,int x,int y)
{
	if(x<=l&&r<=y)
	{
		return Min[id];
	}
	int mid=(l+r)>>1,ans=0x7fffffff;
	if(x<=mid)
	{
		ans=min(ans,query2(id<<1,l,mid,x,y));
	}
	if(y>mid)
	{
		ans=min(ans,query2(id<<1|1,mid+1,r,x,y));
	}
	return ans;
}
int main()
{
	n=read();
	m=read();
	c=read();
	bool flag=0;
	for(int i=1;i<=n;++i)
	{
		a[i]=read();
	}
	build(1,1,n);
	for(int i=1;i<=n;++i)
	{
		int Maxx=query1(1,1,n,i,i+m-1),Minx=query2(1,1,n,i,i+m-1);
		if(Maxx-Minx<=c)
		{
			printf("%d",i);
			puts("");
			flag=1;
		}
	}
	if(!flag)
	{
		cout<<"NONE\n";
	}
}

因为我不知道我哪里错了所以我让你们帮助我找一下我的代码哪里错了

2021/2/9 10:33
加载中...