题目 c 

一直搞不懂的覆盖问题 看到clj的代码顿悟了

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
#define N 1000010
int n,m,a[N],s[N],b[N];
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)scanf("%d",a+i);
    sort(a,a+n);
    for(int i=0,x,y;i<m;i++)
        scanf("%d%d",&x,&y),s[x-1]++,s[y]--;
    for(int i=0,w=0;i<n;i++)
        w+=s[i],b[i]=w;
    sort(b,b+n);
    ll S=0;
    for(int i=0;i<n;i++)S+=(ll)a[i]*b[i];
    cout<<S<<endl;
    return 0;
}

 

posted on 2013-02-25 01:50  dark_dream  阅读(159)  评论(0编辑  收藏  举报