got TLE with map on Collecting_Numbers_II.cpp but AC with unordered_map -unordered is good for a lot of requests and a lot of data
40 lines
1.4 KiB
C++
40 lines
1.4 KiB
C++
// Collecting Numbers II
|
|
|
|
#include<bits/stdc++.h>
|
|
|
|
using namespace std;
|
|
|
|
int main() {
|
|
int n; cin >> n;
|
|
int m; cin >> m;
|
|
vector<int> in(n);
|
|
for (auto &e: in) cin >> e;
|
|
int count = 1;
|
|
unordered_map<int, int> pos;
|
|
for (int i{}; i < n; i++) pos[in[i]] = i;
|
|
for (int i = 1; i < n; i++) {
|
|
if (pos[i] > pos[i+1]) count ++;
|
|
}
|
|
// cout << count << endl;
|
|
for (int i{}; i < m; i++) {
|
|
int a, b; cin >> a >> b;
|
|
|
|
|
|
if (in[a - 1] > 1 && pos[in[a - 1] - 1] > a - 1 && pos[in[a - 1] - 1] <= b - 1) count--;
|
|
if (in[a - 1] > 1 && pos[in[a - 1] - 1] < a - 1 && pos[in[a - 1] - 1] >= b - 1) count++;
|
|
if (in[a - 1] < n && pos[in[a - 1] + 1] > a - 1 && pos[in[a - 1] + 1] <= b - 1) count++; //
|
|
if (in[a - 1] < n && pos[in[a - 1] + 1] < a - 1 && pos[in[a - 1] + 1] >= b - 1) count--;
|
|
|
|
if (in[b - 1] > 1 && pos[in[b - 1] - 1] > a - 1 && pos[in[b - 1] - 1] < b - 1) count++;
|
|
if (in[b - 1] > 1 && pos[in[b - 1] - 1] < a - 1 && pos[in[b - 1] - 1] > b - 1) count--;
|
|
if (in[b - 1] < n && pos[in[b - 1] + 1] > a - 1 && pos[in[b - 1] + 1] < b - 1) count--;
|
|
if (in[b - 1] < n && pos[in[b - 1] + 1] < a - 1 && pos[in[b - 1] + 1] > b - 1) count++;
|
|
|
|
pos[in[a - 1]] = b - 1;
|
|
pos[in[b - 1]] = a - 1;
|
|
swap(in[a-1], in[b-1]);
|
|
cout << count << endl;
|
|
}
|
|
return 0;
|
|
}
|