Pagini recente » Cod sursa (job #2171797) | Cod sursa (job #2525377) | Cod sursa (job #2727607) | Cod sursa (job #2515671) | Cod sursa (job #1152734)
#include <fstream>
#include <deque>
using namespace std;
//ifstream fin("secventa.in");
//ofstream fout("secventa.out");
struct ceva
{
int val, poz;
ceva()
{
val = 0;
poz = 1;
}
ceva(int V, int P)
{
val = V;
poz = P;
}
};
ceva ans;
deque<ceva> D;
int a[500001];
int main()
{
int n,k;
freopen("secventa.in","r",stdin);
freopen("secventa.out","w",stdout);
//fin>>n>>k;
scanf("%d",&n);
scanf("%d",&k);
for(int i=1;i<=n;i++)
//fin>>a[i];
scanf("%d",&a[i]);
for(int i=1;i<=k;i++)
{
while(!D.empty() && D.back().val>=a[i])
D.pop_back();
D.push_back(ceva(a[i],i));
}
ans = D.front();
for(int i=1+k;i<=n;i++)
{
while(!D.empty() && D.back().val>=a[i])
D.pop_back();
while(!D.empty() && D.front().poz<=i-k)
D.pop_front();
D.push_back(ceva(a[i],i));
if(ans.val < D.front().val)
ans = D.front();
}
int dr,st;
k--;
st = dr = ans.poz;
while(st-1>0 && a[st-1]>=ans.val && k)
{
st--;
k--;
}
while(a[dr+1]>=ans.val && k && dr<=n)
{
dr++;
k--;
}
printf("%d %d %d\n",st,dr,ans.val);
//fout<<st<<' '<<dr<<' '<<ans.val<<'\n';
//fin.close();
//fout.close();
return 0;
}