Submission #1234742

#TimeUsernameProblemLanguageResultExecution timeMemory
1234742MuhammadSaramRadio Towers (IOI22_towers)C++20
23 / 100
4086 ms6812 KiB
#include "towers.h" #include <bits/stdc++.h> using namespace std; #define all(v) v.begin(), v.end() const int M = 1e5 + 1; int n,fen[M],le[M],dp[M]; vector<int> a; void modify(int p,int x) { while (p<=n) fen[p]=max(fen[p],x),p+=p&-p; } int get(int p) { int ans=0; while (p) ans=max(ans,fen[p]),p^=p&-p; return ans; } void init(int N, vector<int> A) { n=N,a=A; } int max_towers(int l, int r, int d) { set<pair<int,int>> se; for (int i=r;i>=l;i--) { while (se.size() && se.begin()->first<=a[i]-d) le[se.begin()->second]=i,se.erase(se.begin()); le[i]=-1,se.insert({a[i],i}); } se.clear(); int ans=1; for (int i=l;i<=r;i++) { dp[i]=get(le[i]+1)+1,ans=max(ans,dp[i]); while (se.size() && se.begin()->first<=a[i]-d) { int i=se.begin()->second;se.erase(se.begin()); modify(i+1,dp[i]); } se.insert({a[i],i}); } return ans; }
#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...