Mai intai trebuie sa te autentifici.
Diferente pentru deque-si-aplicatii intre reviziile #83 si #84
Nu exista diferente intre titluri.
Diferente intre continut:
sum = 0; last = 0; // indicii head si tail ai dequeului
deque[head = tail = 1] = 0;
head = tail = 1; // poziţia lui bst[0] se inserează în deque deque[1] = 0;
pentru i = 1, N execută sum += S[i]; temp = bst[ deque[tail] ];
cât timp (head <= tail) şi S[ deque[tail] ] <= S[i] execută
cât timp (head <= tail) şi (S[ deque[tail] ] <= S[i]) execută
temp = Min(temp, iMin[tail]); tail --;
sfcâttimp
sfârşit;
// adaug poziţia i la deque tail ++; deque[tail] = i; // actualizez iMin[] iMin[tail] = temp;
// actualizez T[]
// actualizez T[], arborele de intervale de deque[]
update(T, tail, iMin[tail] + S[i]); // suma valorilor din [last, i] trebuie să nu depăşească M cât timp (head <= tail) şi (sum > M) execută sum -= S[last]; dacă (deque[head] == last) atunci head ++;
sfdacă
sfârşit;
last ++;
sfcâttimp// actualizez iMin[] iMin[head] = query(bst, last - 1, deque[head] - 1);
sfârşit; // actualizez iMin[], Tb[] arborele de intervale pe bst[] iMin[head] = query(Tb, last - 1, deque[head] - 1);
// actualizez T[] update(T, head, iMin[head] + S[ deque[head] ]); // reţin optimul pentru poziţia curentă bst[i] = query(T, head, tail);
sfpentru
// actualizez Tb[] update(Tb, i, bst[i]); sfârşit;
scrie bst[N]; Sfârşit. ==