Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 1644 TREES  (Citit de 9832 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« : August 31, 2008, 16:22:14 »

https://www.spoj.pl/problems/TREEOI14/

Un hint ceva? ma tot gandesc de aseara la problema asta si nu prea mi-a iesit nimic mai bun de n^2. M-am uitat la timpi celor care au AC-uri si par ca au rezolvari destul de proaste.
Memorat
filipb
Nu mai tace
*****

Karma: 232
Deconectat Deconectat

Mesaje: 929



Vezi Profilul
« Răspunde #1 : August 31, 2008, 20:10:20 »

Uite o rezolvare O(N log2 N):

Sa notam H = |h1-h2| + ... + |hn-1 - hn| si cu SVi = |hi-1-hi| - |hi-hi+1|.
Pentru primul si ultimul pom putem verifica liniar cu care e optim sa le inlocuim: 2 * O(N) = O(N).
Pentru un pom i, 1 < i <  N, trebuie sa aflam care e cel mai bun pom j cu care putem sa il inlocuim. Calculam in O(1) valoarea inlocuirii daca j = 1 sau j = N si acum vrem sa det. 1 < j < N a. i.
H - SVi - SVj + |xj-1-xi| + |xi-xj+1| + |xi-1-xj| + |xj-xi+1| sa fie minim.

Sa consideram punctele in plan de coordonate (xj-1, xj) care sa aiba asociat costul xj+1. Consideram evenimente pe axa temporala de genul:
* la momentul de timp xj+1 adaugam punctul (xj-1, xj) in plan

Cand inseram punctul (xi-2, xi-1) de cost xi putem afla raspunsul pe care il vrem in log2N, tratand niste cazuri. Putem presupune de ex. ca xi apartine intervalului [xj-1, xj+1] si ca xi-1 < xj. Asta determina un dreptunghi in plan si o expresie fixa in functie de j care trebuie minimizata => arbore de intervale 2D cu memorie O(N log N). Mai clar probl se rezuma la:

Ai n puncte in plan si operatii de forma: "pune un punct in plan de cost dat" si "afla intr-un dreptunghi care e costul minim". Poti folosi ideea de la arborele 2D de aici, numai ca tu trebuie sa tii pe fiecare nivel (logN nivele in total) cate un alt arbore de intervale, nu un simplu vector, ca sa poti face si query si update Smile.

E cam jegos de implementat si e destul de incalcita solutia, mai ales ca ai vreo 6 cazuri Smile. S-ar putea sa existe si o solutie mai buna, asta a fost insa prima idee care mi-a venit Banana
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines