Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 1e5;
- const int M = 10;
- bool empty_toilet[M+10], outqueue[N+10];
- int ans[N+10];
- queue <int> Q;
- int n, m;
- void in(int x){
- int emp = -1;
- for(int i=1;i<=m;i++){
- if(empty_toilet[i]) {
- emp = i;
- break;
- }
- }
- if(emp == -1){
- Q.push(x);
- outqueue[x] = false;
- }
- else {
- empty_toilet[emp] = false;
- ans[x] = emp;
- }
- }
- void out(int x){
- if(ans[x] == 0){//inqueue
- outqueue[x] = true;
- }
- else{//intoilet
- int emp = ans[x];
- empty_toilet[emp] = true;
- while(!Q.empty() and outqueue[Q.front()]) Q.pop();
- if(Q.empty()) return;
- empty_toilet[emp] = false;
- ans[Q.front()] = emp;
- Q.pop();
- }
- }
- int main(){
- scanf("%d%d", &n, &m);
- for(int i=1;i<=m;i++) empty_toilet[i] = true;
- for(int i=1;i<=2*n;i++){
- int opr, x;
- scanf("%d%d", &opr, &x);
- if(opr == 1) in(x);
- else out(x);
- }
- for(int i=1;i<=n;i++) printf("%d\n", ans[i]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement