Advertisement
_rashed

HELPR2D2

Jul 1st, 2022
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.41 KB | None | 0 0
  1. #define ll long long
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. const int OO = 1e9;
  6. const double EPS = 1e-9;
  7.  
  8. int tree[5000000];
  9. int arr[1000000];
  10. int n;
  11.  
  12. void build(int l = 0, int r = n-1, int p = 1) {
  13.     if(l == r) {
  14.         tree[p] = arr[l];
  15.     }
  16.     else {
  17.         int mid = (l+r)/2;
  18.         build(l,mid,p*2);
  19.         build(mid+1,r,p*2+1);
  20.         tree[p] = max(tree[p*2],tree[p*2+1]);
  21.     }
  22. }
  23.  
  24. int query(int ql, int qr, int l = 0, int r = n-1, int p = 1) {
  25.     if(l >= ql && r <= qr) {
  26.         return tree[p];
  27.     }
  28.     if(ql > r || qr < l) {
  29.         return 0;
  30.     }
  31.     int mid = (l+r)/2;
  32.     return max(query(ql,qr,l,mid,p*2),query(ql,qr,mid+1,r,p*2+1));
  33. }
  34.  
  35. void update(int qt, int v, int l = 0, int r = n-1, int p = 1) {
  36.     if(l == r) {
  37.         tree[p] = v;
  38.         arr[l] = v;
  39.     }
  40.     else {
  41.         int mid = (l+r)/2;
  42.         if(qt <= mid) {
  43.             update(qt,v,l,mid,p*2);
  44.         }
  45.         else {
  46.             update(qt,v,mid+1,r,p*2+1);
  47.         }
  48.         tree[p] = max(tree[p*2],tree[p*2+1]);
  49.     }
  50. }
  51.  
  52. void add(int sz) {
  53.     int l = 0;
  54.     int r = n-1;
  55.     while(l < r) {
  56.         //cout << "l = " << l << " r = " << r << "\n";
  57.         int mid = (l+r)/2;
  58.         if(query(0,mid) >= sz) {
  59.             r = mid;
  60.         }
  61.         else {
  62.             l = mid+1;
  63.         }
  64.     }
  65.     //cout << "added to " << l << "\n";
  66.     update(l,arr[l]-sz);
  67. }
  68.  
  69. int main()
  70. {
  71.     ios_base::sync_with_stdio(false);
  72.     cin.tie(NULL);
  73.     cout.tie(NULL);
  74.     int t;
  75.     cin >> t;
  76.     while(t--) {
  77.         int k;
  78.         cin >> k >> n;
  79.         for(int i = 0; i < n; i++) {
  80.             arr[i] = k;
  81.         }
  82.         build();
  83.         for(int i = 0; i < n; i++) {
  84.             string s;
  85.             cin >> s;
  86.             if(s[0] == 'b') {
  87.                 int cnt,sz;
  88.                 cin >> cnt >> sz;
  89.                 for(int j = 0; j < cnt; j++) {
  90.                     add(sz);
  91.                 }
  92.                 i += cnt-1;
  93.             }
  94.             else {
  95.                 int sz = stoi(s);
  96.                 add(sz);
  97.             }
  98.         }
  99.         int used = 0;
  100.         int wasted = 0;
  101.         for(int i = 0; i < n; i++) {
  102.             if(arr[i] < k) {
  103.                 used++;
  104.                 wasted += arr[i];
  105.                 //cout << "wasted is " << wasted << "\n";
  106.             }
  107.         }
  108.         cout << used << " " << wasted << "\n";
  109.     }
  110.     return 0;
  111. }
  112.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement