贪心地从前往后扫,每到一个元素,就查看之前的元素中小于等于其的最大的元素是否存在,如果存在,就将它置为其父亲。如果一个结点已经是两个儿子的父亲了,就不能在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的更多相关文章

  1. zoj-3963 Heap Partition(贪心+二分+树状数组)

    题目链接: Heap Partition Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge A sequence ...

  2. zoj 3963 Heap Partition(并查集,贪心,二分)

    Heap Partition Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge A sequence S = { ...

  3. ZOJ 3963 Heap Partition set维护。给一个序列,将其划分成尽量少的序列,使每一个序列满足按照顺序构造二叉树,父母的值<=孩子的值。

    Heap Partition Time Limit: Seconds Memory Limit: KB Special Judge A sequence S = {s1, s2, ..., sn} i ...

  4. Heap Partition ZOJ - 3963(贪心)

    ZOJ - 3963 贪心做一下就好了 反正别用memset #include <iostream> #include <cstdio> #include <sstrea ...

  5. ZOJ 3963 Heap Partition(multiset + stl自带二分 + 贪心)题解

    题意:给你n个数字s1~sn,要你把它们组成一棵棵二叉树,对这棵二叉树来说,所有节点来自S,并且父节点si<=子节点sj,并且i<j,问你树最少几棵二叉数.树 思路:贪心.我们往multi ...

  6. ZOJ 3963:Heap Partition(贪心+set+并查集)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3963 题意:给出一个n个数的序列,可以在其中找一个子序列建堆,并且堆中的父 ...

  7. 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 = { ...

  8. 优化特性(Attribute)性能

    通过这篇文章,不仅可以了解到Attribute的工作原理,还可以了解到GetcustomeAttribute是的内部执行流程.最后,你会看到,使用缓存机制可以极大的优化反射Attribute的性能. ...

  9. 【python】内存调试

    全文拷贝自:http://blog.csdn.net/BaishanCloud/article/details/76422782 问题定位过程解读 gdb-python:搞清楚python程序在做什么 ...

随机推荐

  1. div 超出高度滚动条,超出宽度点点点

    超出高度滚动条 style="width:230px; height: 180px; overflow: auto;" 超出宽度点点点 style="width: 220 ...

  2. Edgware Feign hystrix-dashboard

    相关依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring ...

  3. AGC025简要题解

    AGC025简要题解 B RGB Coloring 一道简单题,枚举即可. C Interval Game 考虑可以进行的操作只有两种,即左拉和右拉,连续进行两次相同的操作是没有用的. 左拉时肯定会选 ...

  4. Django 1.10中文文档-第一个应用Part5-测试

    本教程上接教程Part4. 前面已经建立一个网页投票应用,现在将为它创建一些自动化测试. 自动化测试简介 什么是自动化测试 测试是检查你的代码是否正常运行的行为.测试也分为不同的级别.有些测试可能是用 ...

  5. peewee在flask中的配置

    # 原文:https://blog.csdn.net/mouday/article/details/85332510 Flask的钩子函数与peewee.InterfaceError: (0, '') ...

  6. 【UOJ#9】vfk的数据

    我感觉这题可以出给新高一玩2333 #include<bits/stdc++.h> #define N 10005 using namespace std; string s[N]; in ...

  7. 给自己立一个flag

    工作理念:做完!做对!做好!做优! 1.请教问题方面 遇到问题先自己想办法解决(限定时长为30分钟). 请教问题的时候,明确:“问题是什么,为什么错在那里,结果是什么” 2.博客 一周两篇左右:对工作 ...

  8. vue 的过滤器

    1.0版本: limitBy filteBy orderBy lowerBy upperBy json currency capitalize pluralize debounce 2.0版本: 要自 ...

  9. iframe弹出框js ie6下存在bug

    ie6的iframe在第一次加载的显示不出来,显示空白,但是很奇怪,刷新就可以正常显示了,一开始以为这只是IE6下iframe加载的bug,但是最后结果发现这是ie6下javascript延迟加载出现 ...

  10. 80端口被System进程占用问题

    更新: 有可能占用80端口的服务: 如果安装了IIS,关闭IIS: 如果未开启IIS功能,而安装了诸如Web Matrix的开发程序,则有可能被Web Development Agent Servic ...