• bzoj4850: [Jsoi2016]灯塔


    大清早的就被肉老师D飞。。。

    那么这题hj≤hi+p-sqrt(|i-j|)就是这个式子了。

    移一下项->  hj+sqrt(|i-j|)-hi≤p

    一看就觉得根号很恶心,突破口就在这,考虑到我们要的p是整数,这个sqrt(|i-j|)向上取整一下,可以发现其实有一大段一大段区间的sqrt值是相等的(然而不是很会分块)。

    枚举每一段区间,区间查询最大的hj,这个离线用st表就可以O(1)搞定

    最终复杂度O(n sqrt(n))

    WA了一次很难受p>=0我初始化设成了-inf....

    PS:这题看着就很单调,然而不会做,看到网上整体二分又不会。。。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    
    int n;
    
    int Bin[30],Log[110000];
    int f[25][110000];
    void get_st()
    {
        Bin[0]=1;for(int i=1;i<=25;i++)Bin[i]=Bin[i-1]*2;
        Log[1]=0;for(int i=2;i<=n ;i++)Log[i]=Log[i/2]+1;
        
        memset(f,0,sizeof(f));
        for(int i=1;i<=n;i++)scanf("%d",&f[0][i]);
        for(int j=1;Bin[j]<=n;j++)
            for(int i=1;i+Bin[j]-1<=n;i++)
                f[j][i]=max(f[j-1][i],f[j-1][i+Bin[j-1]]);
    }
    int RMQ(int x,int y)
    {
        int k=Log[y-x+1];
        return max(f[k][x],f[k][y-Bin[k]+1]);
    }
    
    int main()
    {
        scanf("%d",&n);
        get_st();
        
        for(int i=1;i<=n;i++)
        {
            int ans=0,P;
            
            int first;P=1;
            for(int j=i-1;j>=1;j=first-1)
            {
                first=max(i-P*P,1);
                    ans=max(ans,RMQ(first,j)+P-f[0][i]);
                P++;
            }
            //-----check_left-------
            int last;P=1;
            for(int j=i+1;j<=n;j=last+1)
            {
                last=min(i+P*P,n);
                    ans=max(ans,RMQ(j,last)+P-f[0][i]);
                P++;
            }
            //-----check_right---------
            
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    串口通信理论知识
    串口通信基础
    串口中断程序步骤及代码
    Django之CRM项目Day6-公私户转换问题解决 班主任功能
    Django之CRM项目Day5-跳转页面 跟进记录 报名记录
    Django之CRM项目Day4-编辑客户 公私户 模糊查询
    Django之CRM项目Day3-客户展示及分页
    Django的ModelForm
    Django相关面试题
    Django基础自测
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/8792939.html
Copyright © 2020-2023  润新知