QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#596698#8819. CNOI Knowledgeucup-team173#AC ✓133ms4292kbC++202.3kb2024-09-28 16:18:322024-09-28 16:18:32

Judging History

This is the latest submission verdict.

  • [2024-09-28 16:18:32]
  • Judged
  • Verdict: AC
  • Time: 133ms
  • Memory: 4292kb
  • [2024-09-28 16:18:32]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const int maxn=4444;
struct SAM{
    struct node{
        unordered_map<int,int>ch;
        int par,val;
        node(int val=0):par(0),val(val){ch.clear();}
    }sam[maxn];
    int last,m;
    int sum;
    void append(int w){
        // cerr<<"(#"<<w<<")";
        int p=last,np,q,nq;
        sam[last=np=++m]=node(sam[p].val+1);
        while(p&&sam[p].ch.count(w)==0)sam[p].ch[w]=np,p=sam[p].par;
        if(p==0){sam[np].par=1;return;}
        q=sam[p].ch[w];
        if(sam[p].val+1==sam[q].val)sam[np].par=q;
        else{
            sam[nq=++m]=sam[q];
            sam[nq].val=sam[p].val+1;
            sam[q].par=sam[np].par=nq;
            while(p&&sam[p].ch.count(w)&&sam[p].ch[w]==q)sam[p].ch[w]=nq,p=sam[p].par;
        }
    }
    void clear(){
        last=1;
        for(int i=1;i<=m;i++){
            sam[i]=node();
        }
        m=1;
        sum=1;
    }
    int get(){
        int ans=0;
        for(int i=2;i<=m;i++){
            ans+=sam[i].val;
            if(sam[i].par){
                ans-=sam[sam[i].par].val;
            }
        }
        return ans;
    }

}Sam;
int n;
int a[maxn];
int tot;
int calc(int l,int r){
    Sam.clear();
    for(int i=l;i<=r;i++){
        Sam.append(a[i]);
        // cerr<<Sam.sam[Sam.last].val<<"%"<<Sam.m<<"%"<<Sam.last<<"%"<<Sam.sam[Sam.last].par<<"% ";
    }
    int ans=Sam.get();
    // cerr<<ans<<" "<<l<<" "<<r<<"\n";
    return ans;
}
void solve() {
    tot=0;
    cin>>n;
    a[1]=++tot;
    for(int i=2;i<=n;i++){
        int l=1,r=i;
        int ans=i;
        while(l<=r){
            int mid=l+r>>1;
            cout<<"? "<<mid<<" "<<i<<endl;
            int tmp;
            cin>>tmp;
            if(calc(mid,i-1)+(i-mid+1)==tmp){
                ans=mid;
                r=mid-1;
            }
            else{
                l=mid+1;
            }
        }
        if(ans==1){
            a[i]=++tot;
        }
        else a[i]=a[ans-1];
    }
    cout<<"! ";
    for(int i=1;i<=n;i++){
        cout<<a[i];
        if(i!=n)cout<<" ";
    }
    cout<<endl;
}
signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    int t = 1;
    // cin >> t;
    while(t--) solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3848kb

input:

12
3
3
6
6
10
6
15
10
21
10
20
15
14
6
9
14
34
43
19
5
2
1
19
5
13
8
25
9
19

output:

? 1 2
? 2 3
? 1 3
? 2 4
? 1 4
? 3 5
? 1 5
? 3 6
? 1 6
? 4 7
? 2 7
? 3 7
? 4 8
? 6 8
? 5 8
? 5 9
? 2 9
? 1 9
? 5 10
? 8 10
? 9 10
? 10 10
? 6 11
? 9 11
? 7 11
? 8 11
? 6 12
? 9 12
? 7 12
! 1 2 3 4 5 6 2 5 7 7 5 6

result:

ok Accepted. 29 queries used.

Test #2:

score: 0
Accepted
time: 122ms
memory: 4092kb

input:

1000
3
2
1
3
2
1
5
11
7
8
2
1
7
2
1
11
5
7
11
5
3
15
5
2
1
15
3
2
1
19
4
2
1
17
4
2
1
20
4
2
1
15
4
2
1
23
9
13
15
23
11
5
3
31
11
5
3
36
11
5
2
1
45
15
3
2
1
48
15
5
11
7
58
16
5
2
1
59
16
5
12
8
69
21
8
2
1
69
20
8
3
5
79
20
8
2
1
76
20
8
3
5
87
26
8
3
5
88
26
8
2
1
100
24
8
3
5
98
24
8
2
1
111
31...

output:

? 1 2
? 2 3
? 3 3
? 2 4
? 3 4
? 4 4
? 3 5
? 1 5
? 2 5
? 3 6
? 5 6
? 6 6
? 4 7
? 6 7
? 7 7
? 4 8
? 6 8
? 5 8
? 5 9
? 7 9
? 8 9
? 5 10
? 8 10
? 9 10
? 10 10
? 6 11
? 9 11
? 10 11
? 11 11
? 6 12
? 9 12
? 11 12
? 12 12
? 7 13
? 10 13
? 12 13
? 13 13
? 7 14
? 11 14
? 13 14
? 14 14
? 8 15
? 12 15
? 14 15
...

result:

ok Accepted. 8792 queries used.

Test #3:

score: 0
Accepted
time: 111ms
memory: 4060kb

input:

1000
2
1
2
1
5
7
5
2
1
7
2
1
7
16
11
11
5
2
1
11
3
2
1
14
3
2
1
11
3
2
1
13
4
2
1
7
4
2
1
15
51
32
23
20
8
2
1
28
12
5
8
31
12
5
2
1
38
11
3
2
1
38
9
3
2
1
44
14
5
9
44
14
5
2
1
54
15
3
2
1
56
14
3
2
1
65
17
4
2
1
66
17
7
11
76
17
8
2
1
76
20
8
3
5
87
26
8
2
1
88
26
8
3
5
102
26
8
3
5
102
26
8
2
1
1...

output:

? 1 2
? 2 2
? 2 3
? 3 3
? 2 4
? 1 4
? 3 5
? 4 5
? 5 5
? 3 6
? 5 6
? 6 6
? 4 7
? 2 7
? 3 7
? 4 8
? 6 8
? 7 8
? 8 8
? 5 9
? 7 9
? 8 9
? 9 9
? 5 10
? 8 10
? 9 10
? 10 10
? 6 11
? 9 11
? 10 11
? 11 11
? 6 12
? 9 12
? 11 12
? 12 12
? 7 13
? 10 13
? 12 13
? 13 13
? 7 14
? 3 14
? 5 14
? 6 14
? 8 15
? 12 15...

result:

ok Accepted. 8780 queries used.

Test #4:

score: 0
Accepted
time: 97ms
memory: 4056kb

input:

1000
3
3
5
5
2
1
5
11
8
8
2
1
8
3
5
12
5
2
1
11
3
2
1
16
5
11
7
15
5
3
20
7
3
5
21
8
2
1
27
7
2
1
26
4
2
1
31
5
3
2
1
27
5
3
2
1
31
5
3
2
1
26
5
3
2
1
35
11
17
26
35
14
5
3
44
15
5
2
1
44
15
3
2
1
53
19
4
2
1
55
19
7
14
9
63
19
8
3
5
62
19
8
2
1
69
24
7
2
1
70
23
7
15
11
81
23
8
3
5
83
25
7
3
5
99
3...

output:

? 1 2
? 2 3
? 1 3
? 2 4
? 3 4
? 4 4
? 3 5
? 1 5
? 2 5
? 3 6
? 5 6
? 6 6
? 4 7
? 6 7
? 5 7
? 4 8
? 6 8
? 7 8
? 8 8
? 5 9
? 7 9
? 8 9
? 9 9
? 5 10
? 8 10
? 6 10
? 7 10
? 6 11
? 9 11
? 10 11
? 6 12
? 9 12
? 11 12
? 10 12
? 7 13
? 10 13
? 12 13
? 13 13
? 7 14
? 11 14
? 13 14
? 14 14
? 8 15
? 12 15
? 14 ...

result:

ok Accepted. 8787 queries used.

Test #5:

score: 0
Accepted
time: 124ms
memory: 4220kb

input:

1000
2
1
2
1
5
7
5
3
8
2
1
7
2
1
9
3
2
1
5
3
2
1
6
3
2
1
11
27
20
13
17
8
2
1
20
8
3
5
26
8
3
5
26
8
2
1
31
11
5
8
28
11
5
3
36
11
5
3
34
9
5
3
41
11
5
3
45
14
5
2
1
55
15
5
11
8
56
16
5
2
1
65
21
8
3
5
65
20
8
2
1
75
20
8
3
5
76
21
8
3
5
87
26
8
2
1
85
24
8
3
5
95
24
8
2
1
92
26
8
3
5
101
32
12
5
2...

output:

? 1 2
? 2 2
? 2 3
? 3 3
? 2 4
? 1 4
? 3 5
? 4 5
? 3 6
? 5 6
? 6 6
? 4 7
? 6 7
? 7 7
? 4 8
? 6 8
? 7 8
? 8 8
? 5 9
? 7 9
? 8 9
? 9 9
? 5 10
? 8 10
? 9 10
? 10 10
? 6 11
? 3 11
? 4 11
? 5 11
? 6 12
? 9 12
? 11 12
? 12 12
? 7 13
? 10 13
? 12 13
? 11 13
? 7 14
? 11 14
? 13 14
? 12 14
? 8 15
? 12 15
? 14...

result:

ok Accepted. 8778 queries used.

Test #6:

score: 0
Accepted
time: 98ms
memory: 4292kb

input:

1000
2
1
3
5
5
2
1
5
12
8
8
2
1
8
3
5
12
5
2
1
12
5
8
16
5
2
1
16
5
12
8
21
8
3
5
21
7
3
5
26
7
3
5
23
7
3
5
27
9
5
3
27
11
5
2
1
34
11
5
8
34
11
5
3
41
15
5
3
41
14
5
3
48
11
5
3
52
14
5
2
1
63
19
7
2
1
66
20
7
15
11
77
21
8
2
1
79
21
7
2
1
91
27
7
16
11
91
27
8
2
1
104
26
8
3
5
103
26
8
2
1
115
31...

output:

? 1 2
? 2 2
? 2 3
? 1 3
? 2 4
? 3 4
? 4 4
? 3 5
? 1 5
? 2 5
? 3 6
? 5 6
? 6 6
? 4 7
? 6 7
? 5 7
? 4 8
? 6 8
? 7 8
? 8 8
? 5 9
? 7 9
? 6 9
? 5 10
? 8 10
? 9 10
? 10 10
? 6 11
? 9 11
? 7 11
? 8 11
? 6 12
? 9 12
? 11 12
? 10 12
? 7 13
? 10 13
? 12 13
? 11 13
? 7 14
? 11 14
? 13 14
? 12 14
? 8 15
? 12 1...

result:

ok Accepted. 8781 queries used.

Test #7:

score: 0
Accepted
time: 87ms
memory: 4008kb

input:

1000
3
2
1
3
2
1
5
12
8
2
1
7
2
1
11
5
7
11
5
3
15
5
2
1
15
3
2
1
22
41
61
50
23
8
3
5
29
7
3
5
29
8
2
1
37
13
23
29
37
13
5
3
45
11
5
3
44
9
5
3
51
11
5
3
47
11
5
3
57
15
29
47
38
58
17
6
13
9
69
22
9
3
6
68
21
9
3
6
80
21
9
3
5
80
23
9
18
13
94
30
9
3
6
94
31
9
2
1
108
30
9
17
13
110
28
9
17
13
12...

output:

? 1 2
? 2 3
? 3 3
? 2 4
? 3 4
? 4 4
? 3 5
? 1 5
? 3 6
? 5 6
? 6 6
? 4 7
? 6 7
? 7 7
? 4 8
? 6 8
? 5 8
? 5 9
? 7 9
? 8 9
? 5 10
? 8 10
? 9 10
? 10 10
? 6 11
? 9 11
? 10 11
? 11 11
? 6 12
? 3 12
? 1 12
? 2 12
? 7 13
? 10 13
? 12 13
? 11 13
? 7 14
? 11 14
? 13 14
? 12 14
? 8 15
? 12 15
? 14 15
? 15 15
...

result:

ok Accepted. 8757 queries used.

Test #8:

score: 0
Accepted
time: 105ms
memory: 3912kb

input:

1000
3
2
1
5
9
6
13
9
9
3
5
7
3
5
11
5
2
1
11
3
2
1
17
37
29
22
17
5
2
1
22
7
2
1
19
4
2
1
27
63
44
35
28
9
15
21
35
13
6
9
33
13
5
2
1
42
13
5
8
43
11
5
3
52
15
5
3
54
16
5
2
1
65
17
37
29
65
18
5
3
76
23
7
3
5
77
23
9
17
89
23
9
3
6
87
23
9
2
1
100
29
7
2
1
100
30
7
17
11
115
30
9
17
23
116
30
9
2...

output:

? 1 2
? 2 3
? 3 3
? 2 4
? 1 4
? 3 5
? 1 5
? 2 5
? 3 6
? 5 6
? 4 6
? 4 7
? 6 7
? 5 7
? 4 8
? 6 8
? 7 8
? 8 8
? 5 9
? 7 9
? 8 9
? 9 9
? 5 10
? 2 10
? 3 10
? 4 10
? 6 11
? 9 11
? 10 11
? 11 11
? 6 12
? 9 12
? 11 12
? 12 12
? 7 13
? 10 13
? 12 13
? 13 13
? 7 14
? 3 14
? 5 14
? 6 14
? 8 15
? 12 15
? 10 1...

result:

ok Accepted. 8720 queries used.

Test #9:

score: 0
Accepted
time: 133ms
memory: 3988kb

input:

1000
3
3
6
5
2
1
5
13
8
8
2
1
9
18
24
13
5
2
1
13
31
24
18
18
5
3
17
5
3
23
9
17
23
9
2
1
29
7
2
1
27
4
2
1
32
5
3
2
1
29
5
3
2
1
33
5
3
2
1
33
9
15
24
42
15
24
33
42
17
6
13
9
51
17
5
2
1
51
17
5
13
9
63
23
8
2
1
67
23
7
2
1
80
23
7
16
11
83
21
8
2
1
95
26
8
3
5
95
29
62
44
35
110
30
9
3
5
111
30
8...

output:

? 1 2
? 2 3
? 1 3
? 2 4
? 3 4
? 4 4
? 3 5
? 1 5
? 2 5
? 3 6
? 5 6
? 6 6
? 4 7
? 2 7
? 1 7
? 4 8
? 6 8
? 7 8
? 8 8
? 5 9
? 2 9
? 3 9
? 4 9
? 5 10
? 8 10
? 9 10
? 6 11
? 9 11
? 10 11
? 6 12
? 9 12
? 7 12
? 7 13
? 10 13
? 12 13
? 13 13
? 7 14
? 11 14
? 13 14
? 14 14
? 8 15
? 12 15
? 14 15
? 15 15
? 8 1...

result:

ok Accepted. 8742 queries used.

Test #10:

score: 0
Accepted
time: 107ms
memory: 4272kb

input:

1000
2
1
3
5
6
9
6
13
9
9
2
1
7
2
1
12
22
17
11
5
3
15
5
3
17
36
29
22
23
9
2
1
23
9
18
13
30
8
3
5
30
8
2
1
36
11
5
8
33
11
5
3
41
11
5
3
41
12
27
32
51
17
5
2
1
51
18
5
13
8
61
18
6
13
62
18
5
2
1
74
24
9
18
13
75
23
9
17
13
87
23
9
3
5
88
23
7
3
5
100
28
7
3
5
101
28
9
15
21
115
27
9
3
5
115
28
8...

output:

? 1 2
? 2 2
? 2 3
? 1 3
? 2 4
? 1 4
? 3 5
? 1 5
? 2 5
? 3 6
? 5 6
? 6 6
? 4 7
? 6 7
? 7 7
? 4 8
? 2 8
? 3 8
? 5 9
? 7 9
? 8 9
? 5 10
? 8 10
? 9 10
? 6 11
? 3 11
? 4 11
? 5 11
? 6 12
? 9 12
? 11 12
? 12 12
? 7 13
? 10 13
? 8 13
? 9 13
? 7 14
? 11 14
? 13 14
? 12 14
? 8 15
? 12 15
? 14 15
? 15 15
? 8 ...

result:

ok Accepted. 8735 queries used.

Test #11:

score: 0
Accepted
time: 107ms
memory: 4204kb

input:

1000
2
1
3
5
5
2
1
5
12
8
9
18
9
3
6
13
5
2
1
13
5
8
18
6
13
18
5
3
24
8
2
1
24
9
18
13
30
8
3
5
29
8
2
1
36
11
3
2
1
36
12
22
29
45
12
29
23
17
46
13
5
3
55
17
5
3
53
15
5
3
64
15
35
28
21
64
17
6
13
9
76
23
9
2
1
76
24
8
3
5
88
24
9
18
13
89
24
9
2
1
102
31
9
18
13
102
30
8
2
1
116
30
8
3
5
115
30...

output:

? 1 2
? 2 2
? 2 3
? 1 3
? 2 4
? 3 4
? 4 4
? 3 5
? 1 5
? 2 5
? 3 6
? 1 6
? 4 7
? 6 7
? 5 7
? 4 8
? 6 8
? 7 8
? 8 8
? 5 9
? 7 9
? 6 9
? 5 10
? 8 10
? 6 10
? 6 11
? 9 11
? 10 11
? 6 12
? 9 12
? 11 12
? 12 12
? 7 13
? 10 13
? 8 13
? 9 13
? 7 14
? 11 14
? 13 14
? 12 14
? 8 15
? 12 15
? 14 15
? 15 15
? 8 ...

result:

ok Accepted. 8740 queries used.

Extra Test:

score: 0
Extra Test Passed