Cod sursa(job #2047230)

Utilizator RazvanatorHilea Razvan Razvanator Data 24 octombrie 2017 17:39:35
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("secventa.in");
ofstream fout("secventa.out");

int dq[500005];

char s[255];
int n,t;

int find_minim(int a,int b)
{
    int q=100000;
    for (int i=a;i<=b;i++) {
        if (dq[i]<q) q=dq[i];
    }
    return q;
}

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') {
        t=t*10+s[i]-'0';
        i++;
    }

}

void parse_2()
{
    int k=0,x;     //parsare
    bool neg=false;

    // lucru
    int minim=100000;
    int st,dr;
    st=0;
    dr=0;

    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;

        if (dr-st<t) {
            dq[++dr]=x;
            if (minim>x) minim=x;
        }
        else {
            dq[++dr]=x;
            if (x>dq[st]) {
                while (dr-st>=t && x>dq[st]) {
                    st++;
                    if (dq[st-1]==minim) {
                        minim=find_minim(st,dr);
                    }
                }
            }
            }
    }
    fout<<st<<' '<<dr<<' '<<minim;
}

int main()
{
    fin.get(s,'\n');
    parse_1();
    fin>>ws;
    fin.get(s,255);
    parse_2();
}