Pagini recente » Cod sursa (job #2316545) | Cod sursa (job #1131996) | Cod sursa (job #867584) | Cod sursa (job #1889287) | Cod sursa (job #1992719)
#include <iostream>
#include <fstream>
#include <deque>
#include <algorithm>
using namespace std;
deque <pair <int, int> > D;
char buf [3500001];
int num[500001];
int main()
{
bool sgn = 0; //0 - plus, 1 - minus
int i, nr=0, j=1;
int n, k, maxim =-2e9, b, e;
char c='1';
pair <int, int> x;
ifstream in ("secventa.in");
ofstream out ("secventa.out");
in>>n>>k;
in.get();
in.getline(buf, 3500001);
i=0;
while (c!=0)
{
c=buf[i];
if('0' <= c && c <='9')
{
nr*=10;
nr+= (c - '0');
++i;
}
else if (c=='-')
{
sgn = 1;
++i;
}
else
{
if (sgn)
nr*=-1;
num[j]=nr;
++j;
nr=0;
sgn = 0;
++i;
}
}
for(i=1;i<=n;++i)
{
x.first = i;
x.second = num[i];
if(!D.empty() && D.front().first <= i-k)
D.pop_front();
while (!D.empty() && D.back().second >= x.second)
{
D.pop_back();
}
D.push_back(x);
if(i>=k)
{
if(D.front().second > maxim)
{
maxim = D.front().second;
e=i;
b=e-k+1;
}
}
}
out<<b<<" "<<e<<" "<<maxim;
}