#include <bits/stdc++.h>
using namespace std;
const int nx=1e6+5;
int n, h[nx], cnt, mx, water[nx], dsu[nx];
vector<pair<int, int>> v;
int find(int x)
{
if (dsu[x]==x) return x;
return dsu[x]=find(dsu[x]);
}
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin>>n;
for (int i=1; i<=n; i++) cin>>h[i], v.push_back({h[i], i}), dsu[i]=i;
h[0]=h[n+1]=INT_MAX;
sort(v.begin(), v.end());
for (auto [_, idx]:v)
{
if (water[find(idx-1)]&&water[find(idx+1)]) dsu[find(idx)]=find(idx-1), dsu[find(idx-1)]=find(idx+1), water[idx]=1, cnt--;
else if (water[find(idx-1)]) water[idx]=1, dsu[find(idx)]=find(idx-1);
else if (water[find(idx+1)]) water[idx]=1, dsu[find(idx)]=find(idx+1);
else water[idx]=1, cnt++;
//cout<<"debug "<<idx<<' '<<cnt<<'\n';
mx=max(mx, cnt+1);
}
cout<<mx;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |