1 条题解

  • 0
    @ 2024-7-7 17:39:00

    自己出的,不知道有没有原题。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cctype>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<map>
    using namespace std;
    inline int read(){
    	int f=1,num=0;
    	char rd=getchar();
    	while(!isdigit(rd)){
    		if(rd=='-') f=-1;
    		rd=getchar();
    	}
    	while(isdigit(rd)){
    		num=num*10+rd-48;
    		rd=getchar();
    	}
    	return f*num;
    }
    int a[1000009],maxn[1000009];
    int finds(int l,int r,int x){
        int ans=-1;
        while(l<=r){
            int mid=(l+r)>>1;
            if(maxn[mid]>x){
                ans=mid;
                l=mid+1;
            }
            else r=mid-1;
        }
        return ans;
    }
    int main()
    {
        int n=read();
        for(int i=1;i<=n;i++) a[i]=read();
        for(int i=n;i>0;i--) maxn[i]=max(maxn[i+1],a[i]);
        for(int i=1;i<=n;i++) printf("%d ",finds(i+1,n,a[i]));
        return 0;
    }
    
    • 1

    信息

    ID
    266
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    45
    已通过
    1
    上传者