Pagini recente » Cod sursa (job #852799) | Cod sursa (job #3125600) | Sport2 | Cod sursa (job #1627630) | Cod sursa (job #2703337)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in ("carnati.in");
ofstream out ("carnati.out");
const int T=1501;
const int N=2001;
long long sume[T];
struct timp
{
int t;
int p;
};
timp v[N];
int c,n;
long long maxim=0;
bool compara(timp a,timp b)
{
if (a.t==b.t) return a.p<b.p;
return a.t<b.t;
}
void incearca (int pret)
{
int i,j=0;
sume[0]=0;
sume[0]-=c;
while (v[j].t==0 && v[j].p>=pret && j<n){
sume[0]+=pret;
j++;
}
maxim=max(maxim,sume[0]);
for (i=1;i<T;i++){
sume[i]=0;
while (v[j].t<i && j<n){ j++;}
sume[i]-=c;
sume[i]+=max(sume[i-1],(long long)0);
while (v[j].t==i && v[j].p>=pret && j<n){
sume[i]+=pret;
j++;
}
maxim=max(maxim,sume[i]);
}
}
int main()
{
int i;
in>>n>>c;
for (i=0;i<n;i++){
in>>v[i].t>>v[i].p;
}
sort (v,v+n,compara);
for (i=0;i<n;i++){
incearca(v[i].p);
}
out<<maxim;
return 0;
}