uva 1608(分治 + 中途相遇法)
来源:互联网 发布:midaspro3离线编辑软件 编辑:程序博客网 时间:2024/05/20 00:51
参考紫书,利用stl map,找到数组中相同元素的关系。每找到一个所求范围唯一元素,对元素所在的范围进行分治。
注意:不能用prev和next作数组名会使juge无法判断
#include<cstdio>#include<map>using namespace std;const int maxn = 200000 + 5;int num[maxn], pre[maxn], nex[maxn];map<int, int> cur;inline bool arry_unique(int p, int L, int R){ //printf("%d %d,%d\n", p, pre[p],nex[p]); return (pre[p] < L && nex[p] > R);}bool check(int L, int R){ if(L >= R) return true; for(int d = 0; L + d <= R - d; d++) { //printf("%d\n", d); if(arry_unique(L + d, L, R)) return check(L, L + d - 1) && check(L + d + 1, R); if(L + d == R - d) break; if(arry_unique(R - d, L, R)) return check(L, R - d -1) && check(R - d + 1, R); } return false;}int main(){ int T; scanf("%d", &T); while(T--) { cur.clear(); int n; scanf("%d", &n); for(int i = 0; i < n; i++) scanf("%d", &num[i]); for(int i = 0; i < n; i++) { if(!cur.count(num[i])) pre[i] = -1; else { pre[i] = cur[num[i]]; } cur[num[i]] = i; } cur.clear(); for(int i = n - 1; i >= 0; i--) { if(!cur.count(num[i])) nex[i] = n; else{ nex[i] = cur[num[i]]; } cur[num[i]] = i; } int L = 0, R = n - 1; //continue; if(check(L, R)) printf("non-boring\n"); else printf("boring\n"); } return 0;}
阅读全文
0 0
- uva 1608(分治 + 中途相遇法)
- UVA - 1608 Non-boring sequences 分治"中途相遇"
- 分治法,中途相遇法(Non-boring sequences,uva 1608)
- uva 1326 Jurassic Remains(中途相遇法)
- Uva 1326 - Jurassic Remains 中途相遇法
- UVa 10125 - Sumsets (中途相遇法 hash)
- UVA - 1326 (中途相遇法 + 统计奇偶)
- UVA 1326 Jurassic Remains 中途相遇法
- UVA 10125 Sumsets(中途相遇法)
- UVa 10125 Sumsets (中途相遇法)
- uva 1152 二分查找+中途相遇法
- uva10125 (中途相遇法)
- 中途相遇法
- Uva 10125 Sumsets(中途相遇法,高效枚举)
- UVa 10125 - Sumsets 解题报告(中途相遇法)
- uva 1326 Jurassic Remains(中途相遇法+位运算)
- poj3977 Subset 中途相遇法...
- UvaLive 2965 中途相遇法
- 单片机中断详讲
- hdu 5532 Almost Sorted Array(LIS)
- HDU-1079 Calendar Game(找规律,博弈)
- Activity
- Struts2创建项目1
- uva 1608(分治 + 中途相遇法)
- E
- 机器学习之Grid World的SARSA算法解析
- 初次使用Base64转储文件小结
- 集训第十七天(2017/8/16):继续研究树状数组
- PAT 1013 数素数
- HDU4939:Stupid Tower Defense(DP)
- Struts2复习小结
- myeclipse快捷键