Pagini recente » Cod sursa (job #1697016) | Cod sursa (job #1262324) | Cod sursa (job #391375) | Cod sursa (job #264110) | Cod sursa (job #1815752)
#include <cstdio>
using namespace std;
#include <stdio.h>
#include <ctype.h>
class InParser {
private:
FILE *fin;
char *buff;
int sp;
char read_ch() {
++sp;
if (sp == 4096) {
sp = 0;
fread(buff, 1, 4096, fin);
}
return buff[sp];
}
public:
InParser(const char* nume) {
fin = fopen(nume, "r");
buff = new char[4096]();
sp = 4095;
}
InParser& operator >> (int &n) {
char c;
while (!isdigit(c = read_ch()) && c != '-');
int sgn = 1;
if (c == '-') {
n = 0;
sgn = -1;
} else {
n = c - '0';
}
while (isdigit(c = read_ch())) {
n = 10 * n + c - '0';
}
n *= sgn;
return *this;
}
InParser& operator >> (long long &n) {
char c;
n = 0;
while (!isdigit(c = read_ch()) && c != '-');
long long sgn = 1;
if (c == '-') {
n = 0;
sgn = -1;
} else {
n = c - '0';
}
while (isdigit(c = read_ch())) {
n = 10 * n + c - '0';
}
n *= sgn;
return *this;
}
}fin("secventa.in");
int dq[500005];
int v[500005];
int main()
{
freopen("secventa.out", "w", stdout);
int n, k, dr, dqst, dqdr;
int ans = -30002;
dqst = 1; dqdr = 0;
fin >> n >> k;
for (int i = 1; i <= n; ++i)
{
fin >> v[i];
if (dqst <= dqdr && dq[dqst] + k <= i)
++dqst;
while (dqst <= dqdr && v[i] < v[dq[dqdr]])
--dqdr;
dq[++dqdr] = i;
if (i >= k && v[dq[dqst]] > ans)
{
ans = v[dq[dqst]];
dr = i;
}
}
printf("%d %d %d\n", dr - k + 1, dr, ans);
return 0;
}