Submission #1056216

#TimeUsernameProblemLanguageResultExecution timeMemory
1056216tolbiRadio Towers (IOI22_towers)C++17
4 / 100
516 ms39504 KiB
#include "towers.h" #include <bits/stdc++.h> using namespace std; #define tol(bi) ((1LL)<<((int)(bi))) constexpr int MAXN = 1e5; constexpr int LOG = 20; int st[MAXN*4][LOG], tin[MAXN], rev[MAXN*4]; vector<int> tree[MAXN]; map<int,int> hsh; vector<int> H; int query(int l, int r){ int ara = r-l+1; int lg = log2(ara); return min(st[l][lg],st[r-tol(lg)+1][lg]); } int lca(int a, int b){ if (tin[a]>tin[b]) swap(a,b); return rev[query(tin[a],tin[b])]; } int ind; void dfs(int node){ st[ind][0]=ind; rev[ind]=node; tin[node]=ind++; for (auto it : tree[node]){ dfs(it); st[ind++][0]=tin[node]; } } bool sub1 = false; void init(int N, std::vector<int> H) { ::H=H; ind=0; int inc = 0; int dec = N-1; for (int i = 1; i < N; i++){ if (H[i]>H[i-1]) inc++; else break; } for (int i = 1; i < N; i++){ if (H[i]<H[i+1]) dec--; else break; } if (inc==dec) sub1=true; for (int i = 0; i < N; i++){ hsh[H[i]]=i; st[i][0]=-H[i]; } for (int j = 1; j < LOG; j++){ for (int i = 0; i < N; i++){ st[i][j]=-1; if (st[i][j-1]==-1 || i+tol(j-1)>=N) continue; st[i][j]=min(st[i][j-1],st[i+tol(j-1)][j-1]); } } function<int(int,int)> partition = [&](int l, int r)->int{ if (l==r) return l; int ele = hsh[-query(l,r)]; tree[ele].clear(); if (l<=ele-1) tree[ele].push_back(partition(l,ele-1)); if (ele+1<=r) tree[ele].push_back(partition(ele+1,r)); return ele; }; int root = partition(0,N-1); dfs(root); for (int j = 1; j < LOG; j++){ for (int i = 0; i < ind; i++){ st[i][j]=-1; if (st[i][j-1]==-1 || i+tol(j-1)>=ind) continue; st[i][j]=min(st[i][j-1],st[i+tol(j-1)][j-1]); } } } int max_towers(int L, int R, int D) { int ara = lca(L,R); if (ara==L || ara==R) return 1; if (max(H[L],H[R])<=H[ara]-D) return 2; return 1; }
#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...