Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Слава Україні, Героям слава
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 1e6 + 7, LOG = 18, M = 1e9 + 7;
- const int NN = N * LOG;
- namespace pseg {
- long long seg[NN];
- int roots[N], L[NN], R[NN], cnt = 1;
- void insert(int x, int val, int pcur = -1, int p = -1, int l = 1, int r = M) {
- if(pcur == -1) {
- pcur = roots[x] = cnt++;
- }
- if(p == -1) {
- p = roots[x - 1];
- }
- seg[pcur] = seg[p] + 1;
- if(l == r) {
- return;
- }
- int mid = (l + r) >> 1;
- if(val > mid) {
- L[pcur] = L[p];
- R[pcur] = cnt++;
- insert(x, val, R[pcur], R[p], mid + 1, r);
- } else {
- R[pcur] = R[p];
- L[pcur] = cnt++;
- insert(x, val, L[pcur], L[p], l, mid);
- }
- }
- long long find(int p1, int p2, int i, int j, int l = 1, int r = M) {
- if(i > r or j < l) {
- return 0;
- }
- if(i <= l and r <= j) {
- return seg[p1] - seg[p2];
- }
- int mid = (l + r) >> 1;
- return find(L[p1], L[p2], i, j, l, mid) + find(R[p1], R[p2], i, j, mid + 1, r);
- }
- };
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- int n, q;
- cin >> n >> q;
- vector<int> v(n + 1);
- for(int i = 1; i <= n; i++) {
- cin >> v[i];
- pseg::insert(i, v[i]);
- }
- while(q--) {
- char c;
- cin >> c;
- if(c == 'Q') {
- int a, b, x;
- cin >> a >> b >> x;
- int l = 0, r = 1e9, ans = 0;
- while(l <= r) {
- int mid = (l + r) >> 1;
- if(pseg::find(pseg::roots[b], pseg::roots[a - 1], 0, mid) >= x) {
- ans = mid;
- r = mid - 1;
- } else {
- l = mid + 1;
- }
- }
- cout << ans << "\n";
- } else {
- int x;
- cin >> x;
- swap(v[x], v[x + 1]);
- pseg::insert(x, v[x], pseg::roots[x], pseg::roots[x - 1]);
- pseg::insert(x + 1, v[x + 1], pseg::roots[x + 1], pseg::roots[x]);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement