/*
* File: main.cpp
* Author: Piotr Tarsa
*/
#include <cassert>
#include <climits>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <ctype.h>
int adf88(int *tab, int length) {
if (--length > 0) {
int max = adf88(tab, length);
if (tab[max] > tab[length])
return max;
}
return length;
}
int wibowit(int *a, int l, int i, int gi, int gv) {
if (i == l)
return gi;
else if (a[i] < gv)
return wibowit(a, l, i + 1, gi, gv);
else
return wibowit(a, l, i + 1, i, a[i]);
}
int wibowit(int *a, int l) {
return wibowit(a, l, 0, -1, INT_MIN);
}
int petla(int *a, int l) {
int gi = -1;
int gv = INT_MIN;
for (int i = 0; i < l; i++)
if (a[i] >= gv) {
gi = i;
gv = a[i];
}
return gi;
}
int main(int argc, char** argv) {
const int32_t N = 45678;
int32_t * const tablica = new int[N];
for (int32_t i = 0; i < N; i++)
tablica[i] = rand();
{
int64_t suma = 0;
clock_t const start = clock();
for (int32_t i = N / 2; i < N; i++)
suma += adf88(tablica, i);
printf("%ld ", suma);
printf("%lu\n", clock() - start);
}
{
int64_t suma = 0;
clock_t const start = clock();
for (int32_t i = N / 2; i < N; i++)
suma += wibowit(tablica, i);
printf("%ld ", suma);
printf("%lu\n", clock() - start);
}
{
int64_t suma = 0;
clock_t const start = clock();
for (int32_t i = N / 2; i < N; i++)
suma += petla(tablica, i);
printf("%ld ", suma);
printf("%lu\n", clock() - start);
}
delete [] tablica;
}
LyogCiAqIEZpbGU6ICAgbWFpbi5jcHAKICogQXV0aG9yOiBQaW90ciBUYXJzYQogKi8KCiNpbmNsdWRlIDxjYXNzZXJ0PgojaW5jbHVkZSA8Y2xpbWl0cz4KI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjdGltZT4KI2luY2x1ZGUgPGN0eXBlLmg+CgppbnQgYWRmODgoaW50ICp0YWIsIGludCBsZW5ndGgpIHsKICAgIGlmICgtLWxlbmd0aCA+IDApIHsKICAgICAgICBpbnQgbWF4ID0gYWRmODgodGFiLCBsZW5ndGgpOwogICAgICAgIGlmICh0YWJbbWF4XSA+IHRhYltsZW5ndGhdKQogICAgICAgICAgICByZXR1cm4gbWF4OwogICAgfQogICAgcmV0dXJuIGxlbmd0aDsKfQoKaW50IHdpYm93aXQoaW50ICphLCBpbnQgbCwgaW50IGksIGludCBnaSwgaW50IGd2KSB7CiAgICBpZiAoaSA9PSBsKQogICAgICAgIHJldHVybiBnaTsKICAgIGVsc2UgaWYgKGFbaV0gPCBndikKICAgICAgICByZXR1cm4gd2lib3dpdChhLCBsLCBpICsgMSwgZ2ksIGd2KTsKICAgIGVsc2UKICAgICAgICByZXR1cm4gd2lib3dpdChhLCBsLCBpICsgMSwgaSwgYVtpXSk7Cn0KCmludCB3aWJvd2l0KGludCAqYSwgaW50IGwpIHsKICAgIHJldHVybiB3aWJvd2l0KGEsIGwsIDAsIC0xLCBJTlRfTUlOKTsKfQoKaW50IHBldGxhKGludCAqYSwgaW50IGwpIHsKICAgIGludCBnaSA9IC0xOwogICAgaW50IGd2ID0gSU5UX01JTjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbDsgaSsrKQogICAgICAgIGlmIChhW2ldID49IGd2KSB7CiAgICAgICAgICAgIGdpID0gaTsKICAgICAgICAgICAgZ3YgPSBhW2ldOwogICAgICAgIH0KICAgIHJldHVybiBnaTsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CgogICAgY29uc3QgaW50MzJfdCBOID0gNDU2Nzg7CiAgICBpbnQzMl90ICogY29uc3QgdGFibGljYSA9IG5ldyBpbnRbTl07CiAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBOOyBpKyspCiAgICAgICAgdGFibGljYVtpXSA9IHJhbmQoKTsKICAgIHsKICAgICAgICBpbnQ2NF90IHN1bWEgPSAwOwogICAgICAgIGNsb2NrX3QgY29uc3Qgc3RhcnQgPSBjbG9jaygpOwogICAgICAgIGZvciAoaW50MzJfdCBpID0gTiAvIDI7IGkgPCBOOyBpKyspCiAgICAgICAgICAgIHN1bWEgKz0gYWRmODgodGFibGljYSwgaSk7CiAgICAgICAgcHJpbnRmKCIlbGQgIiwgc3VtYSk7CiAgICAgICAgcHJpbnRmKCIlbHVcbiIsIGNsb2NrKCkgLSBzdGFydCk7CiAgICB9CiAgICB7CiAgICAgICAgaW50NjRfdCBzdW1hID0gMDsKICAgICAgICBjbG9ja190IGNvbnN0IHN0YXJ0ID0gY2xvY2soKTsKICAgICAgICBmb3IgKGludDMyX3QgaSA9IE4gLyAyOyBpIDwgTjsgaSsrKQogICAgICAgICAgICBzdW1hICs9IHdpYm93aXQodGFibGljYSwgaSk7CiAgICAgICAgcHJpbnRmKCIlbGQgIiwgc3VtYSk7CiAgICAgICAgcHJpbnRmKCIlbHVcbiIsIGNsb2NrKCkgLSBzdGFydCk7CiAgICB9CiAgICB7CiAgICAgICAgaW50NjRfdCBzdW1hID0gMDsKICAgICAgICBjbG9ja190IGNvbnN0IHN0YXJ0ID0gY2xvY2soKTsKICAgICAgICBmb3IgKGludDMyX3QgaSA9IE4gLyAyOyBpIDwgTjsgaSsrKQogICAgICAgICAgICBzdW1hICs9IHBldGxhKHRhYmxpY2EsIGkpOwogICAgICAgIHByaW50ZigiJWxkICIsIHN1bWEpOwogICAgICAgIHByaW50ZigiJWx1XG4iLCBjbG9jaygpIC0gc3RhcnQpOwogICAgfQoKICAgIGRlbGV0ZSBbXSB0YWJsaWNhOwp9Cg==