Submission #421131

# Submission time Handle Problem Language Result Execution time Memory
421131 2021-06-08T18:39:29 Z Mamedov Financial Report (JOI21_financial) C++17
5 / 100
325 ms 13972 KB
#include <bits/stdc++.h>
#define pii pair<int, int>
#define piii pair<int, pii>
#define pb push_back
#define ll long long
#define pll pair<ll, ll>
#define ui unsigned int
#define ull unsigned long long
#define f first
#define s second
#define oo 1000000000

using namespace std;


const int up = 3e5 + 5;
int tree[up << 2];

void update(int node, int l, int r, int pos, int val) {
    if(l == r) {
        tree[node] = val;
    }else {
        int mid = (l + r) >> 1;
        if(pos <= mid) {
            update(node << 1, l, mid, pos, val);
        }else {
            update((node << 1) | 1, mid + 1, r, pos, val);
        }
        tree[node] = max(tree[node << 1], tree[(node << 1) | 1]);
    }
}

int Max(int node, int l, int r, int ql, int qr) {
    if(ql > qr || l > qr || ql > r) return 0;
    if(ql <= l && r <= qr) {
        return tree[node];
    }else {
        int mid = (l + r) >> 1;
        return max(Max(node << 1, l, mid, ql, qr), Max((node << 1) | 1, mid + 1, r, ql, qr));
    }
}

bool cmp(pii p1, pii p2) {
    if(p1.f == p2.f) return p1.s > p2.s;
    else return p1.f < p2.f;
}
void solve() {
    int n, d;
    cin >> n >> d;
    vector<pii>a(n);
    vector<int>dp(n, 1);
    for(int i = 0; i < n; ++i) {
        cin >> a[i].f;
        a[i].s = i;
    }
    sort(a.begin(), a.end());
    set<pii>ranges;
    vector<int>to_left(n);
    for(int i = 0; i < n; ++i) {
        int idx = a[i].s;
        to_left[idx] = max(0, idx - d);
        pii cur = {idx, idx + d};
        auto itr = ranges.upper_bound(cur);
        if(itr != ranges.begin()) {
            --itr;
            if(itr->f <= idx && itr->s >= idx) {
                cur.f = itr->f;
                cur.s = max(cur.s, itr->s);
                ranges.erase(itr);
                itr = ranges.upper_bound(cur);
                if(itr != ranges.end() && itr->f <= cur.s) {
                    cur.s = max(cur.s, itr->s);
                    ranges.erase(itr);
                }
            }
        }else if(itr != ranges.end() && itr->f <= cur.s) {
            cur.s = max(cur.s, itr->s);
            ranges.erase(itr);
        }
        to_left[idx] = cur.f;
        ranges.insert(cur);
    }
    sort(a.begin(), a.end(), cmp);
    int res = 0;
    for(int i = 0; i < n; ++i) {
        int idx = a[i].s;
        dp[idx] = Max(1, 0, n - 1, to_left[idx], idx - 1) + 1;
        update(1, 0, n - 1, idx, dp[idx]);
        //cout << "for " << idx << " " << dp[idx] << '\n';
        res = max(res, dp[idx]);
    }
    cout << res << '\n';
}
int main() {
    ios_base::sync_with_stdio(false);
    solve();
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 0 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
12 Correct 0 ms 204 KB Output is correct
13 Correct 1 ms 204 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 1 ms 204 KB Output is correct
16 Incorrect 1 ms 204 KB Output isn't correct
17 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 0 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
12 Correct 0 ms 204 KB Output is correct
13 Correct 1 ms 204 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 1 ms 204 KB Output is correct
16 Incorrect 1 ms 204 KB Output isn't correct
17 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 0 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
12 Correct 0 ms 204 KB Output is correct
13 Correct 1 ms 204 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 1 ms 204 KB Output is correct
16 Incorrect 1 ms 204 KB Output isn't correct
17 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 173 ms 9104 KB Output is correct
2 Correct 285 ms 13448 KB Output is correct
3 Incorrect 325 ms 13972 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 183 ms 9036 KB Output is correct
2 Correct 304 ms 9080 KB Output is correct
3 Correct 267 ms 9112 KB Output is correct
4 Correct 300 ms 9232 KB Output is correct
5 Correct 271 ms 8996 KB Output is correct
6 Correct 268 ms 9208 KB Output is correct
7 Correct 195 ms 9028 KB Output is correct
8 Correct 114 ms 9096 KB Output is correct
9 Correct 177 ms 9064 KB Output is correct
10 Correct 226 ms 9108 KB Output is correct
11 Correct 249 ms 9120 KB Output is correct
12 Correct 269 ms 9092 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 0 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
12 Correct 0 ms 204 KB Output is correct
13 Correct 1 ms 204 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 1 ms 204 KB Output is correct
16 Incorrect 1 ms 204 KB Output isn't correct
17 Halted 0 ms 0 KB -