Pagini recente » Cod sursa (job #1018764) | Cod sursa (job #1416844) | Cod sursa (job #2105178) | Cod sursa (job #2631090) | Cod sursa (job #2208295)
#include <fstream>
#include <deque>
#include <vector>
#include <algorithm>
using namespace std;
class InParser {
private:
ifstream File;
static const unsigned int buffSZ = (1 << 15);
unsigned int buffPos;
char buff[buffSZ];
void _advance() {
if (++buffPos == buffSZ) {
buffPos = 0;
File.read(buff, buffSZ);
}
}
public:
InParser(const char *FileName) {
File.open(FileName);
buffPos = buffSZ - 1;
}
InParser& operator >>(int &no) {
int sgn = 1;
while (!isdigit(buff[buffPos])) {
if (buff[buffPos] == '-')
sgn = -1;
_advance();
}
no = 0;
while (isdigit(buff[buffPos])) {
no = no * 10 + buff[buffPos] - '0';
_advance();
}
no *= sgn;
return *this;
}
};
InParser fin("secventa.in");
ofstream fout("secventa.out");
int Arr[1000005];
deque <int> Deque;
int main() {
int N, K;
fin >> N >> K;
for (int idx = 1; idx <= N; ++idx)
fin >> Arr[idx];
for (int idx = 1; idx < K; ++idx) {
while (!Deque.empty() && Arr[Deque.front()] > Arr[idx])
Deque.pop_back();
Deque.push_back(idx);
}
int MaxIdx, Max = -30001;
for (int idx = K; idx <= N; ++idx) {
while (!Deque.empty() && Arr[Deque.front()] > Arr[idx])
Deque.pop_back();
Deque.push_back(idx);
if (Max < Arr[Deque.front()]) {
MaxIdx = idx;
Max = Arr[Deque.front()];
}
while (Deque.front() < idx + 2 - K)
Deque.pop_front();
}
fout << MaxIdx - K + 1 << ' ' << MaxIdx << ' ' << Max;
}