Cod sursa(job #411591)

Utilizator zbarniZajzon Barna zbarni Data 4 martie 2010 23:38:04
Problema Orase Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<vector>
#define pb push_back
#define mp make_pair
#define f first
#define s second
using namespace std;
vector <pair <int, int> > a,b;
int maxh,maxp,n,m,maxx,maxx2;
int main()
{
	freopen("orase.in","r",stdin);
	freopen("orase.out","w",stdout);
	scanf("%d%d",&m,&n);
	int i,x,y;
	for (i=0;i<n;++i)
	{
		scanf("%d%d",&x,&y);
		a.pb(mp(x,y));
	}
	sort(a.begin(),a.end());
	for (i=0;i<n;++i)
	{
		int j=i+1;
		while (a[j].f==a[i].f)
		{	j++; }
		if (j-1!=i && a[j-2].s+a[j-1].s>maxx)
			maxx2=a[j-2].s+a[j-1].s;
		i=j-1;
		b.pb(mp(a[i].f,a[i].s));
	}	
	maxx=b[0].s+b[1].s+b[1].f-b[0].f;
	int maxp=b[0].s>=b[1].s?0:1;
	int minp=1-maxp;
	for (i=2;i<b.size();++i)
	{	
		int r1=b[i].s+b[i].f-b[minp].f+b[minp].s,r2=b[i].s+b[i].f-b[maxp].f+b[maxp].s;
		if (b[i].s+b[i].f-b[minp].f+b[minp].s>b[i].s+b[i].f-b[maxp].f+b[maxp].s && b[i].s+b[i].f-b[minp].f+b[minp].s>maxx)
		{
			maxx=b[i].s+b[i].f-b[minp].f+b[minp].s;
			if (b[minp].s<b[i].s) { maxp=i; }
			else { maxp=minp,minp=i; }
		}
		else if (b[i].s+b[i].f-b[minp].f+b[minp].s<b[i].s+b[i].f-b[maxp].f+b[maxp].s && b[i].s+b[i].f-b[maxp].f+b[maxp].s>maxx)
		{
			maxx=b[i].s+b[i].f-b[maxp].f+b[maxp].s;
			if (b[minp].s<b[i].s) { maxp=i; }
			else { maxp=minp,minp=i; }
		}
	}
	printf("%d\n",max(maxx,maxx2));
	return 0;
}