1 solutions

  • 0
    @ 2025-3-3 16:27:12

    C++ :

    #include<cstdio>
    #define kl k<<1
    #define kr k<<1|1
    const int N=200001;
    int d=0;
    int v[N],t[N<<2];
    int min(int a,int b){if(a<b)return a;return b;}
    void build(int L,int R,int k)
    {
    	if(L==R)
    		scanf("%d",&v[d]),t[k]=v[d++];
    	else
    	{
    		int mid=(L+R)>>1;
    		build(L,mid,kl);
    		build(mid+1,R,kr);
    		t[k]=min(t[kl],t[kr]);
    	}
    }
    int query(int L,int R,int x,int k)
    {
    	if(t[k]>=v[x])
    		return 0;
    	if(L==R&&t[k]<v[x])
    		return v[L-1];
    	int y,mid=(L+R)>>1;
    	if(x>mid)
    	{
    		y=query(mid+1,R,x,kr);
    		if(y==0)
    			y=query(L,mid,x,kl);
    	}
    	else
    		y=query(L,mid,x,kl);
    	return y;
    }
    int main()
    {
    	int i,n;
    	scanf("%d",&n);
    	build(1,n,1);
    	printf("0");
    	for(i=1;i<n;i++)
    		printf(" %d",query(1,n,i,1));
    	return 0;
    }
    
    • 1

    Information

    ID
    10156
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By