感觉自己的解法很复杂,写了一大堆代码

但核心是从小到大枚举每个元素的值,然后把<=当前元素的值进行合并,由于这个过程是单调的,所以可以直接将新的元素合并到旧的并查集里去

维护并查集的同时维护每个集合的大小size,将size放在multiset 里然后判断每个块的大小是否相同,如果相同则更新答案

#include<bits/stdc++.h>
#include<set>
using namespace std;
#define maxn 200005
int a[maxn],n;
struct Node {int pos,v;}p[maxn]; set<int>pq;
set<int>::iterator itt;
multiset<int>s;
multiset<int>::iterator it; int cmp(Node a,Node b){return a.v<b.v;} int f[maxn],size[maxn],vis[maxn];
int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
void bing(int x,int y){
x=find(x);y=find(y);
if(x==y)return;
s.erase(s.find(size[x]));
s.erase(s.find(size[y]));
f[x]=y;size[y]+=size[x];
s.insert(size[y]);
} int main(){
cin>>n;
for(int i=;i<=n;i++)cin>>a[i];
for(int i=;i<=n;i++){
pq.insert(a[i]);
p[i].pos=i;p[i].v=a[i];
} sort(p+,p++n,cmp);
for(int i=;i<=n;i++)f[i]=i,size[i]=; int Max=-,ans,i=;
while(pq.size()){
itt=pq.begin();
int cur=*itt;pq.erase(itt);
while(i<=n && p[i].v<=cur){//把<=cur的所有值都合并在一起
int pos=p[i].pos;
s.insert();vis[pos]=;
if(pos> && a[pos-]<=a[pos] && vis[pos-])
bing(pos-,pos);
if(pos<n && a[pos+]<=a[pos] && vis[pos+])
bing(pos+,pos);
++i;
}
int fir,end;
it=s.begin();fir=*it;
it=s.end();it--;end=*it;
if(fir==end){
if((double)Max<(double)s.size())
Max=s.size(),ans=cur+;
}
}
cout<<ans<<endl;
}

并查集+multiset+双指针——cf982D的更多相关文章

  1. bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居【切比雪夫距离+并查集+multiset】

    参考:http://hzwer.com/4361.html 坐标开long long,inf开大点 先曼哈顿转切比雪夫(x+y,x-y),距离就变成了max(x',y'): 先按x排序,维护两个指针, ...

  2. BZOJ 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居:队列 + multiset + 并查集【曼哈顿距离变形】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1604 题意: 平面直角坐标系中,有n个点(n <= 100000,坐标范围10^9) ...

  3. SPOJ:Lost and survived(multiset+并查集)

    On September 22, 2004, Oceanic Flight 815 crashed on a mysterious island somewhere in the pacific. T ...

  4. CF # 296 C Glass Carving (并查集 或者 multiset)

    C. Glass Carving time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  5. 并查集+树链剖分+线段树 HDOJ 5458 Stability(稳定性)

    题目链接 题意: 有n个点m条边的无向图,有环还有重边,a到b的稳定性的定义是有多少条边,单独删去会使a和b不连通.有两种操作: 1. 删去a到b的一条边 2. 询问a到b的稳定性 思路: 首先删边考 ...

  6. HDU 5458 Stability (树链剖分+并查集+set)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5458 给你n个点,m条边,q个操作,操作1是删边,操作2是问u到v之间的割边有多少条. 这题要倒着做才 ...

  7. bzoj 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(set+并查集)

    Description 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发现她们已经结成了几个“群”.每只奶牛在吃草的 时候有一个独一无二的位置坐标Xi,Yi( ...

  8. hdu 5458 Stability(树链剖分+并查集)

    Stability Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others)Total ...

  9. 洛谷P3247 [HNOI2016]最小公倍数(分块 带撤销加权并查集)

    题意 题目链接 给出一张带权无向图,每次询问\((u, v)\)之间是否存在一条路径满足\(max(a) = A, max(b) = B\) Sol 这题居然是分块..想不到想不到..做这题的心路历程 ...

随机推荐

  1. OpenCV的安装与配置

    1.去官网下载opencv,在本教程中选用的时opencv3.4.1,其他版本的配置方法异曲同工.下载链接http://opencv.org/releases.html,选择sources版本 2.解 ...

  2. vue element-ui NavMenu错位问题

    原因:子菜单全部打开后太长超过100% 解决方法:设置只能点击打开当前的菜单

  3. spring中后台接收参数总结

    @RequestParam注解用于将指定的请求参数赋值给方法的参数 @RequestMapping(“/login”) public void login(@RequestParam(name=“lo ...

  4. Robot Framework:变量与运算

    设置变量                                                                                                ...

  5. sql 投影查询

    使用SELECT * FROM <表名> WHERE <条件>可以选出表中的若干条记录.我们注意到返回的二维表结构和原表是相同的,即结果集的所有列与原表的所有列都一一对应. 如 ...

  6. Android中如何做到自定义的广播只能有指定的app接收

    今天没吊事,又去面试了,具体哪家公司就不说了,因为我在之前的blog中注明了那些家公司的名字,结果人家给我私信说我泄露他们的题目,好吧,我错了...其实当我们已经在工作的时候,我们可以在空闲的时间去面 ...

  7. SpringBoot整合MongoDB,在多数据源下实现事务回滚。

    项目中用到了MongoDB,准备用来存储业务数据,前提是要实现事务,保证数据一致性,MongoDB从4.0开始支持事务,提供了面向复制集的多文档事务特性.能满足在多个操作,文档,集合,数据库之间的事务 ...

  8. C语言中的数据类型转换函数

    头文件#include<stdlib.h> 1. 函数名: atof 功 能: 把字符串转换成浮点数 用 法: double atof(const char *nptr); 2.函数名: ...

  9. date和string转换用joda包

    import org.joda.time.DateTime;import org.joda.time.format.DateTimeFormat;import org.joda.time.format ...

  10. Django+paramiko实现webshell

    说明 基于 python3.7 + django 2.2.3 实现的 django-webshell,支持颜色显示,支持 tab 命令补全,项目地址:https://github.com/leffss ...