Codeforces Little Girl and Maximum Sum(差分)

在這裏插入圖片描述
題目大意:
給出n項的數列A[ ], q個詢問, 詢問 [ l, r ] 之間項的和. 求A的全排列中該和的最大值.

解題思路:
涉及到區間修改,每次修直接循環,複雜度有可能會被卡到n^2,所以用一維差分

代碼:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=2e5+10;
ll ans;
int q,n,cnt[maxn],arr[maxn];
int main()
{
    scanf("%d%d",&n,&q);
    for(int i=1;i<=n;++i)
        scanf("%d",&arr[i]);
    sort(arr+1,arr+1+n);
    while(q--)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        cnt[x]++;
        cnt[y+1]--;
    }
    for(int i=1;i<=n;++i)
        cnt[i]+=cnt[i-1];
    sort(cnt+1,cnt+1+n);
    for(int i=1;i<=n;++i)
        ans+=(ll)cnt[i]*arr[i];
    printf("%lld",ans);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章