Pagini recente » Cod sursa (job #1034364) | Cod sursa (job #1777417) | Cod sursa (job #180873) | Cod sursa (job #1084847) | Cod sursa (job #2145939)
#include <deque>
#include <fstream>
using namespace std;
ifstream fin("secventa.in");
ofstream fout("secventa.out");
deque < int > deck;
char s[3000000];
int v[500015];
int n,k,cnt;
int min_st,min_dr,st,dr,maxim;
void parse_1()
{
int i=0;
while (s[i]>='0' && s[i]<='9') {
n=n*10+s[i]-'0';
i++;
}
i++;
while (s[i]>='0' && s[i]<='9') {
k=k*10+s[i]-'0';
i++;
}
}
void parse_2()
{
int k=0,x;
bool neg=false;
for (int i=1;i<=n;i++) {
x=0;
if (s[k]=='-') {neg=true;k++;}
while (s[k]>='0' && s[k]<='9') {
x=x*10+s[k]-'0';
k++;
}
if (neg) x=-x;
k++;
neg=false;
v[++cnt]=x;
}
}
int main()
{
fin.get(s,'\n');
parse_1();
fin>>ws;
fin.get(s,2550000);
parse_2();
for (int i = 1; i <= n; i++) {
if (!deck.empty() && deck.front() == i - k) deck.pop_front();
while (!deck.empty() && v[i] < v[deck.back()]) deck.pop_back();
deck.push_back(i);
if (i >= k && v[deck.front()] > maxim)
{
maxim = v[deck.front()];
min_st = i - k + 1;
min_dr = i;
}
}
fout<<min_st<<" "<<min_dr<<" "<<maxim;
}