Mam problem a mianowicie robię zadanie z portalu MAIN2 https://main2.edu.pl/c/konkurs-podstaw-algorytmiki/p/akc/ . Program działa wszystko poprawnie, tylko w ostatnim teście jest przekroczenie limitu czasowego i nie wiem jak na to zaradzić i jak można napisać ten program żeby ten algorytm działał jeszcze szybciej.
#include <iostream>
using namespace std;
int minimum (int wartosc, int czastka[], int n){
int poczatek = 0;
int srodek;
int koniec = n - 1;
int minimum_dodatnie = -1;
while (poczatek < koniec){
srodek = (poczatek + koniec) / 2;
if (czastka[srodek] >= wartosc)
koniec = srodek;
else
poczatek = srodek + 1;
}
if (czastka[poczatek] == wartosc)
return poczatek + 1;
return 0;
}
int maximum (int wartosc, int czastka[], int n){
int poczatek = 0;
int srodek;
int koniec = n - 1;
int maximum_dodatnie = -1;
while (poczatek < koniec){
srodek = (poczatek + koniec + 1) / 2;
if (czastka[srodek] <= wartosc)
poczatek = srodek;
else
koniec = srodek - 1;
}
if (czastka[koniec] == wartosc)
return koniec + 1;
return -1;
}
int main() {
int n;
cin >> n;
int czastka[n];
for (int i = 0; i < n; ++i)
cin >> czastka[i];
int q;
cin >> q;
int wartosc[q];
for (int i = 0; i < q; ++i)
cin >> wartosc[i];
for (int i = 0; i < q; ++i){
int minimum_na_plusie;
int maximum_na_plusie = -1;
minimum_na_plusie = minimum(wartosc[i], czastka, n);
if (minimum_na_plusie)
maximum_na_plusie = maximum(wartosc[i], czastka, n);
int ilosc = maximum_na_plusie - minimum_na_plusie + 1;
cout << ilosc << endl;
}
}