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;
}

转载于:https://www.cnblogs.com/ZH-comld/p/11093089.html

「LibreOJ β Round #2」计算几何瞎暴力相关推荐

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

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

  2. 「LibreOJ Round #11」Misaka Network 与求和(杜教筛 + Min_25)

    #572. 「LibreOJ Round #11」Misaka Network 与求和 推式子 ∑i=1n∑j=1nf(gcd(i,j))k∑d=1nf(d)k∑i=1nd∑j=1nd[gcd(i,j ...

  3. #530. 「LibreOJ β Round #5」最小倍数 二分 + 数论

    传送门 文章目录 题意: 思路: 题意: 思路: 本来想刷数位dpdpdp,无意间碰到了这个题来水水. 我们知道n!n!n!中质因子ppp的个数为∑i=1npi\sum_{i=1} \frac{n}{ ...

  4. [LOJ #521]「LibreOJ β Round #3」绯色 IOI(抵达)(结论)

    #521. 「LibreOJ β Round #3」绯色 IOI(抵达) description solution 因为点的庇护所不能为自身,题目背景在树上,有结论一定是两个相邻点互为庇护所 所以树一 ...

  5. LibreOJ545. 「LibreOJ β Round #7」小埋与游乐场【网络流】

    545. 「LibreOJ β Round #7」小埋与游乐场 [题目描述] 传送门 [题解] 网络流,我们发现lowbit之后相同的点连出的边是相同的,所以可以缩点. [代码如下] #include ...

  6. loj #535. 「LibreOJ Round #6」花火 树状数组求逆序对+主席树二维数点+整体二分...

    $ \color{#0066ff}{ 题目描述 }$ 「Hanabi, hanabi--」 一听说祭典上没有烟火,Karen 一脸沮丧. 「有的哦-- 虽然比不上大型烟花就是了.」 还好 Shinob ...

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

    题目描述 给定一个长度为 n 的序列 a,一共有 m 个操作. 每次操作的内容为:给定 x,y,序列中所有 x 会变成 y. 同时我们有一份代码: int ans = 2147483647; for ...

  8. loj534. 「LibreOJ Round #6」花团

    题意 一个物品集合\(S\)初始为空,按时间递增顺序依次给出\(q\)次操作,操作如下: 1 v w e 表示在\(S\)中加入一个体积为\(v\)价值为\(w\)的物品,第\(e\)次操作结束之后移 ...

  9. 「LibreOJ β Round #4」子集

    https://loj.ac/problem/526 题目描述 qmqmqm有一个长为 n 的数列 a1,a2,--,an,你需要选择集合{1,2,--,n}的一个子集,使得这个子集中任意两个元素 i ...

最新文章

  1. 空空排错日志:OCS错误日志14501等解决办法
  2. JAVA语法——汉诺塔问题
  3. 基于Ubuntu Hadoop的群集搭建Hive
  4. Angular compiler报的一个错误消息:Component XX is not part of any NgModule
  5. post 表单中常见的四种表单请求方式
  6. 测者的测试技术手册:揭开java method的一个秘密--巨型函数
  7. kernel shell bash简介
  8. 高等数学下-赵立军-北京大学出版社-题解-练习9.1
  9. C#取真实IP地址及分析
  10. 真正认识 realloc 的工作方式(转载)
  11. 各种格式PPC手机软件的安装方法
  12. java经纬度转平面坐标_经纬度到平面坐标的相互转换
  13. 关于新浪微博开放平台第三方登录接口问题
  14. BOTTON控件介绍及程序基本框架与皮肤自定义
  15. win7电脑无线网变身WiFi热点,让手机、笔记本共享上网
  16. 《魔鬼搭讪学》《魔鬼约会学》读后感
  17. py实现高斯列选主元消元法
  18. 工具分享:图片水印工具(WaterMarker)
  19. 【树莓派不吃灰】基础篇⑮ SSH远程访问安全,涉及/etc/hosts.allow白名单 和 /etc/hosts.deny黑名单、ufw防火墙、密钥登录
  20. BZOJ_P1123 [POI2008]BLO(无向图割点)

热门文章

  1. Flink SQL 功能解密系列 —— 解决热点问题的大杀器MiniBatch
  2. 如何实现页面的响应式布局?
  3. openstack-swift云存储部署(一)
  4. 工作那些事儿(12)- 缓存
  5. 打开密码保护的office文件提示文件损坏的解决办法
  6. Exchange 2007更改用户收发邮件大小限制
  7. IBM Rev2.6公包主板的问题
  8. 阿里热更新android,阿里最新热更新使用采坑记录
  9. C++中getline()函数
  10. fsolve函数求解非线性方程