复杂度没问题啊,怎么sub23全T了
查看原帖
复杂度没问题啊,怎么sub23全T了
578029
ivyjiao楼主2024/10/4 11:29

rt

#include<bits/stdc++.h>
#define PII pair<int,int>
#define fi first
#define se second
#define ls u*2
#define rs u*2+1
using namespace std;
const int N=3e5+1;
int n,a[N],b[4*N],c[4*N],f[N];
void build(int u,int l,int r){
    if(l==r){
        b[u]=f[l];
        c[u]=l;
        return;
    }
    int mid=(l+r)/2;
    build(ls,l,mid);
    build(rs,mid+1,r);
}
PII qmax(int u,int l,int r,int L,int R){
    if(l==r) return {b[u],c[u]};
    int mid=(l+r)/2,ans=-1e9,node;
    if(L<=mid){
        PII v=qmax(ls,l,mid,L,R);
        if(v.fi>ans){
            ans=v.fi;
            node=v.se;
        }
    }
    if(R>mid){
        PII v=qmax(rs,mid+1,r,L,R);
        if(v.fi>ans){
            ans=v.fi;
            node=v.se;
        }
    }
    return {ans,node};
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        f[i]=a[i]-i;
    }
    build(1,1,n);
    for(int i=1;i<=n;i++){
        if(a[i]>n-i){
            cout<<0<<'\n';
            continue;
        }
        PII mx=qmax(1,1,n,max(a[i]+i,1),n);
        if(a[mx.se]>=mx.se-i) cout<<1<<" "<<mx.se-i<<'\n';
        else cout<<0<<'\n';
    }
}
2024/10/4 11:29
加载中...