1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <iostream>
#include<list>
#include<iterator>

using namespace std;

int n;
long long int * w;
bool * z;
int s = 0;


void Szczupak() {
	bool* z = new bool[n] {false};
	long long int s, k;
	cin >> s >> k;
	if (w[0] >= s) {
		cout << "-1" << endl;
		return;
	}
	int ileSzprotek = 0;
	int i = 0;
	while (s < k && ileSzprotek < n) {
		bool zjedzona = false;
		while (w[i + 1] < s && i + 1 < n)
			i++;
		while (i >= 0) {
			if (!z[i]) {
				z[i] = true;
				s += w[i];
				zjedzona = true;
				ileSzprotek++;
				break;
			}
			i--;
		}
		if (!zjedzona){
			cout << "-1" << endl;
			return;
		}
	}
	if (s < k) {
		cout << "-1" << endl;
		return;
	}
	else {
		cout << ileSzprotek << endl;
		return;
	}
}

void Dodaj() {
	long long int v;
	cin >> v;
	long long int * w1 = new long long int[n + 1 - s];
	int i = 0;
	while (v >= w[i+s] && i+s<n) {
		w1[i] = w[i+s];
		i++;
	}
	w1[i] = v;
	i++;
	while (i + s <= n) {
		w1[i] = w[i + s - 1];
		i++;
	}
	n = n + 1 - s;
	s = 0;
	w = w1;
}

void Ujmij() {
	long long int v;
	cin >> v;
	int i = 0;
	while (w[i] != v)
		i++;
	while (i > 0) {
		w[i] = w[i - 1];
		i--;
	}
	w[0] = 0;
	s++;
}

int main()
{
	cin >> n;
	w = new long long int[n];
	for (int i = 0; i < n; i++) {
		int v;
		cin >> v;
		int j = 0;
		for (; j < i; j++) {
			if (v < w[j]) {
				break;
			}
		}
		for (int k = i; k > j; k--) {
			w[k] = w[k - 1];
		}
		w[j] = v;
	}

	int q;
	cin >> q;
	for (int i = 0; i < q; i++) {
		int typ;
		cin >> typ;
		if (typ == 1)
			Szczupak();
		else if (typ == 2)
			Dodaj();
		else if (typ == 3)
			Ujmij();
	}
}