博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 2761: [JLOI2011]不重复数字 (map||Treap)
阅读量:5036 次
发布时间:2019-06-12

本文共 1730 字,大约阅读时间需要 5 分钟。

链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2761

思路: map标记

实现代码:

#include
using namespace std;map
mp;int main(){ int t,n,x; scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i = 1;i <= n;i ++){ scanf("%d",&x); mp[x]++; if(mp[x]==1) printf("%d ",x); } printf("\n"); mp.clear(); }}

 这道题也可以用平衡树写,虽然也很水/

Treap写法:

实现代码:

#include
using namespace std;const int M = 1e5 +10;struct node{ int l,r,siz,cnt,wt,val;}t[M];int cnt,flag;void lt(int &k){ int tmp = t[k].r; t[k].r = t[tmp].l; t[tmp].l = k; t[tmp].siz = t[k].siz; t[k].siz = t[t[k].l].siz + t[t[k].r].siz + t[k].cnt; k = tmp;}void rt(int &k){ int tmp = t[k].l; t[k].l = t[tmp].r; t[tmp].r = k; t[tmp].siz = t[k].siz; t[k].siz = t[t[k].l].siz + t[t[k].r].siz + t[k].cnt; k = tmp;}void Insert(int &k,int num){ if(!k){ k = ++cnt; t[k].wt = rand(); t[k].val = num; t[k].cnt = t[k].siz = 1; return ; } ++t[k].siz; if(num == t[k].val){ ++t[k].cnt; flag = 1; return ; } if(num < t[k].val){ Insert(t[k].l,num); if(t[t[k].l].wt < t[k].wt) rt(k); } else{ Insert(t[k].r,num); if(t[t[k].r].wt < t[k].wt) lt(k); }}int main(){ int T,n,x,root; scanf("%d",&T); while(T--){ memset(t,0,sizeof(t)); root = cnt = 0; scanf("%d",&n); for(int i = 1;i <= n;i ++){ cin>>x; flag = 0; Insert(root,x); if(!flag) printf("%d ",x); } printf("\n"); } return 0;}

 

转载于:https://www.cnblogs.com/kls123/p/10574246.html

你可能感兴趣的文章
hdu1049
查看>>
H5项目常见问题及注意事项
查看>>
索尼(SONY) SVE1512S7C 把WIN8降成WIN7图文教程
查看>>
时间模块 && time datetime
查看>>
jquery自动生成二维码
查看>>
spring回滚数据
查看>>
新浪分享API应用的开发
查看>>
美国专利
查看>>
【JavaScript】Write和Writeln的区别
查看>>
百度编辑器图片在线流量返回url改动
查看>>
我对你的期望有点过了
查看>>
微信小程序wx:key以及wx:key=" *this"详解:
查看>>
下拉框比较符
查看>>
2.2.5 因子的使用
查看>>
css选择器
查看>>
photoplus
查看>>
Python 拓展之推导式
查看>>
[Leetcode] DP-- 474. Ones and Zeroes
查看>>
80X86寄存器详解<转载>
查看>>
c# aop讲解
查看>>