Submission

Status:
----------

Score: 0

User: Jokul

Problemset: ความลึก

Language: c

Time: 0.942 second

Submitted On: 2025-04-15 14:50:56

#include <stdio.h>

int main() {
    int n, q, maxd = 0;
    scanf("%d %d", &n, &q);

    int d[n + 1], l[n + 1], ship[q], depth[n + 1];

    // Initialize depth array
    depth[0] = 0;

    // Read d and l arrays
    for (int i = 0; i < n; i++) {
        scanf("%d", &d[i]);
        scanf("%d", &l[i]);

        // Update depth based on d
        depth[i + 1] = depth[i] + d[i];

        // Track maximum depth
        if (depth[i + 1] > maxd) {
            maxd = depth[i + 1];
        }
    }

    // Array to store maximum lengths at each depth
    int wide[maxd + 1];
    for (int i = 0; i <= maxd; i++) {
        wide[i] = 0; // Initialize wide array
    }

    // Calculate maximum lengths for each depth
    for (int i = 0; i < n; i++) {
        for (int j = depth[i]; j <= maxd; j++) {
            if (wide[j] < wide[depth[i]] + l[i]) {
                wide[j] = wide[depth[i]] + l[i];
            }
        }
    }

    // Process queries
    for (int i = 0; i < q; i++) {
        scanf("%d", &ship[i]);
    }

    // Answer each query
    for (int i = 0; i < q; i++) {
        int ans = 0;
        for (int j = maxd; j > 0; j--) {
            if (ship[i] <= wide[j]) {
                ans = j;
                break;
            }
        }
        printf("%d\n", ans);
    }

    return 0;
}