思想
这道题就是一道贪心题,查询的次数最多的地方就放最大的数,第二多的地方就放第二大的数,以此类推.
#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;
}