•toni2007
|
 |
« Răspunde #100 : Februarie 05, 2011, 20:23:09 » |
|
|
|
|
Memorat
|
|
|
|
•PetcuIoan
Strain
Karma: 72
Deconectat
Mesaje: 49
|
 |
« Răspunde #101 : Aprilie 20, 2011, 18:31:38 » |
|
Aceasta sursa este copiata dupa:http://infoarena.ro/job_detail/266861?action=view-source am observat ca a mai trimis cateva surse pe 4 martie 2009 direct de 100 ar merita verificate si ele
|
|
|
Memorat
|
|
|
|
•alex_bucevschi
Strain
Karma: 2
Deconectat
Mesaje: 19
|
 |
« Răspunde #102 : Martie 16, 2013, 09:22:12 » |
|
Salut!! Imi puteti spune unde depasesc timpul pe aceasta sursa #include <fstream> using namespace std; int main() { ifstream fin("datorii.in"); ofstream fout("datorii.out"); unsigned N,M,A[15010],i,T,V,C,P,Q,s,j; fin>>N>>M; for(i=1;i<=N;i++) fin>>A ; for(i=1;i<=M;i++) { fin>>C; if(C) { s=0; fin>>P>>Q; for(j=P;j<=Q;j++) s+=A[j]; fout<<s<<"\n"; } else { fin>>T>>V; A[T]-=V; } } return 0; }
|
|
|
Memorat
|
|
|
|
•SebiSebi
|
 |
« Răspunde #103 : Martie 16, 2013, 10:09:25 » |
|
Complexitatea programului tau este O(N*M), ceea ce nu este optim. Pentru 100 de puncte trebuie sa scoti O(M*log2 N). Incearca sa inveti arbori de intervale sau arbori indexati binar. Succes!
|
|
|
Memorat
|
|
|
|
•ionut98
Strain
Karma: 2
Deconectat
Mesaje: 44
|
 |
« Răspunde #104 : Ianuarie 26, 2014, 09:13:23 » |
|
datimi o idee cum sa fac ca programu sa nu mai iasa dinj limita de timp cod sursa:job #1073106 
|
|
|
Memorat
|
|
|
|
•PlayLikeNeverB4
|
 |
« Răspunde #105 : Ianuarie 26, 2014, 09:43:07 » |
|
Citeste threadul in care tocmai ai postat.
|
|
|
Memorat
|
|
|
|
•VVasy1997
Strain
Karma: 0
Deconectat
Mesaje: 1
|
 |
« Răspunde #106 : August 08, 2014, 13:17:47 » |
|
Stie cineva de ce imi da tot peste timp!!! Pe compul meu imi da 0.050 s dar dupa ce trimit programul scrie ca timpul e depasit #include<fstream> using namespace std; int main() { unsigned int m,n,a[15001],i,j,p,q,t,v,k,s; ifstream f("datorii.in"); ofstream g("datorii.out"); f>>n>>m; for(i=1;i<=n;i++) { f>>a ; } for(i=1;i<=m;i++) {f>>k; switch(k) {case 0: { f>>t>>v; a[t]=a[t]-v; } break; case 1: { f>>p>>q; s=0; for(j=p;j<=q;j++) { s=s+a[j]; } g<<s<<"\n"; } break;} } f.close(); g.close(); }
|
|
|
Memorat
|
|
|
|
•SebiSebi
|
 |
« Răspunde #107 : August 08, 2014, 14:07:46 » |
|
Iți iese din timp pentru ca testele folosite la evaluarea sursei tale au dimensiuni mult mai mari decât cel din exemplu. Programul tau nu este optim. Trebuie sa scoti O(M log N). Învață arbori de intervale sau arbori indexați binari. 
|
|
|
Memorat
|
|
|
|
•alexandru.ghergut
Strain
Karma: 0
Deconectat
Mesaje: 3
|
 |
« Răspunde #108 : Octombrie 11, 2015, 12:58:56 » |
|
Problema se poate face cu arbori de intervale? Am tot încercat să văd de ce o persoană ia TLE cu structura asta de date, dar acum văd că și sursa pe care am luat eu 100 ia TLE pe toate testele. Dacă n-am greșit la implementare, complexitatea e de O(NlogN + MlogN). Ar trebui să ruleze în ~0.0015 secunde, iar limita e 0.15.
|
|
|
Memorat
|
|
|
|
•klamathix
|
 |
« Răspunde #109 : Octombrie 11, 2015, 13:41:54 » |
|
Salut
Din câte îmi dau eu seama tu apelezi pentru ambii subarbori atât query-ul cât și update-ul de fiecare dată, ceea ce înseamnă că parcurgi tot arborele.
|
|
« Ultima modificare: Octombrie 11, 2015, 14:39:17 de către Mihai Calancea »
|
Memorat
|
|
|
|
•alexandru.ghergut
Strain
Karma: 0
Deconectat
Mesaje: 3
|
 |
« Răspunde #110 : Octombrie 11, 2015, 15:11:51 » |
|
Salut. La query verific de fiecare dată când intru în funcție dacă intervalul curent (cLeft, cRight - capete) se cuprinde în totalitate în intervalul dorit (left, right - capete) și returnez suma de pe interval în caz afirmativ. Apoi verific dacă nu se cuprinde deloc și returnez 0 în caz afirmativ. Apoi dacă se cuprinde parțial, îl sparg în 2 intervale și e adevărat că lansez unele apeluri degeaba, dar dacă vede că nu are loc o intersecție între intervale, îmi returnează 0 și nu continuă mai departe. La update dacă poziția e cuprinsă în intervalul curent, iar intervalul nu e de forma left == right, îl sparg în 2 intervale. Dacă intervalul e de forma left == right, mai fac o verificare să văd dacă sunt pe poziția bună, adun valoarea și mă opresc. Apoi de la frunză, mă duc înapoi și adaug val la toate intervalele prin care am trecut ca să ajung la frunză. Am mai trimis o modificare acum, unde vizitez doar subarborele care îmi trebuie și am folosit operații pe biți la înmulțirile/împărțirile cu 2. Însă... tot TLE  și e ciudat că am luat 100 pe sursa anterioară luna trecută. Dacă parcurgeam tot arborele, aveam O(N^2 + M*N) și asta sigur nu intra în timp. Mulțumesc pentru răspuns 
|
|
|
Memorat
|
|
|
|
•Gabryel9898
Strain
Karma: -1
Deconectat
Mesaje: 2
|
 |
« Răspunde #111 : Octombrie 13, 2015, 19:55:40 » |
|
De ce imi da 0 la toate? am inteles eu problema gresit?  # include <fstream> using namespace std; int main() { int M,N,s,i,P,Q,A[1000]; ifstream f1("datorii.in"); ofstream f2("datorii.out"); f1>>N>>M; for(i=1;i<=N;i++) f1>>A ; for (i=1;i<=M;i++) { f1>>Q; if(Q==0) { f1>>Q>>P; A[Q]-=P; } else { s=0; f1>>Q>>P; while(Q<=P) { s+=A[Q]; Q++; }; f2<<s<<'\n'; } } f1.close(); f2.close(); return 0;}
|
|
|
Memorat
|
|
|
|
•AlexandruValeanu
|
 |
« Răspunde #112 : Octombrie 13, 2015, 21:31:02 » |
|
Ai declarat vectorul prea mic.
|
|
|
Memorat
|
|
|
|
•alexandru.ghergut
Strain
Karma: 0
Deconectat
Mesaje: 3
|
 |
« Răspunde #113 : Octombrie 14, 2015, 22:44:44 » |
|
Până la urmă am luat 100 cu arbori de intervale + parsare 
|
|
|
Memorat
|
|
|
|
•tudorgalatan
Strain
Karma: -1
Deconectat
Mesaje: 27
|
 |
« Răspunde #114 : Mai 25, 2016, 12:44:06 » |
|
De ce am TLE pe toate testele? for (i=1; i<=N; i++) { fin >> A[i]; sum2(i,A[i]); } for (i=1; i<=M; i++) { fin >> type; if (type == 0) { fin >> T >> V; /// BUG A[T] -= V; for (j=1; j<=N; j++) tree[j] = 0; for (j=1; j<=N; j++) sum2(j,A[j]); } else { fin >> P >> Q; sum = sum1(Q) - sum1(P-1); fout << sum << '\n'; } }
int sum1 (int position) { int sum=0; while (position > 0) { sum += tree[position]; position -= (position^(position-1)) & position; } return sum; }
void sum2 (int position, int value) { while (position <= N) { tree[position] += value; position += (position^(position-1)) & position; } }
|
|
|
Memorat
|
|
|
|
•AlexandruValeanu
|
 |
« Răspunde #115 : Mai 25, 2016, 14:00:50 » |
|
Ai O(N) pe operatia de update.
|
|
|
Memorat
|
|
|
|
•tudorgalatan
Strain
Karma: -1
Deconectat
Mesaje: 27
|
 |
« Răspunde #116 : Mai 25, 2016, 21:19:13 » |
|
Până la urmă mi-am dat și eu seama de asta. Dar cum pot reduce timpul de execuție și optimiza procesul de update?
|
|
|
Memorat
|
|
|
|
•AlexandruValeanu
|
 |
« Răspunde #117 : Mai 25, 2016, 21:52:23 » |
|
Nu cred ca ai inteles cum functioneaza un aib. Update-ul il faci doar pe un singur element deci nu ai nevoie sa modifici tot vectorul (doar log(n) elemente). Sursa ta putin modificata : http://www.infoarena.ro/job_detail/1707845
|
|
|
Memorat
|
|
|
|
•tudorgalatan
Strain
Karma: -1
Deconectat
Mesaje: 27
|
 |
« Răspunde #118 : Iunie 08, 2016, 12:19:23 » |
|
Mulțumesc frumos! Acum iau 100 de puncte. Dar nu am înțeles prea bine de ce se pune "-V" la update.
|
|
|
Memorat
|
|
|
|
•AlexandruValeanu
|
 |
« Răspunde #119 : Iunie 08, 2016, 12:27:34 » |
|
A (achitare - se scade o valoare din suma restanta a unei zile anume)
|
|
|
Memorat
|
|
|
|
•GeoeyMexicanu
Strain
Karma: 0
Deconectat
Mesaje: 1
|
 |
« Răspunde #120 : Septembrie 25, 2016, 15:46:46 » |
|
M-ar putea ajuta cineva ? Am rezolvat problema , si cand rulez problema folosind datele de pe site , rezultatele sunt corecte , algoritmul nu depaseste timpul de executie . Oricum , pe site , toate raspunsurile apar a fi incorecte . Dar testul din exemplu pe care-l fac si in CodeBlocks , da rezultate corecte si lucreaza in timp . Imi pare rau daca intrebarea mea pare stupida , sunt nou in comunitate . Codul meu e acesta: #include <iostream> #include <fstream> using namespace std; ifstream f("datorii.in"); ofstream g("datorii.out"); unsigned int i,j,nr=0,x,y,z; unsigned int n,m,v[1010]; int main() { f>>n>>m; for(i=1;i<=n;i++) { f>>v; } while(m!=0) { nr=0; f>>x>>y>>z; if(x==0) { v[y]=v[y]-z; } else { for(i=y;i<=z;i++) nr=nr+v; if((m-1)!=0) g<<nr<<endl; else g<<nr; } m=m-1; } return 0; }
|
|
|
Memorat
|
|
|
|
•flaviu_2001
Strain
Karma: 1
Deconectat
Mesaje: 8
|
 |
« Răspunde #121 : Februarie 16, 2017, 22:07:09 » |
|
Are o problema evaluatorul? Am facut o sursa cu arbori de intervale si imi da 0p tle, am facut parsare tot 0p tle, apoi am luat si o sursa cu arbori indexati binar(cred) de ~20ms din cele de 100 si tot 0p da cu tleuri.
Edit: nevermind, trimisem eu sursele gresite
|
|
« Ultima modificare: Februarie 16, 2017, 22:18:16 de către Craciun Ioan Flaviu »
|
Memorat
|
|
|
|
•JohnnyT
Strain
Karma: 0
Deconectat
Mesaje: 1
|
 |
« Răspunde #122 : Martie 05, 2019, 10:22:37 » |
|
Pentru ca am mai vazut un mesaj de genul, las si eu, drept confirmare. Si in cazul meu, facand citirea cu fstream a rezultat in TLE la toate testele. Trecand pe cstdio, problema s-a rezolvat si am luat 100 de puncte.
|
|
|
Memorat
|
|
|
|
|