HDUOJ 2795 Billboard

xiaoxiao2021-02-28  76

#ifdef _DEBUG #pragma warning(disable : 4996) #endif #include <iostream> #include <string> #include <vector> #include <stack> #include <queue> #include <deque> #include <set> #include <map> #include <algorithm> #include <functional> #include <sstream> #include <utility> #include <cstring> #include <cstdio> #include <cstdlib> #include <ctime> #include <cmath> #include <cctype> #define CLEAR(a, b) memset(a, b, sizeof(a)) #define CLOSE() ios::sync_with_stdio(false) #define IN() freopen("in.txt", "r", stdin) #define OUT() freopen("out.txt", "w", stdout) #define PF(a) printf("%d\n", a) #define SF(a) scanf("%d", &a) #define SFF(a, b) scanf("%d%d", &a, &b) #define FOR(i, a, b) for(int i = a; i < b; ++i) #define LL long long #define MAXN 200010 #define MAXM 100005 #define MOD 1000007 #define INF 2147483648 using namespace std; //-------------------------CHC------------------------------// //HDUOJ 2795 Billboard #define Lson cur<<1, l, mid #define Rson cur<<1|1, mid+1, r int res[MAXN << 2]; int h, w, n; void PushUp(int cur) { res[cur] = max(res[cur << 1], res[cur << 1 | 1]); } void Build(int cur, int l, int r) { if (l == r) { res[cur] = w; return; } int mid = (l + r) >> 1; Build(Lson); Build(Rson); PushUp(cur); } int Query(int val, int cur, int l, int r) { if (l == r) { res[cur] -= val; return l; } int ret = 0; int mid = (l + r) >> 1; if (res[cur << 1] >= val) ret = Query(val, Lson); else ret = Query(val, Rson); PushUp(cur); return ret; } int main() { while (scanf("%d%d%d", &h, &w, &n) == 3) { h = min(h, n); Build(1, 1, h); while (n--) { int val; SF(val); //printf("res[1] = %d\n", res[1]); if (res[1] < val) printf("-1\n"); else PF(Query(val, 1, 1, h)); } } return 0; }
转载请注明原文地址: https://www.6miu.com/read-58170.html

最新回复(0)