#include "assistant.h"
#include <queue>
using namespace std;

#define MAXN 100005

static int in_scaffold[MAXN],first_active[MAXN],request_active[MAXN];
static bool in_que[MAXN];
static queue<int> que;

void Assist(unsigned char *A, int N, int K, int R)
{
    int i,j,k,p=0;
    for (i=1;i<=K;i++) in_scaffold[i] = 1;
    for (i=1;i<=K;i++){
        first_active[i] = A[p++];
        if (!first_active[i]) in_que[i] = 1, que.push(i);
    }
    for (i=1;i<=N;i++) request_active[i] = A[p++];
    for (i=1;i<=N;i++){
        int req=GetRequest()+1;
        if (request_active[i]) in_que[req] = 0;
        if (!request_active[i] && !in_que[req]) in_que[req] = 1, que.push(req);
        if (in_scaffold[req]) continue;
        for (;;){
            k = que.front(); que.pop();
            if (in_que[k]) break;
        }
        in_que[k] = 0;
        in_scaffold[req] = 1;
        in_scaffold[k] = 0;
        PutBack(--k);
    }
}
