QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#611565#8939. PermutationUESTC_OldEastWestWA 1644ms331480kbC++172.1kb2024-10-04 21:27:432024-10-04 21:27:45

Judging History

This is the latest submission verdict.

  • [2024-10-04 21:27:45]
  • Judged
  • Verdict: WA
  • Time: 1644ms
  • Memory: 331480kb
  • [2024-10-04 21:27:43]
  • 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 + 15); ++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: 1428ms
memory: 331348kb

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: 1532ms
memory: 331480kb

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: 1573ms
memory: 331152kb

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: 1594ms
memory: 331436kb

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: 1561ms
memory: 331068kb

input:

10000
100
47
61
93
96
71
71
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
20
19
48
1
1
1
1
5
...

output:

? 1 100
? 1 61
? 62 100
? 77 100
? 62 76
? 68 76
? 68 72
? 70 72
? 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: 1553ms
memory: 331228kb

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: 1644ms
memory: 331356kb

input:

10000
100
76
49
35
34
5
3
11
11
11
100
29
29
29
29
29
29
30
26
26
100
64
64
69
88
88
86
78
77
80
81
100
51
57
98
98
92
79
79
77
81
80
100
44
44
50
13
13
13
12
9
9
100
64
92
22
19
27
25
35
36
39
39
100
93
93
86
56
59
40
44
49
48
47
100
37
2
97
81
76
76
74
68
68
100
76
76
58
94
95
80
79
86
85
83
100
3...

output:

? 1 100
? 40 100
? 1 39
? 16 39
? 1 15
? 1 9
? 10 15
? 10 12
? 10 11
! 10
? 1 100
? 1 61
? 1 37
? 15 37
? 24 37
? 24 31
? 27 31
? 24 26
? 25 26
! 25
? 1 100
? 40 100
? 40 76
? 77 100
? 77 90
? 83 90
? 77 82
? 77 79
? 80 82
? 80 81
! 82
? 1 100
? 1 61
? 62 100
? 77 100
? 87 100
? 77 86
? 77 82
? 77 7...

result:

ok Correct (10000 test cases)

Test #8:

score: -100
Wrong Answer
time: 1428ms
memory: 331376kb

input:

1000
1000
475
426
728
747
896
896
896
867
831
828
841
841
842
844
845
1000
278
17
974
811
598
534
679
679
679
665
652
655
647
646
645

output:

? 1 1000
? 1 514
? 515 1000
? 515 771
? 772 1000
? 772 899
? 822 899
? 852 899
? 822 851
? 822 839
? 840 851
? 840 846
? 840 843
? 844 846
? 844 845
! 846
? 1 1000
? 1 514
? 515 1000
? 744 1000
? 515 743
? 515 642
? 643 743
? 643 704
? 643 680
? 658 680
? 643 657
? 649 657
? 643 648
? 646 648
? 643 ...

result:

wrong answer Too many queries , n = 1000 , now_q 16 (test case 2)