Cod sursa(job #2049239)

Utilizator marabaMara Branza maraba Data 26 octombrie 2017 23:14:35
Problema Secventa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <cstdio>
#include <deque>
#define DIM 8192 
#include <limits>
 
 
using namespace std;
 
char ax[DIM+16];
int pz;
 
struct nod { int p,v;
};
 
FILE * f,*g;
int n, k;
deque<nod> q;
 
inline void cit(int &x)
{
            x=0;
            while((ax[pz]<'0' || ax[pz]>'9') && (ax[pz]!='-'))
                        if(++pz==DIM)fread(ax, 1, DIM, f), pz=0;
             
            int neg=0;
            if(ax[pz]=='-')
            {
                        neg=1;
                        if(++pz==DIM)fread(ax, 1, DIM, f),pz=0;
            }
             
            while(ax[pz]>='0' && ax[pz]<='9')
            {
                        x=x*10+ax[pz]-'0';
                        if(++pz==DIM)fread(ax,1, DIM, f),pz=0;
            }
            if(neg) x=-x;
}
 
int main()
{
    int i,max,v1,x,y;
    nod e;
     
    f = fopen("secventa.in", "r");
    g = fopen("secventa.out", "w+");
    fscanf(f,"%d%d",&n,&k);
     
    max=-1<<30;
     
    cit(e.v); e.p=1;
    q.push_back(e);
     
    for (i=2;i<=n;i++)
    {
        if (i-q.front().p >= k)
            q.pop_front();
         
        cit(e.v); e.p=i; 
        while (!q.empty() && q.back().v>e.v)
            q.pop_back();
 
        q.push_back(e);
         
        if (i>=k)
        {
            v1=q.front().v;
         
            if (v1>max)
            {
                max=v1;
                x=i-k+1;
                y=i;
            }
        }
    }
     
    fprintf(g,"%d %d %d\n",x,y,max);
     
    fclose(f);
    fclose(g);
    return 0;
}