Cod sursa(job #1528570)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 19 noiembrie 2015 20:33:10
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
using namespace std;

int v[5000005],p[5000005];
char s[50000000*8];

int main()
{
    int n,k,x,i,j;
    int e,b;
    e = 0;
    b = 1;
    n = k = 0;
    FILE *fin;
    fin = fopen("deque.in", "r");
    freopen("deque.out", "w", stdout);
    fgets(s, 13, fin);
    for(i = 0;s[i] >= '0' && s[i] <= '9';i++){
        n = n*10 + (s[i]-'0');
    }
    for(i = i+1;s[i] >= '0' && s[i] <= '9';i++){
        k = k*10 + (s[i]-'0');
    }
    int mn = -1e9;
    int id,jd;
    fgets(s, 50000000*8, fin);
    for(j = 0,i = 1;i <= n;i++){
        int sw = 1;
        if(s[j] == '-'){
            sw = -sw;
            j++;
        }
        for(;s[j] >= '0' && s[j] <= '9';j++){
            v[i] = v[i]*10 + (s[j]-'0');
        }
        j++;
        v[i] *= sw;
    }
    for(i = 1;i <= n;i++){
        while(e >= b && v[i] < v[p[e]]){
            e--;
        }
        p[++e] = i;
        if(i >= k){
           if(p[b] == i-k){
                b++;
           }
           if(mn < v[p[b]]){
                mn = v[p[b]];
                id = i-k+1;
                jd = i;
           }
        }
    }
    fclose(fin);
    printf("%d %d %d",id,jd,mn);
    return 0;
}