답안 #1102808

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1102808 2024-10-19T03:04:23 Z blackslex Growing Trees (BOI11_grow) C++17
0 / 100
33 ms 2900 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;
            upd(k, 1); upd(clb, -1);
            if (al < x) upd(cub - al + 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);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 33 ms 2308 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 30 ms 1544 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 30 ms 1716 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 13 ms 1876 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 10 ms 2124 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 10 ms 2144 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 21 ms 2388 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 14 ms 2420 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 24 ms 2900 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -