Input:
1
1
1
Output:
-1
以下这份代码能够提交通过,但却能够被上面这组数据给卡掉。
#include<iostream>
using namespace std;
const int inf=0x3f3f3f3f;
const int N=1e5+5,M=3e5+5;
int i,j,n,b,ans;
int lg[N],a[18][M];
int dfs1(int l,int r){
if(l==r) return l;
int p,k=lg[r-l+1];
k-=1<<k==r-l+1,p=r-(1<<k)+1;
if(a[k][l]>=b) return dfs1(l,l+(1<<k)-1);
else if(a[k][p]>=b) return dfs1(p,r);
else return 0;
}int dfs2(int l,int r){
if(l==r) return l;
int p,k=lg[r-l+1];
k-=1<<k==r-l+1,p=r-(1<<k)+1;
if(a[k][p]>=b) return dfs2(p,r);
else if(a[k][l]>=b) return dfs2(l,l+(1<<k)-1);
else return 0;
}int main(){
cin.tie(0),cout.tie(0);
ios::sync_with_stdio(false);
for(cin>>n;i<n;i++)
cin>>a[0][i],a[0][i+n]=a[0][i+2*n]=a[0][i];
for(i=2;i<=n;i++) lg[i]=lg[i>>1]+1;
for(i=1;i<=lg[n];i++) for(j=0;j+(1<<i)<=3*n;j++)
a[i][j]=max(a[i-1][j],a[i-1][j+(1<<i-1)]);
for(i=n;i<2*n;i++){
cin>>b,ans=inf;
if(j=dfs1(i+1,i+n-1))
ans=min(ans,j-i);
if(j=dfs2(i-n+1,i-1))
ans=min(ans,i-j);
cout<<(ans!=inf?ans:-1)<<' ';
}return 0;
}