Wyszukiwanie binarne

0

Mam problem z tym zadaniem: https://main2.edu.pl/c/konkurs-podstaw-algorytmiki/p/akc/
Na 10 testów na sprawdzrace zalicza 9, a na ostatnim wywala, że przekroczono limit czasu. To jest mój kod:

#include <iostream>
using namespace std;
int main()
{
    unsigned rozmiar;
    cin >> rozmiar;
    long * tab = new long[rozmiar];
    for(int i = 0; i < rozmiar;i++)
        cin >> tab[i];
    unsigned q;
    cin >> q;
    for(int i = 0;i < q;i++)
    {
        long x;
        cin >> x;
        if(x > tab[rozmiar - 1] || x < tab[0])
            {
                cout << 0 << endl;
                continue;
            }
        unsigned poczatek, koniec, srednia;
        poczatek = 0;
        koniec = rozmiar - 1;
        while(poczatek < koniec)
        {
            srednia = (poczatek + koniec) / 2;
            if(tab[srednia] >= x)
                koniec = srednia;
            else poczatek = srednia + 1;
        }
        if(tab[poczatek] != x) // sprawdzenie czy wgl wystepuje ta liczba w tablicy
        {
            cout << 0 << endl;
            continue;
        }
        unsigned poczatekx = poczatek;
        koniec = rozmiar - 1;
        while(poczatek < koniec)
        {
            srednia = (poczatek + koniec + 1) / 2;
            if(tab[srednia] <= x)
                poczatek = srednia;
            else koniec = srednia - 1;
        }
        unsigned koniecx = koniec;
        cout << koniecx - poczatekx + 1<< endl;

    }

    delete [] tab;
    return 0;
}

Można jakoś przyśpieszyc robienie tego co ma robić? Chyba że cały algorytm jest zły i można to lepiej rozwiązać. Proszę o podpowiedzi.

1

Miałem podobny problem z tym zadaniem. Prawdopodobnie sprawdzarka jest popsuta. Wystarczy zamienić cin, cout na scanf, printf(funkcje z języka C) :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1