Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34055 A21μΘ_wjy 【S】T1 C++ 运行超时 90 1000 MS 82292 KB 1544 2024-11-03 14:06:02

Tests(9/10):


#include<bits/stdc++.h> using namespace std; const int maxn=5e5+7; bool ST; int n,k; int a[maxn]; int LG[maxn]; int STMin[maxn][20],STMax[maxn][20]; bool ED; inline void GetLG(){ LG[0]=-1; for(int i=1;i<maxn;i++)LG[i]=LG[i>>1]+1; } inline void GetST(){ for(int i=1;i<=n;i++)STMax[i][0]=STMin[i][0]=a[i]; for(int j=1;j<=LG[n];j++){ for(int i=1;i<=n-(1<<j)+1;i++){ STMin[i][j]=min(STMin[i][j-1],STMin[i+(1<<j-1)][j-1]); STMax[i][j]=max(STMax[i][j-1],STMax[i+(1<<j-1)][j-1]); } } } inline int D(int l,int r){ int t=LG[r-l+1]; return max(STMax[l][t],STMax[r-(1<<t)+1][t])-min(STMin[l][t],STMin[r-(1<<t)+1][t]); } inline void rd(int &x){ x=0;int f=1; char ch=getchar(); while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();} x*=f; } inline bool chk(int Len,int x){ int cnt=0; for(int i=1;i<=(n-Len+1);i++)cnt+=D(i,i+Len-1)>=x; return cnt>=k; } inline void slv(){ rd(n),rd(k); for(int i=1;i<=n;i++)rd(a[i]); GetST(); int X=2e9; for(int i=1;i<=k;i++)X=min(X,D(i,i+n-k)); int l=1,r=n-k+1; while(l<r){ int mid=l+r>>1; if(chk(mid,X))r=mid; else l=mid+1; } cout<<X<<" "<<l<<endl; } signed main(){ // freopen("choose.in","r",stdin); // freopen("choose.out","w",stdout); GetLG(); int T;rd(T); while(T--)slv(); // cerr<<clock()*1.0/CLOCKS_PER_SEC<<endl; }


测评信息: