infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Stefan Istrate din Martie 27, 2010, 13:45:09



Titlul: 1008 Inv
Scris de: Stefan Istrate din Martie 27, 2010, 13:45:09
Aici puteți discuta despre problema Inv (http://infoarena.ro/problema/inv).


Titlul: Răspuns: 1008 Inv
Scris de: Velici Vlad Sebastian din Martie 27, 2010, 21:34:48
Cum pot sa nu depasesc timpul la problema asta?

Am reusit sa o fac doar de 30 pct.


Titlul: Răspuns: 1008 Inv
Scris de: Andrei Misarca din Martie 27, 2010, 21:39:34
Cum pot sa nu depasesc timpul la problema asta?

Am reusit sa o fac doar de 30 pct.

Să o rezolvi în complexitate optimă, O(NlogN). :)


Titlul: Răspuns: 1008 Inv
Scris de: Velici Vlad Sebastian din Martie 27, 2010, 21:52:40
Usor de zis... Imi puteti da mai multe indicatii?


Titlul: Răspuns: 1008 Inv
Scris de: Dragos-Alin Rotaru din Martie 27, 2010, 22:05:06
Arbori indexati binar sau arbori de intervale. Tu alegi :)


Titlul: Răspuns: 1008 Inv
Scris de: Andrei Misarca din Martie 27, 2010, 22:06:10
Normalizezi numerele date, iar apoi ții un arbore indexat binar pentru a afla câte numere parcurse anterior sunt mai mari decât numărul actual.


Titlul: Răspuns: 1008 Inv
Scris de: Mircea Dima din Martie 27, 2010, 22:22:44
Exista o solutie folosind divide et impera (merge_sort putin modificat) care cred ca e mai abordabila de catre un elev de clasa a10a.


Titlul: Răspuns: 1008 Inv
Scris de: Cristi din Aprilie 09, 2010, 15:45:03
Salut!
Am incercat rezolvarea problemei ca in solutie(folosind un arbore de intervale) si iau 90pct(TLE pe testul 9),dar nu imi dau seama ce-as mai putea optimiza.
As vrea sa stiu daca normalizarea se mai poate imbunatati:
Cod:
          int arb[264010],n,v[100000]....;
          struct structura
          {
           int pos,val;
           };
           .....
           
           ifstream f("inv.in");
f>>n;
int i;
structura sort[100000];
for(i=0;i<n;++i)
{f>>v[i];sort[i].val=v[i];sort[i].pos=i;}
f.close();
qsort(sort,n,sizeof(structura),cmp);
int ct=0;
for(i=0;i<n;++i)
{
if(sort[i].val!=sort[i-1].val)++ct;
v[sort[i].pos]=ct;
}
Multumesc anticipat!


Titlul: Răspuns: 1008 Inv
Scris de: Simoiu Robert din Aprilie 09, 2010, 16:35:21
Incearca sa sortez cu ajutor Sortului din STL:
Cod:
sort (vector, vector + nr.elemente) - incepand de la vector[0] -> vector[nr.elemente-1]
sort (vector + 1, vector + nr.elemente + 1) - incepand de la vector[1]-> vector[nr.elemente]
Trebuie sa incluzi headerul algorithm.


Titlul: Răspuns: 1008 Inv
Scris de: Cristi din Aprilie 09, 2010, 17:25:04
Multumesc mult! :D
Am luat 100!

P.S. De acum inainte nu-am sa mai folosesc qsort-ul.


Titlul: Răspuns: 1008 Inv
Scris de: Simoiu Robert din Aprilie 09, 2010, 17:25:57
E mult mai util Sortul din STL si mai usor, pentru mai multe detalii aici (http://www.cplusplus.com/reference/algorithm/sort/) .


Titlul: Răspuns: 1008 Inv
Scris de: MciprianM din Mai 05, 2010, 18:26:08
Asta e prima problema pe care am facut-o cand am fost eu la excelenta pe clasa a 11-a la domnul profesor Ilea ( cu merge sort ) asa ca m-am bucurat mult cand am intalnit-o din nou. Si CezarMocan era acolo. Nu stiu cum de ia doar 60 de puncte. Poate ne spune ce algoritm incearca(cu cautare binara?) :D;
P.S.: Problema asta apare si in Cormen, iar pe timus este o variatie(problema 1090).


Titlul: Răspuns: 1008 Inv
Scris de: Andrei Grigorean din Mai 05, 2010, 20:09:16
Eh, Cezar ia 60 din cauza ca nu stie sa normalizeze :P.


Titlul: Răspuns: 1008 Inv
Scris de: Vlad Tarniceru din Decembrie 27, 2010, 21:55:18
din complexitatea oficiala (NlogN), logN e de la cautare binara?


Titlul: Răspuns: 1008 Inv
Scris de: Mircea Dima din Decembrie 27, 2010, 22:04:27
Nu... sunt 2 solutii. La una logn vine de la aib / arbore de intervale.
Iar la cealalta solutie e un fel de merge-sort :)


Titlul: Răspuns: 1008 Inv
Scris de: Mihai Visuian din Decembrie 22, 2011, 19:18:03
Merge sort, aib sau robert spunea quicksort in STL. Oare un radix sort nu ar merge?


Titlul: Răspuns: 1008 Inv
Scris de: Simoiu Robert din Decembrie 22, 2011, 19:45:48
Merge sort, aib sau robert spunea quicksort in STL. Oare un radix sort nu ar merge?
Daca merge N log N, o sa mearga si radix sortul in N * C (C = constanta mica). Si vezi ca in STL e introsort, nu quicksort :P.


Titlul: Răspuns: 1008 Inv
Scris de: Mihai Calancea din Decembrie 22, 2011, 20:30:28
Radix sort-ul nu e N * constanta mica. N* lungimea medie a radixului eventual, si nu ai cum sa alegi un radix care sa nu depinda nici de N si nici de magnitudinea numerelor.
Vezi ca tu trebuie sa numeri inversiunile, nu sa sortezi. Gandeste-te la asta.


Titlul: Răspuns: 1008 Inv
Scris de: Mihai Visuian din Decembrie 22, 2011, 21:57:41
Ceva nu e bine. Imi da KBS la toate si daca declar vector de 5.000.000 sau 100.001 si nu stiu de ce.


Titlul: Răspuns: 1008 Inv
Scris de: andreycurent din Februarie 18, 2012, 10:27:40
Am normalizat vectorul.
Incerc sa fac un arbore de intervale in care: in nodurile interne memorez minimul din intervale. Daca minimul e mai mare decat elementul actual, atunci am gasit ,,lungimea intervalului" inversiuni si nu caut mai departe in acel interval. Daca am ajuns pe frunza, compar cu elementul actual si daca e mai mare(frunza), adun la rezultat 1. Apoi inserez in arbore elementul actual ... Ori ideea de a folosi arborele de intervale nu e buna, ori implementarea ca iau 20 de puncte  :sad:
Implementarea e cam identica cu problema din arhiva educationala.

Update: Rezolvata, nu era ideea buna de folosire a arborelui.


Titlul: Răspuns: 1008 Inv
Scris de: Radu-Andrei Szasz din Martie 01, 2012, 12:33:22
Am implementat ideea cu merge sort in O(n log n) si imi da ok pe toate testele pe care mi le-am dat eu, dar la evaluare prind numai testul 10. Mi-ati putea da unul din testele de la aceasta problema sa imi dau seama ce nu fac bine?

Multumesc anticipat!

LE: am rezolvat. Uitam sa fac restul impartirii :))


Titlul: Răspuns: 1008 Inv
Scris de: Ion Ureche din Martie 04, 2012, 14:50:58
Am facut o rezolvare dupa cum e spus in solutia oficiala dar iau doar 70p. Mă gândesc că greseala ar putea fi in cautarea numarului de pozitii mai mari ca cea curenta.
Eu fac asa:partea cu sortarea , apoi caut in arbore pozitia curenta+1 si cind o gasesc ca limita de jos a intervalului ce-l contine nodul dat atunci adaug valoarea data si adaug si valoarea descendentului drept in caz ca div+1>val , apoi introduc in arbore si pozitia elementului curent. Poate are cineva idei unde ar putea fi greseala ?


Titlul: Răspuns: 1008 Inv
Scris de: Procopliuc Adrian din Martie 04, 2012, 15:20:20
Daca folosesti functia sort din STL vezi sa compari si pozitiile elementelor in caz de egalitate(dupa sortare elementele egale nu pastreaza ordinea din vector).Asta greseam eu,poate te ajuta si pe tine.


Titlul: Răspuns: 1008 Inv
Scris de: Ion Ureche din Martie 04, 2012, 15:42:02
Folosesc sortarea din stl ,dar am facut functia de comparare aparte, si am si verificat sortarea pe asha cazuri . Poate cineva care a facut cu arbori de intervale sa-mi explice poate cumva altfel ar trebui sa lucrez cu arborele...

L.E. S-a rezolvat. Era problema cu functia de comparare a sortare , in ciuda faptului ca credeam ca merge perfect sortarea. :D


Titlul: Help. Cum descarc solutiile cpp trimise de participanti?
Scris de: Mircea Tirziu din Mai 16, 2014, 10:12:09
Help!!! Cum descarc solutiile cpp trimise de participanti?


Titlul: Răspuns: 1008 Inv
Scris de: Pirtoaca George Sebastian din Mai 16, 2014, 12:18:31
La acesta problema accesul la toate sursele nu este liber. Vei putea vedea sursele celorlalți după ce rezolvi problema.


Titlul: Răspuns: 1008 Inv
Scris de: Gafton Mihnea Alexandru din Noiembrie 29, 2014, 10:50:18
Numerele sunt obligatoriu distincte?


Titlul: Răspuns: 1008 Inv
Scris de: George Marcus din Noiembrie 29, 2014, 14:04:33
Nu.


Titlul: Răspuns: 1008 Inv
Scris de: pirgarivadim din Iunie 05, 2017, 22:19:51
Va rog cineva codul complet,multumesc anticipat :thumbup: