•belgun_adrian
Strain
Karma: 5
Deconectat
Mesaje: 11
|
 |
« Răspunde #25 : Aprilie 24, 2009, 21:40:29 » |
|
pe pascal se poate lua 90 http://infoarena.ro/monitor?task=rmq&compiler=fpc&score_begin=90problema e din cauza citirii, care la pascal dureaza ceva. am intalnit la cateva probleme acest blocaj si se putea rezolva cu o parsare. daca citirea ar putea fi parsata s-ar rezolva, dar intrebarile sunt pe randuri diferite.
|
|
|
Memorat
|
|
|
|
•mlazari
Strain
Karma: 8
Deconectat
Mesaje: 28
|
 |
« Răspunde #26 : Aprilie 28, 2009, 19:26:14 » |
|
Eu cred ca e un pic cam mica limita de timp la aceasta problema. Eu am acumulat 100p. cu un program in C++, iar cu cel in Pascal-80p.(am implementat acelasi algoritm - cel dat la indicatii). Cred ca ar trebui pusa limita de timp astfel incat sa poti lua 100p. si cu un program in Pascal. Oricum voi trece si eu la C++ 
|
|
|
Memorat
|
|
|
|
|
•mlazari
Strain
Karma: 8
Deconectat
Mesaje: 28
|
 |
« Răspunde #28 : Aprilie 29, 2009, 11:35:21 » |
|
Da, cu SetTextBuf si sursa mea in Pascal ia 100  Merci mult!
|
|
|
Memorat
|
|
|
|
•belgun_adrian
Strain
Karma: 5
Deconectat
Mesaje: 11
|
 |
« Răspunde #29 : Mai 05, 2009, 20:09:14 » |
|
yey, chiar merge  Cu ocazia asta rezolvai si Deque-ul. Multumesc!
|
|
|
Memorat
|
|
|
|
•popoiu.george
|
 |
« Răspunde #30 : Ianuarie 10, 2010, 11:31:50 » |
|
Cred ca ar putea fi adaugata ca problema la care se foloseste de ideea de la RMQ : Stramosi
|
|
« Ultima modificare: Ianuarie 10, 2010, 15:46:16 de către Popoiu George »
|
Memorat
|
|
|
|
•APOCALYPTO
|
 |
« Răspunde #31 : Ianuarie 30, 2010, 13:53:38 » |
|
Nu vi se pare ca relatia de recurenta de pe topcoder pentru calcularea lui M [ i ] [ j ] e gresita? 
|
|
|
Memorat
|
|
|
|
•mathboy
|
 |
« Răspunde #32 : Ianuarie 30, 2010, 14:06:41 » |
|
Nu e gresita. Ei considera ca numararea elementelor din vector incepe de la 0 nu de la 1.
|
|
|
Memorat
|
|
|
|
•APOCALYPTO
|
 |
« Răspunde #33 : Ianuarie 30, 2010, 14:22:15 » |
|
Nu e gresita. Ei considera ca numararea elementelor din vector incepe de la 0 nu de la 1.
da dar atunci nu trebuia sa fie si i-1?
|
|
|
Memorat
|
|
|
|
•mathboy
|
 |
« Răspunde #34 : Ianuarie 30, 2010, 14:32:09 » |
|
Vezi ca ai in articol si o sursa care se bazeaza pe recurenta prezentata. Testeaz-o si ai sa vezi ca nu are vreun motiv sa nu functioneze. 
|
|
|
Memorat
|
|
|
|
•APOCALYPTO
|
 |
« Răspunde #35 : Ianuarie 30, 2010, 15:13:26 » |
|
Vezi ca ai in articol si o sursa care se bazeaza pe recurenta prezentata. Testeaz-o si ai sa vezi ca nu are vreun motiv sa nu functioneze.  Sursa este buna dar void process2(int M[MAXN][LOGMAXN], int A[MAXN], int N) { int i, j; //initialize M for the intervals with length 1 for (i = 0; i < N; i++) M[i][0] = i; //compute values from smaller to bigger intervals for (j = 1; 1 << j <= N; j++) for (i = 0; i + (1 << j) - 1 < N; i++) if (A[M[ i ][j - 1]] < A[M[i + (1 << (j - 1))][j - 1]]) M[ i ][j] = M[ i ][j - 1]; else M[ i ][j] = M[i + (1 << (j - 1))][j - 1]; }
partea cu bold nu e aceaiasi cu relatia de recurenta(nu se mai scade 1) desi incepe de la 0  .
|
|
|
Memorat
|
|
|
|
•Bogdan_tmm
|
 |
« Răspunde #36 : Ianuarie 31, 2010, 10:34:29 » |
|
0 1 2 3 4 5 indici 0 1 2 3 4 5 elemente lenght = 2^1 rmq [ i ] [2],i=1,i+2^1-1<6 0 1 i=0 ,dist=2 (1) 1 2 i=1 dist=2 (2) 2 3 i=2 dist=2 (3) 3 4 i=3 dist=2 (4) 4 5 i=4 dist=2 (5) lenght = 2^2 (defapt limita din dreapta e i+2^2-1 , de aia apare -1) rmq [ i ] [4] i=1,i+2^2-1<6 (0 1) (2 3) i=0 dist=4 (1 3) i=0,dist =2 sau i=0+2, dist=2 (3) (1 2) (3 4) i=1 dist=4 (2 4) i=1 dist=2 sau i=1+2,dist= 2 (4) etc :D Foloseste tag-ul code cand postezi astfel de mesaje. Devin mai usor de inteles.
|
|
« Ultima modificare: Ianuarie 31, 2010, 14:00:23 de către Paul-Dan Baltescu »
|
Memorat
|
|
|
|
•APOCALYPTO
|
 |
« Răspunde #37 : Ianuarie 31, 2010, 14:12:18 » |
|
0 1 2 3 4 5 indici 0 1 2 3 4 5 elemente lenght = 2^1 rmq [ i ] [2],i=1,i+2^1-1<6 0 1 i=0 ,dist=2 (1) 1 2 i=1 dist=2 (2) 2 3 i=2 dist=2 (3) 3 4 i=3 dist=2 (4) 4 5 i=4 dist=2 (5) lenght = 2^2 (defapt limita din dreapta e i+2^2-1 , de aia apare -1) rmq [ i ] [4] i=1,i+2^2-1<6 (0 1) (2 3) i=0 dist=4 (1 3) i=0,dist =2 sau i=0+2, dist=2 (3) (1 2) (3 4) i=1 dist=4 (2 4) i=1 dist=2 sau i=1+2,dist= 2 (4) etc :D Foloseste tag-ul code cand postezi astfel de mesaje. Devin mai usor de inteles. Ce-i asta? 
|
|
|
Memorat
|
|
|
|
•Bogdan_tmm
|
 |
« Răspunde #38 : Ianuarie 31, 2010, 16:25:43 » |
|
Incercai sa-i explic cum se alege minimul si de ce apare -1 acolo
|
|
|
Memorat
|
|
|
|
•robigi
Strain
Karma: 5
Deconectat
Mesaje: 40
|
 |
« Răspunde #39 : Iulie 23, 2010, 15:50:13 » |
|
as avea si eu o intrebare asa de nepriceput:
de ce imi merge mult mai rapid sursa daca folosesc: int rmq[18][100001]; decat daca folosesc int rmq[100001][18]; ?
tot restul codului fiind la fel, desigur cu schimbarile de rigoare gen rmq[j][k] schimbat in rmq[k][j]
|
|
|
Memorat
|
|
|
|
•mathboy
|
 |
« Răspunde #40 : Iulie 23, 2010, 16:03:41 » |
|
Presupun ca e vorba de cache. Procesorul executa mai repede operatiile daca se itereaza pe mai putine linii , mai multe coloane ale matricei decat mai multe linii - mai putine coloane
|
|
|
Memorat
|
|
|
|
•gabitzish1
|
 |
« Răspunde #41 : Iulie 23, 2010, 16:05:13 » |
|
|
|
|
Memorat
|
|
|
|
•robigi
Strain
Karma: 5
Deconectat
Mesaje: 40
|
 |
« Răspunde #42 : Iulie 24, 2010, 12:12:23 » |
|
multumesc, acum m-am prins ca era cache-ul de vina
|
|
|
Memorat
|
|
|
|
•livium
Strain
Karma: -2
Deconectat
Mesaje: 21
|
 |
« Răspunde #43 : Februarie 24, 2011, 22:01:16 » |
|
care este relatia de recurenta pe linii? cumva asta: rmq[i][j]=min(rmq[0][j],...,rmq[0][j+pow(2,i)-1]) ? daca asa e, atunci de ce mie imi da rmq[3][j]=min(rmq[0][j],...mrmq[0][j+6]); si nu j+7 la sfarsit ?
|
|
|
Memorat
|
|
|
|
•livium
Strain
Karma: -2
Deconectat
Mesaje: 21
|
 |
« Răspunde #44 : Februarie 25, 2011, 15:03:28 » |
|
formula pentru rmq[ i ][j] am luat-o de aici: http://www.descarca-x.info/showthread.php?tid=568dar repet: nu se verifica pentru i=3 Am I missing something? Va rog raspundeti-mi!!!
|
|
« Ultima modificare: Februarie 25, 2011, 15:26:53 de către Andrei Grigorean »
|
Memorat
|
|
|
|
•devilkind
|
 |
« Răspunde #45 : Februarie 26, 2011, 01:28:44 » |
|
Ai putea sa incerci sa deduci si singur formula, nu e chiar asa complicata, asta denota mai mult faptul ca nu ai inteles algoritmul. De altfel formula pe care o folosesti este ineficienta.
rmq[i ][j] = minimul pe sirul care incepe la pozitia j si are lungime 2^i rmq[i ][j] = min(rmq[i - 1][j], rmq[i - 1][j + 2 ^ (i -1)])
|
|
« Ultima modificare: Februarie 26, 2011, 22:52:10 de către Savin Tiberiu »
|
Memorat
|
|
|
|
•livium
Strain
Karma: -2
Deconectat
Mesaje: 21
|
 |
« Răspunde #46 : Februarie 26, 2011, 21:12:23 » |
|
Extraordinar! L-am inteles.  Ptiu... ce algoritm. Ma doare capul si acuma. Cine a inventat algoritmul asta cred ca n-avea ce face! Daca nu-mi dadeai explicatiile astea doua nu puteam sa-mi dau seama cum functioneaza . Merci mult! Toate cele bune
|
|
|
Memorat
|
|
|
|
•AndrewTheGreat
Strain
Karma: 4
Deconectat
Mesaje: 15
|
 |
« Răspunde #47 : Februarie 27, 2011, 10:24:35 » |
|
In sursa http://infoarena.ro/job_detail/542906?action=view-source declarasem gresit matircea in care imi construiesc RMQ-ul, si imi dadea incorect. Acum intrebarea e de ce nu imi dadea KBS? Adica eu aveam int RMQ[nmax][20] (vezi linia 10) si clar accesam RMQ[ceva][altceva > 20 in majoritatea cazurilor]. Stiam ca daca accesez un element din afara matricii iau KBS 11, nu-i asa?
|
|
|
Memorat
|
|
|
|
•blasterz
|
 |
« Răspunde #48 : Februarie 27, 2011, 13:46:41 » |
|
In sursa http://infoarena.ro/job_detail/542906?action=view-source declarasem gresit matircea in care imi construiesc RMQ-ul, si imi dadea incorect. Acum intrebarea e de ce nu imi dadea KBS? Adica eu aveam int RMQ[nmax][20] (vezi linia 10) si clar accesam RMQ[ceva][altceva > 20 in majoritatea cazurilor]. Stiam ca daca accesez un element din afara matricii iau KBS 11, nu-i asa? Daca ai int a[10][10] si accesezi a[3][11] defapt accesezi a[4][1]  (liniile sunt stocate consecutiv in memorie)
|
|
|
Memorat
|
|
|
|
•livium
Strain
Karma: -2
Deconectat
Mesaje: 21
|
 |
« Răspunde #49 : Martie 06, 2011, 21:58:51 » |
|
eu am inteles rmq-ul asta dar am o intrebare:
de ce folosim puteri ale lui 2 si nu ceva mult mai simplu precum o progresie aritmetica? in felul asta matricea ar fi mai mare ce-i drept insa query-ul ar fi mai rapid pentru ca nu ar mai fi nevoie sa calculam minimul dintre doua valori (deoarece nu vom mai folosi log)
cum m-am gandit eu:
a[ i ][ j ]=min(a[i-1][j],a[i-1][j+i-1]); a[ i ][ j ]=min(a[0][j],...,a[0][j+i]); deci a[ i ][ j ] este minimul pe sirul care incepe la j si are lungimea de i+1
prin urmare minimul din intervalul [x,y] ar fi pur si simplu a[ y-x ][ x ] (fara sa trebuiasca sa mai folosim vreo functie de minim)
deci, eu zic ca metoda asta a mea e mai eficienta fata de cea de pe site, atunci cand se folosesc foarte multe interogari.
Gresesc undeva?
|
|
« Ultima modificare: Martie 06, 2011, 22:11:35 de către livica »
|
Memorat
|
|
|
|
|