Cod sursa(job #1992719)

Utilizator Y0da1NUME JMECHER Y0da1 Data 21 iunie 2017 11:16:19
Problema Secventa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#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;

}