QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#691420#7660. Investigating Frog Behaviour on Lily Pad Patternsptit_noodlesRE 3ms40852kbC++232.4kb2024-10-31 11:24:252024-10-31 11:24:27

Judging History

This is the latest submission verdict.

  • [2024-10-31 11:24:27]
  • Judged
  • Verdict: RE
  • Time: 3ms
  • Memory: 40852kb
  • [2024-10-31 11:24:25]
  • Submitted

answer

#ifdef DS
    #include "debug.h"
#else 
    #include<bits/stdc++.h>
    #define deb(...) 
#endif
using namespace std;
#define FOR(i,a,b) for (int i=a;i<=b;i++)
#define FOD(i,a,b) for (int i=a;i>=b;i--)
#define ALL(x) x.begin(),x.end()
#define NALL(x) x.begin()+1,x.end()
#define TIME "Time elapsed : "<<(double)clock()/1000<<" s"
#define int long long
#define vi vector<int>
#define pii pair<int,int>
const int MOD=1e9+7,INF=4e18;
#define maxn 
struct Node{
    int val;
    Node()
    {
        // init val for the empty Node
        val = 0;
    }
};
Node makeNode(int _val)
{
    Node ans;
    // assign the value to Node
    ans.val = _val;
    return ans;
}
Node Merge(Node l,Node r)
{
    Node ans;
    // combine two Node
    ans.val = l.val + r.val;
    return ans;
}
struct Segment_Tree{
    vector<Node> st;
    Segment_Tree (int _sz)
    {
        st.resize(_sz << 2);
    }
    void update(int id,int l,int r,int pos,int val)
    {
        if (l > pos || r < pos) return;
        if (l == r) 
            return st[id] = makeNode(val), void(); // base Node
        int m = l+r >> 1;
        update(id << 1,l,m,pos,val);
        update(id << 1 | 1,m+1,r,pos,val);
        st[id] = Merge(st[id << 1], st[id << 1 | 1]);
    }
    Node get(int id,int l,int r,int u,int v)
    {
        if (r < u || l > v) return Node();
        if (l >= u && r <= v) return st[id];
        int m = l+r >> 1;
        return Merge(get(id << 1,l,m,u,v), get(id << 1 | 1,m+1,r,u,v));
    }
};
int pos[100005];
signed main()
{
    #ifndef ONLINE_JUDGE
    freopen("thu.inp","r",stdin);
    #endif
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    int n; cin>>n;
    vi a(n+1);
    int x_max = 0;
    FOR(i,1,n) 
    {
        cin>>a[i];
        x_max = max(x_max,a[i]);
        pos[i] = a[i];
    }
    int N = 1e6 + 2e5;
    Segment_Tree st(N);
    FOR(i,1,n)
    {
        st.update(1,1,N,a[i],1);
    }
    int q; cin>>q;
    while (q--)
    {
        int x; cin>>x;
        int val = pos[x];
        int l = val+1, r = N;
        int ans = -1;
        while (l <= r)
        {
            int m = l+r >> 1;
            if (st.get(1,1,N,val+1,m).val < m-val)
            {
                ans = m;
                r = m-1;
            }
            else l = m+1;
        }
        cout<<ans<<'\n';
        st.update(1,1,N,val,0);
        pos[x] = ans;
        st.update(1,1,N,ans,1);
    }
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 40852kb

input:

5
1 2 3 5 7
3
1
2
4

output:

4
6
8

result:

ok 3 lines

Test #2:

score: 0
Accepted
time: 0ms
memory: 40620kb

input:

5
1 2 3 5 7
4
1
1
1
1

output:

4
6
8
9

result:

ok 4 lines

Test #3:

score: 0
Accepted
time: 3ms
memory: 40676kb

input:

5
1 2 3 4 5
20
1
4
4
3
5
3
3
5
2
2
5
4
1
4
2
3
1
5
3
3

output:

6
7
8
4
7
5
9
10
3
4
11
10
7
12
5
10
8
13
11
14

result:

ok 20 lines

Test #4:

score: 0
Accepted
time: 3ms
memory: 40688kb

input:

10
2 4 6 7 8 9 10 12 13 14
1000
4
5
4
6
2
5
2
9
6
10
6
2
1
3
7
3
9
5
2
10
8
7
6
7
4
7
9
4
4
4
5
2
6
1
10
9
10
3
7
10
5
9
5
8
4
8
10
9
1
7
10
8
10
6
7
7
10
8
1
2
9
10
2
3
8
7
2
7
2
2
1
10
3
3
2
8
9
6
10
1
7
9
10
6
5
9
9
6
4
9
10
3
3
10
5
4
8
5
8
4
9
5
5
3
9
7
5
5
4
6
1
8
6
7
9
2
2
4
9
3
6
4
6
8
4
4
3...

output:

11
15
16
11
5
17
7
15
13
18
14
8
3
7
11
9
19
20
10
21
13
12
15
14
17
16
22
18
19
23
24
11
17
4
25
26
27
10
18
28
25
27
26
14
24
15
29
28
5
19
30
16
31
18
20
21
32
17
6
12
29
33
13
11
19
22
14
23
15
16
7
34
12
13
17
20
30
19
35
8
25
31
36
21
27
32
33
22
26
34
37
14
15
38
28
27
21
29
23
28
35
30
31
16...

result:

ok 1000 lines

Test #5:

score: 0
Accepted
time: 0ms
memory: 40744kb

input:

20
1 2 3 4 6 7 8 9 10 11 12 13 14 15 17 18 20 21 22 24
1000
5
13
20
2
2
3
3
16
6
9
4
16
13
6
10
4
14
13
10
18
17
16
2
11
10
11
16
15
16
8
20
7
2
15
9
2
10
7
15
9
7
11
7
18
10
20
1
12
6
9
19
17
4
7
13
8
17
7
14
1
17
11
17
1
4
4
4
5
14
1
14
6
13
3
3
16
20
13
9
20
1
11
2
12
15
2
9
7
3
6
15
7
11
12
17
5...

output:

16
19
25
5
6
5
14
23
18
24
5
26
23
19
18
7
27
28
23
29
21
30
10
15
26
18
31
20
32
11
30
9
12
23
25
15
31
10
24
26
12
20
17
33
34
31
2
18
23
29
25
22
8
19
30
12
26
21
28
3
27
22
35
4
9
10
11
17
36
5
37
26
36
16
19
38
32
39
30
36
6
23
16
20
27
18
31
22
21
28
29
24
26
22
40
19
23
27
30
41
37
32
42
29
3...

result:

ok 1000 lines

Test #6:

score: -100
Runtime Error

input:

200000
1 2 3 4 5 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 68 69 71 72 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 103 105 106...

output:


result: