RECNDROT! Why am i getting TLE? I am using binary search only, which is used in many accepted solutions as well

#include <bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(NULL);cin.tie(NULL);cout.tie(NULL)

int solve(){
int n;
cin>> n;
vector v(n);
set s;
map<int, vector> ind;

for(int i = 0; i < n; i++){
	cin>> v[i];
	ind[v[i]].push_back(i);
	s.insert(v[i]);
}

vector<int> uniq;
for(auto val: s)
	uniq.push_back(val);

map<int, int> sel;
int ans = 1;
sel[uniq[0]] = ind[uniq[0]][0];

for(int i = 1; i < uniq.size(); i++){
	if(ind[uniq[i]].back() < sel[uniq[i - 1]]){
		ans++;
		sel[uniq[i]] = ind[uniq[i]][0];
		continue;
	}
	int ptr = (int)((upper_bound(ind[uniq[i]].begin(), ind[uniq[i]].end(), sel[uniq[i - 1]])) - ind[uniq[i]].begin());
	sel[uniq[i]] = ind[uniq[i]][ptr];
}
cout<< ans<< "\n";
return 0;

}

int main()
{
fast;
int t = 1;
cin>> t;
while(t–){
solve();
}
return 0;
}

use &val