Cod sursa(job #789942)

Utilizator VisuianMihaiMihai Visuian VisuianMihai Data 19 septembrie 2012 22:15:15
Problema Secventa Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;

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

int a[500001], maxim, semn[500001];
int k, n, i, y;
char s[1110001];
deque<int>q;
int main()
{
    maxim = -31000;
    fin>>n>>k;
    fin.get();
    fin.getline(s,11100001);
    int m = strlen(s);
    int x = 1;
    semn[1] = 1;
    while (i<m)
    {
        if ( s[i] == ' ')
        {
            x++;
            semn[x] = 1;
            i++;
        }
        else if ( s[i] == '-')
        {
            semn[x] = -1;
            i++;
        }
        else while ( s[i] <= '9' && s[i] >= '0')
        {
            a[x] = a[x]*10+(s[i]-48);
            i++;
        }
        a[x] *= semn[x];
    }
    for (i=1;i<=n;i++)
    {
        while (!q.empty() && a[q.back()]>=a[i])
        {
            q.pop_back();
        }
        q.push_back(i);
        if (q.front()==i-k)
        {
            q.pop_front();
        }
        if (i >= k && a[q.front()] > maxim )
            {
                maxim=a[q.front()];
                y=i;
            }
    }
    fout<<y-k+1<<" "<<y<<" "<<maxim<<"\n";
    return 0;
}