Pagini recente » Cod sursa (job #359829) | Cod sursa (job #1125037) | Cod sursa (job #1913739) | Cod sursa (job #1478859) | Cod sursa (job #2279576)
#include <fstream>
#define NMAX 1000005
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
long long ARB[4 * NMAX + 100], val, pos, stanga, dreapta, minn;
void UpdateArbore(int nod, int st, int dr)
{
if(st == dr)
{
ARB[nod] = val;
return;
}
int mij = (st + dr) / 2;
if(pos <= mij)
UpdateArbore(nod * 2, st, mij);
else
UpdateArbore(nod * 2 + 1, mij + 1, dr);
ARB[nod] = min(ARB[nod * 2], ARB[nod * 2 + 1]);
}
void Query(int nod, int st, int dr)
{
if(stanga <= st && dr <= dreapta)
{
if(minn > ARB[nod])
minn = ARB[nod];
return;
}
int mij = (st + dr) / 2;
if(stanga <= mij)
Query(nod * 2, st, mij);
if(mij < dreapta)
Query(nod * 2 + 1, mij + 1, dr);
}
int main()
{
int n, m;
fin >> n >> m;
for(int i = 1; i <= n; ++i)
{
int x;
fin >> x;
val = x;
pos = i;
UpdateArbore(1, 1, n);
}
long long rez = 0;
for(int i = 1; i <= n - m + 1; ++i)
{
minn = 10000005;
stanga = i;
dreapta = i + m - 1;
Query(1, 1, n);
rez += minn;
}
fout << rez << '\n';
return 0;
}