社区讨论

灵异(大雾

P2698[USACO12MAR] Flowerpot S参与者 2已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@lo7r308l
此快照首次捕获于
2023/10/27 06:22
2 年前
此快照最后确认于
2023/10/27 06:22
2 年前
查看原帖
正常二分答案应输出 ansans ,我的代码却输出 ans1ans-1ACAC 了,大雾求助。
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
struct node{int x,y;}e[N]; 
int n,d,maxx,maxn[N],minn[N];
inline int read(){
	int x=0,f=1;char s=getchar();
	while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
	while(s>='0'&&s<='9'){x=(x<<1)+(x<<3)+(s^48);s=getchar();}
	return x*f;
}
inline bool check(int k){
	deque<int>q,p;
	q.push_back(1);maxn[1]=e[1].y;
	p.push_back(1);minn[1]=e[1].y;
	int t=maxn[1]-minn[1];
	if(t>=d) return 1;
	for(int i=2;i<=n;++i){
		while(!q.empty()&&e[q.back()].y<=e[i].y) q.pop_back();
		q.push_back(i);
		while(!q.empty()&&e[i].x-e[q.front()].x+1>k) q.pop_front();
		maxn[i]=e[q.front()].y;
		
		while(!p.empty()&&e[p.back()].y>=e[i].y) p.pop_back();
		p.push_back(i);
		while(!p.empty()&&e[i].x-e[p.front()].x+1>k) p.pop_front();
		minn[i]=e[p.front()].y;
		t=maxn[i]-minn[i];
		if(t>=d) return 1;
	}
	return 0;
}
inline bool cmp(node x,node y){return x.x<y.x;}
signed main(void){
//	freopen("a.txt","r",stdin);
	n=read();d=read();
	for(int i=1;i<=n;++i){
		e[i].x=read();e[i].y=read();
		maxx=max(maxx,e[i].x);
	}
	sort(e+1,e+n+1,cmp);
	int l=1,r=maxx,ans=0;
	while(l<=r){
		int mid=(l+r)>>1;
		if(check(mid)) r=mid-1,ans=mid;
		else l=mid+1;
	}
	printf("%d\n",ans-1);
}

回复

5 条回复,欢迎继续交流。

正在加载回复...