Uva 1608 Non-boring sequences(分治)
来源:互联网 发布:python画一朵玫瑰花 编辑:程序博客网 时间:2024/05/17 15:06
题目地址:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4483
思路:
1.对于总序列,若p位置元素唯一,则只需判断序列[1,p-1]和序列[p+1,n]是不是无聊的(因为跨过p的序列一定不无聊,至少包含一唯一元素a[p])。
2.判断一元素在序列[l,r]中是否唯一:可以预处理出每个元素最近出现的位置,pre[i](a[i]最近的上一个位置)、nt[i](a[i]最近的下一个位置),若该元素在序列中唯一,则pre[i]<l&&nt[i]>r。
3.在序列中找到唯一元素,若只从一方向寻找(从左向右或从右向左)则最坏情况下唯一元素处在最右边或最左边,此时复杂度为n^2,若从两端向中间寻找,则最坏情况下元素位于中间,此时复杂度为nlogn 。
#include<map>#include<cstdio>#include<iostream>#include<algorithm>#define debugusing namespace std;const int maxn=200000+50;int a[maxn],n;map<int,int> cur;int pre[maxn],nt[maxn];int check(int l,int r){ if(l>=r) return true; int x=l,y=r; while(x<=y) { if(pre[x]<l&&nt[x]>r) { return check(l,x-1)&&check(x+1,r); } if(pre[y]<l&&nt[y]>r) { return check(l,y-1)&&check(y+1,r); } x++,y--; } return false;}int main(){#ifdef debu freopen("in.txt","r",stdin);#endif // debug int t; scanf("%d",&t); while(t--) { cur.clear(); scanf("%d",&n); for(int i=1; i<=n; i++) { scanf("%d",&a[i]); if(!cur.count(a[i])) pre[i]=0; else pre[i]=cur[a[i]]; cur[a[i]]=i; } cur.clear(); for(int i=n; i>=1; i--) { if(!cur.count(a[i])) nt[i]=n+1; else nt[i]=cur[a[i]]; cur[a[i]]=i; } if(check(1,n)) printf("non-boring\n"); else printf("boring\n"); } return 0;}
阅读全文
0 0
- Uva 1608 Non-boring sequences(分治)
- UVA 1608 Non-boring sequences 递归分治
- UVA 1608 Non-boring sequences (递归分治)
- UVA 1608:Non-boring sequences(递归+分治思想)
- UVA - 1608 Non-boring sequences 分治"中途相遇"
- UVa 1608 Non-boring sequences
- uva 1608 - Non-boring sequences
- UVA 1608 Non-boring sequences
- uva 1608 Non-boring sequences
- uva 1608 Non-boring sequences
- UVA 1608 Non-boring sequences
- UVA-1608 Non-boring sequences
- Uva 1608 Non-boring sequences
- 分治法,中途相遇法(Non-boring sequences,uva 1608)
- UVa 1608:Non-boring swquences(分治)
- Non-boring sequences UVA
- UVA 1608(p248)----Non-boring sequences
- UVa OJ 1608 - Non-boring sequences
- 关于魅族/小米等手机不支持弹窗解决方案
- HDU 1540——Tunnel Warfare
- 环信登陆报错300,连接不到服务器
- UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 12: invalid continuation byte
- POJ 3481 Double Queue
- Uva 1608 Non-boring sequences(分治)
- css3clip-path绘制正八边形
- 数论模板
- SQL Servler、Oralce、My sql等数据库的分页
- 运行yum groupinstall "GNOME Desktop"报错
- navicat测试环境和生产环境数据结构同步
- 大数据征信:你的朋友圈决定你能从银行借到多少钱
- java事务全解析(七)--像Spring一样使用Transactional注解(Annotation)
- 机器学习实战—决策树(python3+spyder)