• Codeforces 660F Bear and Bowling 4 斜率优化 (看题解)


    Bear and Bowling 4

    这也能斜率优化。。。 

    max[ i ] = a[ i ] - a[ j ] - j * (sum[ i ] - sum[ j ])然后就能斜率优化啦, 我咋没想到, 我好菜啊。

    斜率优化最重要的是转换成前缀形式, 我TM又忘了。

    #include<bits/stdc++.h>
    #define LL long long
    #define fi first
    #define se second
    #define mk make_pair
    #define PLL pair<LL, LL>
    #define PLI pair<LL, int>
    #define PII pair<int, int>
    #define SZ(x) ((int)x.size())
    #define ull unsigned long long
    
    using namespace std;
    
    const int N = 2e5 + 7;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const int mod = 1e9 + 7;
    const double eps = 1e-6;
    const double PI = acos(-1);
    
    int n, que[N], be = 1, ed = 0;
    LL val[N], a[N], sum[N], ans;
    
    long double calc(int k, int j) {
        return ((a[j] - (long double)j * sum[j]) - (a[k] - (long double)k * sum[k])) / (j - k);
    }
    
    int main() {
        scanf("%d", &n);
        for(int i = 1; i <= n; i++) {
            scanf("%lld", &val[i]);
            a[i] = a[i - 1] + i * val[i];
            sum[i] = sum[i - 1] + val[i];
            ans = max(ans, a[i]);
        }
        que[++ed] = 1;
        for(int i = 2; i <= n; i++) {
            int low = be, high = ed - 1, p = -1;
            while(low <= high) {
                int mid = low + high >> 1;
                if(calc(que[mid], que[mid + 1]) < -sum[i]) p = mid, low = mid + 1;
                else high = mid - 1;
            }
            int j = (p == -1) ? que[be] : que[p + 1];
            ans = max(ans, a[i] -a[j] - j * (sum[i] - sum[j]));
            while(ed > be && calc(que[ed-1], que[ed]) > calc(que[ed], i)) ed--;
            que[++ed] = i;
        }
        printf("%lld
    ", ans);
        return 0;
    }
    
    /*
    */
  • 相关阅读:
    关于SOA和AOP
    网络通信
    网络层ddos与应用层ddos区别
    python 模块发布及使用
    安全等级划分依据与应急响应流程
    ssl与ssh
    列表计数及插入
    博客首语
    聊聊当今市面上的国产耳机
    “互联网+”背景下使用微信公众号增强班主任工作与整合教学资源(泰微课)
  • 原文地址:https://www.cnblogs.com/CJLHY/p/10541844.html
Copyright © 2020-2023  润新知