Untitled
unknown
plain_text
2 years ago
1.5 kB
140
Indexable
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <fstream> #include <vector> #include <string> #include <sstream> #include <cstring> #include <algorithm> #include <queue> #include <map> #include <set> #include <climits> #include <cmath> #include <iomanip> #include <cstdlib> using namespace std; #define MAX 1000000000 + 5 //#define M 100 + 5 #define N 1000 + 1 #define MOD (long long)1000000007 #define ll long long #define ld long double #define sz size() #define F(i, a, b) for (int i = a; i < b; i++) #define FOR(i, a, b) for(int i = a; i <= b; i++) #define FORD(i, a, b) for (int i = a; i >= b; i--) #define faster() ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); #define zero(n) setw(n) << setfill('0') #define stp(n) fixed << setprecision(n) int main() { int t; cin >> t; while (t--) { int n; cin >> n; vector<pair<int, int>> v; int a; for (int i = 0; i < n; i++) { cin >> a; v.push_back({ a, i }); } sort(v.begin(), v.end()); bool is_visited[N]; memset(is_visited, false, sizeof is_visited); int ans = 0; //for (int i = 0; i < n; i++) { // cout << v[i].first << " " << v[i].second << endl; //} for (int i = 0; i < n; i++) { if (v[i].second == i || is_visited[i] == true) continue; int nextNode = i; int swap_process = 0; while (!is_visited[nextNode]) { is_visited[nextNode] = true; swap_process++; nextNode = v[nextNode].second; } ans += swap_process - 1; } cout << ans << endl; } return 0; }
Editor is loading...
Leave a Comment