Cod sursa(job #1744814)

Utilizator akaprosAna Kapros akapros Data 20 august 2016 15:49:51
Problema Arbori Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>
#define maxN 200002
#define maxB 31
#define maxC (1 << 30) + 1
using namespace std;
int n, q;
map < int, int > dp[maxB];
void read()
{
    //freopen("d.in", "r", stdin);
    scanf("%d\n", &q);
}
void solve()
{
    int i;
    for (i = 0; i < maxB; ++ i)
        ++ dp[i][0];
}
void write()
{
    int i;
    while (q --)
    {
        int x, y;
        char s;
        scanf("%c %d\n", &s, &x);
        if (s == '+')
            for (i = 0; i < maxB; ++ i)
                ++ dp[i][x >> i];
        else if (s == '-')
            for (i = 0; i < maxB; ++ i)
                -- dp[i][x >> i];
        else
        {
            y = 0;
            for (i = maxB - 1; i >= 0; -- i)
            {
                y = (y << 1) | (((x >> i) & 1) ^ 1);
                y ^= (!dp[i][y]);
            }
            printf("%d\n", x ^ y);
        }
    }
}
int main()
{
    read();
    solve();
    write();
    return 0;
}