Pagini recente » Cod sursa (job #1084728) | Cod sursa (job #1422666) | Cod sursa (job #2921624) | Cod sursa (job #547188) | Cod sursa (job #2713099)
#include <fstream>
#include<vector>
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
int n, k;
vector <int> v;
/*double exp(double x)
{
double sum = 0, act = x, k = 3.667;
for(double i = 1; i<=6; i++)
{
sum += (i - k) * act;
act *= x;
}
return sum;
}
double bs()
{
double lo = 0.0, hi = 5.0, mid;
while(hi - lo>0.001)
{
mid = (hi + lo) / 2;
if(exp(mid)<0.001 && exp(mid)>0.001)
return mid;
if(exp(mid)>0)
hi = mid;
else
lo = mid;
}
return mid;
}
int main()
{
//cout<<bs()<<'\n';
int rasp = 0;
for(int i = 100; i<1000; i++)
{
if(i%21==0)
{
if(i%10!=i/100)
rasp++;
else
cout<<i<<'\n';
}
}
cout<<rasp<<'\n';
return 0;
}*/
int maxMinInSegments(vector<int> arr, int m) {
vector<int> deq;
int deq_st = 0;//position at which deque starts
long long sum = 0;
for(int i = 0; i<(int)arr.size(); i++)
{
while((int)deq.size()>deq_st && arr[deq[deq.size() - 1]]>=arr[i])
{
deq.pop_back();
}
deq.push_back(i);
if(i - deq[deq_st]>=m)
{
deq_st++;
}
if(i>=m - 1)
{
sum += (long long)arr[deq[deq_st]];
}
}
return sum;
}
int main(){
in>>n>>k;
for(int i = 0; i<n; i++)
{
int x;
in>>x;
v.push_back(x);
}
out<<maxMinInSegments(v, k)<<'\n';
return 0;
}