zoukankan      html  css  js  c++  java
  • P7502 「HMOI R1」不知道是啥的垃圾题 题解

    Luogu

    Description.

    给定一个二元组集合 \(S\),要求支持:

    • 插入一个二元组 \((a,b)\)
    • 删除一个二元组 \((a,b)\)
    • 给定 \((x,y)\),求 \(\sum_{(a,b)\in S}[x\oplus a>y\oplus b]\)

    Solution.

    启发:Trie 可以不是严格二叉树。

    直接维护一个四叉 Trie,然后就有了一个 \(O(n^2)\) 的暴力做法。
    发现如果当前 \(\oplus\) 相同才会有问题,所以直接对 \(a\oplus b\) 建立 Trie。
    复杂度变成了 \(O(n\log V)\)

    Coding.

    点击查看不行代码
    //是啊……你就是那只鬼了……所以被你碰到以后,就轮到我变成鬼了{{{
    #include<bits/stdc++.h>
    using namespace std;typedef long long ll;
    template<typename T>inline void read(T &x)
    {
        x=0;char c=getchar(),f=0;
        for(;c<48||c>57;c=getchar()) if(!(c^45)) f=1;
        for(;c>=48&&c<=57;c=getchar()) x=(x<<1)+(x<<3)+(c^48);
        f?x=-x:x;
    }
    template<typename T,typename...L>inline void read(T &x,L&...l) {read(x),read(l...);}/*}}}*/
    int ch[12000005][2],sn[12000005][4],tt,rt;
    #define bit(x) ((x>>d)&1)
    inline void ins(int &x,ll a,ll b,int c,int d=60)
    {
    	if(!~d) return;else sn[x?x:x=++tt][bit(a)<<1|bit(b)]+=c;
    	ins(ch[x][bit(a)^bit(b)],a,b,c,d-1);
    }
    inline int qry(int x,ll a,ll b,int d=60)
    {
    	if(!x||!~d) return 0;
    	return sn[x][(bit(a)^1)<<1|bit(b)]+qry(ch[x][bit(a)^bit(b)],a,b,d-1);
    }
    inline void solve() {int fg;ll a,b;read(fg,a,b);if(fg^3) ins(rt,a,b,fg&1?1:-1);else printf("%d\n",qry(rt,a,b));}
    int main() {int Ca;for(read(Ca);Ca--;) solve();return 0;}
    
  • 相关阅读:
    JSON与JSONP的区别
    BFC(块级格式上下文)
    面试题--新
    javascript 类数组对象
    WebP 图片实践之路
    HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事
    前端面试题目
    JS 中的事件设计
    博客声明
    1.2 线性表的链式表示
  • 原文地址:https://www.cnblogs.com/pealfrog/p/15189236.html
Copyright © 2011-2022 走看看