페이지

7882번: Skyscrapers

https://www.acmicpc.net/problem/7882


#include<stdio.h>
#include<algorithm>
using namespace std;
const int MAX_N = 1e6;
int n, d, t;
pair<intint> sc[MAX_N + 1];
bool f[MAX_N + 2];
int main() {
    scanf("%d", &t);
    while (t--) {
        scanf("%d %d", &n, &d);
        for (int i = 1; i <= n; i++) {
            scanf("%d", &sc[i].first);
            sc[i].second = i;
            f[i] = true;
        }
        f[n + 1] = false;
        sort(sc + 1, sc + 1 + n);
        for (int i = 0, j = 1, a, res = 1; i < d; i++) {
            scanf("%d", &a);
            for (; j <= n&&sc[j].first <= a; j++) {
                int idx = sc[j].second;
                res += f[idx - 1] + f[idx + 1] - 1;
                f[idx] = false;
            }
            printf("%d ", res);
        }
        puts("");
    }
    return 0;
}

댓글 없음 :

댓글 쓰기