社区讨论
灵异(大雾
P2698[USACO12MAR] Flowerpot S参与者 2已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo7r308l
- 此快照首次捕获于
- 2023/10/27 06:22 2 年前
- 此快照最后确认于
- 2023/10/27 06:22 2 年前
正常二分答案应输出 ,我的代码却输出 竟 了,大雾求助。
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 条回复,欢迎继续交流。
正在加载回复...