Pagini recente » Cod sursa (job #2581918) | Cod sursa (job #2445190) | Cod sursa (job #2458669) | Cod sursa (job #1312165) | Cod sursa (job #2815110)
#include <bits/stdc++.h>
using namespace std;
class InputReader {
public:
InputReader() {}
InputReader(const char *file_name) {
input_file = fopen(file_name, "r");
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
inline InputReader &operator >>(int &n) {
while(buffer[cursor] < '0' || buffer[cursor] > '9') {
advance();
}
int semn = 1;
if (buffer[cursor] == '-')
semn = -1, advance();
n = 0;
while('0' <= buffer[cursor] && buffer[cursor] <= '9') {
n = n * 10 + buffer[cursor] - '0';
advance();
}
n *= semn;
return *this;
}
private:
FILE *input_file;
static const int SIZE = 1 << 17;
int cursor;
char buffer[SIZE];
inline void advance() {
++ cursor;
if(cursor == SIZE) {
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
}
};
InputReader in("secventa.in");
ofstream out("secventa.out");
int n,k,maxim = -1e9,st,dr,x;
deque<pair<int,int>>d;
int main()
{
in >> n >> k;
for (int i = 1; i <= n; i++)
{
in >> x;
while (d.size() and d.front().second < i - k + 1)
d.pop_front();
while (d.size() and d.back().first >= x)
d.pop_back();
d.push_back(make_pair(x,i));
if (i >= k and d.front().first > maxim)
{
maxim = d.front().first;
st = i - k + 1;
dr = i;
}
}
out << st << " " << dr << " " << maxim;
return 0;
}