Pagini recente » Cod sursa (job #1797881) | Cod sursa (job #1747493) | Cod sursa (job #398592) | Cod sursa (job #2530548) | Cod sursa (job #2509826)
#include <fstream>
#include <deque>
#define input "deque.in"
#define output "deque.out"
#define NMAX 5000005
using namespace std;
ifstream in(input);
ofstream out(output);
deque < int > decc;
int N, K;
int sir[NMAX];
void Read_Data()
{
in >> N >> K;
for(int i = 1; i <= N; i++)
in >> sir[i];
}
void Solve()
{
long long sol = 0;
for(int i = 1; i <= N; i++)
{
int x = sir[i]; // extrag elementul din coada
// Verific daca elementele din varful listei nu sunt depasite de limita
while(!decc.empty())
{
if(i - K >= decc.front()) decc.pop_front();
else break;
}
// Verific si scot elementele mai mari decat x
while(!decc.empty())
{
if(sir[decc.back()] > x) decc.pop_back();
else break;
}
decc.push_back(i);
if(i >= K)
{
sol += (long long)sir[decc.front()];
//out << sir[decc.front()] << "\n";
}
}
out << sol << "\n";
}
int main()
{
Read_Data();
Solve();
return 0;
}