Submission #828997

#TimeUsernameProblemLanguageResultExecution timeMemory
828997arnold518Radio Towers (IOI22_towers)C++17
17 / 100
883 ms11792 KiB
#include "towers.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 1e5; const int INF = 1e9+7; int N, A[MAXN+10], cnt; vector<int> B; void init(int _N, vector<int> _H) { N=_N; for(int i=1; i<=N; i++) A[i]=_H[i-1]; vector<int> V; V.push_back(1); for(int i=2; i<=N; i++) { if(V.size()%2) { if(A[V.back()]<A[i]) V.push_back(i); else V.back()=i; } else { if(A[V.back()]>A[i]) V.push_back(i); else V.back()=i; } } if(V.size()%2==0) V.pop_back(); set<int> S; set<pii> S2; for(int i=0; i<V.size(); i++) S.insert(V[i]); for(int i=0; i+1<V.size(); i++) S2.insert({abs(A[V[i+1]]-A[V[i]]), V[i]}); cnt=V.size()/2+1; while(!S2.empty()) { //for(auto it : S) printf("%d ", A[it]); printf("\n"); //for(auto it : S2) printf("%d %d / ", it.first, it.second); printf("\n"); auto [val, p] = *S2.begin(); S2.erase(S2.begin()); B.push_back(val); auto it=S.find(p); int l=-1, r=-1; if(it!=S.begin()) { int t1=*prev(it), t2=*it; S2.erase({abs(A[t1]-A[t2]), t1}); l=t1; } if(next(next(it))!=S.end()) { int t1=*next(it), t2=*next(next(it)); S2.erase({abs(A[t1]-A[t2]), t1}); r=t2; } if(l!=-1 && r!=-1) S2.insert({abs(A[r]-A[l]), l}); S.erase(*next(it)); S.erase(it); } //for(auto it : B) printf("%d ", it); } int max_towers(int L, int R, int D) { L++; R++; return cnt-(lower_bound(B.begin(), B.end(), D)-B.begin()); }

Compilation message (stderr)

towers.cpp: In function 'void init(int, std::vector<int>)':
towers.cpp:39:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |  for(int i=0; i<V.size(); i++) S.insert(V[i]);
      |               ~^~~~~~~~~
towers.cpp:40:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |  for(int i=0; i+1<V.size(); i++) S2.insert({abs(A[V[i+1]]-A[V[i]]), V[i]});
      |               ~~~^~~~~~~~~
#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...