# Mattia e i suoi vasi (non 2.0)

**URL:** <https://forum.olinfo.it/t/mattia-e-i-suoi-vasi-non-2-0/6059>\
**Category:** Aiuto\
**Created:** [14 Febbraio 2020, 6:38pm UTC](https://forum.olinfo.it/t/mattia-e-i-suoi-vasi-non-2-0/6059 "2020-02-14T18:38:50Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mat0k3](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/m/35a633/32.png) [@Mat0k3](https://forum.olinfo.it/u/Mat0k3)\
**Post date:** [14 Febbraio 2020, 6:38pm UTC](https://forum.olinfo.it/t/mattia-e-i-suoi-vasi-non-2-0/6059/1 "2020-02-14T18:38:50Z")

</div>

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:

```auto
#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]<<" ";
	}
}

```

---

<div class="post-metadata">

**Author:** ![MyK\_00L](https://forum.olinfo.it/user_avatar/forum.olinfo.it/myk_00l/32/3000_2.png) [@MyK\_00L](https://forum.olinfo.it/u/MyK_00L)\
**Post date:** [14 Febbraio 2020, 8:53pm UTC](https://forum.olinfo.it/t/mattia-e-i-suoi-vasi-non-2-0/6059/2 "2020-02-14T20:53:14Z")

</div>

La tua soluzione e’ in O(N\*M), quindi e’ normale che vada in [TLE](https://en.wikipedia.org/wiki/Zhang_Ziqian) con N,M\<=4\*10^5, prova a pensare a una soluzione in O(M\*\sqrt N)

---

<div class="post-metadata">

**Author:** ![Mat0k3](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/m/35a633/32.png) [@Mat0k3](https://forum.olinfo.it/u/Mat0k3)\
**Post date:** [15 Febbraio 2020, 1:22pm UTC](https://forum.olinfo.it/t/mattia-e-i-suoi-vasi-non-2-0/6059/3 "2020-02-15T13:22:41Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![fl0rian](https://forum.olinfo.it/user_avatar/forum.olinfo.it/fl0rian/32/2336_2.png) [@fl0rian](https://forum.olinfo.it/u/fl0rian)\
**Post date:** [17 Febbraio 2020, 8:29am UTC](https://forum.olinfo.it/t/mattia-e-i-suoi-vasi-non-2-0/6059/4 "2020-02-17T08:29:34Z")

</div>

Ciao,

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

Forse potrebbe esserti utile per questo problema (;

---

<div class="post-metadata">

**Author:** ![simpatine](https://forum.olinfo.it/user_avatar/forum.olinfo.it/simpatine/32/444_2.png) [@simpatine](https://forum.olinfo.it/u/simpatine)\
**Post date:** [17 Febbraio 2020, 9:25am UTC](https://forum.olinfo.it/t/mattia-e-i-suoi-vasi-non-2-0/6059/5 "2020-02-17T09:25:43Z")

</div>

Per risolvete vasi (non 2.0) l’AVL è decisamente overkill, c’è un metodo più semplice che sfrutta l’idea della [sqrt-decomposition](https://cp-algorithms.com/data_structures/sqrt_decomposition.html) come accennava @MyK_00L .  
Anyway penso che in [questo](https://forum.olinfo.it/t/aiutino-per-vasi/3800) argomento potrai trovare tutto quello che ti serve 😉
