*luai 70 cu 1 incorect

, trist cand implementezi o dinamica in ultima ora, si te prinzi in ultimele 5 min de chestia asta...ma rog.
O proprietate:
ai 2 nr. a si b atunci a&b + a|b = a + b
1 & 1 = 1; 1 | 1 = 1; 1 + 1 = 2 (se shifteaza bitul);
1 & 0 = 0; 1 | 0 = 1; 1 + 0 = 1;
etc.
Asta se aplica pt orice biti de aceeasi importanta, deci luand separat toti bitii din cele 2 numere, practic se aplica individual operatia si o sa dea a + b (se aplica doar la 2 nr., la mai multe nu mai e asa)
Fie A = maximul, de forma a[n]a[n-1]...a[k]a[k-1]...a[1].
Cazul 1: Presupunem ca secventa de sushi maxim il contine pe A si se continua spre dreapta cu P numere (spre stanga e analog). Aceste P numere le vom numi numere considerate pentru secventa.
Fie primii biti de la a[n] la a[k+1] comuni la toate numerele considerate. (Poate sa fie nu fie niciun bit.) Aplicand si respectiv sau si adunand, raman neschimbati, deci rezultatul este acelasi cu primii biti din 2A (se shifteaza la stanga). a[n]...a[k + 1] e secventa comuna maxima a partii cele mai semnificative => exista un numar B in grupul de numere considerate de forma a[n]...a[k + 1]b[k]b[k -1]...b[1] cu b[k] != a[k]. Cum A > B => a[k] = 1, b[k] = 0. Nu ne intereseaza primii biti de la a[n] la a[k +1], deci vom considera doar A' = 1a[k -1]a[k - 2]...a[1] si B' = 0b[k - 1]b[k - 2]...b[1]. Notam AND, rezultatul operatiei & pe grup, si OR, rezultatul operatiei | pe grup. => AND <= a[k -1]a[k -2]...a[1], iar OR <= 11...1 (k cifre de 1) = 1000..00 (k cifre de 0) - 1 => AND + OR <= 1000..00 (k cifre de 0) - 1 + a[k - 1]a[k -2]...a[1], dar 2A' = 2(1000..00 (k - 1 zerouri) + a[k - 1]a[k - 2]...a[1]) = 10000..00 (k cifre de 0) + 2 * a[k - 1]a[k - 2]...a[1]. Comparam cele doua relatii:
AND + OR ? 2A'
1000..00 (k zerouri) - 1 + a[k - 1]a[k -2]...a[1] ? 1000...00 (k zerouri) + 2 * a[k - 1]a[k - 2]...a[1]
-1 ? a[k - 1]a[k - 2]...a[1]
a[k - 1]a[k - 2]...a[1] >= 0, de unde => concluzia.
Alt caz ce trebuie analizat este cand secv. maxima nu include pe a. Notam numerele analog de forma X0b[1]b[2]b[3]...b[n] (a = X1a[1]a[2]...a[n]). Presupunem cazul maximal in care b[1] = b[2] =...b[n] = 1. Atunci aplicand sushi pe aceste numere se obtine X01111...110 (n de 1), in schimba 2a > (X1000...00 (n de 0) << 1 = X100...00 (n + 1 de 0)) deci > X011111...110, deci prob. e rezolvata.
LE: Am gresit ceva in demonstratie, o sa o rescriu.
LE2: Acum e corecta.