mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
1b4d6396e4
2700-2799
51 lines
1.2 KiB
C++
51 lines
1.2 KiB
C++
#include <iostream>
|
|
#include <algorithm>
|
|
#define MAXN 200050
|
|
#define lchild rt << 1, l, m
|
|
#define rchild rt << 1 | 1, m + 1, r
|
|
using namespace std;
|
|
int h, w, n, m;
|
|
class Segment_Tree{
|
|
private:
|
|
int node[MAXN << 2];
|
|
void push_up(int rt){
|
|
node[rt] = min(node[rt << 1], node[rt << 1 | 1]);
|
|
}
|
|
public:
|
|
void build(){
|
|
memset(node, 0, sizeof(node));
|
|
}
|
|
int update(int val, int rt = 1, int l = 1, int r = n){
|
|
if (l == r){
|
|
if (node[rt] + val <= w){
|
|
node[rt] += val;
|
|
return l;
|
|
}
|
|
else return 0;
|
|
}
|
|
int m = (l + r) >> 1, ret = 0;
|
|
if (node[rt << 1] + val <= w) ret += update(val, lchild);
|
|
else ret += update(val, rchild);
|
|
push_up(rt);
|
|
return ret;
|
|
}
|
|
int query(){
|
|
return node[1];
|
|
}
|
|
}st;
|
|
int main(){
|
|
int wi;
|
|
while (scanf("%d %d %d", &h, &w, &m) != EOF){
|
|
st.build();
|
|
n = min(h, m);
|
|
while (m--){
|
|
scanf("%d", &wi);
|
|
if (st.query() + wi <= w){
|
|
printf("%d\n", st.update(wi));
|
|
}
|
|
else printf("-1\n");
|
|
}
|
|
}
|
|
return 0;
|
|
}
|