zoukankan      html  css  js  c++  java
  • [多校联考2019(Round 4 T1)][51nod 1295]Xor key(可持久化trie)

    [51nod 1295]Xor key(可持久化trie)

    题面

    给出一个长度为n的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R)。求A[L] 至 A[R] 这R - L + 1个数中,与X 进行异或运算(Xor),得到的最大值是多少?

    分析

    可持久化trie裸题

    代码

    #include<iostream>
    #include<cstdio>
    #define maxb 31
    #define maxn 200000
    #define maxs 6400000
    using namespace std;
    inline void qread(int &x){
    	x=0;
    	int sign=1;
    	char c=getchar();
    	while(c<'0'||c>'9'){
    		if(c=='-') sign=-1;
    		c=getchar();
    	} 
    	while(c>='0'&&c<='9'){
    		x=x*10+c-'0';
    		c=getchar();
    	}
    	x=x*sign; 
    }
    inline void qprint(int x){
    	if(x<0){
    		putchar('-');
    		qprint(-x);
    	}else if(x==0){
    		putchar('0');
    		return;
    	}else{
    		if(x>=10) qprint(x/10);
    		putchar('0'+x%10);
    	} 
    }
    
    int n,q;
    int a[maxn+5];
    
    struct persist_trie{
    	int sz[maxs+5];
    	int root[maxn+5];
    	int son[maxs+5][2];
    	int ptr=0;
    	void insert(int pos,int val){
    		int now=root[pos]=++ptr;
    		int last=root[pos-1];
    		for(int i=maxb;i>=0;i--){
    			sz[now]=sz[last]+1;
    			int k=(val>>i)&1;
    			son[now][k]=++ptr;
    			son[now][k^1]=son[last][k^1];
    			now=son[now][k];
    			last=son[last][k];
    		} 
    		sz[now]=sz[last]+1;
    	} 
    	int query(int l,int r,int val){
    		int now=root[r];
    		int last=root[l-1];
    		int ans=0;
    		for(int i=maxb;i>=0;i--){
    			int k=(val>>i)&1;
    			int lsz=sz[son[now][k^1]]-sz[son[last][k^1]];
    			if(lsz){
    				now=son[now][k^1];
    				last=son[last][k^1];
    				ans=ans*2+1;
    			}else{
    				now=son[now][k];
    				last=son[last][k];
    				ans=ans*2;
    			}
    		}
    		return ans;
    	}
    }T;
    
    int main(){
    // 	freopen("1.in","r",stdin);
    // 	freopen("1.ans","w",stdout);
    	int l,r,x;
    	qread(n);
    	qread(q);
    	for(int i=1;i<=n;i++){
    		qread(a[i]);
    		T.insert(i,a[i]);
    	}
    	for(int i=1;i<=q;i++){
    		qread(x);
    		qread(l);
    		qread(r);
    		l++;
    		r++;
    		qprint(T.query(l,r,x));
    		putchar('
    ');
    	}
    }
    
  • 相关阅读:
    安装future包,django-crispy-forms
    django学习笔记(七)-----视图
    django学习笔记(六)-----模型
    django学习笔记(五)------path
    django学习笔记(四)---基本流程三(视图,模板基本使用)
    django学习笔记(三)--基本流程二---admin站点管理
    django学习笔记(二)基本流程一
    C#时间
    可空类型的DateTime转换成字符串
    asp.net mvc Razor一点小注意点
  • 原文地址:https://www.cnblogs.com/birchtree/p/11624657.html
Copyright © 2011-2022 走看看