QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#611560 | #8939. Permutation | UESTC_OldEastWest | WA | 1346ms | 331480kb | C++17 | 2.1kb | 2024-10-04 21:26:19 | 2024-10-04 21:26:21 |
Judging History
answer
#include <bits/stdc++.h>
const int N = 1e6 + 5;
const int M = 31;
const int INF = 1e9;
const double eps = 1e-8;
std::vector<std::vector<int> > dp, f;
void prep() {
dp = f = std::vector<std::vector<int> > (N, std::vector<int> (M));
std::function<int(int, int)> DFS = [&](int n, int m) {
if (n == 1) return 0;
if (m == -1) return INF;
if (dp[n][m]) return dp[n][m];
dp[n][m] = INF;
int mid = n >> 1;
for (int i = mid; i < std::min(n, mid + 10); ++i) {
int new_val = std::max(DFS(i, m - 1), DFS(n - i, m - 1) + n - i) + i;
if (new_val < dp[n][m]) f[n][m] = i, dp[n][m] = new_val;
}
return dp[n][m];
};
for (int i = 2; i < N; ++i) {
int k = int(1.5 * log(i) / log(2) + 1.0);
for (int j = std::max(0, k - 10); j <= k; ++j) DFS(i, j);
// if (DFS(i, k) > 2 * i) std::cout << '!';
// if (i % 1000 == 0) std::cout << i << ' ' << DFS(i, k) << '\n';
}
// std::cout << "Finished." << std::endl;
}
void charming() {
int n; std::cin >> n;
std::function<int(int, int)> Send = [&](int l, int r) {
if (l == r) return -1;
std::cout << "? " << l << ' ' << r << '\n';
std::cout.flush();
int rcv; std::cin >> rcv;
return rcv;
};
std::function<void(int)> Answer = [&](int x) {
std::cout << "! " << x << '\n';
std::cout.flush();
};
int remain = int(1.5 * (log(n) / log(2)) + 1.0 + eps);
// std::cout << remain << '\n';
int l = 1, r = n, p = -1;
while (l < r) {
if (p == -1) p = Send(l, r), --remain;
if (l + 1 == r) {
if (p == l) ++l;
break;
}
int ask_len = f[r - l + 1][remain];
if (l + ask_len - 1 >= p) {
int q = Send(l, l + ask_len - 1); --remain;
if (q == p) r = l + ask_len - 1;
else l = l + ask_len, p = -1;
}
else {
int q = Send(r - ask_len + 1, r); --remain;
if (q == p) l = r - ask_len + 1;
else r = r - ask_len, p = -1;
}
}
Answer(l);
}
signed main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
prep();
int t; std::cin >> t;
while (t--) charming();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 994ms
memory: 331480kb
input:
3 5 3 2 5 6 6 5 3 3 4 3 3
output:
? 1 5 ? 1 3 ? 4 5 ! 4 ? 1 6 ? 4 6 ? 1 3 ? 2 3 ! 2 ? 1 4 ? 3 4 ! 4
result:
ok Correct (3 test cases)
Test #2:
score: 0
Accepted
time: 1126ms
memory: 331384kb
input:
10000 10 2 2 3 5 5 10 10 10 8 5 5 10 5 1 10 9 8 10 4 4 6 2 1 10 10 6 3 4 2 10 3 3 3 2 10 1 5 9 10 7 10 1 3 8 8 10 2 4 9 9 10 3 3 1 5 5 10 4 1 7 8 9 10 8 7 1 2 4 10 4 1 9 9 10 7 7 7 6 10 5 1 7 8 10 10 8 8 8 9 10 2 2 1 5 4 10 6 4 10 10 10 1 3 8 8 10 7 9 4 4 10 7 8 4 4 10 3 4 7 8 10 10 4 4 4 4 10 8 7 4...
output:
? 1 10 ? 1 6 ? 1 3 ? 4 6 ? 4 5 ! 4 ? 1 10 ? 5 10 ? 8 10 ? 5 7 ? 5 6 ! 6 ? 1 10 ? 1 6 ? 7 10 ? 9 10 ? 7 8 ! 7 ? 1 10 ? 1 6 ? 4 6 ? 1 3 ? 1 2 ! 3 ? 1 10 ? 5 10 ? 1 4 ? 3 4 ? 1 2 ! 1 ? 1 10 ? 1 6 ? 1 3 ? 2 3 ! 1 ? 1 10 ? 1 6 ? 7 10 ? 9 10 ? 7 8 ! 8 ? 1 10 ? 1 6 ? 7 10 ? 7 8 ! 7 ? 1 10 ? 1 6 ? 7 10 ? 9 ...
result:
ok Correct (10000 test cases)
Test #3:
score: 0
Accepted
time: 1135ms
memory: 331400kb
input:
10000 3 1 2 11 5 5 5 4 2 2 19 3 3 4 11 11 11 7 5 7 1 2 3 3 3 19 6 6 6 5 1 2 2 2 15 11 11 11 11 10 14 1 1 1 3 5 16 4 4 4 4 5 3 3 2 19 13 17 5 5 5 4 2 2 4 1 2 3 7 2 2 2 3 2 2 17 1 1 1 2 4 4 14 9 9 9 7 11 20 9 9 9 6 11 10 6 4 4 5 18 7 7 7 7 6 8 8 8 6 5 8 6 6 6 5 16 10 10 10 10 10 6 1 3 6 5 10 3 3 1 4 4...
output:
? 1 3 ? 1 2 ! 3 ? 1 11 ? 1 6 ? 4 6 ? 4 5 ! 6 ? 1 2 ! 1 ? 1 19 ? 1 11 ? 1 6 ? 7 11 ? 9 11 ? 10 11 ! 10 ? 1 7 ? 4 7 ? 1 3 ? 1 2 ! 3 ? 1 3 ? 2 3 ! 2 ? 1 19 ? 1 11 ? 1 6 ? 4 6 ? 1 3 ? 1 2 ! 3 ? 1 2 ! 1 ? 1 15 ? 7 15 ? 7 11 ? 9 11 ? 10 11 ! 9 ? 1 14 ? 1 8 ? 1 5 ? 1 3 ? 4 5 ! 4 ? 1 16 ? 1 10 ? 1 6 ? 4 6 ?...
result:
ok Correct (10000 test cases)
Test #4:
score: 0
Accepted
time: 1161ms
memory: 331356kb
input:
10000 47 23 23 24 11 9 2 1 5 14 8 2 9 9 9 25 6 6 4 13 13 13 7 4 2 6 6 9 2 2 2 2 27 27 27 27 27 26 24 23 21 7 7 7 7 6 5 43 41 21 7 7 8 4 3 1 22 6 12 14 17 20 19 21 34 29 29 25 17 17 18 14 42 20 20 20 20 20 20 19 47 21 21 21 21 21 20 19 19 41 25 11 30 33 36 36 36 19 17 17 16 9 9 10 21 14 14 14 14 14 1...
output:
? 1 47 ? 1 29 ? 12 29 ? 1 11 ? 6 11 ? 1 5 ? 1 3 ? 4 5 ! 4 ? 1 14 ? 1 8 ? 9 14 ? 9 11 ? 9 10 ! 10 ? 1 25 ? 1 15 ? 1 9 ? 10 15 ? 13 15 ? 13 14 ! 14 ? 1 7 ? 1 4 ? 5 7 ? 5 6 ! 5 ? 1 9 ? 1 5 ? 1 3 ? 1 2 ! 1 ? 1 27 ? 12 27 ? 18 27 ? 22 27 ? 25 27 ? 22 24 ? 23 24 ! 22 ? 1 21 ? 1 13 ? 1 8 ? 4 8 ? 6 8 ? 4 5 ...
result:
ok Correct (10000 test cases)
Test #5:
score: 0
Accepted
time: 1202ms
memory: 331372kb
input:
10000 100 47 5 61 61 61 68 71 71 71 9 2 2 2 1 53 46 35 6 6 6 6 6 6 33 3 16 31 31 31 29 32 82 60 41 29 29 29 28 23 24 26 88 39 8 59 59 59 59 59 59 59 71 24 29 59 49 65 65 64 61 61 92 52 45 88 88 88 88 85 91 91 24 11 11 9 5 5 5 66 51 51 45 29 28 39 38 40 40 92 43 43 50 20 20 20 20 21 17 48 1 1 1 1 5 9...
output:
? 1 100 ? 1 59 ? 60 100 ? 60 84 ? 60 74 ? 60 68 ? 69 74 ? 69 71 ? 70 71 ! 70 ? 1 9 ? 1 5 ? 1 3 ? 1 2 ! 3 ? 1 53 ? 22 53 ? 1 21 ? 1 13 ? 1 8 ? 4 8 ? 4 6 ? 5 6 ! 5 ? 1 33 ? 1 20 ? 21 33 ? 26 33 ? 29 33 ? 29 31 ? 32 33 ! 33 ? 1 82 ? 33 82 ? 1 32 ? 14 32 ? 22 32 ? 27 32 ? 22 26 ? 22 24 ? 25 26 ! 25 ? 1 ...
result:
ok Correct (10000 test cases)
Test #6:
score: 0
Accepted
time: 1196ms
memory: 331276kb
input:
10000 50 10 10 10 10 6 2 3 5 50 11 11 9 31 26 23 23 22 50 44 44 40 20 20 21 26 25 50 24 14 45 45 40 49 48 46 50 50 50 50 50 50 49 47 47 50 36 23 17 17 18 12 11 10 50 29 29 20 3 3 3 3 50 30 30 22 1 1 1 2 4 50 25 25 25 25 21 30 31 27 50 18 20 49 47 37 37 35 39 50 9 9 9 5 17 19 14 13 50 26 26 26 28 17 ...
output:
? 1 50 ? 1 31 ? 1 19 ? 1 11 ? 6 11 ? 1 5 ? 1 3 ? 4 5 ! 4 ? 1 50 ? 1 31 ? 1 19 ? 20 31 ? 25 31 ? 20 24 ? 22 24 ? 22 23 ! 24 ? 1 50 ? 20 50 ? 32 50 ? 20 31 ? 20 26 ? 20 23 ? 24 26 ? 25 26 ! 24 ? 1 50 ? 1 31 ? 32 50 ? 40 50 ? 40 45 ? 46 50 ? 48 50 ? 46 47 ! 47 ? 1 50 ? 20 50 ? 32 50 ? 40 50 ? 45 50 ? 4...
result:
ok Correct (10000 test cases)
Test #7:
score: 0
Accepted
time: 1346ms
memory: 331344kb
input:
10000 100 76 49 35 41 5 5 3 9 9 100 29 29 29 29 29 29 30 26 26 100 64 64 69 88 88 86 78 80 83 83 100 51 57 98 98 92 79 81 84 85 83 100 44 44 50 13 13 13 12 9 9 100 64 92 22 19 41 41 41 40 36 37 100 93 93 86 56 59 44 44 43 45 100 37 2 97 81 60 60 62 68 68 100 76 76 58 94 95 80 79 86 85 83 100 32 32 1...
output:
? 1 100 ? 42 100 ? 1 41 ? 17 41 ? 1 16 ? 1 10 ? 1 6 ? 7 10 ? 9 10 ! 10 ? 1 100 ? 1 59 ? 1 36 ? 15 36 ? 24 36 ? 24 31 ? 27 31 ? 24 26 ? 25 26 ! 25 ? 1 100 ? 42 100 ? 42 77 ? 78 100 ? 78 91 ? 84 91 ? 78 83 ? 78 80 ? 81 83 ? 82 83 ! 82 ? 1 100 ? 1 59 ? 60 100 ? 76 100 ? 86 100 ? 76 85 ? 76 81 ? 82 85 ?...
result:
ok Correct (10000 test cases)
Test #8:
score: -100
Wrong Answer
time: 1018ms
memory: 331432kb
input:
1000 1000 475 426 728 747 896 974 867 867 867 858 841 837 844 844 845 1000 278 17 974 811 598 534 679 679 689 637 637 637 639 645 645 1000 75 128 871 985 607 604 644 686 713 712 732 730 742 742 743
output:
? 1 1000 ? 1 509 ? 510 1000 ? 510 763 ? 764 1000 ? 874 1000 ? 764 873 ? 810 873 ? 835 873 ? 850 873 ? 835 849 ? 835 843 ? 844 849 ? 844 846 ? 844 845 ! 846 ? 1 1000 ? 1 509 ? 510 1000 ? 747 1000 ? 510 746 ? 510 636 ? 637 746 ? 637 700 ? 662 700 ? 637 661 ? 637 651 ? 637 645 ? 637 641 ? 642 645 ? 644...
result:
wrong answer Too many queries , n = 1000 , now_q 16 (test case 3)