• 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
    没有人不辛苦,只有人不喊疼
  • 相关阅读:
    day 03
    day 02
    day 02 作业
    day 01
    day 10 预科
    day 09作业 预科
    day 09 预科
    day 08作业 预科
    The word 'localhost' is not correctly spelled 这个问题怎么解决
    不能够连接到主机(名称为localhost)上的MySQL服务”
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/13543834.html
Copyright © 2020-2023  润新知