Advertisement
YEZAELP

SMMR-020: Toilet

Jun 7th, 2021
678
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.14 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int N = 1e5;
  6. const int M = 10;
  7. bool empty_toilet[M+10], outqueue[N+10];
  8. int ans[N+10];
  9. queue <int> Q;
  10. int n, m;
  11.  
  12. void in(int x){
  13.     int emp = -1;
  14.     for(int i=1;i<=m;i++){
  15.         if(empty_toilet[i]) {
  16.             emp = i;
  17.             break;
  18.         }
  19.     }
  20.     if(emp == -1){
  21.         Q.push(x);
  22.         outqueue[x] = false;
  23.     }
  24.     else {
  25.         empty_toilet[emp] = false;
  26.         ans[x] = emp;
  27.     }
  28. }
  29.  
  30. void out(int x){
  31.     if(ans[x] == 0){//inqueue
  32.         outqueue[x] = true;
  33.     }
  34.     else{//intoilet
  35.         int emp = ans[x];
  36.         empty_toilet[emp] = true;
  37.         while(!Q.empty() and outqueue[Q.front()]) Q.pop();
  38.         if(Q.empty()) return;
  39.         empty_toilet[emp] = false;
  40.         ans[Q.front()] = emp;
  41.         Q.pop();
  42.     }
  43. }
  44.  
  45. int main(){
  46.  
  47.     scanf("%d%d", &n, &m);
  48.  
  49.     for(int i=1;i<=m;i++) empty_toilet[i] = true;
  50.  
  51.     for(int i=1;i<=2*n;i++){
  52.         int opr, x;
  53.         scanf("%d%d", &opr, &x);
  54.         if(opr == 1) in(x);
  55.         else out(x);
  56.     }
  57.  
  58.     for(int i=1;i<=n;i++) printf("%d\n", ans[i]);
  59.  
  60.     return 0;
  61. }
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement