用set维护每个联通块里的最值,multiset维护所有块里的最值,并查集维护连通性,然后随便搞搞就行了,合并时候采用启发式合并。复杂度O(nlognlogn),大概勉强过的程度,反正跑的很慢就是了。

  代码

 #include<cstdio>
#include<set>
#define mp make_pair
#define fi first
#define sc second
using namespace std;
const int N = ;
int f[N],add[N],n,i,a[N],q,u,v,cnt;
set<pair<int,int> > s[N];
set<pair<int,int> >::iterator it;
multiset<int> S;
multiset<int>::iterator It;
char str[];
int gf(int x)
{
int p=x,t;
while (p!=f[p]) p=f[p];
while (x!=p)
{
t=f[x];f[x]=p;x=t;
}
return p;
}
int main()
{
scanf("%d",&n);
for (i=;i<=n;i++)
{
scanf("%d",&a[i]);
f[i]=i;
s[i].insert(mp(a[i],i));
S.insert(a[i]);
}
scanf("%d",&q);
for (i=;i<=q;i++)
{
scanf("%s",str);
if (str[]=='F')
{
if (str[]=='')
{
scanf("%d",&u);
printf("%d\n",a[u]+add[gf(u)]+cnt);
}
else
if (str[]=='')
{
scanf("%d",&u);
printf("%d\n",(*(--s[gf(u)].end())).fi+add[gf(u)]+cnt);
}
else
printf("%d\n",*(--S.end())+cnt);
} if (str[]=='A')
{
if (str[]=='')
{
scanf("%d%d",&u,&v);
S.erase(S.find((*(--s[gf(u)].end())).fi+add[gf(u)]));
s[gf(u)].erase(mp(a[u],u));
a[u]+=v;
s[gf(u)].insert(mp(a[u],u));
S.insert((*(--s[gf(u)].end())).fi+add[gf(u)]);
}
else
if (str[]=='')
{
scanf("%d%d",&u,&v);
S.erase(S.find((*(--s[gf(u)].end())).fi+add[gf(u)]));
add[gf(u)]+=v;
S.insert((*(--s[gf(u)].end())).fi+add[gf(u)]);
}
else
{
scanf("%d",&u);
cnt+=u;
}
} if (str[]=='U')
{
scanf("%d%d",&u,&v);
u=gf(u);v=gf(v);
if (u!=v)
{
if (s[u].size()>s[v].size()) u^=v^=u^=v;
S.erase(S.find((*(--s[gf(u)].end())).fi+add[gf(u)]));
S.erase(S.find((*(--s[gf(v)].end())).fi+add[gf(v)]));
f[u]=v;
for (it=s[u].begin();it!=s[u].end();it++)
{
a[(*it).sc]=(*it).fi+add[u]-add[v];
s[v].insert(mp(a[(*it).sc],(*it).sc));
}
S.insert((*(--s[gf(v)].end())).fi+add[gf(v)]);
s[u].clear();
}
}
}
}

bzoj2333 [SCOI2011]棘手的操作的更多相关文章

  1. 真--可并堆模板--BZOJ2333: [SCOI2011]棘手的操作

    n<=300000个点,开始是独立的,m<=300000个操作: 方法一:单点修改.查询,区间修改.查询?等等等等这里修改是块修改不是连续的啊,那就让他连续呗!具体方法:离线后,每次连接两 ...

  2. BZOJ2333 [SCOI2011]棘手的操作 堆 左偏树 可并堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2333 题意概括 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i ...

  3. [bzoj2333] [SCOI2011]棘手的操作 (可并堆)

    //以后为了凑字数还是把题面搬上来吧2333 发布时间果然各种应景... Time Limit: 10 Sec  Memory Limit: 128 MB Description 有N个节点,标号从1 ...

  4. bzoj千题计划217:bzoj2333: [SCOI2011]棘手的操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=2333 读入所有数据,先模拟一遍所有的合并操作 我们不关心联通块长什么样,只关心联通块内有谁 所以可以 ...

  5. 2019.01.17 bzoj2333: [SCOI2011]棘手的操作(启发式合并)

    传送门 启发式合并菜题. 题意:支持与连通块有关的几种操作. 要求支持连边,单点修改,连通块修改,全局修改和单点查值,连通块查最大值和全局最大值. 我们对每个连通块和答案用可删堆维护最大值,然后用启发 ...

  6. BZOJ2333:[SCOI2011]棘手的操作(Splay)

    Description 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 x v: ...

  7. BZOJ2333 [SCOI2011]棘手的操作 【离线 + 线段树】

    题目 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 x v: 将第x个节点的权 ...

  8. bzoj2333 [SCOI2011]棘手的操作(洛谷3273)

    题目描述 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作:U x y: 加一条边,连接第x个节点和第y个节点A1 x v: 将第x个节点的权 ...

  9. (右偏树)Bzoj2333: [SCOI2011]棘手的操作

    题面 戳我 Sol 右偏树滑稽+并查集 再在全局开一个可删除的堆(priority_queue) 注意细节 # include <bits/stdc++.h> # define RG re ...

随机推荐

  1. Bootstrap 表单和图片 (内联表单,表单合组,水平排列,复选框和单选框,下拉列表,校验状态,添加额外的图标,控制尺寸,图片)

    一.表单 基本格式 注:只有正确设置了输入框的 type 类型,才能被赋予正确的样式. 支持的输入框控件 包括:text.password.datetime.datetime-local.date.m ...

  2. Bluetooth ATT介绍

    目录 1 介绍 2 详细内容 2.1 Attribute Type 2.2 Attribute Handle 2.3 Attribute Handle Grouping 2.4 Attribute V ...

  3. USBDongle及Btool使用说明

    BLE 模块可使用开发套件中的 USB Dongle 模拟手机APP配合Btool.exe 进行蓝牙通讯测试. >连接 BLE 模块 USB Dongle 和模块的连接是通讯的基础,扫描连接的操 ...

  4. jquery mobile 方法收集.

    1.在列表项和按钮上禁用文本截断     如果你的列表项或者按钮上是一个很长的文本,它将会被jQuery Mobile自动截断,要禁用这个截断设置,需要在CSS选择器上添加属性"white- ...

  5. NDK编译FreeImage

    参考了 以下2篇文章 并作了一小点修改 http://recursify.com/blog/2013/05/25/building-freeimage-for-android http://blog. ...

  6. 高效的两段式循环缓冲区──BipBuffer

    Simon Cooke,美国 (原作者) 北京理工大学 20981 陈罡(翻译) 写在前面的话: 循环缓冲区是一个非常常用的数据存储结构,已经被广泛地用于连续.流数据的存储和通信应用中.对于循环缓冲区 ...

  7. (lleetcode)Merge Sorted Array

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

  8. 针对应用程序池“xxxxxx”的模板永久性缓存初始化失败,解决方法

    日志名称:          Application 来源:            Active Server Pages 日期:            2014-11-22 9:09:39 事件 I ...

  9. NSUserDefaults的小封装

    //保存 -(void)saveToUserDefaults:(NSString*)tosaveedString withKey:(NSString *)tosaveedKey {  NSUserDe ...

  10. SQL判断字符串里不包含字母

    Oracle: 方法一:通过To_Number 函数异常来判断,因为这个函数在转换不成功的时候是报错,所以只能用存储过程包装起来. CREATE OR REPLACE FUNCTION Is_Numb ...