Submission #1223366

#TimeUsernameProblemLanguageResultExecution timeMemory
1223366KALARRYRainforest Jumps (APIO21_jumps)C++20
0 / 100
0 ms688 KiB
//chockolateman #include<bits/stdc++.h> using namespace std; int n,l[200005],r[200005],dist[2005][2005],st[2005][8005]; bool used[200005]; void BFS(int start) { memset(used,false,sizeof(used)); queue<int> q; used[start] = true; dist[start][start] = 0; q.push(start); while(!q.empty()) { int v = q.front(); q.pop(); for(int u,k = 0 ; k <= 1 ; k++) { if(k==0) u = l[v]; else u = r[v]; if(1 <= u && u <= n && !used[u]) { used[u] = true; dist[start][u] = dist[start][v] + 1; q.push(u); } } } } void build(int t,int v = 1,int start = 1,int end = n) { if(start==end) { if(!used[start]) st[t][v] = 1e9; else st[t][v] = dist[t][v]; return; } int mid = (start + end)/2; build(t,2*v,start,mid); build(t,2*v+1,mid + 1,end); st[t][v] = min(st[t][2*v],st[t][2*v+1]); } int query(int t,int left,int right,int v = 1,int start = 1,int end = n) { if(start==left && end==right) return st[t][v]; int mid = (start + end)/2; if(right <= mid) return query(t,left,right,2*v,start,mid); else if(left > mid) return query(t,left,right,2*v+1,mid+1,end); else return min(query(t,left,mid,2*v,start,mid),query(t,mid+1,right,2*v+1,mid+1,end)); } void init(int N, std::vector<int> H) { n = N; stack<pair<int,int>> order; order.push({1e9,0}); for(int i = 1 ; i <= N ; i++) { while(H[i-1] > order.top().first) order.pop(); l[i] = order.top().second; order.push({H[i-1],i}); } while(!order.empty()) order.pop(); order.push({1e9,N+1}); for(int i = N ; i >= 1 ; i--) { while(H[i-1] > order.top().first) order.pop(); r[i] = order.top().second; order.push({H[i-1],i}); } for(int i = 1 ; i <= N ; i++) { BFS(i); build(i); } } int minimum_jumps(int A, int B, int C, int D) { int ret = 1e9; A++; B++; C++; D++; for(int v = A ; v <= B ; v++) ret = min(ret,query(v,C,D)); if(ret > n) ret = -1; return ret; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...