zoukankan      html  css  js  c++  java
  • [CF706D]Vasiliy's Multiset(异或字典树)

    题目链接:http://codeforces.com/contest/706/problem/D

      1 /*
      2 ━━━━━┒ギリギリ♂ eye!
      3 ┓┏┓┏┓┃キリキリ♂ mind!
      4 ┛┗┛┗┛┃\○/
      5 ┓┏┓┏┓┃ /
      6 ┛┗┛┗┛┃ノ)
      7 ┓┏┓┏┓┃
      8 ┛┗┛┗┛┃
      9 ┓┏┓┏┓┃
     10 ┛┗┛┗┛┃
     11 ┓┏┓┏┓┃
     12 ┛┗┛┗┛┃
     13 ┓┏┓┏┓┃
     14 ┃┃┃┃┃┃
     15 ┻┻┻┻┻┻
     16 */
     17 #include <algorithm>
     18 #include <iostream>
     19 #include <iomanip>
     20 #include <cstring>
     21 #include <climits>
     22 #include <complex>
     23 #include <cassert>
     24 #include <cstdio>
     25 #include <bitset>
     26 #include <vector>
     27 #include <deque>
     28 #include <queue>
     29 #include <stack>
     30 #include <ctime>
     31 #include <set>
     32 #include <map>
     33 #include <cmath>
     34 using namespace std;
     35 #define fr first
     36 #define sc second
     37 #define cl clear
     38 #define BUG puts("here!!!")
     39 #define W(a) while(a--)
     40 #define pb(a) push_back(a)
     41 #define Rint(a) scanf("%d", &a)
     42 #define Rll(a) scanf("%I64d", &a)
     43 #define Rs(a) scanf("%s", a)
     44 #define Cin(a) cin >> a
     45 #define FRead() freopen("in", "r", stdin)
     46 #define FWrite() freopen("out", "w", stdout)
     47 #define Rep(i, len) for(int i = 0; i < (len); i++)
     48 #define For(i, a, len) for(int i = (a); i < (len); i++)
     49 #define Cls(a) memset((a), 0, sizeof(a))
     50 #define Clr(a, x) memset((a), (x), sizeof(a))
     51 #define Full(a) memset((a), 0x7f7f7f, sizeof(a))
     52 #define lrt rt << 1
     53 #define rrt rt << 1 | 1
     54 #define pi 3.14159265359
     55 #define RT return
     56 #define lowbit(x) x & (-x)
     57 #define onenum(x) __builtin_popcount(x)
     58 typedef long long LL;
     59 typedef long double LD;
     60 typedef unsigned long long ULL;
     61 typedef pair<int, int> pii;
     62 typedef pair<string, int> psi;
     63 typedef pair<LL, LL> pll;
     64 typedef map<string, int> msi;
     65 typedef vector<int> vi;
     66 typedef vector<LL> vl;
     67 typedef vector<vl> vvl;
     68 typedef vector<bool> vb;
     69 
     70 const int maxn = 6006000;
     71 typedef struct Node {
     72     int cnt;
     73     Node* next[2];
     74     Node() { cnt = 0; next[0] = next[1] = NULL; }
     75 }Node;
     76 
     77 int mul(int x, int n) {
     78     int ret = 1;
     79     while(n) {
     80         if(n & 1) ret *= x;
     81         x *= x;
     82         n >>= 1;
     83     }
     84     return ret;
     85 }
     86 
     87 Node memory[maxn];
     88 int mcnt;
     89 int q;
     90 Node* rt;
     91 char cmd[2];
     92 int n;
     93 
     94 void insert(Node* p, int x) {
     95     for(int i = 31; i >= 0; i--) {
     96         int bit = x & (1 << i) ? 1 : 0;
     97         if(p->next[bit] == NULL) {
     98             p->next[bit] = &memory[mcnt++];
     99         }
    100         p = p->next[bit];
    101         p->cnt++;
    102     }
    103 }
    104 
    105 void remove(Node* p, int x) {
    106     for(int i = 31; i >= 0; i--) {
    107         int bit = x & (1 << i) ? 1 : 0;
    108         p = p->next[bit];
    109         p->cnt--;
    110     }
    111 }
    112 
    113 int query(Node* p, int x) {
    114     int ret = 0;
    115     for(int i = 31; i >= 0; i--) {
    116         int bit = x & (1 << i) ? 0 : 1;
    117         if(p->next[bit] && p->next[bit]->cnt >= 1) {
    118             ret += mul(2, i);
    119             p = p->next[bit];
    120         }
    121         else p = p->next[bit^1];
    122     }
    123     return ret;
    124 }
    125 
    126 int main() {
    127 //    FRead();
    128     while(~Rint(q)) {
    129         Cls(memory); mcnt = 0;
    130         rt = &memory[mcnt++];
    131         insert(rt, 0);
    132         W(q) {
    133             Rs(cmd); Rint(n);
    134             if(cmd[0] == '+') insert(rt, n);
    135             else if(cmd[0] == '-') remove(rt, n);
    136             else if(cmd[0] == '?') printf("%d
    ", query(rt, n));
    137         }
    138     }
    139     RT 0;
    140 }
  • 相关阅读:
    D. Constructing the Array
    B. Navigation System
    B. Dreamoon Likes Sequences
    A. Linova and Kingdom
    G. Special Permutation
    B. Xenia and Colorful Gems
    Firetrucks Are Red
    java getInstance()的使用
    java 静态代理和动态代理
    java 类加载机制和反射机制
  • 原文地址:https://www.cnblogs.com/kirai/p/5798732.html
Copyright © 2011-2022 走看看