Cod sursa(job #810276)

Utilizator dariusdariusMarian Darius dariusdarius Data 9 noiembrie 2012 23:41:15
Problema Carnati Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
struct MyStruct {int t,p;};
MyStruct a[2005];
int sp[1505];
inline bool MyComp(MyStruct a, MyStruct b)
{
	return a.t<b.t;
}
int main()
{
	freopen("carnati.in","r",stdin);
	freopen("carnati.out","w",stdout);
	int n,c,i,cf,u,max=-2000000000;
	
	//citire, sortare:
	scanf("%d%d",&n,&c);
	for(i=1;i<=n;i++)
		scanf("%d%d",&a[i].t,&a[i].p);
	sort(a+1,a+n+1,MyComp);
	
	//fixare cost:
	
	for(int cc=1;cc<=n;cc++)
	{
	cf=a[cc].p;
	//sume partiale:
	u=1;sp[0]=0;
	for(i=1;i<=a[n].t;i++)
	{
		sp[i]=sp[i-1]-c;
		while(a[u].t==i)
		{
		if(a[u].p>=cf)
			sp[i]=sp[i]+cf;
		u++;
		}
	}
	
	//gasire rezultat:
	int min=sp[0];
	for(i=1;i<=a[n].t;i++)
		{
		if(sp[i]-min>max)
			max=sp[i]-min;
		if(sp[i]<min)
			min=sp[i];
		if(sp[i]-min>max)
			max=sp[i]-min;
		}
	}
	printf("%d\n",max);
	return 0;
}