codeforces #169 div2 C
来源:互联网 发布:大数据可视化论文 编辑:程序博客网 时间:2024/05/01 03:04
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int MAX=200005;__int64 a[MAX];__int64 cnt[MAX],ans[MAX];int main(){ int n,q; scanf("%d%d",&n,&q); for(int i=1;i<=n;i++) scanf("%I64d",&a[i]); sort(a+1,a+n+1);//排序 为了后面用最大的相乘 memset(cnt,0,sizeof(cnt)); memset(ans,0,sizeof(ans)); while(q--) { int l,r; scanf("%d%d",&l,&r); cnt[l]++; cnt[r+1]--;//之所以将r后的元素减小 是为了抵消内区间到外区间元素的个数 } int num=0; for(int i=1;i<=n;i++) { num+=cnt[i];//累加num 用来让ans存值 第i个元素的值 代表是a数组没排序的i ans[i]=num; } sort(ans+1,ans+n+1);//排序找最大 __int64 sum=0; for(int i=n;i>0;i--) sum+=a[i]*ans[i];//用最大的跟最大的相乘 printf("%I64d\n",sum);return 0;}