zoukankan      html  css  js  c++  java
  • CF1358D The Best Vacation(二分)

    根据贪心的思想,取月末比取月初好,所以答案肯定是连续几个月加上某个月的月末

    那么其实就是某个月的某天到某个月的月底,因此我们可以枚举月底,二分一下满足条件且是最小的某个月,使得他们的之间的天数<=x

    这可以用前缀和。之后更新答案即可。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=5e5+10;
    ll s1[N];
    ll s2[N];
    ll a[N],b[N];
    int main(){
        ll n,x;
        cin>>n>>x;
        int i;
        for(i=1;i<=n;i++){
            scanf("%lld",&a[i]);
            s1[i]=s1[i-1]+a[i];
            s2[i]=s2[i-1]+(a[i]+1)*a[i]/2;
        }
        for(i=n+1;i<=2*n;i++){
            s1[i]=s1[i-1]+a[i-n];
            s2[i]=s2[i-1]+(a[i-n]+1)*a[i-n]/2;
        }
        ll res=-1e18;
        for(i=1;i<=2*n;i++){
            if(s1[i]<x)
                continue;
            int pos=lower_bound(s1+1,s1+1+2*n,s1[i]-x)-s1;
            ll tmp=s2[i]-s2[pos];
            ll sign=x-s1[i]+s1[pos];
            tmp+=(a[pos]-sign+1+a[pos])*sign/2;
            res=max(tmp,res);
        }
        cout<<res<<endl;
    }
    View Code
  • 相关阅读:
    新浪微博学习的知识点
    新浪项目笔记
    2015年10月20日整理知识
    版本管理工具 (git 或者 svn)
    Coding 代码push/commit/pull/git clone
    fileurlwithpath urlwithstring 这俩有啥区别吗
    正则表达式
    地图
    各种杂项
    实时通讯
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/13083007.html
Copyright © 2011-2022 走看看