提交时间:2024-11-03 20:30:34

运行 ID: 34209

#include<bits/stdc++.h> using namespace std; #define int long long #define mp(x,y) make_pair(x,y) const int N=5e5+10,INF=9e9; int t,n,k,a[N]; int l,ansl,ansx; int s[N]; int r; deque<int> q1,q2; int work(int len,int op){ int ret=INF,cnt=0; while(!q1.empty()) q1.pop_back(); while(!q2.empty()) q2.pop_back(); for(int i=1;i<=n;i++){ while(!q1.empty()&&q1.front()<i-len+1){ q1.pop_front(); } while(!q1.empty()&&a[i]>a[q1.back()]){ q1.pop_back(); } q1.push_back(i); while(!q2.empty()&&q2.front()<i-len+1){ q2.pop_front(); } while(!q2.empty()&&a[i]<a[q2.back()]){ q2.pop_back(); } q2.push_back(i); if(i>=len){ ret=min(ret,a[q1.front()]-a[q2.front()]); if(op&&a[q1.front()]-a[q2.front()]>=ansx){ cnt++; } } //cout<<a[q1.front()]<<' '<<a[q2.front()]<<endl; } if(!op) return ansx=ret; if(op){ if(cnt>=k) return 1; else return 0; } } void search(){ ansl=0; while(!q1.empty()) q1.pop_back(); while(!q2.empty()) q2.pop_back(); for(int i=1;i<=n;i++){ while(!q1.empty()&&q1.front()<i) q1.pop_front(); while(!q2.empty()&&q2.front()<i) q2.pop_front(); while(r<n&&(q1.empty()||q2.empty()||a[q1.front()]-a[q2.front()]<ansx)){ r++; while(!q1.empty()&&a[r]>a[q1.back()]) q1.pop_back(); while(!q2.empty()&&a[r]<a[q2.back()]) q2.pop_back(); q1.push_back(r); q2.push_back(r); } if(a[q1.front()]-a[q2.front()]<ansx) break; s[r-i+1]++; s[n-i+2]--; } for(int i=1;i<=n;i++) s[i]+=s[i-1]; while(s[ansl]<k){ //cout<<s[ansl]<<' '; ansl++; } //cout<<endl; printf("%lld %lld\n",ansx,ansl); } signed main(){ //freopen("test.in","r",stdin); //freopen("test.out","w",stdout); scanf("%lld",&t); while(t--){ r=0; while(!q1.empty()) q1.pop_back(); while(!q2.empty()) q2.pop_back(); memset(s,0,sizeof(s)); ansx=INF; scanf("%lld%lld",&n,&k); l=n-k+1; for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); } ansx=work(l,0); search(); //printf("%lld %lld\n",ansx,ansl); } return 0; }