이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 300000 + 7;
int n, d, a[N], ord[N], l[N], r[N], t[N];
bool cmp(int i, int j) {
if (a[i] != a[j]) {
return a[i] > a[j];
} else {
return i < j;
}
}
int getroot(int a) {
if (t[a] == a) {
return a;
} else {
return t[a] = getroot(t[a]);
}
}
void unite(int a, int b) {
a = getroot(a);
b = getroot(b);
if (a == b) {
return;
}
t[a] = b;
l[b] = min(l[b], l[a]);
r[b] = max(r[b], r[b]);
}
int last[N], tree[4 * N];
void upd(int v, int tl, int tr, int i, int x) {
if (tr < i || i < tl) {
return;
}
if (tl == tr) {
tree[v] = x;
return;
}
int tm = (tl + tr) / 2;
upd(2 * v, tl, tm, i, x);
upd(2 * v + 1, tm + 1, tr, i, x);
tree[v] = max(tree[2 * v], tree[2 * v + 1]);
}
int get(int v, int tl, int tr, int l, int r) {
if (tr < l || r < tl) {
return 0;
}
if (l <= tl && tr <= r) {
return tree[v];
}
int tm = (tl + tr) / 2;
return max(get(2 * v, tl, tm, l, r), get(2 * v + 1, tm + 1, tr, l, r));
}
signed main() {
ios::sync_with_stdio(0); cin.tie(0);
//freopen ("TonyStark", "r", stdin);
cin >> n >> d;
for (int i = 1; i <= n; i++) {
cin >> a[i];
ord[i] = i;
}
sort(ord + 1, ord + n + 1, cmp);
set<int> p;
for (int it = 1; it <= n; it++) {
int i = ord[it];
{
auto iter = p.lower_bound(i);
if (iter == p.end()) {
last[i] = n;
} else {
last[i] = min(*iter - 1 + d, n);
}
assert(i <= last[i]);
}
int dp = get(1, 1, n, i, last[i]) + 1;
upd(1, 1, n, i, dp);
l[i] = r[i] = t[i] = i;
if (l[i - 1]) {
unite(i, i - 1);
}
if (l[i + 1]) {
unite(i, i + 1);
}
int len = r[getroot(i)] - l[getroot(i)] + 1;
if (len >= d) {
p.insert(l[getroot(i)]);
}
}
cout << get(1, 1, n, 1, n) << "\n";
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |