Submission #1102809

# Submission time Handle Problem Language Result Execution time Memory
1102809 2024-10-19T03:17:05 Z blackslex Growing Trees (BOI11_grow) C++17
0 / 100
1000 ms 1984 KB
#include<bits/stdc++.h>
#define lsb(x) (x &(-x))

using namespace std;

const int N = 1e5 + 5, K = 19;
int n, q, x, y, fwk[N];
char c;

void upd (int idx, int val) {
    for (; idx <= n; idx += lsb(idx)) fwk[idx] += val;
}

int qr (int idx) {
    int res = 0;
    for (; idx; idx -= lsb(idx)) res += fwk[idx];
    return res;
}

int lb (int val) {
    int idx = 0, res = 0;
    for (int i = K - 1; i >= 0; i--) {
        if (idx + (1 << i) <= n && res + fwk[idx + (1 << i)] < val) res += fwk[idx += (1 << i)];
    }
    return ++idx;
}

int ub (int val) {
    int idx = 0, res = 0;
    for (int i = K - 1; i >= 0; i--) {
        if (idx + (1 << i) <= n && res + fwk[idx + (1 << i)] <= val) res += fwk[idx += (1 << i)];
    }
    return idx;
}

int main() {
    scanf("%d %d", &n, &q);
    vector<int> a(n + 5);
    for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
    sort(a.begin() + 1, a.begin() + n + 1);
    for (int i = 1; i <= n; i++) upd(i, a[i] - a[i - 1]);
    while (q--) {
        scanf(" %c %d %d", &c, &x, &y);
        if (c == 'F') {
            int k = lb(y);
            int cqr = qr(k + x);
            int clb = lb(cqr), cub = ub(cqr);
            int al = clb - k;
            int req = x - al;
            upd(k, 1); upd(clb, -1);
            if (al < x) upd(cub - req + 1, 1), upd(cub + 1, -1);
        } else {
            int clb = lb(x), cub = ub(min(y, qr(n)));
            printf("%d\n", cub - clb + 1);
        }
    }
}

Compilation message

grow.cpp: In function 'int main()':
grow.cpp:37:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   37 |     scanf("%d %d", &n, &q);
      |     ~~~~~^~~~~~~~~~~~~~~~~
grow.cpp:39:39: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   39 |     for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
      |                                  ~~~~~^~~~~~~~~~~~~
grow.cpp:43:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   43 |         scanf(" %c %d %d", &c, &x, &y);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 33 ms 1104 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 2 ms 500 KB Output is correct
3 Runtime error 1 ms 596 KB Execution killed with signal 11
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 35 ms 568 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 3 ms 592 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 11 ms 1616 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 11 ms 1548 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1054 ms 848 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 14 ms 1872 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 41 ms 1900 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 25 ms 1984 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -