mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-09-04 01:01:43 +00:00
update
This commit is contained in:
parent
75cc4f03e5
commit
d8dd0c81b1
63
src/8/23/P3939.cpp
Normal file
63
src/8/23/P3939.cpp
Normal file
@ -0,0 +1,63 @@
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
void fast_io() {
|
||||
std::ios_base::sync_with_stdio(false);
|
||||
std::cin.tie(nullptr);
|
||||
}
|
||||
|
||||
const int MAXN = 300005;
|
||||
|
||||
int n, m;
|
||||
int a[MAXN];
|
||||
std::vector<int> pos[MAXN];
|
||||
|
||||
int main() {
|
||||
fast_io();
|
||||
|
||||
std::cin >> n >> m;
|
||||
for (int i = 1; i <= n; ++i) {
|
||||
std::cin >> a[i];
|
||||
pos[a[i]].push_back(i);
|
||||
}
|
||||
|
||||
for (int i = 0; i < m; ++i) {
|
||||
int op;
|
||||
std::cin >> op;
|
||||
if (op == 1) {
|
||||
|
||||
int l, r, c;
|
||||
std::cin >> l >> r >> c;
|
||||
|
||||
auto it_l = std::lower_bound(pos[c].begin(), pos[c].end(), l);
|
||||
auto it_r = std::upper_bound(pos[c].begin(), pos[c].end(), r);
|
||||
|
||||
std::cout << (it_r - it_l) << "\n";
|
||||
|
||||
} else {
|
||||
|
||||
int x;
|
||||
std::cin >> x;
|
||||
|
||||
int c1 = a[x];
|
||||
int c2 = a[x + 1];
|
||||
|
||||
if (c1 == c2) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto it1 = std::lower_bound(pos[c1].begin(), pos[c1].end(), x);
|
||||
|
||||
*it1 = x + 1;
|
||||
|
||||
auto it2 = std::lower_bound(pos[c2].begin(), pos[c2].end(), x + 1);
|
||||
|
||||
*it2 = x;
|
||||
|
||||
std::swap(a[x], a[x + 1]);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user