#include "minerals.h"
#include <bits/stdc++.h>
using namespace std;
unordered_map<int, int> m;
unordered_map<int, int> unm;
map<pair<int,int>, unordered_set<int>> candidates;
int Q(int i) {
return Query(m[i]+1);
}
void InitRand(int N) {
srand(6);
vector<int> order(2*N);
for (int i = 0; i < 2*N; i++) order[i]=i;
random_shuffle(order.begin(), order.end());
random_shuffle(order.begin(), order.end());
for (int i = 0; i < 2*N; i++) {
m[i]=order[i];
unm[order[i]]=i;
//m[i] = i;
}
}
pair<int,int> inserted;
vector<int> lefts;
int q = -1;
void prepareInterval(pair<int,int> interval, pair<int, int> full) {
//cout << "Preparing intervals: " << "in - (" << inserted.first << "; " << inserted.second << ") target - (" << interval.first << "; " << interval.second << ")\n";
for (int i = full.first; i <= full.second; i++) {
bool a = false;
bool b = false;
bool c = false;
if (i >= inserted.first && i <= inserted.second) a = true;
if (i >= interval.first && i <= interval.second) b = true;
if (i >= full.first && i <= full.second) c = true;
if (a != b && c) q = Q(lefts[i]);
}
}
void search(int i, int j) {
//cout << "Searching i=" << i << " j=" << j << endl;
if (i == j) return;
int a = i;
int b = (i + j) / 2;
i = b+1;
pair<int, int> full = make_pair(a, j);
pair<int, int> l = make_pair(a, b);
pair<int, int> r = make_pair(i, j);
prepareInterval(l, full);
inserted = l;
int lcount = b - a + 1;
int rcount = j - i + 1;
//cout << "L = (" << a << "; " << b << ") R = (" << i << "; " << j << ")\n";
for (auto candidate : candidates[full]) {
int c = candidate;
//cout << " Candidate " << c << " - ";
if (lcount == 0) {
candidates[r].insert(c);
rcount--;
continue;
}
else if (rcount == 0) {
candidates[l].insert(c);
lcount--;
continue;
}
//cout << " (passed sanity) ";
int next = Q(c);
if (q == next) {
candidates[l].insert(c);
lcount--;
//cout << " left" << endl;
}
else {
candidates[r].insert(c);
rcount--;
//cout << " right" << endl;
}
q = next;
}
search(a, b);
search(i, j);
}
void Solve(int N) {
InitRand(N);
pair<int,int> interval = make_pair(0, 2*N-1);
for (int i = 0; i < 2*N; i++) {
candidates[interval].insert(i);
}
interval = make_pair(0, N-1);
q = Q(0);
lefts.push_back(0);
for (int i = 1; i < 2*N; i++) {
int next = Q(i);
if (q == next) {
candidates[interval].insert(i);
}
else {
q = next;
lefts.push_back(i);
}
}
inserted = make_pair(0, N-1);
//cout << "Left: ";
for (auto i : lefts) {
//cout << i << " ";
}
//cout << endl << "Candidates: ";
for (auto c : candidates[interval]) {
//cout << c << " ";
}
//cout << endl;
search(0, N-1);
for (int i = 0; i < N; i++) {
int a = m[lefts[i]];
int b = m[*(candidates[make_pair(i, i)].begin())];
//cout << a << " = " << b << endl;
Answer(a+1, b+1);
}
}
/*
4
0 4
1 5
2 3
6 7
*/
Compilation message
minerals.cpp: In function 'void Solve(int)':
minerals.cpp:111:13: warning: unused variable 'i' [-Wunused-variable]
111 | for (auto i : lefts) {
| ^
minerals.cpp:115:13: warning: unused variable 'c' [-Wunused-variable]
115 | for (auto c : candidates[interval]) {
| ^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
0 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
336 KB |
Output is correct |
4 |
Correct |
0 ms |
336 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
1360 KB |
Output is correct |
2 |
Correct |
6 ms |
2640 KB |
Output is correct |
3 |
Correct |
13 ms |
5072 KB |
Output is correct |
4 |
Correct |
28 ms |
10228 KB |
Output is correct |
5 |
Correct |
64 ms |
19624 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
0 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
336 KB |
Output is correct |
4 |
Correct |
0 ms |
336 KB |
Output is correct |
5 |
Correct |
3 ms |
1360 KB |
Output is correct |
6 |
Correct |
6 ms |
2640 KB |
Output is correct |
7 |
Correct |
13 ms |
5072 KB |
Output is correct |
8 |
Correct |
28 ms |
10228 KB |
Output is correct |
9 |
Correct |
64 ms |
19624 KB |
Output is correct |
10 |
Correct |
3 ms |
1360 KB |
Output is correct |
11 |
Correct |
38 ms |
13016 KB |
Output is correct |
12 |
Correct |
61 ms |
19660 KB |
Output is correct |
13 |
Correct |
56 ms |
19652 KB |
Output is correct |
14 |
Correct |
59 ms |
19536 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
0 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
336 KB |
Output is correct |
4 |
Correct |
0 ms |
336 KB |
Output is correct |
5 |
Correct |
3 ms |
1360 KB |
Output is correct |
6 |
Correct |
6 ms |
2640 KB |
Output is correct |
7 |
Correct |
13 ms |
5072 KB |
Output is correct |
8 |
Correct |
28 ms |
10228 KB |
Output is correct |
9 |
Correct |
64 ms |
19624 KB |
Output is correct |
10 |
Correct |
3 ms |
1360 KB |
Output is correct |
11 |
Correct |
38 ms |
13016 KB |
Output is correct |
12 |
Correct |
61 ms |
19660 KB |
Output is correct |
13 |
Correct |
56 ms |
19652 KB |
Output is correct |
14 |
Correct |
59 ms |
19536 KB |
Output is correct |
15 |
Correct |
178 ms |
51964 KB |
Output is correct |
16 |
Correct |
203 ms |
51996 KB |
Output is correct |
17 |
Correct |
176 ms |
51976 KB |
Output is correct |
18 |
Correct |
175 ms |
51840 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
0 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
336 KB |
Output is correct |
4 |
Correct |
0 ms |
336 KB |
Output is correct |
5 |
Correct |
3 ms |
1360 KB |
Output is correct |
6 |
Correct |
6 ms |
2640 KB |
Output is correct |
7 |
Correct |
13 ms |
5072 KB |
Output is correct |
8 |
Correct |
28 ms |
10228 KB |
Output is correct |
9 |
Correct |
64 ms |
19624 KB |
Output is correct |
10 |
Correct |
3 ms |
1360 KB |
Output is correct |
11 |
Correct |
38 ms |
13016 KB |
Output is correct |
12 |
Correct |
61 ms |
19660 KB |
Output is correct |
13 |
Correct |
56 ms |
19652 KB |
Output is correct |
14 |
Correct |
59 ms |
19536 KB |
Output is correct |
15 |
Correct |
178 ms |
51964 KB |
Output is correct |
16 |
Correct |
203 ms |
51996 KB |
Output is correct |
17 |
Correct |
176 ms |
51976 KB |
Output is correct |
18 |
Correct |
175 ms |
51840 KB |
Output is correct |
19 |
Correct |
189 ms |
53100 KB |
Output is correct |
20 |
Correct |
185 ms |
53204 KB |
Output is correct |
21 |
Correct |
182 ms |
53168 KB |
Output is correct |
22 |
Correct |
180 ms |
53060 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
0 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
336 KB |
Output is correct |
4 |
Correct |
0 ms |
336 KB |
Output is correct |
5 |
Correct |
3 ms |
1360 KB |
Output is correct |
6 |
Correct |
6 ms |
2640 KB |
Output is correct |
7 |
Correct |
13 ms |
5072 KB |
Output is correct |
8 |
Correct |
28 ms |
10228 KB |
Output is correct |
9 |
Correct |
64 ms |
19624 KB |
Output is correct |
10 |
Correct |
3 ms |
1360 KB |
Output is correct |
11 |
Correct |
38 ms |
13016 KB |
Output is correct |
12 |
Correct |
61 ms |
19660 KB |
Output is correct |
13 |
Correct |
56 ms |
19652 KB |
Output is correct |
14 |
Correct |
59 ms |
19536 KB |
Output is correct |
15 |
Correct |
178 ms |
51964 KB |
Output is correct |
16 |
Correct |
203 ms |
51996 KB |
Output is correct |
17 |
Correct |
176 ms |
51976 KB |
Output is correct |
18 |
Correct |
175 ms |
51840 KB |
Output is correct |
19 |
Correct |
189 ms |
53100 KB |
Output is correct |
20 |
Correct |
185 ms |
53204 KB |
Output is correct |
21 |
Correct |
182 ms |
53168 KB |
Output is correct |
22 |
Correct |
180 ms |
53060 KB |
Output is correct |
23 |
Correct |
202 ms |
54448 KB |
Output is correct |
24 |
Correct |
196 ms |
54468 KB |
Output is correct |
25 |
Correct |
199 ms |
54436 KB |
Output is correct |
26 |
Correct |
187 ms |
54244 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
0 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
336 KB |
Output is correct |
4 |
Correct |
0 ms |
336 KB |
Output is correct |
5 |
Correct |
3 ms |
1360 KB |
Output is correct |
6 |
Correct |
6 ms |
2640 KB |
Output is correct |
7 |
Correct |
13 ms |
5072 KB |
Output is correct |
8 |
Correct |
28 ms |
10228 KB |
Output is correct |
9 |
Correct |
64 ms |
19624 KB |
Output is correct |
10 |
Correct |
3 ms |
1360 KB |
Output is correct |
11 |
Correct |
38 ms |
13016 KB |
Output is correct |
12 |
Correct |
61 ms |
19660 KB |
Output is correct |
13 |
Correct |
56 ms |
19652 KB |
Output is correct |
14 |
Correct |
59 ms |
19536 KB |
Output is correct |
15 |
Correct |
178 ms |
51964 KB |
Output is correct |
16 |
Correct |
203 ms |
51996 KB |
Output is correct |
17 |
Correct |
176 ms |
51976 KB |
Output is correct |
18 |
Correct |
175 ms |
51840 KB |
Output is correct |
19 |
Correct |
189 ms |
53100 KB |
Output is correct |
20 |
Correct |
185 ms |
53204 KB |
Output is correct |
21 |
Correct |
182 ms |
53168 KB |
Output is correct |
22 |
Correct |
180 ms |
53060 KB |
Output is correct |
23 |
Correct |
202 ms |
54448 KB |
Output is correct |
24 |
Correct |
196 ms |
54468 KB |
Output is correct |
25 |
Correct |
199 ms |
54436 KB |
Output is correct |
26 |
Correct |
187 ms |
54244 KB |
Output is correct |
27 |
Correct |
238 ms |
55932 KB |
Output is correct |
28 |
Correct |
216 ms |
55932 KB |
Output is correct |
29 |
Correct |
207 ms |
55980 KB |
Output is correct |
30 |
Correct |
187 ms |
55824 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
0 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
336 KB |
Output is correct |
4 |
Correct |
0 ms |
336 KB |
Output is correct |
5 |
Correct |
3 ms |
1360 KB |
Output is correct |
6 |
Correct |
6 ms |
2640 KB |
Output is correct |
7 |
Correct |
13 ms |
5072 KB |
Output is correct |
8 |
Correct |
28 ms |
10228 KB |
Output is correct |
9 |
Correct |
64 ms |
19624 KB |
Output is correct |
10 |
Correct |
3 ms |
1360 KB |
Output is correct |
11 |
Correct |
38 ms |
13016 KB |
Output is correct |
12 |
Correct |
61 ms |
19660 KB |
Output is correct |
13 |
Correct |
56 ms |
19652 KB |
Output is correct |
14 |
Correct |
59 ms |
19536 KB |
Output is correct |
15 |
Correct |
178 ms |
51964 KB |
Output is correct |
16 |
Correct |
203 ms |
51996 KB |
Output is correct |
17 |
Correct |
176 ms |
51976 KB |
Output is correct |
18 |
Correct |
175 ms |
51840 KB |
Output is correct |
19 |
Correct |
189 ms |
53100 KB |
Output is correct |
20 |
Correct |
185 ms |
53204 KB |
Output is correct |
21 |
Correct |
182 ms |
53168 KB |
Output is correct |
22 |
Correct |
180 ms |
53060 KB |
Output is correct |
23 |
Correct |
202 ms |
54448 KB |
Output is correct |
24 |
Correct |
196 ms |
54468 KB |
Output is correct |
25 |
Correct |
199 ms |
54436 KB |
Output is correct |
26 |
Correct |
187 ms |
54244 KB |
Output is correct |
27 |
Correct |
238 ms |
55932 KB |
Output is correct |
28 |
Correct |
216 ms |
55932 KB |
Output is correct |
29 |
Correct |
207 ms |
55980 KB |
Output is correct |
30 |
Correct |
187 ms |
55824 KB |
Output is correct |
31 |
Correct |
249 ms |
57844 KB |
Output is correct |
32 |
Correct |
206 ms |
57848 KB |
Output is correct |
33 |
Correct |
204 ms |
57844 KB |
Output is correct |
34 |
Correct |
206 ms |
57724 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
0 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
336 KB |
Output is correct |
4 |
Correct |
0 ms |
336 KB |
Output is correct |
5 |
Correct |
3 ms |
1360 KB |
Output is correct |
6 |
Correct |
6 ms |
2640 KB |
Output is correct |
7 |
Correct |
13 ms |
5072 KB |
Output is correct |
8 |
Correct |
28 ms |
10228 KB |
Output is correct |
9 |
Correct |
64 ms |
19624 KB |
Output is correct |
10 |
Correct |
3 ms |
1360 KB |
Output is correct |
11 |
Correct |
38 ms |
13016 KB |
Output is correct |
12 |
Correct |
61 ms |
19660 KB |
Output is correct |
13 |
Correct |
56 ms |
19652 KB |
Output is correct |
14 |
Correct |
59 ms |
19536 KB |
Output is correct |
15 |
Correct |
178 ms |
51964 KB |
Output is correct |
16 |
Correct |
203 ms |
51996 KB |
Output is correct |
17 |
Correct |
176 ms |
51976 KB |
Output is correct |
18 |
Correct |
175 ms |
51840 KB |
Output is correct |
19 |
Correct |
189 ms |
53100 KB |
Output is correct |
20 |
Correct |
185 ms |
53204 KB |
Output is correct |
21 |
Correct |
182 ms |
53168 KB |
Output is correct |
22 |
Correct |
180 ms |
53060 KB |
Output is correct |
23 |
Correct |
202 ms |
54448 KB |
Output is correct |
24 |
Correct |
196 ms |
54468 KB |
Output is correct |
25 |
Correct |
199 ms |
54436 KB |
Output is correct |
26 |
Correct |
187 ms |
54244 KB |
Output is correct |
27 |
Correct |
238 ms |
55932 KB |
Output is correct |
28 |
Correct |
216 ms |
55932 KB |
Output is correct |
29 |
Correct |
207 ms |
55980 KB |
Output is correct |
30 |
Correct |
187 ms |
55824 KB |
Output is correct |
31 |
Correct |
249 ms |
57844 KB |
Output is correct |
32 |
Correct |
206 ms |
57848 KB |
Output is correct |
33 |
Correct |
204 ms |
57844 KB |
Output is correct |
34 |
Correct |
206 ms |
57724 KB |
Output is correct |
35 |
Incorrect |
195 ms |
59688 KB |
Wrong Answer [2] |
36 |
Halted |
0 ms |
0 KB |
- |