Problema su overtakings

ciao ragazzi, ho bisogno di una mano sul problema overtakings. Il codice che ho scritto dà 62 punti, letteralmente non funziona il primo test case mentre gli altri sono corretti.
Ecco il codice:

#include <bits/stdc++.h>
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 N, Q;
    cin >> N >> Q;

    vector<int> C(N);
    for (int i = 0; i < N; i++) {
        cin >> C[i];
    }
  
     
    map<int,int> map;				//mappa dove la keyword è n macchina e value è la posizione
    for (int i = 0; i < N; i++) {
        map.insert({C[i],i});
    }
	
	//set<int> s;
	vector<int> nSorp(N);			//vettore indice n macchina e valore è n sorpassi
    for (int i = 0; i < N; i++) {
        nSorp[i]=0;
    }
	
	int maxSorp;
	int maxMacc;
	int app;
	int nSorpassi;
	
    for (int i = 0; i < Q; i++) {
        int x;
        cin >> x;
        
        nSorp[C[map[x]-1]]++;
        
        
        app=C[map[x]];
        C[map[x]]=C[map[x]-1];
        C[map[x]-1]=app;
        
        map[x]--;
        map[C[map[x]+1]]++;
        
        /*for (int z = 0; z < N; z++) {
        	cout << C[z] << " ";
    	}*/
    	nSorpassi=nSorp[C[map[x]+1]];
    	if(i==0){
    	    maxSorp=1;
    	    maxMacc=C[map[x]+1];
    	    cout<<maxMacc<< endl;;
    	} else if(maxSorp>nSorpassi){
    	    cout<<maxMacc<< endl;
    	} else if(maxSorp==nSorpassi){
    	    maxMacc=min(maxMacc,C[map[x]+1]);
    	    cout<<maxMacc<< endl;
    	} else {
    	    maxSorp=nSorpassi;
    	    maxMacc=C[map[x]+1];
    	    cout<<maxMacc<< endl;
    	}
        
        
		
        //cout << distance(nSorp.begin(), max_element(nSorp.begin(), nSorp.end())) << endl;
    }
    return 0;
}

ci ho passato parecchio tempo ma non trovo l’errore. Grazie in anticipo.

Il problema è che le macchine sono indicizzate da 1 ad N mentre il vettore nSorp va da 0 a N-1.

Se in locale utilizzi g++ puoi intercettare subito problemi di questo tipo compilando con l’opzione -fsanitize=address,undefined.

P.S.:
In questo caso l’accesso alla posizione N del vettore risulta in un output errato solo in un caso. Tuttavia compilare con i sanitizer intercetta gli accessi di memoria out of bounds anche quando questi non causano poi un output errato.

1 Mi Piace