用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. Delphi 缩放图像代码 - 支持PNG透明通道

    要求Delphi2007或者更高版本, 系统要求至少XP-SP2以上 实际上是利用了Windows的windowscodecs.dll这个文件的功能 在VCL里已经封装为TWICImage类 proc ...

  2. struts json登录

    1.struts.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts P ...

  3. node.js使用util实现简单继承

    /** * Created by zzq on 2015/5/15. */ var util = require('util'); var Person = function(){ var myD=' ...

  4. 插入图片<img>

    格式: <img src="图片地址" alt="下载失败时的替换文本" title="提示文本"> src:图像的位置 alt ...

  5. sql server2008企业版和标准版

    SQL Server 的企业版和标准版的License价格差5倍之多,在企业应用中,DBA 经常会被这个问题问住,本帖将日常工作实践中遇到到版本问题给出第一手资料,陆续补充…… SQL 2008 镜像 ...

  6. An Implementation of Double-Array Trie

    Contents What is Trie? What Does It Take to Implement a Trie? Tripple-Array Trie Double-Array Trie S ...

  7. undefined和void

    1.undefined undefined在js中并不是关键字/保留字,因此在IE5.5~8中可以对undefined赋值,但是在IE9以上,对其赋值是无效的 <script> var a ...

  8. Java Final, Finally, Finalize

    Final is a Keyword, final can be used in three different ways: final variable final method final cla ...

  9. Android 拉伸四周"空白",中间内容不变的9Patch

    系统自带tools下的9Patch制作工具: 在左边,画线的视图里,Zoom到最大,分别在上方和左方的四个端点,各点一下,效果: 看看这四个点的位置: 二.补充一个箭头尾巴可自由拉伸的9patch示例 ...

  10. 30天,APP创业从0到1【7.25上海站】

    活动概况 时间:2015年7月25日13:30-16:30 地点:太库•上海孵化器(张江金科路2889号长泰广场c座12楼) 主办:APICloud.诸葛.圣诺资讯 联合主办:微链.太库•上海孵化器 ...