Submission #1211099

#TimeUsernameProblemLanguageResultExecution timeMemory
1211099simona1230Radio Towers (IOI22_towers)C++20
23 / 100
4043 ms4516 KiB
#include "towers.h" #include <bits/stdc++.h> using namespace std; int n,h[100001]; void init(int N, std::vector<int> H) { n=N; for(int i=0;i<n;i++) h[i]=H[i]; return; } int lf[100001]; int rt[100001]; vector<pair<int,int> > v; int t[400001]; void upd(int i,int l,int r,int id,int vl) { if(l==r) { t[i]+=vl; return; } int m=(l+r)/2; if(id<=m)upd(i*2,l,m,id,vl); else upd(i*2+1,m+1,r,id,vl); t[i]=max(t[i*2],t[i*2+1]); } int query(int i,int l,int r) { if(l==r)return l; int m=(l+r)/2; if(t[i*2]!=0)return query(i*2,l,m); else return query(i*2+1,m+1,r); } int max_towers(int L, int R, int D) { deque<int> a; for(int i=0;i<n;i++) { while(a.size()&&h[a.back()]<h[i])a.pop_back(); a.push_back(i); int id=-1; int l=0,r=a.size()-1; while(l<=r) { int m=(l+r)/2; if(h[a[m]]>=h[i]+D) { id=a[m]; l=m+1; } else r=m-1; } lf[i]=id; } a.clear(); for(int i=n-1;i>=0;i--) { while(a.size()&&h[a.back()]<h[i])a.pop_back(); a.push_back(i); int id=n; int l=0,r=a.size()-1; while(l<=r) { int m=(l+r)/2; if(h[a[m]]>=h[i]+D) { id=a[m]; l=m+1; } else r=m-1; } rt[i]=id; } v.clear(); for(int i=L;i<=R;i++) { v.push_back({lf[i],rt[i]}); //cout<<i<<": "<<lf[i]<<" "<<rt[i]<<endl; upd(1,0,n,rt[i],1); } sort(v.begin(),v.end()); int i=0,ans=0,last=-1; while(1) { while(i<v.size()&&v[i].first<last) { //cout<<last<<" "<<v[i].first<<endl; upd(1,0,n,v[i].second,-1); i++; } //cout<<"! "<<i<<endl; if(t[1]==0)break; ans++; last=query(1,0,n); //cout<<v[i].first<<" "<<v[i].second<<" - "<<last<<endl; } 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...