Pagini recente » Cod sursa (job #1916082) | Cod sursa (job #1359251) | Cod sursa (job #2534254) | Cod sursa (job #1400259) | Cod sursa (job #2042070)
#include <fstream>
#define Nmax 5000001
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
struct numar
{
int poz;
long long val;
}dq[Nmax];
int n,k;
int pr,ul;
long long s;
int main()
{
int i;
long long x;
fin>>n>>k;
fin>>x;
dq[1].val=x; dq[1].poz=1; pr=ul=1;
for(i=2;i<=n;i++)
{
//varful cozii va fi mereu minimul secventei curente
fin>>x;
//verificam daca minimul din coada si x pot face parte din aceeasi secventa
if(i-dq[pr].poz+1>k) pr++; //scoatem minimul din coada
//scoatem elementele din coada mai mari decat x, care nu mai au sansa sa fie minim in secventa cu x
while(ul>=pr&&x<dq[ul].val)ul--;
//il adaugam pe x in coada
++ul; dq[ul].val=x; dq[ul].poz=i;
//verificam daca avem o secventa de lungime k
if(i>=k)s=s+dq[pr].val;
}
fout<<s;
return 0;
}