Cod sursa(job #1013574)

Utilizator hevelebalazshevele balazs hevelebalazs Data 21 octombrie 2013 10:34:34
Problema Secventa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#include <queue>
#define N 500000
#define fr(i,a,b) for(int i=a;i<b;++i)
using namespace std;
deque<int>q;
char s[N*10];
int a[N];
int l(int i){
    if(i<0) i=-i;
    if(i<10) return 1;
    if(i<100) return 2;
    if(i<1000) return 3;
    if(i<10000) return 4;
    return 5;
    }
int l1(int i){
    if(i==0) return 1;
    int s=0;
    if(i<0) s=1,i=-i;
    while(i) ++s,i/=10;
    return s;
    }
int main(){
    freopen("secventa.in","r",stdin);
    freopen("secventa.out","w",stdout);
    int n,k;
    int mv,ml,mr;
    mv=-33333;
    scanf("%i%i\n",&n,&k);
    gets(s);
    int p=0;bool neg;
    fr(i,0,n){
        neg=false;
        if(s[p]=='-') neg=true,++p;
        while(s[p]!=' '&&s[p]!='\0')a[i]=a[i]*10+(s[p]-'0'),++p;++p;
        if(neg)a[i]=-a[i];
        }
    int j;
    fr(i,0,n){
        while(!q.empty()&&q.front()>a[i]) q.pop_front();
        q.push_front(a[i]);
        if(i>=k-1){
            int m=q.back();
            if(m==a[i-k+1]) q.pop_back();
            if(m>mv){mv=m;mr=i;ml=i-k+1;}
            }
        }
    while(ml&&a[ml-1]>mv) --ml;
    printf("%i %i %i",ml+1,mr+1,mv);
    return 0;
    }