1 条题解

  • 0
    @ 2023-3-13 12:11:09

    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

    信息

    ID
    2089
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者