Time Limit Exceeded in Cultural Events

Ciao a tutti.
Da un paio di giorni sto cercando di risolvere il problema Cultural Events. A parere personale sembrerebbe un problema abbastanza semplice, e allo stesso anche la sua risoluzione. Nonostante ciò, sta di fatto che sto riscontrando time limit exceeded nelle task 2 e 4 nelle subtask 5-6-7, 18-19-20. Il codice mi sembra abbastanza lineare e privo di errori apparenti.
Qualcuno riuscirebbe a darmi un indizio sull’errore? Grazie

#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

int main() {
//  uncomment the following lines if you want to read/write from files
//  ifstream cin("input.txt");
//  ofstream cout("output.txt");
	
	int N1, N2;
    cin >> N1 >> N2;
    
    int P[N1], V[N2];
    for(int i=0; i<N1; i++)
        cin >> P[i];
    for(int i=0; i<N2; i++)
        cin >> V[i];

    // insert your code here
    int index=0, ans=0;
    
    sort(P, P+N1);
    sort(V, V+N2);
    reverse(P, P+N1);
    reverse(V, V+N2);
    
    for (int i=0; i<N2; i++) {
    	int vo = V[i];
    	int min = *min_element(P+index, P+N1);
    	if (vo >= min) {
    		if (index != N1) {
    			for (int j=index; j<N1; j++) {
    				if (vo >= P[j]) {
    					index = j+1;
    					ans ++;
    					break;
					}
				}
			}
		} else {
			break;
		}
	}
    
    cout << ans << endl; // print the result
    return 0;
}

std::min_element ha complessità lineare in N_1. Se viene chiamata N_2 volte, la complessità è O(N_1N_2). Prova a sfruttare il fatto che hai ordinato gli array.

Grazie, ora funziona 100/100. Come tuo consiglio ho eliminato la parte relativa a min_element e, facendo ciò, ho risolto il problema

1 Mi Piace