闻灌佬多
  • 板块灌水区
  • 楼主Tudoudidan
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/2/5 11:40
  • 上次更新2025/2/5 13:39:52
查看原帖
闻灌佬多
773444
Tudoudidan楼主2025/2/5 11:40

蒟蒻求助QwQ P2698

//蒟蒻求调 
#include<bits/stdc++.h>
using namespace std;
int n,d,a[(int)1e5],t1,t2;

int f(int mid){//本蒟蒻尝试用两个单调队列看是否符合要求 
	deque<int> q1; 
	deque<int> q2;
	for(int i = 0;i<n;i++){
		while(!q1.empty()&&a[i]<=a[q1.front()])q1.pop_front();
		while(!q2.empty()&&a[i]>=a[q2.front()])q2.pop_front();
		q1.push_front(i);
		q2.push_front(i);
		if(i-q1.back()>=mid){
			q1.pop_back();
			q1.pop_back();
		}
		if(a[q1.back()]-a[q2.back()]>=d)return 1;
	}
	return 0;
}

int main(){
	cin>>n>>d;
	for(int i=0;i<n;i++){
		cin>>t1>>t2;
		a[t1] = t2;
	}
	int l = 1,r = 1e6+10,mid;
	while(l<r){//本蒟蒻尝试着用二分盆子宽度 
//		cout<<l<<' '<<mid<<' '<<r<<endl; 
		mid = (l+r)/2;
		if(f(mid))r = mid;
		else l = mid+1;
	}
	cout<<l;
}

szo

2025/2/5 11:40
加载中...