#include <bits/stdc++.h>
#define GOOD_LUCK ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
// #define int long long
#define endl "\n"
#define ff first
#define ss second
#define pb push_back
#define all(v) v.begin(), v.end()
using namespace std;
constexpr int MAX = 2e+5 + 1, INF = 2e+9, MOD = 1e+9 + 7, K = 31;
struct BIT{
int n;
vector <int> t;
void init(int n1) {
n = n1;
t.assign(n+1, 0);
}
int get(int l, int r) {
if (l > r) return 0;
if (l != 1) return get(1, r) - get(1, l-1);
int res=0;
while (r >= 1) {
res += t[r];
r -= (r & (-r));
}
return res;
}
void upd(int i, int x) {
while (i <= n) {
t[i] += x;
i += (i & (-i));
}
}
};
void _() {
int n;
cin >> n;
vector <int> v(n);
for (int &i : v) cin >> i;
vector <int> p = v;
BIT t;
t.init(1000005);
vector <int> dp(n, 0);
dp[0] = 1;
vector <int> x = {v[0]};
int last=0;
for (int i = 1; i < n; i++) {
dp[i] = dp[i-1] + 1;
if (v[i] == v[i-1]) {
dp[i] = dp[i-1];
p[i] = p[i-1];
}
else if (v[i] > v[i-1] && t.get(p[i-1] + 1, v[i] - 1) == 0) {
dp[i] = dp[i-1];
p[i] = p[i-1];
}
else {
for (int j = last; j < x.size(); j++) t.upd(x[j], 1);
last = x.size();
}
x.pb(v[i]);
}
// for (int &i : dp) cerr << i << ' ';
cout << dp[n-1];
}
signed main() {
GOOD_LUCK
int tests=1;
// cin >> tests;
for (int i=1; i <= tests; i++) {
_();
// cout << endl;
}
return 0;
}
| # | 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... |