SEGTREE140 — Phân phòng cho đoàn khách

Trạng thái

Đề bài

Có \(N\) khách sạn được đánh số từ \(1\) đến \(N\). Ban đầu khách sạn \(i\) còn \(A_i\) phòng trống. Có \(Q\) đoàn khách lần lượt đến đặt phòng; đoàn thứ \(j\) cần \(X_j\) phòng.

Với mỗi đoàn, hãy chọn khách sạn có chỉ số nhỏ nhất còn ít nhất \(X_j\) phòng. Nếu tìm được khách sạn \(p\), in \(p\) và giảm số phòng trống của khách sạn đó đi \(X_j\). Nếu không có khách sạn phù hợp, in \(-1\) và giữ nguyên mọi số phòng.

Cả đoàn phải ở cùng một khách sạn. Các đoàn được xử lý theo đúng thứ tự đầu vào.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên \(N,Q\).
  • Dòng thứ hai chứa \(N\) số nguyên \(A_1,A_2,\ldots,A_N\), mô tả các giá trị ban đầu.
  • Mỗi dòng trong \(Q\) dòng tiếp theo chứa số nguyên \(X_j\), là số phòng đoàn thứ \(j\) cần.

Dữ liệu ra

Với mỗi đoàn khách, in một dòng chứa chỉ số khách sạn được chọn hoặc \(-1\) nếu không có khách sạn đủ phòng.

Ràng buộc

  • \(1\le N,Q\le200000\).
  • \(0\le A_i\le10^9\).
  • \(1\le X_j\le10^9\) với mọi đoàn khách.
4 6
3 1 5 2
2
3
2
2
1
2
1
3
3
4
1
-1
1 3
0
1
1000000000
1
-1
-1
-1

Giải thích

Ở ví dụ 1, đoàn đầu nhận \(2\) phòng ở khách sạn \(1\), làm số phòng còn lại thành \(1,1,5,2\). Hai đoàn tiếp theo lần lượt nhận \(3\) rồi \(2\) phòng ở khách sạn \(3\). Đoàn thứ tư vào khách sạn \(4\), đoàn thứ năm vào khách sạn \(1\). Đoàn cuối không có khách sạn đủ \(2\) phòng.

Ở ví dụ 2, khách sạn duy nhất không có phòng nên không nhận được đoàn nào.

Thông tin
Thông tin bài tập
Gửi bài giải
Điểm
100
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
250 M
I/O
stdin -> stdout
Tác giả
Loại đề bài
CTDL: Segment Tree
Ngôn ngữ cho phép
C, C++, Java, Pascal, Python