Codeforces 706D Trie树/multiset
来源:互联网 发布:香港手机网络制式 编辑:程序博客网 时间:2024/05/17 06:27
题目:http://codeforces.com/problemset/problem/706/D
题意:
+表示吧这个数加到集合中,-表示把这个数从集合中减去一次,?表示集合里面的一个y使的x^y最大
分析:
要使异或最大,那么尽量从高位使两个数不同即可。
Trie树。
#include<bits/stdc++.h>using namespace std;const int N=1e7+9;int a[N][2],cal[N];int tot;void add(int x,int y) //插入或删除一个元素{ int cur=0; for(int i=31;i>=0;i--){ int t=(x>>i)&1; if(!a[cur][t])a[cur][t]=tot++; cur=a[cur][t]; cal[cur]+=y; }}int query(int x){ int cur=0,ans=0; for(int i=31;i>=0;i--){ int t=(x>>i)&1; if(cal[a[cur][t^1]]){ ans+=(1<<i); cur=a[cur][t^1]; } else cur=a[cur][t]; } return ans;}int main(){ int n,x; char op; tot=1; add(0,1); scanf("%d",&n); for(int i=0;i<n;i++){ cin>>op>>x; if(op=='+'){ add(x,1); } else if(op=='-'){ add(x,-1); } else{ printf("%d\n",query(x)); } } return 0;}/*Input10+ 8+ 9+ 11+ 6+ 1? 3- 8? 3? 8? 11Output11101413*/
或者可以直接用multiset模拟:
#include<bits/stdc++.h>using namespace std;const int N=1e7+9;int main(){ int n,x; char op; multiset<int>s; s.insert(0); scanf("%d",&n); for(int i=0;i<n;i++){ cin>>op>>x; if(op=='+'){ s.insert(x); } else if(op=='-'){ s.erase(s.find(x)); } else{ int ans=0; for(int i=31;i>=0;i--){ ans|=(~x&(1<<i)); multiset<int>::iterator it=s.lower_bound(ans); if(it==s.end()||*it>=ans+(1<<i)){ // cout<<ans<<endl; ans^=1<<i; } } printf("%d\n",x^ans); } } return 0;}
0 0
- Codeforces 706D Trie树/multiset
- Codeforces 706D-Vasiliy's Multiset(Trie树)
- CodeForces 367D Vasiliy's Multiset Trie树
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (01trie树)
- HDU-4825 Xor Sum &&Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (Trie树)
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset 二进制树、Trie
- 【 Codeforces Round #367 (Div. 2) D】 Vasiliy's Multiset (Trie 按数位建字典树)
- codeforces 706D trie树 或 muliset
- CodeForces 706D Vasiliy's Multiset 字典树
- 【字典树】【贪心】Codeforces 706D Vasiliy's Multiset
- CodeForces 706D Vasiliy's Multiset(0/1树)
- Codeforces 706D Vasiliy's Multiset【贪心+字典树】
- Codeforces-706D Vasiliy's Multiset
- CodeForces 706D Vasiliy's Multiset
- Codeforces Round #367 (Div. 2) D Vasiliy's Multiset(01Trie)
- Codeforces 706D Vasiliy's Multiset(异或字典树)
- codeforces 706D. Vasiliy's Multiset 带删除操作的字典树(真模版)
- Codeforces 706D Vasiliy's Multiset(异或字典树)
- iOS 开发学习 正则表达式
- maven简单应用总结
- struts2接收参数
- SAP FI配置关键点
- Servlet中控制页面跳转方式
- Codeforces 706D Trie树/multiset
- 整理ES6中常用的几个object API
- eclipse 里面启动tomcat 提示问题Removing obsolete files from server...
- Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.
- iOS开发之AVPlayer的精彩使用--->网易新闻视频播放界面的另类实现
- POJ - 1835 - 模拟
- DOS
- Oracle sqlplus连接很慢
- 十天学会:颜色之RGBA