Pagini recente » Cod sursa (job #3038841) | Cod sursa (job #931947) | Cod sursa (job #1416634) | Cod sursa (job #1881642) | Cod sursa (job #632780)
Cod sursa(job #632780)
#include <stdio.h>
#include <fstream>
#include <cstdlib>
using namespace std;
long coada[5000001];
long dreapta=0,stanga=1,vector[5000001],lungime,k;
int citire_vector()
{
scanf("%d %d",&lungime,&k);
for (int i=0;i<lungime;i++)
{
scanf("%d",&vector[i]);
}
}
/*void afisare_vector()
{
for (int i=0;i<lungime;i++)
{
cout<<vector[i]<<", ";
}
}
*/
bool push_stanga(int x)
{
if (dreapta<5000000)
{
for (int i=++dreapta; i>stanga; i--)
coada[i]=coada[i-1];
coada[stanga]=x;
return 1;
}
else
return 0;
}
bool push_dreapta(int x)
{
if (dreapta<5000000)
{
coada[++dreapta]=x;
return 1;
}
else
return 0;
}
int pop_dreapta()
{
if (stanga<=dreapta)
return coada[dreapta--];
else
return 0;
}
int pop_stanga()
{
if (stanga<=dreapta)
return coada[stanga++];
else
return 0;
}
/*bool afisare()
{
if (stanga<=dreapta)
{
cout <<"coada este: ";
for (int i=stanga;i<=dreapta;i++)
cout <<vector[coada[i]]<<" ";
}
else
cout <<"coada este goala!";
}*/
int main()
{
long long suma=0;
ifstream fin("deque.in");
ofstream fout("deque.out");
//scanf("%d %d ",&lungime,&k);
fin>>lungime>>k;
for (int i=0;i<lungime;i++)
{
//scanf("%d ",&vector[i]);
fin>>vector[i];
}
for (int i=0;i<lungime;i++)
{
if (coada[stanga]<i-k+1)
pop_stanga();
while ((vector[i]<=vector[coada[dreapta]]) and (stanga<=dreapta))
pop_dreapta();
push_dreapta(i);
if (i>=k-1)
//{
// printf("%d",vector[coada[stanga]]);
suma+=vector[coada[stanga]];
//}
}
fout<<suma;
// printf("%d\n",suma);
// system ("PAUSE");
return 0;
}