Submission #477882

#TimeUsernameProblemLanguageResultExecution timeMemory
477882sumit_kk10Global Warming (NOI13_gw)C++17
40 / 40
241 ms17736 KiB
#include <bits/stdc++.h>
#define fast ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL)
#define ll long long int
#define ld long double
using namespace std;
const int N = 1000003;
const int MOD = 1e9 + 7;

void solve(){
    int n;
    cin >> n;
    int mn = INT_MAX;
    vector<pair<int, int> > a(n);
    for(int i = 0; i < n; ++i){
        cin >> a[i].first;
        a[i].second = i;
        mn = min(mn, a[i].first);
    }
    vector<bool> mp(n + 1);
    int cur = mn, ans = 0;
    for(int j = 0; j < n; ++j){
        int x = j;
        while(a[x].first > cur and x < n)
            ++x;
        if(x != j){
            j = x - 1;
            ++ans;
        }
    }
    sort(a.begin(), a.end());
    int res = ans;
    mp[a[0].second] = true;
    for(int i = 1; i < n; ++i){
        mp[a[i].second] = true;
        if(a[i].first == a[i - 1].first) continue;
        int x = a[i].first;
        for(int j = i; j < n; ++j){
            if(a[j].first != x) break;
            int k = a[j].second;
            if(k >= 1 and mp[k - 1] and mp[k + 1]){
                --ans;
                mp[k] = true;
                continue;
            }
            if(k >= 1 and mp[k - 1]){
                if(k == n - 1) --ans;
                mp[k] = true;
                continue;
            }
            if(mp[k + 1]){
                if(k == 0) --ans;
                mp[k] = true;
                continue;
            }
            if(k != 0 and k != n - 1)
                ans++;
            mp[k] = true;
        }
        res = max(res, ans);
    } 
    cout << res << "\n";
}

int main(){
    fast;
    int t = 1;
    // cin >> t;
    while(t--)
        solve();
    return 0;
}
#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...