Mattia e i suoi vasi (non 2.0)

Prendo 30/100 perchè va in timeout però tutti i casi che non hanno questo problema sono corretti avete qualche idea per velocizzarlo?
Grazie in anticipo!
Vi lascio qui sotto il codice:

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

La tua soluzione e’ in O(N*M), quindi e’ normale che vada in TLE con N,M<=4*10^5, prova a pensare a una soluzione in O(M*\sqrt N)

Grazie del consiglio ma non saprei come implementarla una soluzione del genere, se hai qualche consiglio di pure.

Ciao,

studiati l’ Albero AVL, studiati le sue operazioni di rotazione, inserimento ed eliminazione.

Forse potrebbe esserti utile per questo problema (;

Per risolvete vasi (non 2.0) l’AVL è decisamente overkill, c’è un metodo più semplice che sfrutta l’idea della sqrt-decomposition come accennava @MyK_00L .
Anyway penso che in questo argomento potrai trovare tutto quello che ti serve :wink: