Cod sursa(job #1874142)

Utilizator MihalachiRazvanMihalachi Razvan MihalachiRazvan Data 9 februarie 2017 18:48:37
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <fstream>
#define dim  500001
using namespace std;
ifstream fin("secventa.in");
ofstream fout("secventa.out");
int n,k,mini,pozi,pozj,c=0,contor,st[dim],a[dim],maxim;
void minhip(int st[],int i)
{
    int s,d,aux;
     s=2*i;
     d=2*i+1;
    if(s<=k&&st[s]<st[i])
        mini=s;
        else
        mini=i;
     if(d<=k&&st[d]<=st[mini])
        mini=d;
     if(i!=mini)
     {
         aux=st[i];
         st[i]=st[mini];
         st[mini]=aux;
         minhip(st,mini);}
}
int main()
{
    fin>>n>>k;
    for(int i=1;i<=n;i++)
                fin>>a[i];
            for(int j=1;j<=k;j++)
                st[j]=a[j];
minhip(st,1);
maxim=st[1];
pozi=1;
pozj=k;
for(int i=k+1;i<=n;i++)
{
    int sw=1;
    for(int j=1;j<=k&&sw;j++)
        if(st[j]==a[i-k])
    {st[j]=a[i];
    sw=0;}
    minhip(st,1);
    if(maxim<st[1])
    {
        maxim=st[1];
        pozi=i-pozj+pozi;
        pozj=i;
        c=1;
    }
    else if(maxim==st[1]&&c==1)
    {
        if(pozj>i)
        {
        pozi=i-pozj+pozi;
        pozj=i;
        }
        c++;
    }
    else if(maxim==st[1]&&c>1)
    {
        if(pozi>(i-pozj+pozi))
        {
        pozi=i-pozj+pozi;
        pozj=i;
        }
        c++;
    }
}
fout<<pozi<<"  "<<pozj<<"  "<<maxim;
    return 0;
}