Pagini recente » Cod sursa (job #2645024) | Cod sursa (job #169581) | Cod sursa (job #608093) | Cod sursa (job #1666537) | Cod sursa (job #1317060)
#include<stdio.h>
#include<stdlib.h>
#define N 2008
#define T 1510
struct carnat{
int t,p;
} v[N];
int n,c,poz[N],a[T][N];
int comp(const void *a,const void *b){
carnat x=v[*(int*)a],y=v[*(int*)b];
if(x.t<y.t)
return -1;
if(x.t>y.t)
return 1;
if(x.p<y.p)
return -1;
if(x.p>y.p)
return 1;
return 0;
}
int calcul(int k){
int s=0,max=0;
for(int i=0;i<T;++i){
s+=a[i][v[k].p]*v[k].p-c;
if(s>max)
max=s;
if(s<0)
s=0;
}
return max;
}
int main(){
freopen("carnati.in","r",stdin);
freopen("carnati.out","w",stdout);
scanf("%d%d",&n,&c);
for(int i=0;i<n;++i){
scanf("%d%d",&v[i].t,&v[i].p);
poz[i]=i;
}
qsort(poz,n,sizeof(poz[0]),comp);
a[v[0].t][v[0].p] = 1;
for(int i=1;i<n;++i)
if(v[i-1].t==v[i].t)
a[v[i].t][v[i].p] = 1 + a[v[i-1].t][v[i-1].p];
else
a[v[i].t][v[i].p] = 1;
//for(int i=0;i<n;++i)
int max=0,x;
for(int i=0;i<n;++i)
{
x=calcul(i);
if(x>max)
max=x;
}
printf("%d\n",max);
return 0;
}