Pagini recente » Cod sursa (job #3288450) | Cod sursa (job #820050) | Cod sursa (job #941898) | Solutia problemei shoturi | Cod sursa (job #2623749)
//#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);
}