Cod sursa(job #2623749)

Utilizator dream3rDavid Pop dream3r Data 3 iunie 2020 17:41:27
Problema Secventa Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
//#include "pch.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>
#include <deque>
#include <algorithm>
#define ll long long int
#define len 1<<18
using	 namespace std;
vector<int>v(500005, 0);
deque<int>coada;
int n, k;
char buffer[len];
int pos = len;
int stanga, dreapta;
int maxx = INT_MIN;

inline char getChar(FILE* f)
{
	if (pos == len)
	{
		fread(buffer, 1, len, f);
		pos = 0;
	}
	return buffer[pos++];
}

inline int integer(FILE* f)
{
	int nr = 0, semn = 1;
	char ch;
	do
	{
		ch = getChar(f);
		if (ch == '-')
		{
			semn = -semn;
		}

	} while (!isdigit(ch));

	do
	{
		nr = 10 * nr + ch - '0';
		ch = getChar(f);

	} while (isdigit(ch));

	return semn * nr;
}

int main()
{
	FILE *f, *o;
	f = fopen("secventa.in", "r");
	o = fopen("secventa.out", "w");
	n = integer(f);
	k = integer(f);


	for (size_t i = 1; i <= n; i++)
	{
		v[i] = integer(f);

		while (!coada.empty() && v[i] <= v[coada.back()])
		{
			coada.pop_back();
		}

		coada.push_back(i);
		if (i - coada.front() + 1 > k)
		{
			coada.pop_front();
		}


		if (i > k && v[coada.front()] > maxx)
		{
			maxx = v[coada.front()];
			stanga = i - k + 1;
			dreapta = i;

		}


	}
	//cout << stanga << " " << dreapta << " " << maxx;
	fprintf(o, "%d %d %d", stanga, dreapta, maxx);
}