AtCoder Grand Contest 003 C - BBuBBBlesort!
- 問題
- 解法
とすると操作2のみでソートしようとする場合、それぞれの中でバブルソートをしていることになる。つまり操作1を行う必要があるのはの要素との要素を入れ替えたいときだけである。
操作1を行う回数を求めるにはをソートしたものをとすればでのindexが奇数であってでのindexが偶数であるものの個数を求めれば良い。
#include <iostream> #include <string> #include <algorithm> #include <cstdio> #include <vector> #include <queue> #include <set> #include <map> #include <numeric> #include <cmath> using namespace std; typedef long long int ll; #define all(x) x.begin(),x.end() int main() { int n; cin >> n; vector<int> a(n); for(int i = 0; i < n; i++){ cin >> a[i]; } vector<int> sorted = a; sort(all(sorted)); set<int> even,odd; for(int i = 0; i < n; i++){ if(i%2 == 0) even.insert(sorted[i]); else odd.insert(sorted[i]); } int ans = 0; for(int i = 0; i < n; i++){ if(i % 2 != 0){ if(even.count(a[i]) > 0) ans++; } } cout << ans << endl; return 0; }