Pagini recente » Cod sursa (job #701679) | Cod sursa (job #2864502) | Cod sursa (job #419322) | Cod sursa (job #2200689) | Cod sursa (job #1968789)
#include <fstream>
#include <deque>
#include <vector>
using namespace std ;
ifstream cin ("deque.in") ;
ofstream cout ("deque.out") ;
#define tip int
deque <tip> D ;
/*D.push_back (x) => insereaza elementul x in spate
D.push_front (x) => insereaza elementul x in fata
D.pop_back() => scoate elementul x din spate
D.pop_front() => scoate elementul x din fata
D.size() => nr de elemente
D.empty() => daca e vida sau nu
D.front() => accesezi elementul din fata
D.back() => accesezi elementul din spate
Toate operatiile de mai sus se executa in O(1)*/
int main(int argc, char const *argv[])
{
int n , k ;
cin >> n >> k ;
vector <int> v (n + 1) ;
long long S = 0 ;
for (int i = 1 ; i <= n ; ++ i) {
cin >> v [i] ;
while (!D.empty() and v[i] <= v [D.back()]) {
D.pop_back () ;
}
if (D.size() and D.front() == i - k) {
D.pop_front() ;
}
D.push_back(i) ;
if (i >= k) {
S += v [D.front()] ;
// cout << v [D.front()] << "\n" ;
}
}
cout << S << '\n' ;
return 0;
}