【贪心】【set】zoj3963 Heap Partition
贪心地从前往后扫,每到一个元素,就查看之前的元素中小于等于其的最大的元素是否存在,如果存在,就将它置为其父亲。如果一个结点已经是两个儿子的父亲了,就不能在set中存在了,就将他删除。如果然后将当前元素插入。
如果不存在,就直接将当前元素插入。
哦,用pb_ds好像有点蠢,貌似set也能查询前驱……QAQ
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstring>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
#define INF 2147483647
vector<int>G[100010],prin[100010];
int T,n,a[100010];
typedef pair<int,int> Point;
tree<Point,null_type,less<Point>,rb_tree_tag,tree_order_statistics_node_update>S;
typedef tree<Point,null_type,less<Point>,rb_tree_tag,tree_order_statistics_node_update>::iterator ITER;
bool vis[100010];
int sum;
void dfs(int U){
vis[U]=1;
prin[sum].push_back(U);
for(int i=0;i<G[U].size();++i){
dfs(G[U][i]);
}
}
int main(){
// freopen("f.in","r",stdin);
scanf("%d",&T);
for(;T;--T){
sum=0;
memset(vis,0,sizeof(vis));
S.clear();
scanf("%d",&n);
for(int i=1;i<=n;++i){
G[i].clear();
}
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
ITER it=S.lower_bound(Point(a[i],i));
if(it!=S.begin()){
--it;
G[(*it).second].push_back(i);
if(G[(*it).second].size()==2){
S.erase(it);
}
S.insert(Point(a[i],i));
}
else{
S.insert(Point(a[i],i));
}
}
for(int i=1;i<=n;++i){
if(!vis[i]){
++sum;
dfs(i);
}
}
printf("%d\n",sum);
for(int i=1;i<=sum;++i){
sort(prin[i].begin(),prin[i].end());
printf("%d ",prin[i].size());
for(int j=0;j<prin[i].size()-1;++j){
printf("%d ",prin[i][j]);
}
printf("%d\n",prin[i][prin[i].size()-1]);
}
for(int i=1;i<=sum;++i){
prin[i].clear();
}
}
return 0;
}
【贪心】【set】zoj3963 Heap Partition的更多相关文章
- zoj-3963 Heap Partition(贪心+二分+树状数组)
题目链接: Heap Partition Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge A sequence ...
- zoj 3963 Heap Partition(并查集,贪心,二分)
Heap Partition Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge A sequence S = { ...
- ZOJ 3963 Heap Partition set维护。给一个序列,将其划分成尽量少的序列,使每一个序列满足按照顺序构造二叉树,父母的值<=孩子的值。
Heap Partition Time Limit: Seconds Memory Limit: KB Special Judge A sequence S = {s1, s2, ..., sn} i ...
- Heap Partition ZOJ - 3963(贪心)
ZOJ - 3963 贪心做一下就好了 反正别用memset #include <iostream> #include <cstdio> #include <sstrea ...
- ZOJ 3963 Heap Partition(multiset + stl自带二分 + 贪心)题解
题意:给你n个数字s1~sn,要你把它们组成一棵棵二叉树,对这棵二叉树来说,所有节点来自S,并且父节点si<=子节点sj,并且i<j,问你树最少几棵二叉数.树 思路:贪心.我们往multi ...
- ZOJ 3963:Heap Partition(贪心+set+并查集)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3963 题意:给出一个n个数的序列,可以在其中找一个子序列建堆,并且堆中的父 ...
- The 14th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple - F 贪心+二分
Heap Partition Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge A sequence S = { ...
- 优化特性(Attribute)性能
通过这篇文章,不仅可以了解到Attribute的工作原理,还可以了解到GetcustomeAttribute是的内部执行流程.最后,你会看到,使用缓存机制可以极大的优化反射Attribute的性能. ...
- 【python】内存调试
全文拷贝自:http://blog.csdn.net/BaishanCloud/article/details/76422782 问题定位过程解读 gdb-python:搞清楚python程序在做什么 ...
随机推荐
- eCharts_数据过多底部滚动条实现数据展示
效果图: 实现原理: 1.添加dataZoom属性 效果实现代码: <!DOCTYPE html> <html> <head> <meta charset=& ...
- HTML5API(2)
四.文件API 1.概述 H5允许JS有条件的读取客户端文件 允许读取的文件:1.待上传的文件2.拖进浏览器的文件 多文件上传设置属性multiple 过滤上传文件类型 设置accept属性 acce ...
- Linux系统编程——进程间通信(一)
基本操作命令: ps -ajx/-aux/-ef 查看进程间状态/的相互关系 top 动态显示系统中的进程 nice 按照指定的优先级运行 /renice 改变正在运行的进程的优先级 kill -9杀 ...
- PHP在变量前面加&是什么意思
比如: <? php $a = 'c' ; $b = & $a ; //表示$b 和 $a 引用了同一个变量 $a = 'abc' ; //这里重置了$a echo $b ; //将输出 ...
- 分割线用CSS样式做出来的效果
一:单个标签实现分隔线:. ; ; line-height: 1px; border-left: 200px solid #ddd; border-right: 200px solid #ddd; t ...
- MYSQL表中向SET类型的字段插入值时值之间不能有空格
MYSQL 中有一种数据类型是 SET,首先我们查看一个包含 SET 类型字段的表结构: 接下来我们向表中插入数据: 按照上面的语句插入数据发现报错了,于是去掉了插入值之间的空格,然后插入成功:
- 欢迎访问新博客aiyoupass.com
新博客基本搭建好了,欢迎访问.aiyoupass.com
- hadoop3.1 hdfs的api使用
1.开发环境配置 1.1eclipse导入插件 1.2.配置hadoop的引用路径 window--->preference --->
- IEDA自动清除无用的import
Before After Step 快捷键展示格式化对话框:ctrl + shift + alt + l 格式化快捷键:ctrl + alt + l <wiz_tmp_tag id= ...
- Idea创建模板
新建文件模板 /** * * @author zenglw * @date ${DATE} */ Mapper #if (${PACKAGE_NAME} && ${PACKAGE_NA ...