社区讨论

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 条回复,欢迎继续交流。

正在加载回复...