Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define ll long long
- #include <bits/stdc++.h>
- using namespace std;
- const int OO = 1e9;
- const double EPS = 1e-9;
- int tree[5000000];
- int arr[1000000];
- int n;
- void build(int l = 0, int r = n-1, int p = 1) {
- if(l == r) {
- tree[p] = arr[l];
- }
- else {
- int mid = (l+r)/2;
- build(l,mid,p*2);
- build(mid+1,r,p*2+1);
- tree[p] = max(tree[p*2],tree[p*2+1]);
- }
- }
- int query(int ql, int qr, int l = 0, int r = n-1, int p = 1) {
- if(l >= ql && r <= qr) {
- return tree[p];
- }
- if(ql > r || qr < l) {
- return 0;
- }
- int mid = (l+r)/2;
- return max(query(ql,qr,l,mid,p*2),query(ql,qr,mid+1,r,p*2+1));
- }
- void update(int qt, int v, int l = 0, int r = n-1, int p = 1) {
- if(l == r) {
- tree[p] = v;
- arr[l] = v;
- }
- else {
- int mid = (l+r)/2;
- if(qt <= mid) {
- update(qt,v,l,mid,p*2);
- }
- else {
- update(qt,v,mid+1,r,p*2+1);
- }
- tree[p] = max(tree[p*2],tree[p*2+1]);
- }
- }
- void add(int sz) {
- int l = 0;
- int r = n-1;
- while(l < r) {
- //cout << "l = " << l << " r = " << r << "\n";
- int mid = (l+r)/2;
- if(query(0,mid) >= sz) {
- r = mid;
- }
- else {
- l = mid+1;
- }
- }
- //cout << "added to " << l << "\n";
- update(l,arr[l]-sz);
- }
- int main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cout.tie(NULL);
- int t;
- cin >> t;
- while(t--) {
- int k;
- cin >> k >> n;
- for(int i = 0; i < n; i++) {
- arr[i] = k;
- }
- build();
- for(int i = 0; i < n; i++) {
- string s;
- cin >> s;
- if(s[0] == 'b') {
- int cnt,sz;
- cin >> cnt >> sz;
- for(int j = 0; j < cnt; j++) {
- add(sz);
- }
- i += cnt-1;
- }
- else {
- int sz = stoi(s);
- add(sz);
- }
- }
- int used = 0;
- int wasted = 0;
- for(int i = 0; i < n; i++) {
- if(arr[i] < k) {
- used++;
- wasted += arr[i];
- //cout << "wasted is " << wasted << "\n";
- }
- }
- cout << used << " " << wasted << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement