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.