zoukankan      html  css  js  c++  java
  • CF817E Choosing The Commander(Trie)

    字典树的裸题,插入删除很简单,对于查询,只要进行分类讨论,先计算合法方案,然后使得相异或的答案永远和l保持一致即可

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=3e6+10;
    int cnt[N];
    struct node{
        node *nxt[2];
        ll cnt;
    }*rt;
    node pool[N];
    ll idx,num;
    void insert(ll x,int k){
        int i;
        node *p=rt;
        for(i=30;i>=0;i--){
            int sign=x>>i&1;
            if(p->nxt[sign]==NULL){
                p->nxt[sign]=pool+(++idx);
                p->nxt[sign]->cnt=++num;
            }
            p=p->nxt[sign];
            cnt[p->cnt]+=k;
        }
    }
    ll query(ll a,ll b){
        node *p=rt;
        ll ans=0;
        int i;
        for(i=30;i>=0;i--){
            int tmp1=(a>>i)&1,tmp2=(b>>i)&1;
            if(tmp2==1){
                if(p->nxt[tmp1])
                ans+=cnt[p->nxt[tmp1]->cnt];
                if(tmp1==1){
                    if(p->nxt[tmp1^1])
                    p=p->nxt[tmp1^1];
                    else
                    break;
                }
                else{
                    if(p->nxt[tmp1^1])
                    p=p->nxt[tmp1^1];
                    else
                    break;
                }
            }
            else{
                if(p->nxt[tmp1])
                p=p->nxt[tmp1];
                else{
                    break;
                }
            }
        }
        return ans;
    }
    int main(){
        ios::sync_with_stdio(false);
        int t;
        cin>>t;
        rt=pool;
        rt->cnt=0;
        while(t--){
            int opt;
            cin>>opt;
            if(opt==1){
                ll x;
                cin>>x;
                insert(x,1);
            }
            else if(opt==2){
                ll x;
                cin>>x;
                insert(x,-1);
            }
            else{
                ll p,l;
                cin>>p>>l;
                cout<<query(p,l)<<endl;
            }
        }
    }
    View Code
    没有人不辛苦,只有人不喊疼
  • 相关阅读:
    获取窗口句柄
    LeetCode Q136 Single Number(Medium)
    异或
    Ring3层的鼠标和键盘Hook
    Java—Applet
    Java—常用数据类型
    Java—接口与抽象类
    Java 概述
    Java—类的封装、继承与多态
    Windows—JDK安装与环境变量配置
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/13543834.html
Copyright © 2011-2022 走看看