Folositi {@freopen()@} in loc de {@fopen()@} deoarece este mai comod, in special la concursurile in care intrare si iesirea sunt standard.
== code(c) |
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
==
p(pre). {@freopen("in.txt", "r", stdin);@}
{@freopen("out.txt", "w", stdout);@}
h2. Cautare binara (ideea originala de la Mihai Patrascu)
Urmatorul cod este de aproximativ $4$ ori mai rapid (am testat cu cautare binara ca in manual) , mai usor de inteles, mai flexibil si mai scurt... ce ati putea dori mai mult?
== code(c) |
int N, A[N];
int binary_search(int val)
{
int i, step;
for (step = 1; step < N; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step < N && A[i + step] <= val)
i += step;
return i;
}
==
p(pre). {@int N, A[N];@}
{@int binary_search(int val)@}
{@{@}
{@ int i, step;@}
{@ for (step = 1; step < N; step <<= 1);@}
{@ for (i = 0; step; step >>= 1)@}
{@ if (i + step < N && A[i + step] <= val)@}
{@ i += step;@}
{@ return i;@}
{@}@}
Procedura de mai sus face cautarea binara folosind puteri a lui $2$ in ordine descrescatoare, practic incerc sa determin fiecare bit al rezultatului.