Submission #734181

# Submission time Handle Problem Language Result Execution time Memory
734181 2023-05-02T03:35:50 Z bin9638 Rainforest Jumps (APIO21_jumps) C++17
48 / 100
2065 ms 56036 KB
#include <bits/stdc++.h>

#ifndef SKY
#include "jumps.h"
#endif // SKY

using namespace std;

#define N 200010
#define ll long long
#define fs first
#define sc second
#define ii pair<int,int>
#define pb push_back

struct IT
{
    int ST[N*4];

    void init()
    {
        memset(ST,-0x3f3f,sizeof(ST));
    }

    void update(int id,int l,int r,int i,int val)
    {
        if(l>i||r<i)
            return;
        if(l==r)
        {
            ST[id]=val;
            return;
        }
        int mid=(l+r)/2;
        update(id*2,l,mid,i,val);
        update(id*2+1,mid+1,r,i,val);
        ST[id]=max(ST[id*2],ST[id*2+1]);
    }

    int get(int id,int l,int r,int u,int v)
    {
        if(u>v||l>v||r<u)
            return -1e9;
        if(l>=u&&r<=v)
            return ST[id];
        int mid=(l+r)/2;
        return max(get(id*2,l,mid,u,v),get(id*2+1,mid+1,r,u,v));
    }
}IT;

int n,h[N],pos[N],truoc[N][21],sau[N][21],LOG,nxt[N][21];

void init(int NNN, vector<int> HHH)
{
    n=NNN;
    for(int i=0;i<n;i++)
        h[i+1]=HHH[i],pos[HHH[i]]=i+1;
    LOG=log2(n);
    IT.init();
    for(int i=n;i>=1;i--)
    {
        if(IT.get(1,1,n,1,pos[i]-1)>=-n)
            truoc[pos[i]][0]=abs(IT.get(1,1,n,1,pos[i]-1));
        IT.update(1,1,n,pos[i],pos[i]);
    }
    IT.init();
    for(int i=n;i>=1;i--)
    {
        if(IT.get(1,1,n,pos[i]+1,n)>=-n)
            sau[pos[i]][0]=abs(IT.get(1,1,n,pos[i]+1,n));
        IT.update(1,1,n,pos[i],-pos[i]);
    }
    for(int k=1;k<=LOG;k++)
        for(int i=1;i<=n;i++)
            {
                sau[i][k]=sau[sau[i][k-1]][k-1];
                truoc[i][k]=truoc[truoc[i][k-1]][k-1];
            }
   // for(int i=1;i<=n;i++)cout<<truoc[i][0]<<" "<<sau[i][0]<<endl;
    IT.init();
    for(int i=1;i<=n;i++)
        IT.update(1,1,n,i,h[i]);
    for(int i=1;i<=n;i++)
        if(h[truoc[i][0]]>h[sau[i][0]])
            nxt[i][0]=truoc[i][0];
                else nxt[i][0]=sau[i][0];
    for(int k=1;k<=LOG;k++)
        for(int i=1;i<=n;i++)
            nxt[i][k]=nxt[nxt[i][k-1]][k-1];
}

bool check(int vt,int C,int D)
{
    return(vt>=C&&vt<=D);
}

int f[2010];

int minimum_jumps(int A, int B, int C, int D)
{
    A++;B++;C++;D++;
    if(IT.get(1,1,n,B,C-1)>IT.get(1,1,n,C,D))
        return -1;
    int l=A,r=B,vt;
    while(l<=r)
    {
        int mid=(l+r)/2;
        if(IT.get(1,1,n,mid,B)<IT.get(1,1,n,C,D))
        {
            vt=mid;
            r=mid-1;
        }else
        {
            l=mid+1;
        }
    }
    int val=IT.get(1,1,n,vt,B);
    l=A,r=B;
    while(l<=r)
    {
        int mid=(l+r)/2;
        if(IT.get(1,1,n,mid,B)>=val)
        {
            vt=mid;
            l=mid+1;
        }else
            r=mid-1;
    }
    int res=0;
    val=IT.get(1,1,n,C,D);
  //  cout<<vt<<endl;
    for(int k=LOG;k>=0;k--)
        if(nxt[vt][k]!=0&&sau[vt][k]<C&&h[nxt[vt][k]]<val)
            vt=nxt[vt][k],res+=(1<<k);
    //cout<<vt<<" "<<res<<endl;
    for(int k=LOG;k>=0;k--)
        if(sau[vt][k]!=0&&sau[vt][k]<C)
            vt=sau[vt][k],res+=(1<<k);
    return res+1;
}


#ifdef SKY
int main()
{
    freopen("A.inp","r",stdin);
    freopen("A.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);
    int n;
    cin>>n;
    vector<int>H(n);
    for(int i=0;i<n;i++)
        cin>>H[i];
    init(n,H);
    int q;
    cin>>q;
    while(q--)
    {
        int A,B,C,D;
        cin>>A>>B>>C>>D;
        cout<<minimum_jumps(A,B,C,D)<<endl;
    }
    return 0;
}
#endif

Compilation message

jumps.cpp: In function 'int minimum_jumps(int, int, int, int)':
jumps.cpp:104:17: warning: 'vt' may be used uninitialized in this function [-Wmaybe-uninitialized]
  104 |     int l=A,r=B,vt;
      |                 ^~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3412 KB Output is correct
2 Correct 2 ms 3408 KB Output is correct
3 Correct 397 ms 45196 KB Output is correct
4 Correct 2065 ms 55872 KB Output is correct
5 Correct 1884 ms 29744 KB Output is correct
6 Correct 1992 ms 55852 KB Output is correct
7 Correct 1558 ms 39276 KB Output is correct
8 Correct 1981 ms 55820 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3408 KB Output is correct
2 Correct 2 ms 3408 KB Output is correct
3 Correct 2 ms 3408 KB Output is correct
4 Correct 2 ms 3408 KB Output is correct
5 Correct 4 ms 3408 KB Output is correct
6 Correct 4 ms 3408 KB Output is correct
7 Correct 4 ms 3408 KB Output is correct
8 Correct 4 ms 3408 KB Output is correct
9 Correct 2 ms 3408 KB Output is correct
10 Incorrect 4 ms 3408 KB Output isn't correct
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3408 KB Output is correct
2 Correct 2 ms 3408 KB Output is correct
3 Correct 2 ms 3408 KB Output is correct
4 Correct 2 ms 3408 KB Output is correct
5 Correct 4 ms 3408 KB Output is correct
6 Correct 4 ms 3408 KB Output is correct
7 Correct 4 ms 3408 KB Output is correct
8 Correct 4 ms 3408 KB Output is correct
9 Correct 2 ms 3408 KB Output is correct
10 Incorrect 4 ms 3408 KB Output isn't correct
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3408 KB Output is correct
2 Correct 2 ms 3408 KB Output is correct
3 Correct 2 ms 3408 KB Output is correct
4 Correct 2 ms 3408 KB Output is correct
5 Correct 229 ms 45568 KB Output is correct
6 Correct 296 ms 55780 KB Output is correct
7 Correct 127 ms 30208 KB Output is correct
8 Correct 295 ms 55776 KB Output is correct
9 Correct 27 ms 11316 KB Output is correct
10 Correct 322 ms 55824 KB Output is correct
11 Correct 206 ms 55752 KB Output is correct
12 Correct 222 ms 55856 KB Output is correct
13 Incorrect 208 ms 55924 KB Output isn't correct
14 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3408 KB Output is correct
2 Correct 3 ms 3408 KB Output is correct
3 Correct 2 ms 3408 KB Output is correct
4 Correct 362 ms 27336 KB Output is correct
5 Correct 1018 ms 55824 KB Output is correct
6 Correct 745 ms 12076 KB Output is correct
7 Correct 1168 ms 55844 KB Output is correct
8 Correct 659 ms 21476 KB Output is correct
9 Correct 1417 ms 55824 KB Output is correct
10 Correct 1305 ms 55876 KB Output is correct
11 Correct 1464 ms 55824 KB Output is correct
12 Correct 1456 ms 55824 KB Output is correct
13 Correct 1355 ms 55876 KB Output is correct
14 Correct 1447 ms 55880 KB Output is correct
15 Correct 1136 ms 55820 KB Output is correct
16 Correct 1210 ms 55892 KB Output is correct
17 Correct 2 ms 3408 KB Output is correct
18 Correct 2 ms 3408 KB Output is correct
19 Correct 4 ms 3408 KB Output is correct
20 Correct 6 ms 3408 KB Output is correct
21 Correct 4 ms 3408 KB Output is correct
22 Correct 4 ms 3408 KB Output is correct
23 Correct 5 ms 3416 KB Output is correct
24 Correct 4 ms 3408 KB Output is correct
25 Correct 2 ms 3408 KB Output is correct
26 Correct 5 ms 3664 KB Output is correct
27 Correct 12 ms 3920 KB Output is correct
28 Correct 23 ms 3892 KB Output is correct
29 Correct 26 ms 3920 KB Output is correct
30 Correct 22 ms 3920 KB Output is correct
31 Correct 16 ms 3920 KB Output is correct
32 Correct 3 ms 3408 KB Output is correct
33 Correct 155 ms 33820 KB Output is correct
34 Correct 314 ms 55880 KB Output is correct
35 Correct 222 ms 55824 KB Output is correct
36 Correct 274 ms 55756 KB Output is correct
37 Correct 225 ms 55828 KB Output is correct
38 Correct 213 ms 55756 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3408 KB Output is correct
2 Correct 3 ms 3408 KB Output is correct
3 Correct 2 ms 3408 KB Output is correct
4 Correct 362 ms 27336 KB Output is correct
5 Correct 1018 ms 55824 KB Output is correct
6 Correct 745 ms 12076 KB Output is correct
7 Correct 1168 ms 55844 KB Output is correct
8 Correct 659 ms 21476 KB Output is correct
9 Correct 1417 ms 55824 KB Output is correct
10 Correct 1305 ms 55876 KB Output is correct
11 Correct 1464 ms 55824 KB Output is correct
12 Correct 1456 ms 55824 KB Output is correct
13 Correct 1355 ms 55876 KB Output is correct
14 Correct 1447 ms 55880 KB Output is correct
15 Correct 1136 ms 55820 KB Output is correct
16 Correct 1210 ms 55892 KB Output is correct
17 Correct 2 ms 3408 KB Output is correct
18 Correct 2 ms 3408 KB Output is correct
19 Correct 4 ms 3408 KB Output is correct
20 Correct 6 ms 3408 KB Output is correct
21 Correct 4 ms 3408 KB Output is correct
22 Correct 4 ms 3408 KB Output is correct
23 Correct 5 ms 3416 KB Output is correct
24 Correct 4 ms 3408 KB Output is correct
25 Correct 2 ms 3408 KB Output is correct
26 Correct 5 ms 3664 KB Output is correct
27 Correct 12 ms 3920 KB Output is correct
28 Correct 23 ms 3892 KB Output is correct
29 Correct 26 ms 3920 KB Output is correct
30 Correct 22 ms 3920 KB Output is correct
31 Correct 16 ms 3920 KB Output is correct
32 Correct 3 ms 3408 KB Output is correct
33 Correct 155 ms 33820 KB Output is correct
34 Correct 314 ms 55880 KB Output is correct
35 Correct 222 ms 55824 KB Output is correct
36 Correct 274 ms 55756 KB Output is correct
37 Correct 225 ms 55828 KB Output is correct
38 Correct 213 ms 55756 KB Output is correct
39 Correct 3 ms 3408 KB Output is correct
40 Correct 2 ms 3408 KB Output is correct
41 Correct 2 ms 3408 KB Output is correct
42 Correct 370 ms 27336 KB Output is correct
43 Correct 1194 ms 55860 KB Output is correct
44 Correct 727 ms 12072 KB Output is correct
45 Correct 1162 ms 55872 KB Output is correct
46 Correct 611 ms 21460 KB Output is correct
47 Correct 1008 ms 55784 KB Output is correct
48 Correct 1267 ms 55896 KB Output is correct
49 Correct 1269 ms 55928 KB Output is correct
50 Correct 1159 ms 55796 KB Output is correct
51 Correct 1200 ms 55880 KB Output is correct
52 Correct 1266 ms 55844 KB Output is correct
53 Correct 1157 ms 55872 KB Output is correct
54 Correct 980 ms 55776 KB Output is correct
55 Correct 2 ms 3408 KB Output is correct
56 Correct 342 ms 55576 KB Output is correct
57 Correct 1206 ms 55880 KB Output is correct
58 Correct 493 ms 12668 KB Output is correct
59 Correct 1033 ms 55752 KB Output is correct
60 Correct 516 ms 22064 KB Output is correct
61 Correct 1033 ms 55904 KB Output is correct
62 Correct 1790 ms 55872 KB Output is correct
63 Correct 1735 ms 55752 KB Output is correct
64 Correct 1497 ms 55864 KB Output is correct
65 Correct 1020 ms 55752 KB Output is correct
66 Correct 1570 ms 55820 KB Output is correct
67 Correct 1414 ms 55752 KB Output is correct
68 Correct 1225 ms 55856 KB Output is correct
69 Correct 2 ms 3408 KB Output is correct
70 Correct 2 ms 3408 KB Output is correct
71 Correct 4 ms 3408 KB Output is correct
72 Correct 4 ms 3408 KB Output is correct
73 Correct 4 ms 3408 KB Output is correct
74 Correct 3 ms 3408 KB Output is correct
75 Correct 4 ms 3408 KB Output is correct
76 Correct 2 ms 3428 KB Output is correct
77 Correct 2 ms 3408 KB Output is correct
78 Correct 3 ms 3408 KB Output is correct
79 Correct 3 ms 3408 KB Output is correct
80 Correct 4 ms 3408 KB Output is correct
81 Correct 4 ms 3408 KB Output is correct
82 Correct 4 ms 3408 KB Output is correct
83 Correct 4 ms 3408 KB Output is correct
84 Correct 2 ms 3408 KB Output is correct
85 Correct 7 ms 3408 KB Output is correct
86 Correct 26 ms 3920 KB Output is correct
87 Correct 28 ms 3920 KB Output is correct
88 Correct 20 ms 3920 KB Output is correct
89 Correct 28 ms 3920 KB Output is correct
90 Correct 12 ms 3920 KB Output is correct
91 Correct 2 ms 3408 KB Output is correct
92 Correct 4 ms 3536 KB Output is correct
93 Correct 24 ms 3920 KB Output is correct
94 Correct 22 ms 3920 KB Output is correct
95 Correct 24 ms 3920 KB Output is correct
96 Correct 24 ms 3920 KB Output is correct
97 Correct 18 ms 3920 KB Output is correct
98 Correct 2 ms 3408 KB Output is correct
99 Correct 281 ms 55820 KB Output is correct
100 Correct 273 ms 55752 KB Output is correct
101 Correct 203 ms 55868 KB Output is correct
102 Correct 263 ms 55920 KB Output is correct
103 Correct 206 ms 55744 KB Output is correct
104 Correct 195 ms 55824 KB Output is correct
105 Correct 2 ms 3408 KB Output is correct
106 Correct 157 ms 33772 KB Output is correct
107 Correct 276 ms 55816 KB Output is correct
108 Correct 201 ms 55876 KB Output is correct
109 Correct 258 ms 55876 KB Output is correct
110 Correct 215 ms 55804 KB Output is correct
111 Correct 211 ms 56036 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3412 KB Output is correct
2 Correct 2 ms 3408 KB Output is correct
3 Correct 397 ms 45196 KB Output is correct
4 Correct 2065 ms 55872 KB Output is correct
5 Correct 1884 ms 29744 KB Output is correct
6 Correct 1992 ms 55852 KB Output is correct
7 Correct 1558 ms 39276 KB Output is correct
8 Correct 1981 ms 55820 KB Output is correct
9 Correct 2 ms 3408 KB Output is correct
10 Correct 2 ms 3408 KB Output is correct
11 Correct 2 ms 3408 KB Output is correct
12 Correct 2 ms 3408 KB Output is correct
13 Correct 4 ms 3408 KB Output is correct
14 Correct 4 ms 3408 KB Output is correct
15 Correct 4 ms 3408 KB Output is correct
16 Correct 4 ms 3408 KB Output is correct
17 Correct 2 ms 3408 KB Output is correct
18 Incorrect 4 ms 3408 KB Output isn't correct
19 Halted 0 ms 0 KB -