This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "bits/stdc++.h"
using namespace std;
using ll = long long;
const int inf = 1e9;
const int N = 1e6 + 5;
struct SegTree {
vector<int> tree;
int size;
void init(int n) {
size = 1;
while (size < n) size <<= 1;
tree.assign(2 * size, 0);
}
void update(int i, int v, int x, int l, int r) {
if (r - l == 1) {
tree[x] += v;
return;
}
int m = (l + r) >> 1;
if (i < m) update(i, v, x << 1, l, m);
else update(i, v, x << 1 | 1, m, r);
tree[x] = tree[x << 1] + tree[x << 1 | 1];
}
void update(int i, int v) {
assert(i < size);
update(i, v, 1, 0, size);
}
int find_bigger(int k, int x, int l, int r) {
if (r - l == 1) return l;
int m = (l + r) >> 1;
if (tree[x << 1] >= k) return find_bigger(k, x << 1, l, m);
else return find_bigger(k - tree[x << 1], x << 1 | 1, m, r);
}
int find_bigger(int k) {
return find_bigger(k, 1, 0, size);
}
};
struct Fenwick {
vector<int> tree;
int len;
void init(int n) {
len = n;
tree.assign(len + 1, 0);
}
void update(int i, int v) {
i++;
while (i <= len) {
tree[i] += v;
i += i & (-i);
}
}
int get(int i) {
i++;
int sum = 0;
while (i > 0) {
sum += tree[i];
i -= i & (-i);
}
return sum;
}
int get(int l, int r) {
return get(r) - get(l - 1);
}
};
int main() {
cin.tie(0)->sync_with_stdio(false);
#ifdef sunnatov
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int n;
cin >> n;
vector<int> a(n + 1);
for (int i = 1; i <= n; i++) cin >> a[i];
Fenwick fw; fw.init(N);
int cnt = 1;
for (int l = 1, r = 2; r <= n; r++) {
if (a[r] < a[r - 1]) {
for (int i = l; i < r; i++) fw.update(a[i], 1);
l = r;
cnt++;
continue;
}
int lx = fw.get(a[l]), rx = fw.get(a[r] - 1) + 1;
if (rx - lx > 1) {
for (int i = l; i < r; i++) fw.update(a[i], 1);
l = r;
cnt++;
}
}
cout << cnt;
}
# | 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... |