zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    openldap---ldapsearch使用
    自旋锁与相互排斥锁之抉择
    探索Android中的Parcel机制(上)
    我的Android开发相关文章
    SoftReference
    Windows7WithSP1/TeamFoundationServer2012update4/SQLServer2012
    机器学习中规则化和模型选择知识
    Java中System的详细用法
    Java中System的详细用法
    Java中System的详细用法
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/8792939.html
Copyright © 2011-2022 走看看