#include <bits/stdc++.h>
using namespace std;
const int N = 500010;
int f[N], cur, s[N];

void pn() {puts("No");}
void py() {puts("Yes");}

void add(int x, int val) {
	if(!x) return;
	while(x < N) {
		s[x] += val;
		x += x & -x;
	}
}

int query(int x) {
	int ret = 0;
	while(x) {
		ret += s[x];
		x -= x & -x;
	}
	return ret;
}

void Add(int t) {
	while(t) {
		if(!f[t]) break;
		f[t]--;
		add(t, -1);
		t--;
	}
	f[t]++;
	add(t, 1);
}

int main() {
	int n, x;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &x);
		if(f[0]) pn();
		else {
			//printf("%di\n", i);
			if(x >= N) {
				cur = 1;
				py();
			} else {
				//printf("%d %d\n", x, query(x));
				if(query(x) == x) {
					if(query(N-1) > x || cur) pn();
					else {
						py();
						Add(x);
					}
				} else {
					py();
					Add(x);
				}
			}
		}
	}
	return 0;
}
### Prompt

Create a solution in CPP for the following problem:

Example

Input

6
2
3
1
1
4
2


Output

Yes
Yes
Yes
No
Yes
No

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 500010;
int f[N], cur, s[N];

void pn() {puts("No");}
void py() {puts("Yes");}

void add(int x, int val) {
	if(!x) return;
	while(x < N) {
		s[x] += val;
		x += x & -x;
	}
}

int query(int x) {
	int ret = 0;
	while(x) {
		ret += s[x];
		x -= x & -x;
	}
	return ret;
}

void Add(int t) {
	while(t) {
		if(!f[t]) break;
		f[t]--;
		add(t, -1);
		t--;
	}
	f[t]++;
	add(t, 1);
}

int main() {
	int n, x;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &x);
		if(f[0]) pn();
		else {
			//printf("%di\n", i);
			if(x >= N) {
				cur = 1;
				py();
			} else {
				//printf("%d %d\n", x, query(x));
				if(query(x) == x) {
					if(query(N-1) > x || cur) pn();
					else {
						py();
						Add(x);
					}
				} else {
					py();
					Add(x);
				}
			}
		}
	}
	return 0;
}
```