Cod sursa(job #1001874)

Utilizator Master011Dragos Martac Master011 Data 26 septembrie 2013 14:17:19
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<cstdio>
#include<algorithm>
#include<vector>

using namespace std;

inline int max(int a, int b){
    return a > b ? a : b;
}
inline int min(int a, int b){
    return a > b ? b : a;
}
struct carnati{
    int x,y;
}v[2300];
bool cmp(carnati a , carnati b){
    if(a.x<b.x) return 1;
    if(a.x>b.x) return 0;
    if(a.y<b.y) return 1;
    return 0;
}
int f[2300];
int main(){
    FILE *in=fopen("carnati.in","r");
    FILE *out=fopen("carnati.out","w");

    int N,C;    fscanf(in,"%d%d",&N,&C);
    int k,m,M=0;
    for(int i = 1 ; i<= N ; ++i)
        fscanf(in,"%d%d",&v[i].x,&v[i].y);
    sort(v+1,v+N+1,cmp);
      for(int i = 1 ; i <= N ; ++i){
        k=1;
        for(int j = 0 ; j <= v[N].x ; ++j){
            f[j]=f[j-1]-C;
            while(v[k].x==j)
                if(v[k++].y>=v[i].y)
                    f[j]+=v[i].y;
        }
        m=0;
        for(int j = 0 ; j <= v[N].x ; ++j){
            m=min(m,f[j]);
            M=max(M,f[j]-m);
        }
    }
    fprintf(out,"%d\n",M);
    return 0;
}