C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int n,m;
long long b[N],a[N];
bool cpp(int x,int y) {
return x>y;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) {
cin>>a[i];
}
//差分,统计区间出现的次数
cin>>m;
while(m--){
int l,r;cin>>l>>r;
b[l]++;b[r+1]--;
}
//计算区间和
long long sum1=0;
for(int i=1;i<=n;i++){
b[i]+=b[i-1];
sum1+=b[i]*a[i];
}
//排序,将最大的数,与出现位置的次数排序相对应,比如最大的数是5 位置出现次数最多是4,排序相对应 和是5*4
sort(a+1,a+n+1,cpp);sort(b+1,b+1+n,cpp);
long long sum2=0;
for(int i=1;i<=n;i++) {
sum2+=b[i]*a[i];
}
cout<<sum2-sum1;
return 0;
}