Cod sursa(job #1176069)

Utilizator alevasluialeHuhurez Marius alevasluiale Data 25 aprilie 2014 15:41:45
Problema Deque Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>

using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
char buffer[5000000*10];
struct deq
{
    int min,pos;
} v[1000000];
int main()
{
    int n,k,i,r,u,vf=0,vf1=0;
    long long sol=0;
    fin>>n>>k;
    v[vf1].min=10000001;v[vf1].pos=0;
    for(i=0;i<k;i++)
    {  fin>>r;
        for(u=vf1;u>=vf;u--)
        {
            if(r<v[u].min&&u<vf1) v[u].min=r,v[u].pos=i,vf1=u;
            else if(r<v[u].min&&u==vf1) v[vf1].min=r,v[u].pos=i;
        }
        if(v[vf1].min!=r) v[++vf1].min=r,v[vf1].pos=i;
    }
    sol=v[vf].min;
    for(;i<n;i++)
    {
        fin>>r;
        for(u=vf;u<=vf1;u++) {if(v[u].pos<=i-k) vf++;else break;}
        for(u=vf1;u>=vf;u--)
        {
            if(r<v[u].min&&u<vf1) v[u].min=r,v[u].pos=i,vf1=u;
            else if(r<v[u].min&&u==vf1) v[vf1].min=r,v[u].pos=i;
        }
        if(v[vf1].min!=r) v[++vf1].min=r,v[vf1].pos=i;
        sol+=v[vf].min;
    }
    fout<<sol;
}