CF817E Choosing The Commander 01tire 贪心

在这里插入图片描述
看到集合和异或,可以想到01tire(但是我没有想到)。
让后就可以对于每次插入和删除一个数,都在01tire树上操作即可。让后记录一下到当前位(当然是从高位到低位啦)有相同前缀的数的个数。例如样例建图出来大概是这样的:

在这里插入图片描述
可以看到从编号为2的点开始有分歧,这个时候当前p的位为1,l的位为0,显然我们需要走右边才可能能使其答案小于l,否则答案直接大于l了。让后到6的位置,这个时候当前p的位为1,l的位为1,显然我们可以右儿子加上值为1的数的数量,让后往左走,因为左边虽然当前前缀于p异或之后和l相等,但是可能也有小于l的数。也就是我们每次都要往与l当前位在p与当前值异或之后相等的位置走,这样就可以解决问题啦。不过要注意如果当前位l为0的时候,p与当前值异或之后一定要为0。

注:这个地方为了方便根的编号要设置为1,不能设置为0,相应的idx初始值也要为1。因为在solve函数里,搜索查询的数的时候,我们不能保证每个访问到的结点都已经申请了空间,当然也可以每个都申请,但是麻烦还废空间。所以当访问的空间不存在的时候,son [ p ] [ u ] 值为0,如果你设置的根编号为0,那么这个时候不就正好是根了嘛?所以这里根不能设置为0。

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=6000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int q;
int son[N][2],cnt[N],idx=1;void insert(int x)
{int p=1;for(int i=30;i>=0;i--){cnt[p]++;int u=x>>i&1;if(!son[p][u]) son[p][u]=++idx;p=son[p][u];}cnt[p]++;
}void delet(int x)
{int p=1;for(int i=30;i>=0;i--){cnt[p]--;int u=x>>i&1;if(!son[p][u]) son[p][u]=++idx;p=son[p][u];}cnt[p]--;
}int solve(int x,int t)
{int p=1,ans=0;for(int i=30;i>=0;i--){int u=x>>i&1;int s=t>>i&1;if(u<s) ans+=cnt[son[p][0]];if(u&&s) ans+=cnt[son[p][1]];if(!s) p=son[p][u];else p=son[p][u^1];}return ans;
}int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);scanf("%d",&q);while(q--){int op,p,l; scanf("%d%d",&op,&p);if(op==1) insert(p);else if(op==2) delet(p);else{scanf("%d",&l);printf("%d\n",solve(p,l));}}return 0;
}
/**/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不断进化的分支和需求管理

昨天有朋友在公众号私信问我几个关于代码分支管理的问题&#xff0c;这几个问题是我去年写的《在团队中使用GitLab中的Merge Request工作模式》一文结尾时抛出的几个问题&#xff1a;如果系统上线后有紧急Bug需要处理&#xff0c;这个流程应该怎样去调整&#xff1f;每个任务都…

CF56E Domino Principle 树状数组 + 简单dp

一个比较简单的题&#xff0c;但是我还是没做出来(哭。 很容易想到从后往前做&#xff0c;所以我们可以维护一个dp数组f&#xff0c;f(i)表示到第i个牌倒下能达到的最远距离。 f直接倒着跑&#xff0c;每次取[x,xh−1][x,xh-1][x,xh−1]的最大值即可&#xff0c;可以用线段树比…

基于Docker的Consul服务发现集群搭建

在去年的.NET Core微服务系列文章中&#xff0c;初步学习了一下Consul服务发现&#xff0c;总结了两篇文章。本次基于Docker部署的方式&#xff0c;以一个Demo示例来搭建一个Consul的示例集群&#xff0c;最后给出一个HA的架构示范&#xff0c;也会更加贴近于实际应用环境。一、…

Hills And Valleys CodeForces - 1467B 思维

给你一个数组&#xff0c;最多可以修改一个数&#xff0c;问最少的山峰和山谷数量之和。 小菜鸡做了一年。 一上来想猜个结论&#xff0c;让每个数等于其相邻的两个数&#xff0c;看了题解之后也证明的正确性&#xff0c;当时直接写就没后面这么多事了。 但是命运让我分情况讨…

[译]使用LazZiya.ExpressLocalization开发多语言支持的ASP.NET Core 2.x项目

介绍开发多语言支持的ASP.NET Core 2.x Web应用程序需要大量的基础架构设置&#xff0c;并且耗费时间和精力。这篇文章&#xff0c;我们将使用LazZiya.ExpressLocalization nuget包一步本地化支持。背景大多数网络应用程序都是基于网址的本地化。因此我们可以在网址中看到所选的…

2019 ICPC World Finals Problem B. Beautiful Bridges

2019 ICPC World Finals Problem B. Beautiful Bridges Solution 太菜了&#xff0c;sbsbsb题调了一个下午。 首先有一个显然的O(n3)O(n^3)O(n3)的dpdpdp&#xff0c;令fif_ifi​表示最后一个桥柱在iii的最小代价&#xff0c;枚举上一个桥柱jjj&#xff0c;因为地面超过桥拱…

ac 梦幻布丁 启发式合并

题意&#xff1a;中文题。 对于每种颜色&#xff0c;我们都可以看成一个集合。让后把一种颜色变成另一种颜色就转换成了把两个集合的合并问题。显然我们有一个复杂度为O(NlogN)O(NlogN)O(NlogN)的启发式合并能完美的解决这个问题。 解决合并问题了&#xff0c;现在需要解决如何…

VS Code 1.35 发布!全新 logo 来临,远程开发进入稳定版

近期&#xff08; 北京时间 2019 年 6 月 6 日 &#xff09;&#xff0c;微软发布了 Visual Studio Code 1.35 版本&#xff0c;带来了众多更新。全新的 logo全新的图标来啦~ 这一次的图标更新历时两个月&#xff0c;VS Code 团队倾听了用户们的反馈。大家对新图标还喜欢吗&…

P2617 Dynamic Rankings 整体二分

树套树板子题&#xff0c;但是整体二分不管是时间复杂度还是空间复杂度都表现更优秀&#xff0c;所以用整体二分来水一波。 普通的整体二分是没有修改操作的。然鹅我们处理修改操作也比较容易&#xff0c;直接减上这个数&#xff0c;让后加上修改之后的数即可。这样按照时间戳来…

基于Domain Driven Design&Clean Architecture原则分层的新启动模板

本文的内容将在0.18.0中发布. Abp中文网将同步更新框架.敬请期待...MVC应用程序启动模板介绍MVC应用程序启动模板是基于领域驱动设计(DDD)分层(或根据偏好分层)的应用程序结构.在这篇文档中详细介绍了解决方案结构和项目参阅ASP.NET Core MVC 模板入门创建此模板的新解决方案并…

.Net Core 微服务容器系列基础目录篇

1.开场白HI&#xff0c;各位老铁&#xff0c;大家端午好&#xff0c;之前写了些关于.net core商城系列的文章&#xff0c;有点乱&#xff0c;今天心血来潮想着整理一下&#xff08;今天只是先把目录列出来&#xff0c;后面的每篇文章这两天会进行重新修改的&#xff0c;目前先将…

感谢诸君的陪伴,见证微信 SDK 的成长,内含黑科技福利

Senparc.Weixin SDK5000Stars5000 Star5005005000 Stars今天 SDK 已经超过 5000 Stars在此感谢大家的每一份支持和一直以来的关注是你们的信任和陪伴给了我们前行的力量 在未来的日子里也希望大家能够继续支持我们我们将以优秀的产品和服务来回馈你们的支持&#xff01;愿我们携…

我,宇宙最强编辑器,支持远程开发

Visual Studio Code 五月份更新之 1.35 版本已发布。此次更新的亮点包括更新 Visual Studio Code 图标 - 新版本更新了 logo。改进“转到定义&#xff08;Go to Definition&#xff09;”行为 - 通过多个定义的显示&#xff0c;更快速进行导航&#xff08;Navigation&#xff0…

.NET Core Run On Docker By Kubernetes 系列文章汇总

前言介绍.NET Core是微软新一代主力编程平台&#xff0c;开源、免费、跨平台、轻量级、高性能&#xff0c;支持Linux、Docker、k8s等环境&#xff0c;适合开发微服务、云原生、大型互联网应用、全开源解决方案。Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们…

HDU - 1811 Rank of Tetris 并查集 + 拓扑序 +me

link 题意&#xff1a; 首先看到排名自然想到拓扑序&#xff0c;但是存在等于的情况&#xff0c;这就启发我们把等于的情况缩成一个点&#xff0c;让后在缩点后的图中进行拓扑即可。 对于不合法的情况当然是拓扑序没有遍历到应该遍历的点&#xff0c;所以只需要检查遍历了几个…

.NET Core 中使用 Humanizer 显示友好时间格式

今天在将一个 .net framework 项目迁移至 .net core 的过程中&#xff0c;在迁移到显示友好时间格式&#xff08;比如“1分钟前”&#xff0c;“1小时前”&#xff09;的代码时&#xff0c;找了找看有没有对应的开源库&#xff0c;结果找到了 Humanizer &#xff0c;顺手体验了…

Codeforces Round #698 (Div. 2)

B题 题意&#xff1a;定义一个牛逼的数是这个数十进制中至少包含一个数d。 现在给定d和若干询问&#xff0c;每个询问一个x&#xff0c;问x能否分解成若干d构成的牛逼的数之和。 看起来挺难搞的&#xff0c;不能快速的判断是否是牛逼的数而且也不能很好的挑选合适的数组成x。那…

Visual Studio 2019 16.1 使用 .NET Core 3.0

一.前言早在很久之前微软便公布 .NET Core 3.0 将支持开发Winform应用程序等等新特性&#xff0c;现如今 .NET Core 3.0 预览版已经出来第五个预览版了&#xff0c;从 .NET Core 2.2 到 3.0 将是一个大的跨越&#xff0c;从发布的预览版本个数来看&#xff0c;将会增加很多的功…

Insider Dev Tour 2019 全球巡演 苏州站

Insider Dev Tour微软&#xff0c;全球&#xff0c;巡演&#xff0c;内幕大会介绍Insider Dev Tour 是 Microsoft Build 技术大会的全球巡演活动&#xff0c;是微软面向广大开发者、技术爱好者&#xff0c;介绍其未来技术发展方向的盛会。在 Microsoft Build之后&#xff0c;会…

.NET Core 性能分析: xUnit.Performance 简介

xunit-performance 是xUnit的一个扩展&#xff0c; 使用它可以对.NET Core项目进行性能测试。官网&#xff1a;https://github.com/Microsoft/xunit-performancexUnit大家可能都用过&#xff0c;它是用来做单元测试的&#xff0c;它可以很快给开发人员功能是否OK的反馈。和xUni…