1 条题解

  • 0
    @ 2024-5-11 10:58:33

    题目大意: 对于每个点需要前后去找离当前点 i 最近的点 j ,并满足 aj >= bi

    思路

    第 1 步,题目说是个环,我们又需要往前,往后都找,所以直接断环为链,把数组往后复制三遍,然后用第二段去找

    第 2 步,查找过程中可以考虑使用二分,但是由于aj 没有单调性, 所以我们可以维护区间最大值,使其满足单调性,维护的过程就可以使用ST表预处理

    参考代码
        for(int i=1;i<=n;i++) //断环为链
        {
    		int a;
    		cin >> a;
        	f[i+n+n][0] = f[i+n][0] = f[i][0] = a;
    	}
    	for(int i = 2; i <= n + n + n; i++)
    	{
    	    lg[i] = lg[i>>1] + 1;
    	}
    	int k = lg[n+n+n];
    	for(int i=1;i<=k;i++)  //ST表预处理
        {
    		for(int j=1;j+(1<<i)-1<=n+n+n;j++)
            {
    			f[j][i]=max(f[j][i-1],f[j+(1<<i-1)][i-1]);
    		}
    	}
    
    • 1

    信息

    ID
    738
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    60
    已通过
    8
    上传者