Cod sursa(job #655129)

Utilizator mika17Mihai Alex Ionescu mika17 Data 1 ianuarie 2012 14:50:40
Problema Operatii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <fstream>
#include <vector>
#include <stack>
using namespace std;

#define max(a,b) ((a) > (b) ? (a) : (b))
int main()
{
	vector<unsigned int> v;
	{
		ifstream f("operatii.in");

		unsigned int N;
		f >> N;
		v.push_back(0);
		while(N--)
		{
			int t; f >> t; v.push_back(t + 1);
		}
		v.push_back(0);
	}

	unsigned int sol = 0;
	{
		stack <unsigned int> S;

		for(vector<unsigned int>::iterator e = v.begin() ; e != v.end() ; ++e)
		{
			if(S.size() >= 2)
			while(S.top() > *e) // (S.varf - 1 , S.varf , el.c.)
			{
				int c = S.top();
				S.pop();
				sol += c - max(S.top(),*e);
			}
			
			S.push(*e);
		} //in final ar trebui sa ramana doua valori "0" in stiva S
	}

	{
		ofstream g("operatii.out");
		g << (--sol);
	}
}