https://loj.ac/problem/517

题解

首先我们如果没有排序这个骚操作的话,可以直接记一下各个数位的前缀和,然后异或标记给全局打,查询的时候先把区间信息提取出来然后整体异或就好了。

对于排序,我们考虑对所有排好序的节点建\(trie\)树,这样即使有全局异或标记,我们也可以在\(trie\)树上完成前缀信息的查询。

然后就做完了。

代码

#include<bits/stdc++.h>
#define N 200009
#define ls ch[cnt][0]
#define rs ch[cnt][1]
using namespace std;
typedef long long ll;
const int maxn=30;
int a[N],n,q;
int ch[N*maxn][2],ct[N*maxn][maxn],size[N*maxn],sm[N][maxn];
int tot,rot;
int tag,nowtag;
ll ton[32],nw;
inline ll rd(){
ll x=0;char c=getchar();bool f=0;
while(!isdigit(c)){if(c=='-')f=1;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return f?-x:x;
}
void ins(int &cnt,int x,int p){
if(!cnt)cnt=++tot;
size[cnt]++;
for(int i=0;i<=29;++i)if((1<<i)&x)ct[cnt][i]++;
if(p<0)return;
int o=(x&(1<<p))!=0;
if(o)ins(rs,x,p-1);
else ins(ls,x,p-1);
}
inline ll getsum(int now){
memset(ton,0,sizeof(ton));
if(now>=nw){
for(int i=0;i<=29;++i)ton[i]+=sm[now][i];
}
else{
int cnt=rot,siz=now;
for(int i=29;i>=0;--i){
int lson=ls,rson=rs;
if(nowtag&(1<<i))swap(lson,rson);
if(size[lson]>=siz)cnt=lson;
else{
for(int j=0;j<=29;++j)ton[j]+=ct[lson][j];
siz-=size[lson];
cnt=rson;
}
}
if(siz){
for(int i=0;i<=29;++i)ton[i]+=(ct[cnt][i]!=0)*siz;
}
}
ll ans=0;
for(int i=0;i<=29;++i){
ll ss;
if(tag&(1<<i))ss=now-ton[i];else ss=ton[i];
// cout<<ss<<" ";
ans+=ss*(1ll<<i);
}
//cout<<"??\n";
return ans;
}
int main(){
// freopen("1.txt","r",stdin);
// freopen("out","w",stdout);
n=rd();
nw=1;
for(int i=1;i<=n;++i){
a[i]=rd();
for(int j=0;j<=29;++j)sm[i][j]=sm[i-1][j]+((a[i]&(1<<j))!=0);
}
q=rd();
int opt,x,l,r;
while(q--){
opt=rd();
if(opt==1){
x=rd();x^=tag;
++n;a[n]=x;
for(int j=0;j<=29;++j)sm[n][j]=sm[n-1][j]+((a[n]&(1<<j))!=0);
}
else if(opt==2){
l=rd();r=rd();
printf("%lld\n",getsum(r)-getsum(l-1));
}
else if(opt==3)tag^=rd();
else if(opt==4){
nowtag=tag;
while(nw<=n)ins(rot,a[nw],29),nw++;
}
}
return 0;
}

「LibreOJ β Round #2」计算几何瞎暴力的更多相关文章

  1. LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力

    二次联通门 : LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 /* LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 叫做计算几 ...

  2. [LOJ#517]. 「LibreOJ β Round #2」计算几何瞎暴力[trie]

    题意 题目链接 分析 记操作异或和为 \(tx\) ,最后一次排序时的异或和为 \(ax\) ,每个数插入时的 \(tx\) 记为 \(b\). 我们发现,一旦数列排序,就会变得容易操作. 对于新加入 ...

  3. [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机)

    [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机) 试题描述 IOI 的比赛开始了.Jsp 和 Rlc 坐在一个角落,这时他们听到了一个异样的声音 …… 接着他们发现自己收 ...

  4. LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律

    二次联通门 : LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律 /* LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律 set ...

  5. loj #547. 「LibreOJ β Round #7」匹配字符串

    #547. 「LibreOJ β Round #7」匹配字符串   题目描述 对于一个 01 串(即由字符 0 和 1 组成的字符串)sss,我们称 sss 合法,当且仅当串 sss 的任意一个长度为 ...

  6. [LOJ#531]「LibreOJ β Round #5」游戏

    [LOJ#531]「LibreOJ β Round #5」游戏 试题描述 LCR 三分钟就解决了问题,她自信地输入了结果-- > -- 正在检查程序 -- > -- 检查通过,正在评估智商 ...

  7. [LOJ#530]「LibreOJ β Round #5」最小倍数

    [LOJ#530]「LibreOJ β Round #5」最小倍数 试题描述 第二天,LCR 终于启动了备份存储器,准备上传数据时,却没有找到熟悉的文件资源,取而代之的是而屏幕上显示的一段话: 您的文 ...

  8. [LOJ#516]「LibreOJ β Round #2」DP 一般看规律

    [LOJ#516]「LibreOJ β Round #2」DP 一般看规律 试题描述 给定一个长度为 \(n\) 的序列 \(a\),一共有 \(m\) 个操作. 每次操作的内容为:给定 \(x,y\ ...

  9. [LOJ#515]「LibreOJ β Round #2」贪心只能过样例

    [LOJ#515]「LibreOJ β Round #2」贪心只能过样例 试题描述 一共有 \(n\) 个数,第 \(i\) 个数 \(x_i\) 可以取 \([a_i , b_i]\) 中任意值. ...

随机推荐

  1. Eclipse."Courier New"字体

    1.Win 7 下eclipse添加Courier New字体 - 彦帅的博客.html(https://blog.csdn.net/theblackbeard/article/details/525 ...

  2. Go语言入门篇-Golang之文本编码处理

    Golang之文本编码处理

  3. 搜索专题: HDU2102 A计划

    这不知道是公主被抓走了第几次了,反正我们的骑士救就对了(别说了,我都救我都救...);这次的迷宫有些特别,双层,带电梯(?),而且这个电梯还有生命危险,可能会撞死(一层是电梯,一层是墙),或者永远困在 ...

  4. 数学: HDU1098 Ignatius's puzzle

    Ignatius's puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  5. XADC

    XADC实验 1.XADC概述 Xilinx7系列内部自带一个双通道12位分辨率的高速(1MSPS 1M sample per second)采样速率的模拟混合信号处理模块,双通道的ADC支持单极和差 ...

  6. Windows系统下安装MySQL详细教程(命令安装法)

    1.安装包下载. 下载地址:https://dev.mysql.com/downloads/mysql/ 点击下载之后,可以选择注册Oracle账号,也可以跳过直接下载. 下载完成后,选择一个磁盘内放 ...

  7. Vue Google浏览器插件 Vue Devtools无法使用的解决办法

    1.插件安装不必多说  一定要用Vue.js 开发版    Vue.min.js 在控制面板就不会显示 2.本地调试 用的是file://协议 修改插件允许访问文件网址  打上对勾

  8. <mvc:argument-resolvers> 自定义注解处理参数

    直接看引自: http://blog.csdn.net/u013160932/article/details/50609092

  9. PAT Advanced 1019 General Palindromic Number (20 分)

    A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...

  10. Codeforces 940 区间DP单调队列优化

    A #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #def ...