Cod sursa(job #2284871)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 17 noiembrie 2018 18:27:42
Problema Secventa Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include<cstdio>
#include<limits.h>
using namespace std;
const int N=500001;
int deq[N];
int v[N];
int maxi=0;
int valmax=INT_MIN;

//parsare
FILE*fin,*fout;
const int  BUF = 1 << 17;
char buf[BUF];
int pos = BUF;

inline char next()
{
    if(pos == BUF)
        fread(buf, 1, BUF, fin), pos = 0;
    return buf[pos++];
}

inline int read()
{
    int x = 0, semn = 1;
    char ch = next();
    while(!isdigit(ch) && ch != '-')
        ch = next();
    if(ch == '-')
        ch = next(), semn = -1;
    while(isdigit(ch))
        x = x * 10 + ch - '0', ch = next();
    return x * semn;
}

int main()
{

    fin=fopen("secventa.in","r");
    fout=fopen("secventa.out","w");
    int i,vf=0,baza=1;
    int n,k;
    n=read();
    k=read();
    for(i=1;i<=n;i++){
       v[i]=read();
    }
    for(i=1;i<=n;i++){
      while(vf>=baza && v[deq[vf]]>=v[i]){
        vf--;
      }
      deq[++vf]=i;
      while(deq[baza]<=i-k)
        baza++;
      if(i>=k){
        if(valmax<v[deq[baza]]){
          maxi=i;
          valmax=v[deq[baza]];
        }
      }
    }
    int inc=maxi-k+1;
    while(inc>=1 && v[inc]>=valmax)
      inc--;
    inc++;
    fprintf(fout,"%d %d %d",inc,maxi,valmax);
    return 0;
}