1 条题解

  • 0
    @ 2024-7-29 9:53:02

    误抄

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    int k,n,z[3000001],q[3000001],q1[3000001],minn[3000001],t,h=1;
    bool check(int m){
    for(int i=1;i<=300000;i++)q[i]=1,q1[i]=0;
    	for(int i=1;i<=n;i++){
    		while(t>=h&&z[i]<z[q[t]]){
    			t--;
    		}
    		q[++t]=i;
    		if(q[t]-q[h]+1>m){
    			h++;
    		}
    		if(i>=m)minn[i]=z[q[h]];
    	}h=1;
    	t=0;
    	for(int i=1;i<=n;i++){
    		while(t>=h&&z[i]>z[q1[t]]){
    			t--;
    		}
    		q1[++t]=i;
    		if(q1[t]-q1[h]+1>m){
    			h++;
    		}
    		if(i>=m){
    			
    			if(z[q1[h]]-minn[i]<=k)return true;
    			
    		}
    	}return false;
    }
    signed main(){
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    	cout.tie(0);
    	cin>>k>>n;
    	for(int i=1;i<=n;i++){
    		cin>>z[i];
    	}int l=1,r=n+1;
    	while(l+1<r){
    		int mid=(l+r)/2;
    		if(check(mid))l=mid;
    		else r=mid;
    	}cout<<l;
    	return 0;
    }
    
    • 1

    信息

    ID
    3149
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    310
    已通过
    10
    上传者