2024年码蹄杯高职组国赛 区间询问和 题型:贪心 难度:黄金

95 阅读1分钟

码题集OJ-区间询问和 (matiji.net)

思想

这道题就是一道贪心题,查询的次数最多的地方就放最大的数,第二多的地方就放第二大的数,以此类推.

#include<bits/stdc++.h> 
#define int long long
using namespace std;
const int N=1e6+10;
int a[N],b[N];
int n,m;
signed main( )
{
    cin.tie(nullptr)->sync_with_stdio(false);
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>a[i];

    for(int i=1;i<=m;i++)
    {
      int l,r;cin>>l>>r;
      b[l]++,b[r+1]--;
    }
    for(int i=1;i<=n;i++)b[i]+=b[i-1];

    sort(a+1,a+n+1,greater<int>());
    sort(b+1,b+n+1,greater<int>());

    int ans=0;
    for(int i=1;i<=n;i++)
    {
        ans+=a[i]*b[i];
    }
    cout<<ans<<endl;
    return 0;
}

image.png