Cod sursa(job #2705005)

Utilizator maryyMaria Ciutea maryy Data 11 februarie 2021 19:32:33
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
 /*
STIVA/COADA DUBLA = double ended queue
            = deque
      d[p]..........d[u]
  <-se pleaca ....se vine/se pleaca
      p++          u++ /   u--
n=9   k=3
i =    1 2 3 4 5 6 7 8 9
v[i]=  3 1 5 2 4 1 8 2 5
d[p]..........d[u]
v[d[p]]>=.......>=v[d[u]]
  7 9
s=0+v[3] + v[3] + v[3] + v[5] + v[7] + v[7] +v[7]
Suma maximelor tuturor secventelor
de k elemente
*/
int v[5000001];
int d[5000001]; // 6+5+4+3+2+3+5
int main()
{
  int n,k;
  long long s=0;
  in>>n>>k;
  for(int i=1; i<=n; i++)
  {
    in>>v[i];
  }
  int p=1, u=1;
  d[1]=1; if(k==1)s=v[1];
  for(int i=2; i<=n; i++){
    // v[i-k+1]    .... v[i] o secventa
    // i>=k
    while(v[i]<v[d[u]] && u>=p)u--;
    // se poate scoate tot  u==p-1
    u++; // vine in deque
    d[u]=i;
    if(i>=k && d[p]<i-k+1)p++;
    if(i>=k) s=s+ v[d[p]];
  }
  out<<s;
}