Submission #877838

#TimeUsernameProblemLanguageResultExecution timeMemory
877838alexddMoney (IZhO17_money)C++17
100 / 100
872 ms61956 KiB
#include<bits/stdc++.h>
using namespace std;
const int INF = 1e9;
int n;
int a[1000005];
int dp[1000005];
set<int> s;
bool isgood(int le, int ri)///le < x < ri
{
    if(s.empty())
        return 1;
    auto it = s.upper_bound(le);
    if(it!=s.end() && *it < ri)
        return 0;
    return 1;
}
signed main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>n;
    int ultr=0;
    int poz=0;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        if(i>1 && a[i]<a[i-1])
            ultr=i-1;
        for(int j=poz;j<i;j++)
        {
            if(j>=ultr && isgood(a[j+1],a[i]))///daca se poate
            {
                poz=j;
                dp[i] = dp[j]+1;
                break;
            }
            s.insert(a[j+1]);
        }
    }
    cout<<dp[n];
    return 0;
}
/**
6
3 6 4 5 1 2
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...