Sicily13858


// Problem#: 13858
// Submission#: 3622037
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

struct node
{
    int flag;
    int x;
}A[40005];
int counter=0;

bool cmp(node a, node b)
{
    if (a.x==b.x)
        return a.flag<b.flag;
    return a.x<b.x;
}
int main()
{
    int n,x,y,z;
    scanf("%d%d%d%d",&n,&x,&y,&z);

    int i;
    for (i=0;i<n;i++)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        A[counter].flag=0;
        A[counter].x=a;
        counter++;
        A[counter].flag=1;
        A[counter].x=b;
        counter++;
    }
    sort(A,A+counter,cmp);
    int now=0;
    int hot=0;
    int maxn=0;
    for (i=0;i<counter;i++)
    {
        if (!A[i].flag)
        {
            now++;
            int total=now*y+hot*z+(n-now-hot)*x;
            if (total>maxn) maxn=total;
        }
        else
        {
            now--;
            hot++;
        }
    }
    printf("%d\n",maxn);
}                                 


你可能感兴趣的:(Sicily13858)