zoukankan      html  css  js  c++  java
  • 51Nod1295 XOR key

    题目看这里

    经典的区间xor最大值问题

    很久以前就知道做法所以来写一写,可持久化trie

    意外地发现好写而且跑得很快

    #pragma GCC opitmize("O3")
    #pragma G++ opitmize("O3")
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #define N 50010
    using namespace std;
    int c[N*40],s[N*40][2],n,m,rt[N],cnt,A=0;
    void insert(int v,int r1,int r2){
        for(int d,i=30;~i;--i){
            c[r2]=c[r1]+1; d=(v>>i)&1;
            s[r2][!d]=s[r1][!d];
            r2=s[r2][d]=++cnt;
            r1=s[r1][d];
        }
        c[r2]=c[r1]+1;
    }
    void dfs(int v,int d,int r1,int r2,int w){
        if(d<0){ A=max(A,w); return; }
        int t=(v>>d)&1^1;
        if(c[s[r2][t]]-c[s[r1][t]]) dfs(v,d-1,s[r1][t],s[r2][t],w+(1<<d));
        else dfs(v,d-1,s[r1][!t],s[r2][!t],w);
    }
    int main(){
        scanf("%d%d",&n,&m);
        for(int x,i=1;i<=n;++i) 
            scanf("%d",&x),rt[i]=++cnt,insert(x,rt[i-1],rt[i]);
        for(int x,l,r;m--;){
            scanf("%d%d%d",&x,&l,&r); A=0;
            dfs(x,30,rt[l],rt[r+1],0);
            printf("%d
    ",A);
        }
    } 

  • 相关阅读:
    选择排序
    冒泡排序
    排序算法
    排序的稳定性
    散列表查找的代码实现
    处理散列冲突的方法
    jQuery 实时监听input
    PhpStorm
    Memcache 学习
    豆瓣第三方登录
  • 原文地址:https://www.cnblogs.com/Extended-Ash/p/9477120.html
Copyright © 2011-2022 走看看