Submission details
Task:Sort
Sender:frederikvase
Submission time:2026-04-17 13:47:15 +0300
Language:C++ (C++20)
Status:READY
Result:100
Feedback
subtaskverdictscore
#1ACCEPTED6
#2ACCEPTED5
#3ACCEPTED7
#4ACCEPTED14
#5ACCEPTED23
#6ACCEPTED12
#7ACCEPTED33
Test results
testverdicttimesubtask
#1ACCEPTED0.00 s2, 6, 7details
#2ACCEPTED0.00 s1, 2, 3, 6, 7details
#3ACCEPTED0.00 s2, 6, 7details
#4ACCEPTED0.00 s1, 2, 3, 6, 7details
#5ACCEPTED0.00 s1, 2, 3, 6, 7details
#6ACCEPTED0.00 s1, 2, 3, 6, 7details
#7ACCEPTED0.00 s1, 2, 3, 6, 7details
#8ACCEPTED0.00 s1, 2, 3, 6, 7details
#9ACCEPTED0.00 s1, 2, 3, 6, 7details
#10ACCEPTED0.00 s1, 2, 3, 6, 7details
#11ACCEPTED0.00 s2, 6, 7details
#12ACCEPTED0.00 s2, 6, 7details
#13ACCEPTED0.00 s2, 6, 7details
#14ACCEPTED0.00 s2, 6, 7details
#15ACCEPTED0.00 s2, 6, 7details
#16ACCEPTED0.27 s3, 7details
#17ACCEPTED0.40 s3, 7details
#18ACCEPTED0.44 s3, 7details
#19ACCEPTED0.41 s3, 7details
#20ACCEPTED0.42 s3, 7details
#21ACCEPTED0.39 s3, 7details
#22ACCEPTED0.42 s3, 7details
#23ACCEPTED0.39 s3, 7details
#24ACCEPTED0.32 s4, 7details
#25ACCEPTED0.31 s4, 7details
#26ACCEPTED0.41 s4, 7details
#27ACCEPTED0.33 s4, 7details
#28ACCEPTED0.34 s4, 7details
#29ACCEPTED0.32 s4, 7details
#30ACCEPTED0.01 s5, 6, 7details
#31ACCEPTED0.01 s5, 6, 7details
#32ACCEPTED0.01 s5, 6, 7details
#33ACCEPTED0.02 s5, 6, 7details
#34ACCEPTED0.01 s5, 6, 7details
#35ACCEPTED0.01 s5, 6, 7details
#36ACCEPTED0.01 s6, 7details
#37ACCEPTED0.01 s6, 7details
#38ACCEPTED0.01 s6, 7details
#39ACCEPTED0.02 s6, 7details
#40ACCEPTED0.01 s6, 7details
#41ACCEPTED0.01 s6, 7details
#42ACCEPTED0.34 s7details
#43ACCEPTED0.49 s7details
#44ACCEPTED0.47 s7details
#45ACCEPTED0.45 s7details
#46ACCEPTED0.47 s7details
#47ACCEPTED0.48 s7details
#48ACCEPTED0.78 s7details
#49ACCEPTED0.45 s7details
#50ACCEPTED0.50 s7details
#51ACCEPTED0.45 s7details
#52ACCEPTED0.00 s1, 2, 3, 5, 6, 7details
#53ACCEPTED0.00 s1, 2, 3, 4, 5, 6, 7details
#54ACCEPTED0.00 s2, 5, 6, 7details
#55ACCEPTED0.00 s1, 2, 3, 4, 6, 7details
#56ACCEPTED0.00 s1, 2, 3, 6, 7details
#57ACCEPTED0.00 s6, 7details
#58ACCEPTED0.05 s3, 4, 7details
#59ACCEPTED0.05 s3, 7details
#60ACCEPTED0.00 s2, 6, 7details
#61ACCEPTED0.00 s2, 6, 7details
#62ACCEPTED0.00 s2, 6, 7details
#63ACCEPTED0.00 s2, 6, 7details
#64ACCEPTED0.00 s2, 6, 7details

Code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

struct segtree {
	vector<int> tree;
	int nt = 1;

	segtree(int n) {
		while (nt < n) nt *= 2;
		tree = vector<int>(2 * nt);
	}

	void set(int i) {
		i += nt;
		tree[i] = 1;
		for (i /= 2; i >= 1; i /= 2) {
			tree[i] = tree[i * 2] + tree[i * 2 | 1];
		}
	}

	int query(int l, int r, int tl, int tr, int k) {
		if (tl > r || tr < l) return 0;
		if (tl >= l && tr <= r) return tree[k];
		int mid = tl + (tr - tl) / 2;
		return query(l, r, tl, mid, 2 * k) + query(l, r, mid + 1, tr, 2 * k | 1);
	}
	int query(int l, int r) {
		return query(l, r, 0, nt - 1, 1);
	}
};

struct querya {
	int i;
	int a, b;
	querya() {}
	querya(int i_, int a_, int b_) : i(i_), a(a_), b(b_) {}
	bool operator<(const querya& other) {
		return a < other.a;
	}
};
struct queryb {
	int i;
	int a, b;
	queryb() {}
	queryb(int i_, int a_, int b_) : i(i_), a(a_), b(b_) {}
	bool operator<(const queryb& other) {
		return b < other.b;
	}
};

void imp() {
	cout << "-1\n";
}

signed main() {
	cin.tie(0)->sync_with_stdio(0);
	ll n, q;
	cin >> n >> q;

	vector<ll> x(n);
	set<ll> values;
	for (ll &e : x) cin >> e, values.insert(e);
	int mxel = 0;
	{
		map<ll, ll> mp;
		for (ll e : values) {
			mp[e] = mxel++;
		}
		for (ll &e : x) e = mp[e];
	}
	vector<pair<ll, int>> add;
	for (int i = 0; i < n; i++) {
		add.emplace_back(x[i], i);
	}
	sort(begin(add), end(add));

	vector<ll> sorted = x;
	sort(begin(sorted), end(sorted));

	vector<ll> prefixinplace(n + 1);
	for (ll i = 0; i < n; i++) {
		prefixinplace[i + 1] = prefixinplace[i] + ll(x[i] == sorted[i]);
	}

	vector<ll> prefixmax(n), suffixmin(n);
	prefixmax[0] = x[0];
	for (ll i = 1; i < n; i++) {
		prefixmax[i] = max(x[i], prefixmax[i - 1]);
	}
	suffixmin[n - 1] = x[n - 1];
	for (ll i = n - 1; i--; ) {
		suffixmin[i] = min(x[i], suffixmin[i + 1]);
	}

	vector<querya> qas;
	vector<queryb> qbs;
	vector<pair<int, int>> queries(q);
	for (int qq = 0; qq < q; qq++) {
		ll a, b;
		cin >> a >> b;
		queries[qq] = {a, b};
		qas.emplace_back(qq, a, b);
		qbs.emplace_back(qq, a, b);
	}
	sort(begin(qas), end(qas));
	reverse(begin(qas), end(qas));

	segtree treea(n);
	vector<ll> ba(q), bb(q), bam(q), bbm(q);
	for (int i = 1; i <= n; i++) {
		treea.set(add[i - 1].second);
		while (!qas.empty() && qas.back().a == i) {
			auto [qq, a, b] = qas.back();
			qas.pop_back();

			ba[qq] = a - treea.query(0, a - 1);
			bam[qq] = a + b - n - treea.query(n - b, a - 1);
		}
	}

	sort(begin(qbs), end(qbs));
	reverse(begin(qbs), end(qbs));
	segtree treeb(n);
	for (int i = 1; i <= n; i++) {
		treeb.set(add[n - i].second);
		while (!qbs.empty() && qbs.back().b == i) {
			auto [qq, a, b] = qbs.back();
			qbs.pop_back();

			bb[qq] = b - treeb.query(n - b, n - 1);
			bbm[qq] = a + b - n - treeb.query(n - b, a - 1);
		}
	}

	for (int qq = 0; qq < q; qq++) {
		auto [a, b] = queries[qq];

		if (prefixinplace[n] == n) {
			cout << "0\n";
			continue;
		} else if (a == n || b == n) {
			cout << "1\n";
			continue;
		}

		if (a + b <= n) {
			if (prefixinplace[n - b] - prefixinplace[a] != n - b - a || 
					prefixmax[a - 1] > suffixmin[n - b]) {
				imp();
				continue;
			}

			ll res = 2;
			if (prefixinplace[a] == a) res--;
			if (prefixinplace[n] - prefixinplace[n - b] == b) res--;
			cout << res << "\n";

			continue;
		}

		if (prefixinplace[n] - prefixinplace[a] == n - a ||
			prefixinplace[n - b] == n - b) {
			cout << "1\n";
			continue;
		}

		// Answer is at least 2
		ll overlap = a + b - n;
		auto Sol = [](ll overlap, ll ba, ll bb, ll bam, ll bbm) -> ll {
			bb -= bbm;
			ba -= overlap;
			if (max(ba, bb) <= 0) return 2;
			ll lo = 1, hi = 5e5;
			while (lo < hi) {
				ll mid = lo + (hi - lo) / 2;
				ll nbb = bb - overlap * ((mid + 1) / 2);
				ll nba = ba - overlap * (mid / 2);
				if (max(nbb, nba) <= 0) {
					hi = mid;
				} else {
					lo = mid + 1;
				}
			}
			return 2 + lo;
		};

		//cout << ba[qq] << " " << bb[qq] << " " << bam[qq] << " " << bbm[qq] << "\n";
		ll res = min(Sol(overlap, ba[qq], bb[qq], bam[qq], bbm[qq]), 
					 Sol(overlap, bb[qq], ba[qq], bbm[qq], bam[qq]));
		cout << res << "\n";
	}
}

Test details

Test 1

Subtask: 2, 6, 7

Verdict: ACCEPTED

input
6 3
3 1 4 1 5 9
4 1
3 3
2 5

correct output
1
-1
2

user output
1
-1
2

Test 2

Subtask: 1, 2, 3, 6, 7

Verdict: ACCEPTED

input
2 1
548813503 548813503
1 1

correct output
0

user output
0

Test 3

Subtask: 2, 6, 7

Verdict: ACCEPTED

input
1 1
417021999
1 1

correct output
0

user output
0

Test 4

Subtask: 1, 2, 3, 6, 7

Verdict: ACCEPTED

input
10 10
20751947 20751947 20751947 494...

correct output
-1
-1
1
1
-1
...

user output
-1
-1
1
1
-1
...

Test 5

Subtask: 1, 2, 3, 6, 7

Verdict: ACCEPTED

input
10 10
12780811 19475241 19475241 683...

correct output
0
0
0
0
0
...

user output
0
0
0
0
0
...

Test 6

Subtask: 1, 2, 3, 6, 7

Verdict: ACCEPTED

input
10 10
14574963 14574963 14574963 864...

correct output
0
0
0
0
0
...

user output
0
0
0
0
0
...

Test 7

Subtask: 1, 2, 3, 6, 7

Verdict: ACCEPTED

input
10 10
237541216 237541216 35036522 6...

correct output
-1
-1
-1
2
-1
...

user output
-1
-1
-1
2
-1
...

Test 8

Subtask: 1, 2, 3, 6, 7

Verdict: ACCEPTED

input
10 10
319425549 513116712 539199939 ...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 9

Subtask: 1, 2, 3, 6, 7

Verdict: ACCEPTED

input
10 10
54363219 54363219 110986323 11...

correct output
0
0
0
0
0
...

user output
0
0
0
0
0
...

Test 10

Subtask: 1, 2, 3, 6, 7

Verdict: ACCEPTED

input
10 5
55687086 550701455 326656159 5...

correct output
-1
-1
-1
-1
-1

user output
-1
-1
-1
-1
-1

Test 11

Subtask: 2, 6, 7

Verdict: ACCEPTED

input
10 10
35889584 588130796 815837475 8...

correct output
-1
-1
1
1
1
...

user output
-1
-1
1
1
1
...

Test 12

Subtask: 2, 6, 7

Verdict: ACCEPTED

input
10 10
679842175 48724877 720966351 6...

correct output
2
3
2
1
1
...

user output
2
3
2
1
1
...

Test 13

Subtask: 2, 6, 7

Verdict: ACCEPTED

input
10 10
893310183 811950921 338863962 ...

correct output
2
1
1
2
5
...

user output
2
1
1
2
5
...

Test 14

Subtask: 2, 6, 7

Verdict: ACCEPTED

input
10 10
221045363 282395847 441913686 ...

correct output
0
0
0
0
0
...

user output
0
0
0
0
0
...

Test 15

Subtask: 2, 6, 7

Verdict: ACCEPTED

input
10 10
509019662 983949268 960017302 ...

correct output
3
-1
3
3
3
...

user output
3
-1
3
3
3
...

Test 16

Subtask: 3, 7

Verdict: ACCEPTED

input
200000 200000
2277053 2277053 2277053 227705...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 17

Subtask: 3, 7

Verdict: ACCEPTED

input
200000 200000
6767 16596 16596 27202 37272 4...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 18

Subtask: 3, 7

Verdict: ACCEPTED

input
200000 200000
5393 5910 9099 15755 15755 164...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 19

Subtask: 3, 7

Verdict: ACCEPTED

input
200000 200000
3779 4629 8999 10468 22605 227...

correct output
-1
1
2
-1
-1
...

user output
-1
1
2
-1
-1
...

Test 20

Subtask: 3, 7

Verdict: ACCEPTED

input
200000 200000
878 2791 10849 11861 13405 239...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 21

Subtask: 3, 7

Verdict: ACCEPTED

input
200000 200000
430 1479 1992 2829 7152 14093 ...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 22

Subtask: 3, 7

Verdict: ACCEPTED

input
199997 200000
2733 10526 13882 14035 14689 3...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 23

Subtask: 3, 7

Verdict: ACCEPTED

input
200000 200000
12345 13538 15407 18490 18984 ...

correct output
0
0
0
0
0
...

user output
0
0
0
0
0
...

Test 24

Subtask: 4, 7

Verdict: ACCEPTED

input
200000 200000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
-1
1
-1
-1
-1
...

user output
-1
1
-1
-1
-1
...

Test 25

Subtask: 4, 7

Verdict: ACCEPTED

input
200000 200000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
1
-1
1
-1
1
...

user output
1
-1
1
-1
1
...

Test 26

Subtask: 4, 7

Verdict: ACCEPTED

input
200000 200000
2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 ...

correct output
4
3
2
2
6
...

user output
4
3
2
2
6
...

Test 27

Subtask: 4, 7

Verdict: ACCEPTED

input
200000 200000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
0
0
0
0
0
...

user output
0
0
0
0
0
...

Test 28

Subtask: 4, 7

Verdict: ACCEPTED

input
200000 200000
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ...

correct output
8513
1099
35939
9299
19597
...

user output
8513
1099
35939
9299
19597
...

Test 29

Subtask: 4, 7

Verdict: ACCEPTED

input
200000 200000
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ...

correct output
178345
169257
62115
96143
64796
...

user output
178345
169257
62115
96143
64796
...

Test 30

Subtask: 5, 6, 7

Verdict: ACCEPTED

input
5000 5000
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

correct output
1
1
-1
1
-1
...

user output
1
1
-1
1
-1
...

Test 31

Subtask: 5, 6, 7

Verdict: ACCEPTED

input
5000 5000
1 2 3 4 5 6 7 8 9 72 145 47 19...

correct output
-1
2
-1
2
-1
...

user output
-1
2
-1
2
-1
...

Test 32

Subtask: 5, 6, 7

Verdict: ACCEPTED

input
4999 5000
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

correct output
-1
2
-1
-1
-1
...

user output
-1
2
-1
-1
-1
...

Test 33

Subtask: 5, 6, 7

Verdict: ACCEPTED

input
5000 5000
4033 4368 3086 3208 4313 388 8...

correct output
3
3
3
3
11
...

user output
3
3
3
3
11
...

Test 34

Subtask: 5, 6, 7

Verdict: ACCEPTED

input
5000 5000
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

correct output
0
0
0
0
0
...

user output
0
0
0
0
0
...

Test 35

Subtask: 5, 6, 7

Verdict: ACCEPTED

input
5000 5000
5000 4999 4998 4997 4996 4995 ...

correct output
2039
1910
-1
687
673
...

user output
2039
1910
-1
687
673
...

Test 36

Subtask: 6, 7

Verdict: ACCEPTED

input
5000 5000
202010 457852 826471 926337 10...

correct output
-1
-1
2
-1
-1
...

user output
-1
-1
2
-1
-1
...

Test 37

Subtask: 6, 7

Verdict: ACCEPTED

input
5000 5000
190583 326486 431922 462939 72...

correct output
-1
-1
-1
-1
2
...

user output
-1
-1
-1
-1
2
...

Test 38

Subtask: 6, 7

Verdict: ACCEPTED

input
5000 5000
821998255 400550008 71790232 5...

correct output
5
3
3
2
5
...

user output
5
3
3
2
5
...

Test 39

Subtask: 6, 7

Verdict: ACCEPTED

input
5000 5000
266174928 446601941 191252234 ...

correct output
3
3
414
4
3
...

user output
3
3
414
4
3
...

Test 40

Subtask: 6, 7

Verdict: ACCEPTED

input
5000 5000
11621 243915 243915 949123 137...

correct output
0
0
0
0
0
...

user output
0
0
0
0
0
...

Test 41

Subtask: 6, 7

Verdict: ACCEPTED

input
5000 5000
999767052 998555066 997822810 ...

correct output
919
459
505
833
809
...

user output
919
459
505
833
809
...

Test 42

Subtask: 7

Verdict: ACCEPTED

input
200000 200000
478025 478025 478025 478025 47...

correct output
-1
-1
2
2
2
...

user output
-1
-1
2
2
2
...

Test 43

Subtask: 7

Verdict: ACCEPTED

input
200000 200000
1810 2088 3022 3097 7459 7943 ...

correct output
2
-1
-1
2
-1
...

user output
2
-1
-1
2
-1
...

Test 44

Subtask: 7

Verdict: ACCEPTED

input
199531 200000
11328 26391 30353 37063 44412 ...

correct output
-1
2
-1
2
2
...

user output
-1
2
-1
2
2
...

Test 45

Subtask: 7

Verdict: ACCEPTED

input
200000 200000
106738201 369187074 412614650 ...

correct output
2
12
3
19
3
...

user output
2
12
3
19
3
...

Test 46

Subtask: 7

Verdict: ACCEPTED

input
200000 200000
670611290 43427363 8475380 309...

correct output
3
5
3
3
3
...

user output
3
5
3
3
3
...

Test 47

Subtask: 7

Verdict: ACCEPTED

input
200000 200000
907542569 504758282 948727805 ...

correct output
3
33
3
3
3
...

user output
3
33
3
3
3
...

Test 48

Subtask: 7

Verdict: ACCEPTED

input
200000 200000
487056731 460461648 142698485 ...

correct output
3
3
3
3
3
...

user output
3
3
3
3
3
...

Test 49

Subtask: 7

Verdict: ACCEPTED

input
200000 200000
12772 23236 23236 23236 41149 ...

correct output
0
0
0
0
0
...

user output
0
0
0
0
0
...

Test 50

Subtask: 7

Verdict: ACCEPTED

input
200000 200000
999993539 999993361 999993361 ...

correct output
125375
16687
-1
84781
46147
...

user output
125375
16687
-1
84781
46147
...

Test 51

Subtask: 7

Verdict: ACCEPTED

input
200000 200000
999993539 999993361 999993361 ...

correct output
94788
177608
95881
56377
179957
...

user output
94788
177608
95881
56377
179957
...

Test 52

Subtask: 1, 2, 3, 5, 6, 7

Verdict: ACCEPTED

input
5 1
2 1 3 5 4
2 2

correct output
2

user output
2

Test 53

Subtask: 1, 2, 3, 4, 5, 6, 7

Verdict: ACCEPTED

input
2 1
1 2
1 1

correct output
0

user output
0

Test 54

Subtask: 2, 5, 6, 7

Verdict: ACCEPTED

input
4 1
2 1 4 3
3 2

correct output
2

user output
2

Test 55

Subtask: 1, 2, 3, 4, 6, 7

Verdict: ACCEPTED

input
10 10
1 1 1 1 2 2 1 1 2 2
7 1
2 6
4 5
...

correct output
-1
1
-1
-1
-1
...

user output
-1
1
-1
-1
-1
...

Test 56

Subtask: 1, 2, 3, 6, 7

Verdict: ACCEPTED

input
10 10
181777772 181777772 181777772 ...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 57

Subtask: 6, 7

Verdict: ACCEPTED

input
100 10
92800811 524548163 939127795 9...

correct output
-1
-1
3
-1
3
...

user output
-1
-1
3
-1
3
...

Test 58

Subtask: 3, 4, 7

Verdict: ACCEPTED

input
100 100000
2 2 2 1 2 2 2 2 1 2 1 1 1 2 2 ...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 59

Subtask: 3, 7

Verdict: ACCEPTED

input
100 100000
172695325 172695325 172695325 ...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 60

Subtask: 2, 6, 7

Verdict: ACCEPTED

input
4 10
869194539 239439572 968540665 ...

correct output
-1
2
-1
-1
-1
...

user output
-1
2
-1
-1
-1
...

Test 61

Subtask: 2, 6, 7

Verdict: ACCEPTED

input
10 10
55366041 112170735 112170735 5...

correct output
-1
-1
2
1
1
...

user output
-1
-1
2
1
1
...

Test 62

Subtask: 2, 6, 7

Verdict: ACCEPTED

input
10 10
156018639 156018639 445832758 ...

correct output
-1
1
-1
-1
2
...

user output
-1
1
-1
-1
2
...

Test 63

Subtask: 2, 6, 7

Verdict: ACCEPTED

input
10 10
702507512 702507512 892090406 ...

correct output
-1
2
-1
2
2
...

user output
-1
2
-1
2
2
...

Test 64

Subtask: 2, 6, 7

Verdict: ACCEPTED

input
10 10
720324490 720324490 720324490 ...

correct output
-1
2
2
1
-1
...

user output
-1
2
2
1
-1
...