社区讨论
60TLE求助
P13308故障参与者 4已保存回复 11
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @mhjkwxee
- 此快照首次捕获于
- 2025/11/04 04:14 4 个月前
- 此快照最后确认于
- 2025/11/04 06:32 4 个月前
代码如下:
CPP#include <iostream>
#include <stdio.h>
#include <unordered_map>
#define ll long long
#define endl "\n"
using namespace std;
ll n, m, ans;
unordered_map <ll, bool> fa;
unordered_map <ll, ll> Ans;
inline ll read()
{
ll f = 1, ans = 0;
char ch = getchar();
while (ch > '9' || ch < '0')
if (ch == '-')
f = -1, ch = getchar();
else
ch = getchar();
while ('0' <= ch && ch <= '9')
ans = ans * 10 + ch - '0', ch = getchar();
return ans * f;
}
inline ll Fa(ll u)
{
while (true)
{
if (fa[u] == true)
return u;
u >>= 1;
}
}
inline ll num(ll u)
{
ll i, j;
for (i = 1, j = 1; j <= u; i++, j <<= 1);
i = n - i + 2;
return (1 << i) - 1;
}
inline void update(ll u)
{
if (fa[u] == true)
return ;
if (Ans[u] == 0)
Ans[u] = num(u);
fa[u] = true;
ll uu = u;
u >>= 1;
while (true)
{
if (Ans[u] == 0)
Ans[u] = num(u);
Ans[u] -= Ans[uu];
if (fa[u] == true)
break;
u >>= 1;
}
}
int main()
{
n = read(), m = read();
fa[1] = true;
while (m--)
{
ll op = read(), u = read();
if (op == 1)
update(u);
else
{
u = Fa(u);
if (Ans[u] == 0)
Ans[u] = num(u);
ans ^= Ans[u];
}
}
cout << ans << endl;
return 0;
}
回复
共 11 条回复,欢迎继续交流。
正在加载回复...