zoukankan      html  css  js  c++  java
  • Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset

    题目链接:Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset

    题意:

    给你一些操作,往一个集合插入和删除一些数,然后?x让你找出与x异或后的最大值

    题解:

    trie树xjb搞就行,每次要贪心,尽量满足高位为1.

     1 #include<bits/stdc++.h>
     2 #define F(i,a,b) for(int i=a;i<=b;i++)
     3 using namespace std;
     4 
     5 namespace trie
     6 {
     7     const int N=(2e5+7)*32;
     8     int tr[N][2],ed=-1,cnt[N];
     9     void nw(){cnt[++ed]=0,tr[ed][0]=tr[ed][1]=0;}
    10     void update(int x,int c,int now=0)
    11     {
    12         for(int i=30;i>=0;i--)
    13         {
    14             int v=x>>i&1;
    15             if(!tr[now][v])nw(),tr[now][v]=ed;
    16             now=tr[now][v];
    17             cnt[now]+=c;
    18         }
    19     }
    20     int ask(int x,int now=0,int ans=0)
    21     {
    22         for(int i=30;i>=0;i--)
    23         {
    24             int v=x>>i&1;
    25             if(!cnt[tr[now][v^1]])now=tr[now][v];
    26             else now=tr[now][v^1],ans|=1<<i;
    27         }
    28         return ans;
    29     }
    30 }
    31 using namespace trie;
    32 int main()
    33 {
    34     int n,x;char op[2];
    35     scanf("%d",&n);
    36     nw(),update(0,1);
    37     F(i,1,n)
    38     {
    39         scanf("%s%d",op,&x);
    40         if(op[0]=='+')update(x,1);
    41         else if(op[0]=='-')update(x,-1);
    42         else printf("%d
    ",ask(x));
    43     }
    44     return 0;
    45 }
    View Code
  • 相关阅读:
    Spark Streaming(一)
    ACID
    SparkSQL
    scala样例类
    centos7 防火墙有关命令
    HBase优化
    scp
    HBase与Hive
    HBase与MapReduce交互
    Hadoop安全模式
  • 原文地址:https://www.cnblogs.com/bin-gege/p/5766075.html
Copyright © 2011-2022 走看看