没啥好说的,直接搞。
#include<stdio.h> #define lson l,mid,rt<<1 #define rson mid+1,r,rt<<1|1 int max[1000000]; int m; int Max(int a, int b) { if (a>b) return a; return b; } void up(int rt) { max[rt] = Max(max[rt << 1], max[rt << 1 | 1]); } void build(int l, int r, int rt) { max[rt] = m; if (l == r) return; int mid = (l + r) >> 1; build(lson); build(rson); } void ask(int len, int l, int r, int rt) { if (l == r){ printf("%d ", l); max[rt] -= len; return; } int mid = (l + r) >> 1; if (len <= max[rt << 1]) ask(len, lson); else ask(len, rson); up(rt); } int main() { int n, k, len, i; while (scanf("%d%d%d", &n, &m, &k) != EOF){ if (n>k) n = k; build(1, n, 1); for (i = 0; i<k; i++) { scanf("%d", &len); if (len>max[1]) puts("-1"); else ask(len, 1, n, 1); } } return 0; }