| # | User | Rating |
|---|---|---|
| 1 | Benq | 3792 |
| 2 | VivaciousAubergine | 3647 |
| 3 | Kevin114514 | 3603 |
| 4 | jiangly | 3583 |
| 5 | strapple | 3515 |
| 6 | tourist | 3470 |
| 7 | dXqwq | 3436 |
| 8 | Radewoosh | 3415 |
| 9 | Otomachi_Una | 3413 |
| 10 | Um_nik | 3376 |
| # | User | Contrib. |
|---|---|---|
| 1 | Qingyu | 157 |
| 2 | adamant | 153 |
| 3 | Um_nik | 146 |
| 3 | Proof_by_QED | 146 |
| 5 | Dominater069 | 145 |
| 6 | errorgorn | 141 |
| 7 | cry | 139 |
| 8 | YuukiS | 135 |
| 9 | TheScrasse | 134 |
| 10 | chromate00 | 133 |
CSES — Hotel Queries
Question. I understand how to solve this using Segment Trees.
I saw this solution by pikmike.
#include <iostream>
using namespace std;
#define f() for (i = y = 0; k = i / P, i < n; ++i)
main(){
int P = 450, n, m, x, y, i, k, a[P*P], b[P];
cin >> n >> m;
f() cin >> a[i], b[k] = 2e9;
for(;m--, cin >> x; cout << y << " ")
f() i%P || !y * b[k] >= x ? y | a[i] < x ? : (a[y = i] -= x, ++y), b[k] = max(i%P ? b[k] : 0, a[i]) : i += P - 1;
}
Can someone explain how this works?
| Name |
|---|


