You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.4 KiB
C++

#define _CRT_SECURE_NO_WARNINGS
#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll calc2(ll id)
{
//return log2l(id + 1) + 1;
int ret = 0;
while ((1ll << ret) < id + 2) ret++;
return ret;
}
bool isPrefix(ll a, ll b)
{
if (a == 0) return true;
for (; b; b >>= 1)
if (a == b) return true;
return false;
}
int main()
{
ll m, k, q, op, x;
scanf("%lld%lld%lld", &m, &k, &q);
set<ll> rm;
if (m == 1)
while (q--)
{
scanf("%lld%lld", &op, &x);
if (op == 1)
rm.insert(x);
if (op == 2)
rm.erase(x);
printf("%lld\n", rm.empty() ? k : *rm.begin());
}
if (m == 2)
while (q--)
{
scanf("%lld%lld", &op, &x);
if (op == 1)
rm.insert(x);
if (op == 2)
rm.erase(x);
ll cnt = (1ll << k) - 1;
for (auto ite = rm.begin(); ite != rm.end(); ++ite)
{
bool flag = true;
for (auto ite2 = rm.begin(); ite2 != ite && flag; ++ite2)
flag = !isPrefix(*ite2 + 1, *ite + 1);
if (flag) cnt -= (1ll << (k - calc2(*ite) + 1)) - 1;
}
printf("%lld\n", cnt);
}
return 0;
}