Pagini recente » Cod sursa (job #104616) | Cod sursa (job #612447) | Cod sursa (job #2972803) | Cod sursa (job #2471877) | Cod sursa (job #137377)
Cod sursa(job #137377)
#include <fstream>
std::ifstream f1("carnati.in");
std::ofstream f2("carnati.out");
struct elem
{
int t;
long p;
};//struct elem
int part(struct elem sir[2010], int jos, int sus);
void qsort(struct elem sir[2010], int jos, int sus);
struct elem om[2010];
int main()
{
long long max=0, temp, prec;
int n, i, j, cump;
long c, pmin, pminprec;
f1>>n>>c;
for (i=0; i<n; i++)
f1>>om[i].t>>om[i].p;
qsort(om, 0, n-1);
for (i=0; i<n; i++)
{
pmin=om[i].p;
temp=om[i].p-c;
if (temp>max)
max=temp;
prec=temp;
pminprec=pmin;
cump=1;
for (j=i+1; j<n; j++)
{
prec-=c*(om[j].t-om[j-1].t);
if (om[j].p<pmin)
pmin=om[j].p;
temp=pmin*(cump+1)-((om[j].t-om[i].t+1)*c);
if (temp>max)
max=temp;
if (prec>max)
max=prec;
if (temp>prec)
{
prec=temp;
pminprec=pmin;
cump++;
}//if
else
pmin=pminprec;
}//for j
}//for i
f2<<max;
f1.close();
f2.close();
return 0;
}//main
int part(struct elem sir[2010], int jos, int sus)
{
int p=jos, q=sus;
struct elem temp;
while (p<q)
{
while ((p<=q)&&(sir[p].t<=sir[jos].t))
p++;
while ((p<=q)&&(sir[q].t>sir[jos].t))
q--;
if (p<q)
{
temp=sir[p];
sir[p]=sir[q];
sir[q]=temp;
}//if
}//while
temp=sir[q];
sir[q]=sir[jos];
sir[jos]=temp;
return q;
}//part
void qsort(struct elem sir[2010], int jos, int sus)
{
int p;
if (jos<sus)
{
p=part(sir, jos, sus);
qsort(sir, jos, p-1);
qsort(sir, p+1, sus);
}//if
}//qsort