#include <bits/stdc++.h>
#include "minerals.h"
using namespace std;
#define all(v) v.begin(), v.end()
#define sz(a) (int)a.size()
#define pb push_back
#define rall(v) v.rbegin(),v.rend()
mt19937 rng(69);
void Solve(int n) {
vector<int> p1, p2;
int ans = 0, prevans = -1;
vector<int> bulanea(2 * n);
iota(bulanea.begin(), bulanea.end(), 1);
shuffle(bulanea.begin(), bulanea.end(), rng);
for(int i: bulanea) {
ans = Query(i);
if(ans == prevans) {
p2.pb(i);
} else {
p1.pb(i);
}
prevans = ans;
}
assert(sz(p1) == n && sz(p2) == n);
vector<int> pr(n, 0);
int IN = 1;
/*
vector<bool> bagat(n, 1);
for(int bit = 0; (1 << bit) < n; ++bit) {
for(int i = 0; i < n; ++i) {
if(i >> bit & 1) {
if(!bagat[i]) prevans = Query(p1[i]);
bagat[i] = 1;
} else {
if(bagat[i]) prevans = Query(p1[i]);
bagat[i] = 0;
}
}
for(int i = 0; i < n; ++i) {
int ans = Query(p2[i]);
if(ans == prevans) {
pr[i] += (1 << bit);
}
prevans = ans;
}
IN ^= 1;
}
*/
vector<int> l(n, 0), r(n, n - 1);
int F = 0;
int j = n - 1;
for(int runs = 0; runs < 17; ++runs) {
vector<pair<int, int>> b;
vector<int> ids[n + 1];
for(int i = 0; i < n; ++i) {
if(l[i] <= r[i]) {
int mid = l[i] + r[i] >> 1;
b.push_back({mid, i});
ids[mid].push_back(i);
}
}
if(b.empty()) break;
sort(all(b));
int cost1 = 0, cost2 = 0;
{
map<int, int> vis;
int k = j;
while(k > b[0].first) {
vis[k] = true;
++cost1;
--k;
vis[k] = true;
}
if(!vis[b.back().first]) {
while(k < b.back().first) {
++k;
++cost1;
}
}
}
{
int k = j;
map<int, int> vis;
while(k < b.back().first) {
vis[k] = true;
++cost2;
++k;
vis[k] = true;
}
if(!vis[b[0].first]) {
while(k > b[0].first) {
--k;
++cost2;
}
}
}
if(cost1 <= cost2) {
map<int, int> vis;
while(j > b[0].first) {
if(!vis[j]) {
for(auto x: ids[j]) {
int mid = j;
int ans = Query(p2[x]);
if(ans == prevans) {
pr[x] = mid;
r[x] = mid - 1;
} else {
l[x] = mid + 1;
}
prevans = ans;
}
vis[j] = true;
}
prevans = Query(p1[j]);
--j;
if(!vis[j]) {
for(auto x: ids[j]) {
int mid = j;
int ans = Query(p2[x]);
if(ans == prevans) {
pr[x] = mid;
r[x] = mid - 1;
} else {
l[x] = mid + 1;
}
prevans = ans;
}
vis[j] = true;
}
}
if(!vis[b.back().first]) {
while(j < b.back().first) {
if(!vis[j]) {
for(auto x: ids[j]) {
int mid = j;
int ans = Query(p2[x]);
if(ans == prevans) {
pr[x] = mid;
r[x] = mid - 1;
} else {
l[x] = mid + 1;
}
prevans = ans;
}
vis[j] = true;
}
++j;
prevans = Query(p1[j]);
if(!vis[j]) {
for(auto x: ids[j]) {
int mid = j;
int ans = Query(p2[x]);
if(ans == prevans) {
pr[x] = mid;
r[x] = mid - 1;
} else {
l[x] = mid + 1;
}
prevans = ans;
}
vis[j] = true;
}
}
}
} else {
map<int, int> vis;
while(j < b.back().first) {
if(!vis[j]) {
for(auto x: ids[j]) {
int mid = j;
int ans = Query(p2[x]);
if(ans == prevans) {
pr[x] = mid;
r[x] = mid - 1;
} else {
l[x] = mid + 1;
}
prevans = ans;
}
vis[j] = true;
}
++j;
prevans = Query(p1[j]);
if(!vis[j]) {
for(auto x: ids[j]) {
int mid = j;
int ans = Query(p2[x]);
if(ans == prevans) {
pr[x] = mid;
r[x] = mid - 1;
} else {
l[x] = mid + 1;
}
prevans = ans;
}
vis[j] = true;
}
}
if(!vis[b[0].first]) {
while(j > b[0].first) {
if(!vis[j]) {
for(auto x: ids[j]) {
int mid = j;
int ans = Query(p2[x]);
if(ans == prevans) {
pr[x] = mid;
r[x] = mid - 1;
} else {
l[x] = mid + 1;
}
prevans = ans;
}
vis[j] = true;
}
prevans = Query(p1[j]);
--j;
if(!vis[j]) {
for(auto x: ids[j]) {
int mid = j;
int ans = Query(p2[x]);
if(ans == prevans) {
pr[x] = mid;
r[x] = mid - 1;
} else {
l[x] = mid + 1;
}
prevans = ans;
}
vis[j] = true;
}
}
}
}
}
for(int i = 0; i < n; ++i) {
Answer(p2[i], p1[pr[i]]);
}
}
/*
4
1 5
2 6
3 4
7 8
*/
Compilation message
minerals.cpp: In function 'void Solve(int)':
minerals.cpp:59:32: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
59 | int mid = l[i] + r[i] >> 1;
minerals.cpp:28:9: warning: unused variable 'IN' [-Wunused-variable]
28 | int IN = 1;
| ^~
minerals.cpp:52:9: warning: unused variable 'F' [-Wunused-variable]
52 | int F = 0;
| ^
# |
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 |
208 KB |
Output is correct |
4 |
Correct |
1 ms |
208 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
464 KB |
Output is correct |
2 |
Correct |
6 ms |
564 KB |
Output is correct |
3 |
Correct |
14 ms |
848 KB |
Output is correct |
4 |
Correct |
33 ms |
1480 KB |
Output is correct |
5 |
Correct |
72 ms |
2540 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 |
208 KB |
Output is correct |
4 |
Correct |
1 ms |
208 KB |
Output is correct |
5 |
Correct |
3 ms |
464 KB |
Output is correct |
6 |
Correct |
6 ms |
564 KB |
Output is correct |
7 |
Correct |
14 ms |
848 KB |
Output is correct |
8 |
Correct |
33 ms |
1480 KB |
Output is correct |
9 |
Correct |
72 ms |
2540 KB |
Output is correct |
10 |
Correct |
4 ms |
464 KB |
Output is correct |
11 |
Correct |
54 ms |
1752 KB |
Output is correct |
12 |
Correct |
86 ms |
2556 KB |
Output is correct |
13 |
Correct |
76 ms |
2532 KB |
Output is correct |
14 |
Correct |
80 ms |
2448 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 |
208 KB |
Output is correct |
4 |
Correct |
1 ms |
208 KB |
Output is correct |
5 |
Correct |
3 ms |
464 KB |
Output is correct |
6 |
Correct |
6 ms |
564 KB |
Output is correct |
7 |
Correct |
14 ms |
848 KB |
Output is correct |
8 |
Correct |
33 ms |
1480 KB |
Output is correct |
9 |
Correct |
72 ms |
2540 KB |
Output is correct |
10 |
Correct |
4 ms |
464 KB |
Output is correct |
11 |
Correct |
54 ms |
1752 KB |
Output is correct |
12 |
Correct |
86 ms |
2556 KB |
Output is correct |
13 |
Correct |
76 ms |
2532 KB |
Output is correct |
14 |
Correct |
80 ms |
2448 KB |
Output is correct |
15 |
Incorrect |
201 ms |
5800 KB |
Wrong Answer [2] |
16 |
Halted |
0 ms |
0 KB |
- |
# |
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 |
208 KB |
Output is correct |
4 |
Correct |
1 ms |
208 KB |
Output is correct |
5 |
Correct |
3 ms |
464 KB |
Output is correct |
6 |
Correct |
6 ms |
564 KB |
Output is correct |
7 |
Correct |
14 ms |
848 KB |
Output is correct |
8 |
Correct |
33 ms |
1480 KB |
Output is correct |
9 |
Correct |
72 ms |
2540 KB |
Output is correct |
10 |
Correct |
4 ms |
464 KB |
Output is correct |
11 |
Correct |
54 ms |
1752 KB |
Output is correct |
12 |
Correct |
86 ms |
2556 KB |
Output is correct |
13 |
Correct |
76 ms |
2532 KB |
Output is correct |
14 |
Correct |
80 ms |
2448 KB |
Output is correct |
15 |
Incorrect |
201 ms |
5800 KB |
Wrong Answer [2] |
16 |
Halted |
0 ms |
0 KB |
- |
# |
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 |
208 KB |
Output is correct |
4 |
Correct |
1 ms |
208 KB |
Output is correct |
5 |
Correct |
3 ms |
464 KB |
Output is correct |
6 |
Correct |
6 ms |
564 KB |
Output is correct |
7 |
Correct |
14 ms |
848 KB |
Output is correct |
8 |
Correct |
33 ms |
1480 KB |
Output is correct |
9 |
Correct |
72 ms |
2540 KB |
Output is correct |
10 |
Correct |
4 ms |
464 KB |
Output is correct |
11 |
Correct |
54 ms |
1752 KB |
Output is correct |
12 |
Correct |
86 ms |
2556 KB |
Output is correct |
13 |
Correct |
76 ms |
2532 KB |
Output is correct |
14 |
Correct |
80 ms |
2448 KB |
Output is correct |
15 |
Incorrect |
201 ms |
5800 KB |
Wrong Answer [2] |
16 |
Halted |
0 ms |
0 KB |
- |
# |
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 |
208 KB |
Output is correct |
4 |
Correct |
1 ms |
208 KB |
Output is correct |
5 |
Correct |
3 ms |
464 KB |
Output is correct |
6 |
Correct |
6 ms |
564 KB |
Output is correct |
7 |
Correct |
14 ms |
848 KB |
Output is correct |
8 |
Correct |
33 ms |
1480 KB |
Output is correct |
9 |
Correct |
72 ms |
2540 KB |
Output is correct |
10 |
Correct |
4 ms |
464 KB |
Output is correct |
11 |
Correct |
54 ms |
1752 KB |
Output is correct |
12 |
Correct |
86 ms |
2556 KB |
Output is correct |
13 |
Correct |
76 ms |
2532 KB |
Output is correct |
14 |
Correct |
80 ms |
2448 KB |
Output is correct |
15 |
Incorrect |
201 ms |
5800 KB |
Wrong Answer [2] |
16 |
Halted |
0 ms |
0 KB |
- |
# |
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 |
208 KB |
Output is correct |
4 |
Correct |
1 ms |
208 KB |
Output is correct |
5 |
Correct |
3 ms |
464 KB |
Output is correct |
6 |
Correct |
6 ms |
564 KB |
Output is correct |
7 |
Correct |
14 ms |
848 KB |
Output is correct |
8 |
Correct |
33 ms |
1480 KB |
Output is correct |
9 |
Correct |
72 ms |
2540 KB |
Output is correct |
10 |
Correct |
4 ms |
464 KB |
Output is correct |
11 |
Correct |
54 ms |
1752 KB |
Output is correct |
12 |
Correct |
86 ms |
2556 KB |
Output is correct |
13 |
Correct |
76 ms |
2532 KB |
Output is correct |
14 |
Correct |
80 ms |
2448 KB |
Output is correct |
15 |
Incorrect |
201 ms |
5800 KB |
Wrong Answer [2] |
16 |
Halted |
0 ms |
0 KB |
- |
# |
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 |
208 KB |
Output is correct |
4 |
Correct |
1 ms |
208 KB |
Output is correct |
5 |
Correct |
3 ms |
464 KB |
Output is correct |
6 |
Correct |
6 ms |
564 KB |
Output is correct |
7 |
Correct |
14 ms |
848 KB |
Output is correct |
8 |
Correct |
33 ms |
1480 KB |
Output is correct |
9 |
Correct |
72 ms |
2540 KB |
Output is correct |
10 |
Correct |
4 ms |
464 KB |
Output is correct |
11 |
Correct |
54 ms |
1752 KB |
Output is correct |
12 |
Correct |
86 ms |
2556 KB |
Output is correct |
13 |
Correct |
76 ms |
2532 KB |
Output is correct |
14 |
Correct |
80 ms |
2448 KB |
Output is correct |
15 |
Incorrect |
201 ms |
5800 KB |
Wrong Answer [2] |
16 |
Halted |
0 ms |
0 KB |
- |