Cod sursa(job #719063)

Utilizator Catah15Catalin Haidau Catah15 Data 21 martie 2012 13:05:05
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>

using namespace std;

#define maxN 50100
#define int64 long long
#define f first
#define s second
#define inf (1 << 30)

pair <int, int> D[maxN];
int64 A[4 * maxN], B[4 * maxN];


int main()
{
	freopen ("orase.in", "r", stdin);
	freopen ("orase.out", "w", stdout);
	
	int N, M;
	
	scanf ("%d %d", &N, &M);
	
	for (int i = 1; i <= M; ++ i) scanf ("%d %d", &D[i].f, &D[i].s);
	
	sort (D + 1, D + M + 1);
	
	int start = 0, dim = 0;
	
	for (int i = 1; i <= M; ++ i)
	{
		if (D[i].f > start)
		{
			A[++ dim] = A[dim - 1] + D[i].f - start;
			B[dim] = B[dim - 1] + D[i].f - start;
			start = D[i].f;
		}
		
		A[++ dim] = A[dim - 1] + D[i].s;
		B[dim] = B[dim - 1] - D[i].s;
		A[++ dim] = A[dim - 1] - D[i].s;
		B[dim] = B[dim - 1] + D[i].s;
	}
	
	int64 minim = 0, ans = - inf;
	
	for (int i = 1; i <= dim; ++ i)
	{
		if (A[i] - minim > ans) ans = A[i] - minim;
		if (B[i] < minim) minim = B[i];
	}
	
	printf ("%lld", ans);
	
	return 0;
}