码农题..

很显然除了两个全局操作都能用可并堆完成

全局最大值用个multiset记录,每次合并时搞一搞就行了

注意使用multiset删除元素时

如果直接delete一个值,会把和这个值相同的所有元素全都删掉

如果find一个值得到一个迭代器,然后删除这个迭代器,就能只删除相同元素中的一个啦

因为这个调了1h..

 #include <set>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N1 300010
using namespace std;
const int inf=0x3f3f3f3f; template <typename _T> void read(_T &ret)
{
ret=; _T fh=; char c=getchar();
while(c<''||c>''){ if(c=='-') fh=-; c=getchar(); }
while(c>=''&&c<=''){ ret=ret*+c-''; c=getchar(); }
ret=ret*fh;
}
struct node{
int x;
node(int x):x(x){} node(){}
friend bool operator < (const node &s1,const node &s2)
{ return s1.x>s2.x; }
};
multiset<node>s; struct Heap{
#define ls ch[x][0]
#define rs ch[x][1]
int fa[N1],ch[N1][],h[N1],val[N1],tag[N1],stk[N1],tp;
int idf(int x){ return ch[fa[x]][]==x?:; }
void pushdown(int x)
{
if(!tag[x]) return;
val[ls]+=tag[x]; val[rs]+=tag[x];
tag[ls]+=tag[x]; tag[rs]+=tag[x];
tag[x]=;
}
int merge(int x,int y)
{
if(!x||!y) return x+y;
if(val[x]<val[y]) swap(x,y);
pushdown(x);
ch[x][]=merge(ch[x][],y);
fa[ch[x][]]=x;
if(h[ch[x][]]<h[ch[x][]])
swap(ch[x][],ch[x][]);
h[x]=h[ch[x][]]+;
return x;
}
int findfa1(int x)
{
tp=; stk[++tp]=x;
while(fa[x]) stk[++tp]=fa[x], x=fa[x];
while(tp) pushdown(stk[tp--]);
return x;
}
int findfa2(int x)
{
while(fa[x]) x=fa[x];
return x;
}
void uni(int x,int y)
{
x=findfa2(x), y=findfa2(y); if(x==y) return;
s.erase(node(val[x])), s.erase(node(val[y]));
x=merge(x,y); s.insert(node(val[x]));
}
void addx(int x,int w)
{
int y=findfa1(x),z; s.erase(node(val[y])); tp=;
fa[ls]=fa[rs]=; z=merge(ls,rs); ls=rs=;
ch[fa[x]][idf(x)]=; fa[x]=; val[x]+=w;
z=merge(x,z); if(y!=x) z=merge(y,z);
s.insert(node(val[z]));
}
void addsome(int x,int w)
{
int y=findfa2(x);
s.erase(node(val[y]));
val[y]+=w; tag[y]+=w;
s.insert(node(val[y]));
}
int queryx(int x)
{
findfa1(x);
return val[x];
}
int querymax(int x)
{
x=findfa2(x);
return val[x];
}
#undef ls
#undef rs
}h;
int n,Q,de; int main()
{
scanf("%d",&n);
int i,tot=,x,y,cntf=; char str[];
for(i=;i<=n;i++) read(h.val[i]), s.insert(node(h.val[i]));
scanf("%d",&Q);
for(i=;i<=Q;i++)
{
scanf("%s",str);
if(str[]=='U') read(x), read(y), h.uni(x,y);
if(str[]=='A')
{
switch(str[])
{
case '': read(x), read(y); h.addx(x,y); break;
case '': read(x), read(y), h.addsome(x,y); break;
case '': read(y), tot+=y; break;
}
}
if(str[]=='F')
{
cntf++;
if(cntf==)
de=;
switch(str[])
{
case '': read(x), printf("%d\n",h.queryx(x)+tot); break;
case '': read(x), printf("%d\n",h.querymax(x)+tot); break;
case '': printf("%d\n",(*s.begin()).x+tot);
}
}
}
return ;
}

BZOJ 2333 [SCOI2011]棘手的操作 (可并堆)的更多相关文章

  1. BZOJ 2333: [SCOI2011]棘手的操作 可并堆 左偏树 set

    https://www.lydsy.com/JudgeOnline/problem.php?id=2333 需要两个结构分别维护每个连通块的最大值和所有连通块最大值中的最大值,可以用两个可并堆实现,也 ...

  2. bzoj 2333 [SCOI2011]棘手的操作 —— 可并堆

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2333 稍微复杂,参考了博客:http://hzwer.com/5780.html 用 set ...

  3. BZOJ 2333: [SCOI2011]棘手的操作

    题目描述 真的是个很棘手的操作.. 注意每删除一个点,就需要clear一次. #include<complex> #include<cstdio> using namespac ...

  4. BZOJ 2333 SCOI2011 棘手的操作 并查集+可并堆

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2333 ..题意概述就不写了,各位老爷如果是看着玩的可以去搜一下,如果是做题找来的也知道题干 ...

  5. 2333: [SCOI2011]棘手的操作[写不出来]

    2333: [SCOI2011]棘手的操作 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1979  Solved: 772[Submit][Stat ...

  6. 2333: [SCOI2011]棘手的操作[离线线段树]

    2333: [SCOI2011]棘手的操作 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2325  Solved: 909[Submit][Stat ...

  7. 2333: [SCOI2011]棘手的操作[我不玩了]

    2333: [SCOI2011]棘手的操作 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1979  Solved: 772[Submit][Stat ...

  8. 【bzoj2333】 [SCOI2011]棘手的操作 可并堆+lazy标记

    2016-05-31  21:45:41 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2333 (学习了黄学长的代码 有如下操作: U x y ...

  9. 【BZOJ】2333: [SCOI2011]棘手的操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=2333 题意: 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i], ...

随机推荐

  1. windows上开启winrm服务

    原文链接 因为进行远程powershell管理必须需要启用winrm的服务,所以需要在windows平台上启用winrm服务 winrm service 默认都是未启用的状态,先查看状态:如无返回信息 ...

  2. Java EE: XML Schemas for Java EE Deployment Descriptors(Java Web的web.xml头web-app标签上的XML模式)

    继上几篇文章 http://www.cnblogs.com/EasonJim/p/6221952.html http://www.cnblogs.com/EasonJim/p/6959120.html ...

  3. 【cl】eclipse基本设置(字体、配置JDK)

    字体       找到上面的菜单“windows”打开Preferences            在弹出的设置窗口中找到“colors and fonts”                    将 ...

  4. Maven—Windows操作系统中安装配置Maven环境

    今天难得的周末,借此难的机会总结一下关于maven的一些操作: 1.在安装maven之前要确认计算机已经安装并配置了JDK. 2.下载maven: maven-3.0.3:http://downloa ...

  5. python 网络通讯 服务器端代码demo,能够同时处理多个客户端的连接请求

    这是一个python网络通讯服务器端的代码demo,能够同时处理多个客户端的连接请求. from socket import * import threading from datetime impo ...

  6. 43.qt通过qss自定义外观

    样式: 文件格式类型: candy.qss /* R1 */ QDialog { /*设置背景图片*/ background-image: url(:/images/background.png); ...

  7. 11g Rac PSU20180116手动补丁升级步骤

    手动升级:软件包解压在新建的/home/grid/update 目录下ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1GRID_HOME=/u01 ...

  8. Java设计模式-策略模式详解

    前言 在软件领域中,设计模式作为一种经典的开发实践常常需要我们去深入的理解,而策略模式作为设计模式的一种,使用频率也是相对来说比较高的,在Java中,当我们学习TreeSet集合的时候,就采用了经典的 ...

  9. 几道leetcode不会做的题目

    1.set没有back()函数,今天想到用这个,才发现没有. 2. tuple的initialize_list construct好像不能使用,其实之前没使用过tuple,都是pair,复杂一点的自己 ...

  10. 从 Zero 到 Hero ,一文掌握 Python--转

    https://www.oschina.net/translate/learning-python-from-zero-to-hero 第一个问题,什么是 Python ?根据 Python 之父 G ...