Pagini recente » Borderou de evaluare (job #755002) | Cod sursa (job #565017) | Borderou de evaluare (job #2018453) | Borderou de evaluare (job #1076989) | Cod sursa (job #558182)
Cod sursa(job #558182)
#include<fstream>
#include<iostream>
using namespace std;
int a[5000001],q[5000001],n,k,pr,ul,minim,poz,min1[5000001];
long long suma = 0;
void Citire()
{
ifstream f ("deque.in");
f>>n>>k;
for (int i=1;i<=n;i++)
f>>a[i];
f.close();
}
int Minim(int x , int y)
{
int i,minim1=q[x],pz=x;
for (i=x;i<=y;i++)
if (q[i]<minim1) {minim1=q[i];pz=i;}
return pz;
}
void Deque()
{
int i;
pr=ul=1;
minim=a[1];
poz=1;
for (i=1;i<=k;i++)
{
q[ul++]=a[i];
if (minim>a[i]) {minim=a[i];poz=i;}
}
suma += minim;
for (i=k+1;i<=n;i++)
{
if (a[i]<=minim) {q[ul++]=a[i];minim=a[i];poz=i;}
else
{
q[ul++]=a[i];
if (poz==pr)
{
poz=Minim(pr+1,ul-1);
minim=q[poz];
//min1[++pr] = minim;
}
}
suma += minim; pr++;
}
}
void Afisare()
{
ofstream fout("deque.out");
fout<<suma<<"\n";
fout.close();
}
int main()
{
Citire();
Deque();
Afisare();
return 0;
}