mickypinata

PROG-T1014: Filter

Sep 18th, 2021
571
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct event {
  5.     int x, add;
  6.     event(): x(0), add(0) {};
  7.     event(int x, int add): x(x), add(add) {};
  8.     bool operator < (const event &rhs) const {
  9.         if(x != rhs.x){
  10.             return x < rhs.x;
  11.         }
  12.         return add < rhs.add;
  13.     }
  14. };
  15.  
  16. vector<event> events;
  17.  
  18. int main(){
  19.  
  20.     int wid, hei, nCur;
  21.     scanf("%d%d%d", &wid, &hei, &nCur);
  22.     for(int i = 1; i <= nCur; ++i){
  23.         int x, curWid;
  24.         scanf("%d%d", &x, &curWid);
  25.         events.emplace_back(x, 1);
  26.         events.emplace_back(min(wid, x + curWid), 2);
  27.     }
  28.     sort(events.begin(), events.end());
  29.     int cnt = 0;
  30.     int w50 = 0;
  31.     int w0 = 0;
  32.     int last = 0;
  33.     for(event &e : events){
  34.         int x = e.x;
  35.         int add = e.add;
  36.         if(x != last){
  37.             if(cnt == 1){
  38.                 w50 += x - last;
  39.             } else if(cnt == 0){
  40.                 w0 += x - last;
  41.             }
  42.             last = x;
  43.         }
  44.         if(add == 1){
  45.             ++cnt;
  46.         } else if(add == 2){
  47.             --cnt;
  48.         }
  49.     }
  50.     if(last < wid){
  51.         w0 += wid - last;
  52.     }
  53.     cout << w0 * hei << ' ' << w50 * hei;
  54.  
  55.     return 0;
  56. }
  57.  
RAW Paste Data