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;}

原创粉丝点击