QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#611560#8939. PermutationUESTC_OldEastWestWA 1346ms331480kbC++172.1kb2024-10-04 21:26:192024-10-04 21:26:21

Judging History

This is the latest submission verdict.

  • [2024-10-04 21:26:21]
  • Judged
  • Verdict: WA
  • Time: 1346ms
  • Memory: 331480kb
  • [2024-10-04 21:26:19]
  • Submitted

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)