zoukankan      html  css  js  c++  java
  • [CF 276C]Little Girl and Maximum Sum[差分数列]

    题意:

    给出n项的数列A[ ], q个询问, 询问 [ l, r ] 之间项的和. 求A的全排列中该和的最大值.

    思路:

    记录所有询问, 利用差分数列qd[ ], 标记第 i 项被询问的次数( 每次区间增1 ). 最后对qd, A 进行升序排序, 对应项相乘, 求和.

    理由是: 越大的数被询问覆盖的次数越多那么总和就越大.

    差分数列简单易用.

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int MAXN = 2e5+5;
    typedef long long ll;
    int val[MAXN];
    int dq[MAXN];
    int sum[MAXN];
    
    int main()
    {
        int n,q;
        scanf("%d %d",&n,&q);
        for(int i=1;i<=n;i++)
            scanf("%d",val+i);
        int l,r;
        while(q--)
        {
            scanf("%d %d",&l,&r);
            dq[l]++;dq[r+1]--;
        }
        for(int i=1;i<=n;i++)
            sum[i] = sum[i-1] + dq[i];
        sort(sum+1,sum+n+1);
        sort(val+1,val+n+1);
        ll ans = 0;
        for(int i=1;i<=n;i++)
            ans += (ll)val[i]*sum[i];
        printf("%I64d
    ",ans);
    }
    


  • 相关阅读:
    jQuery 核心
    Js实现内容向上无缝循环滚动
    浅析CSS postion属性值用法
    JS原生Ajax请求
    详解SQL集合运算
    Windows上开启IIS
    poj 4618 暴力
    hdu 4614 线段树
    poj 3468 线段树
    hdu 1698 线段树成段更新
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3260478.html
Copyright © 2011-2022 走看看