Mattia e i suoi vasi

Mi servirebbe un aiuto con questo problema che in parecchi casi va fuori memoria e in altrettanti casi da un output non corretto,segue la mia soluzione!
Grazie in anticipo!

#include <bits/stdc++.h>
using namespace std;
int main(){
      ofstream out("output.txt");
    ifstream in("input.txt");
	long long int N,M;
	in>>N>>M;
	vector<long long int>v(N);
	vector<long long int>v1;
	for(long long int i=0;i<N;i++){
		v[i]=i;
	}
	char a;
	long long int x,y,z;
	vector<long long int>::iterator it;
	for(long long int j=0;j<M;j++){
		in>>a;
		if(a=='c'){
			in>>z;
			v1.push_back(v[z]);
		}
		else{
			in>>x>>y;
			if(x!=y){
				if(x<y){
					swap_ranges(v.begin()+x+1,v.end(),v.begin()+x);
				}
				else{
					swap_ranges(v.begin()+y,v.begin()+x-1,v.begin()+x);
					swap(v[x],v[x-1]);
				}
			}
		}
	}
	for(long long int i=0;i<v1.size();i++){
		out<<v1[i]<<" ";
	}
}

Sono un po confuso sul tuo utilizzo di swap_ranges, in quanto questa e’ una funzione che serve per swappare intervalli della stessa lunghezza e non so in cosa ti possa aiutare in questo problema...
Probabilmente MLE te lo da perche’ usi swap_ranges su dei range che overlappano, che come dice la reference e’ undefined behavior.

grazie infatti adesso mi sono fatto una funzion che fa cio che volevo fare all’inizio ma adesso prende 30/100 e va in time out