Problem z czasem w programie

0

Witam mam problem z zadaniem. Kod jest dobry i działa ale testerka pokazuje że przekroczyłem limit czasu i niewiem jak moge to jeszcze bardziej przyspieszyć i prosiłbym o pomoc w przyspieszeniu. Poniżej wkleję mój kod.
PYTANIE GŁOWNE: ile jest pizzerii na przedziale [Lj Rj], w których kazdy zje jednakowa liczb ˛e kawałków?

#include <iostream>
using namespace std;
const int MAX=100000;
int tab[MAX+1];
int main(){
 std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);
int n,q,l,r,k,s;
cin>>n>>q;
int tab[n];

for(int i=0;i<n;i++)
{
    cin>>tab[i];
}

for(int i=0;i<q;i++)
{   s=0;
      cin>>l>>r>>k;
    for(int j=l;j<=r;j++)
    {
        if(tab[j-1]%k==0)
            s++;
    }
      cout<<s<<endl;
}

return 0;
}

Wejscie ´

8 24 9 2 7 6 1   -N liczb które mówią na ile kawałków w danej pizzeri kroi sie pizze                                                                                                       
2 5 3               }                                                                                                                              
1 7 2                }        (Q zapytań 2 i 5 tworzy przedział do jakich pizzeri będą zaglądać oraz    3 mówi liczbe osob                                                                                                                                                                                          
6 7 15              }
3 4 3               }

wyjscie: trzeba wypisać Q wierszy z odpowiedzią na zapyatnie
2
4
0
1

Wiem mogłem zamieszać trochę ale nie chce wklejać całej treści. I proszę o pomoc w przyspieszeniu kodu.

2
  1. Daj linka do zadania, bo nie wiadomo co to ma robić.
  2. Formatuj kod tak, żeby ci i nam pomagało (większość IDE robi to automatycznie) np:
#include <iostream>
using namespace std;

const int MAX = 100000;
int tab[MAX + 1];

int main()
{
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);
    int n, q, l, r, k, s;
    cin >> n >> q;
    int tab[n];

    for (int i = 0; i < n; i++) {
        cin >> tab[i];
    }

    for (int i = 0; i < q; i++) {
        s = 0;
        cin >> l >> r >> k;
        for (int j = l; j <= r; j++) {
            if (tab[j - 1] % k == 0)
                s++;
        }
        cout << s << endl;
    }

    return 0;
}
  1. zmień endl na '\n'
  2. pisz w C++ a nie w C, czyli unikaj tablic C na rzecz std::vector
  3. oducz się stosować zmienne globalne ASAP
0

W Bajtocji jest N pizzerii, wszystkie leza wzdłuz jednej ulicy. Tak sie składa, ze jest to tez ulubiona ulica ˙
Bajtka, po której czesto spaceruje ze swoja ekipa. W i-tej pizzerii pizza krojona jest na Ai kawałków. Kazdy ˙
kawałek przypada jednej osobie, nie mozna wiec ich dzieli c. Jak wiadomo, pizza w Bajtocji jest tak pyszna, ze˙
kazdy zjada cała swoja porcje i cała pizza zostaje zjedzona. Bajtek i jego kumple zawsze chodzili do pizzerii ˙
Ovarb, gdzie mogli sie podzielic po równo, ale teraz gdy niektórzy znalezli sobie dziewczyny, Bajtek musi ´
poszukac nowego miejsca spotka n. W´ j-tym z posród ´ Q dni Bajtek przechadza sie od pizzerii Lj -tej do pizzerii
Rj -tej, a jego ekipa liczy wtedy Kj osób. Pyta sie wtedy: ile jest pizzerii na przedziale [Lj, Rj], w których kazdy ˙zje jednakowa liczbe kawałków?
WEJSCIE ´
W pierwszym wierszu wejscia znajduja sie dwie liczby naturalne ´ N i Q, W drugim wierszu wejscia znajduje ´
sie ciag N dodatnich liczb całkowitych - ci ag A. Nast epne Q wierszy zawiera zapytania Bajtka. W j-tym z nich
podane s ˛a liczby Lj, Rj i Kj.
WYJSCIE ´
Nalezy wypisac´ Q wierszy. W j-tym z nich ma znalezc sie odpowiedz na ´ j-te zapytanie Bajtka.

PRZYKŁAD
Wejscie ´
7 4
8 24 9 2 7 6 1
2 5 3
1 7 2
6 7 15
3 4 3
Wyjscie ´
2
4
0
1

0

I jaki masz pomysł na to zadanie? Wiesz jaka jest złożoność czasowa Twojego rozwiązania?

0

Nie widzę możliwości poprawienia złożoności czasowej twojej wersji algorytmu.
Żeby coś takiego osiągnąć to trzeba by było przygotować sprytniejszą strukturę danych opisującą ulicę, tak by udzielenie odpowiedzi na kolejne zapytania było szybsze niż: O(R- L).

Pytanie jest jeszcze jaki jest zakres wartości w tym zadaniu?
Może dane wejściowe powodują, że wykraczasz poza zakres typów lub masz buffer overflow?

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