qwb VS 去污棒

qwb VS 去污棒

Time Limit: 2 Sec  Memory Limit: 256 MB

Description

qwb表白学姐失败后,郁郁寡欢,整天坐在太阳底下赏月。在外人看来,他每天自言自语,其实他在和自己的影子“去污棒”聊天。
去污棒和qwb互相出题考验对方,去污棒问了qwb这样一个问题:
现已知一个有n个正整数的序列a[1],a[2]...a[n],接下来有m个操作

操作一共有两种:

1.在序列末尾添加一个数x。

2.查询suf[p] xor
x的最大值,其中xor是异或 ,l<=p<=r,
suf[t]表示从t开始的后缀的异或和,即suf[t]=a[t] xor a[t+1] xor ...xor
a[len],len为序列长度。

Input

第一行一个整数T(<=5),表示一共有T组数据。

每组数据第一行两个整数n(<=200000),m(<=200000),意义如上所述。

随后一行有n个数,表示初始序列。
随后m行,每行表示一个操作。
操作有两种,1: x 表示在末尾添加一个x,2: l r
x表示查询suf[p] xor x的最大值,其中l<= p <= r,
所有数及x不超过224
且保证所有操作合法。

Output

每组测试数据的第一行输出"Case
x:",x为数据组数的标号,从1开始。

接下来,对每个操作2输出一行答案。

Sample Input

1
5 5
1 2 3 4 5
2 1 3 4
1 10
1 7
2 4 4 5
2 1 5 19

Sample Output

Case 1:
6
9
31分析:考虑怎样得到后缀,因为后缀会改变,不好修改,而前缀不会改变;   所以维护当前所有数异或sum以及每个前缀异或a[i],sum^a[i]就得到i+1的后缀了;   区间查询,考虑主席树或莫队,然而莫队复杂度高一点,不能通过这道题;代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <bitset>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <cassert>
#include <ctime>
#include<unordered_map>
#define rep(i,m,n) for(i=m;i<=n;i++)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ll long long
#define pi acos(-1.0)
#define pii pair<int,int>
#define sys system("pause")
const int maxn=4e5+10;
const int N=5e2+10;
using namespace std;
ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p%mod;p=p*p%mod;q>>=1;}return f;}
int n,m,k,t,rt[maxn],ls[maxn*20],rs[maxn*20],s[maxn*20],cas,sz;
void insert(int x,int &y,int v,int t)
{
    y=++sz;
    s[y]=s[x]+1;
    if(t==-1)return;
    ls[y]=ls[x],rs[y]=rs[x];
    int z=(v>>t&1);
    if(z==0)insert(ls[x],ls[y],v,t-1);
    else insert(rs[x],rs[y],v,t-1);
}
int gao(int l,int r,int x,int t)
{
    if(t==-1)return 0;
    int y=(x>>t&1);
    if(y==0)
    {
        if(s[rs[r]]-s[rs[l]])return (1<<t)+gao(rs[l],rs[r],x,t-1);
        else return gao(ls[l],ls[r],x,t-1);
    }
    else
    {
        if(s[ls[r]]-s[ls[l]])return (1<<t)+gao(ls[l],ls[r],x,t-1);
        else return gao(rs[l],rs[r],x,t-1);
    }
}
int main()
{
    int i,j;
    insert(rt[0],rt[0],0,24);
    scanf("%d",&t);
    while(t--)
    {
        sz=0;
        scanf("%d%d",&n,&m);
        int sum=0;
        rep(i,1,n)scanf("%d",&j),sum^=j,insert(rt[i-1],rt[i],sum,24);
        printf("Case %d:\n",++cas);
        rep(i,1,m)
        {
            int x,y,z,w;
            scanf("%d%d",&x,&y);
            if(x==1)sum^=y,++n,insert(rt[n-1],rt[n],sum,24);
            else scanf("%d%d",&z,&w),printf("%d\n",gao(rt[y-2],rt[z-1],w^sum,24));
        }
    }
    return 0;
}
时间: 2024-10-12 04:19:48

qwb VS 去污棒的相关文章

2017年浙江工业大学之江学院程序设计竞赛决赛 I: qwb VS 去污棒(可持久化Trie+离线)

问题 I: qwb VS 去污棒 时间限制: 2 Sec  内存限制: 256 MB 提交: 74  解决: 26 [提交][状态][讨论版] 题目描述 qwb表白学姐失败后,郁郁寡欢,整天坐在太阳底下赏月.在外人看来,他每天自言自语,其实他在和自己的影子“去污棒”聊天. 去污棒和qwb互相出题考验对方,去污棒问了qwb这样一个问题: 现已知一个有n个正整数的序列a[1],a[2]...a[n],接下来有m个操作 操作一共有两种: 1.在序列末尾添加一个数x. 2.查询suf[p] xor x的

[2017年第0届浙江工业大学之江学院程序设计竞赛决赛 I] qwb VS 去污棒(并查集,按秩合并,最小生成树,LCA)

题目链接:http://115.231.222.240:8081/JudgeOnline/problem.php?cid=1005&pid=8 题意:中文题面. 手动画一下会发现所求边必然存在于最大生成树上,那么就可以首先构造一棵最大生成树. 问题转化成一棵树上求两个点之间的链上的最短边,用倍增lca就可以做了,但是我不会. 于是可以考虑建树时的操作,在求最大生成树的时候按秩合并,即集合大的根要做集合小的根的父亲,这样连一条有向边,保证路径上的所有边没有变化,并且能够维持整棵树高不会超过log(

图像处理之基础---去污算法

http://bbs.csdn.net/topics/390211536 http://blog.csdn.net/laviewpbt/article/details/14225413 http://bbs.csdn.net/topics/390573504 http://blog.csdn.net/laviewpbt/article/details/11555877

学会提问(尼尔&#183;布朗、斯图尔特&#183;基利)

Day1 1.批判性思维 作者认为,批判性思维有三个方面: (1)有一套相互关联.环环相扣的关键问题的意识: (2)恰如其分地提出和回答关键问题的意识: (3)积极主动地利用关键问题的强烈愿望. 2.两种思维方式 被动式思维和主动式思维,也可以称为海绵式思维和淘金式思维. 被动式思维——就像海绵,照单全收,主要运用记忆能力,狂抄狂背狂记,并且对脑海里的东西深信不疑 主动式思维——就像淘金,不仅动用记忆里,还要动用推理分析能力,不断质疑接收到的信息,筛选最有效的信息. 前者强调单纯的知识获取结果,

铝型材阳极氧化缺陷成因和对策

第1章 前处理工序的缺陷 1.1脱脂不良 缺陷名 脱脂不良 对应英语 Uneven degreasing 曾用名 产生工序 脱  脂 起因工序 脱  脂 定义:由于脱脂不完全而产生的浸蚀不均. 现象:因浸蚀不均变成凸凹不平,呈现不同光泽.着色后变成色斑. 原因:(1)附着在表面处理前材料上的油脂,在脱脂处理中未除去就进行浸蚀处理. (2)脱脂条件偏离控制范围. 对策:(1)确认挤压工序中使用的切削油,防锈剂: (2)使脱脂条件在控制范之内. 1.2过浸蚀 缺陷名 过浸蚀 对应英语 Rough e

42个生活金点子

1.毛巾发粘有怪味怎么办?毛巾使用久了,会散发一种怪味而且发粘.通常人们习惯用肥皂洗涤,反而越洗越粘.此时,可用浓盐水搓洗(一条毛巾可放一小勺细盐),然后用温水烫一下再搓洗,最后用清水洗净.这样,毛巾就没有怪味,也不发粘.还有,擦脸毛巾用久想恢复到柔软的样子,最好的办法是用水加洗衣粉用锅煮三十分钟即可. 2.如何防止吃荔枝上火?喜欢吃荔枝但又怕燥热的人,在吃荔枝的同时,可多喝盐水,也可用20—30克生地煲瘦肉或猪骨汤喝,或与蜜枣一起煲水喝,都可预防上火.还可把荔枝连皮浸入淡盐水中,再放入冰柜里冰

Isopar碳氢清洗剂可改善清洗效果

总会听到身边的朋友说水性清洗剂清洗效果不太好,应该如何改善之类的问题.首先我们应该判断油污的性质.若污垢是油性的,还是得用油性清洗剂(例如碳氢清洗剂)效果更好. 而且近期小学童发现美孚家的碳氢清洗剂效果真的很棒.Exxsol? D脱芳烃类清洗剂是由原油精制提炼并高效加氢,分馏后制得,能有效去除硫.芳烃等有害物质,因此毒性和气味很低,大大改善清洗工作环境,保证工人职业健康. 若您对清洗的工作环境,气味及工人职业健康安全有更严苛的要求,埃克森美孚则推荐另一款高端产品--Isopar异构烷烃类清洗剂.

如何改善清洗效果?Isopar碳氢清洗剂告诉你

总会听到身边的朋友说水性清洗剂清洗效果不太好,应该如何改善之类的问题.首先我们应该判断油污的性质.若污垢是油性的,还是得用油性清洗剂(例如碳氢清洗剂)效果更好.而且近期小学童发现美孚家的碳氢清洗剂效果真的很棒.Exxsol? D脱芳烃类清洗剂是由原油精制提炼并高效加氢,分馏后制得,能有效去除硫.芳烃等有害物质,因此毒性和气味很低,大大改善清洗工作环境,保证工人职业健康.若您对清洗的工作环境,气味及工人职业健康安全有更严苛的要求,埃克森美孚则推荐另一款高端产品--Isopar异构烷烃类清洗剂.它是

藤席的保养

藤席缩水没有办法恢复,以后要注意清洗和保养方法: 1.这款的话用湿布擦洗就行 2.温水擦洗  凉水冲洗洗多了容易导致变形 3.清洗干净后放于阴凉处晾干,不能曝晒. 清洗藤席时将藤席摊开,用温水浸过的潮湿毛巾将表面擦干净,藤席不能耐高温和化学剂,不要直接用水冲刷,也不能用化学洗涤剂擦试.清洗干净后放于阴凉处晾干,不能曝晒.使用前用30℃水温湿毛巾将席子擦拭干净,晾干后即可使用.使用中经常用毛巾擦拭,保持席面清洁光滑.脏污用中性 洗涤剂擦拭.收藏前,将席面擦拭干净,放在透风处晾干,存放在干燥避光处.