hack数据
查看原帖
hack数据
1201196
Zhenghw楼主2024/7/31 13:36
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;
}

这份代码的提交记录

2024/7/31 13:36
加载中...