Cod sursa(job #717461)

Utilizator m_mihai92Mocanu Mihai m_mihai92 Data 19 martie 2012 22:19:41
Problema Secventa Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
#include <iostream>
using namespace std;

int min(int w[], unsigned long int lmp, unsigned long int nmp)
{
	int m=w[lmp];
	if(m>w[nmp])
		m=w[nmp];
	return m;
}
int main()
{
	unsigned long int n, k, c=1 ,p=0, poz=0, lmp=0;
	int base=-30001,b=-30001, a[500001];
	fstream f("secventa.in",ios::in);
	f>>n>>k;
	for (int i=0;i<n ;i++)
		{
			f>>a[i];
		}
	f.close();
	for (int i=1;i<n ;i++)
	{
//		cout<<"b="<<b<<"\n";
//		cout<<"p="<<p<<"\n";
//		cout<<"c="<<c<<"\n";
		if ((c==k)&&(base<b))
		{
			base=b;
			poz=p;
//			cout<<"base<b =>\n";
//			cout<<"base="<<base<<"\n";
//			cout<<"poz="<<poz<<"\n";
		}
		if (b>a[i])
		{
			p=i;
			c=1;
			lmp=i;
//			cout<<"b>a[i] =>\n";
//			cout<<"p="<<p<<"\n";
//			cout<<"c="<<c<<"\n";
		}
		else
		{
			if(c<k)
			{
				c++;
				b=min(a,lmp,p+c-1);
//				cout<<"c++ => c="<<c<<"\n";
			}

			else
			{
				p++;
				lmp=p;
				for (int j=p; j<p+c; j++)
				{
					if (a[j]<a[lmp])
						lmp=j;
				}
				b=a[lmp];
//				cout<<"p++ => p="<<p<<"\n";
				//c--;
			}
		}


	}
	b=min(a,lmp,p+c-1);
	if ((c==k)&&(base<b))
			{
				base=b;
				poz=p;
//				cout<<"base<b =>\n";
//				cout<<"base="<<base<<"\n";
//				cout<<"poz="<<poz<<"\n";
			}

	fstream g("secventa.out",ios::out);
	g<<poz+1<<" "<<poz+k<<" "<<base;
	//cout<<poz+1<<" "<<poz+k<<" "<<base;
	g.close();
	return(0);
}