Submission #1165750

#TimeUsernameProblemLanguageResultExecution timeMemory
116575012345678Global Warming (NOI13_gw)C++20
23 / 40
220 ms20072 KiB
#include <bits/stdc++.h>

using namespace std;

const int nx=1e6+5;

int n, h[nx], cnt, mx, water[nx], dsu[nx], l, r;
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++;
        if (water[find(1)]) l=1;
        if (water[find(n)]) r=1;
        mx=max(mx, cnt+1-r-l);
    }
    cout<<mx;
}
#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...