Pagini recente » Cod sursa (job #21189) | Cod sursa (job #629070) | Cod sursa (job #2783044) | Cod sursa (job #1746969) | Cod sursa (job #144675)
Cod sursa(job #144675)
#include<stdio.h>
#define nmax 2000
#define max(a,b) ((a)>(b)?(a):(b))
long long a1[nmax];
long long a2[nmax];
int alege(int st,int dr)
{
long long x1=a1[st];
long long x2=a2[st];
while( st < dr ){
while( st < dr && a1[dr] >= x1 )--dr;
a1[st]=a1[dr];
a2[st]=a2[dr];
while( st < dr && a1[st] <= x1 )++st;
a1[dr]=a1[st];
a2[dr]=a2[st];
}
a1[st]=x1;
a2[st]=x2;
return st;
}
void quicksort(int st,int dr)
{
if( st< dr){
int m=alege(st,dr);
quicksort(st,m);
quicksort(m+1,dr);
}
}
int main()
{
freopen("carnati.in","r",stdin);
freopen("carnati.out","w",stdout);
long long k,valm;
int n,i,j;
scanf("%d%lld",&n,&k);
for(i=1; i<=n; ++i)
scanf("%lld%lld",&a1[i],&a2[i]);
quicksort(1,n);
long long incr=0,aux,saux,s1,s2,solfin=0;
for(i=1; i<=n; ++i){
valm=a2[i];
aux=(a1[i+1]-a1[i]+1)*k;
s1=valm;
incr=1;
for(j=i+1; j<=n && s1-aux+valm>0; ++j){
if(a2[j]>=valm){
saux=(incr+1)*valm-aux;
if(saux>s1){
s1=saux;
++incr;
}
}
aux+=(a1[j+1]-a1[j])*k;
}
valm=a2[i];
aux=(a1[i]-a1[i-1])*k;
s2=valm;
incr=1;
for(j=i-1; j>=1 && s2-aux+valm>0; --j){
if(a2[j]>=valm){
saux=(incr+1)*valm-aux;
if(saux>s2){
s2=saux;
++incr;
}
}
aux+=(a1[j]-a1[j-1])*k;
}
s2-=valm;
solfin=max(solfin,s1+s2);
}
printf("%lld\n",solfin);
return 0;
}