SCOI2011 棘手的操作
线段树+并查集,对于每个操作我们只需要维护他在自己子树中的最值和在整个树里的最值,类似于线段树动态开点。
#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,m,cnt,sum,inf=1e9+,f[N],a[N],ans[N*];
struct node
{
int lz,mx,l,r;
}t[N*];
int size[N],rt[N];
char s[];
inline int get(int x){return x==f[x]?x:f[x]=get(f[x]);}
void pushdown(int x)
{
if(t[x].lz)
{
if(t[x].l)
{
t[t[x].l].mx+=t[x].lz;
t[t[x].l].lz+=t[x].lz;
}
if(t[x].r)
{
t[t[x].r].mx+=t[x].lz;
t[t[x].r].lz+=t[x].lz;
}
t[x].lz=;
}
}
void merge(int &x,int &y,int l,int r)
{
if(!y){y=x;return;}
if(!x)return;
int mid=(l+r)>>;
pushdown(x);pushdown(y);
merge(t[x].l,t[y].l,l,mid);
merge(t[x].r,t[y].r,mid+,r);
t[y].mx=max(t[t[y].l].mx,t[t[y].r].mx);
}
int query(int p,int l,int r,int x)
{
if(l==r)return t[p].mx;
pushdown(p);
int mid=(l+r)>>;
if(x<=mid)return query(t[p].l,l,mid,x);
else return query(t[p].r,mid+,r,x);
}
void change(int &p,int l,int r,int x,int y)
{
if(!p)p=++cnt;
if(l==r){t[p].mx+=y;return;}
pushdown(p);
int mid=l+r>>;
if(x<=mid)change(t[p].l,l,mid,x,y);
else change(t[p].r,mid+,r,x,y);
t[p].mx=max(t[t[p].l].mx,t[t[p].r].mx);
}
void tmax(int p,int l,int r,int x,int y)
{
if(l==r){ans[p]=y;return ;}
int mid=(l+r)>>;
if(x<=mid)tmax(p<<,l,mid,x,y);
else tmax(p<<|,mid+,r,x,y);
ans[p]=max(ans[p<<],ans[p<<|]);
}
int main()
{
scanf("%d",&n);int x,y;
t[].mx=-inf;
for(int i=;i<=n;++i)
{
scanf("%d",&a[i]);
tmax(,,n,i,a[i]);
f[i]=i;size[i]=;
change(rt[i],,n,i,a[i]);
}
scanf("%d",&m);
for(int i=;i<=m;++i)
{
scanf("%s",s);
if(s[]=='U')
{
scanf("%d%d",&x,&y);
int fx=get(x);int fy=get(y);
if(fx==fy)continue;
if(size[fx]>size[fy])swap(fx,fy);
size[fy]+=size[fx];f[fx]=fy;
merge(rt[fx],rt[fy],,n);
tmax(,,n,fy,t[rt[fy]].mx);
tmax(,,n,fx,-inf);
}
else if(s[]=='A')
{
if(s[]=='')
{
scanf("%d%d",&x,&y);
int fx=get(x);
change(rt[fx],,n,x,y);
tmax(,,n,fx,t[rt[fx]].mx);
}
else if(s[]=='')
{
scanf("%d%d",&x,&y);
int fx=get(x);
t[rt[fx]].lz+=y;t[rt[fx]].mx+=y;
tmax(,,n,fx,t[rt[fx]].mx);
}
else scanf("%d",&y),sum+=y;
}
else
{
if(s[]=='')
{
scanf("%d",&x);
int fx=get(x);
printf("%d\n",query(rt[fx],,n,x)+sum);
}
else if(s[]=='')
{
scanf("%d",&x);
int fx=get(x);
printf("%d\n",t[rt[fx]].mx+sum);
}
else
{
printf("%d\n",sum+ans[]);
}
}
}
return ;
}
SCOI2011 棘手的操作的更多相关文章
- 【bzoj2333】 [SCOI2011]棘手的操作 可并堆+lazy标记
2016-05-31 21:45:41 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2333 (学习了黄学长的代码 有如下操作: U x y ...
- 【BZOJ 2333 】[SCOI2011]棘手的操作(离线+线段树)
2333: [SCOI2011]棘手的操作 Description 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边 ...
- 2333: [SCOI2011]棘手的操作[写不出来]
2333: [SCOI2011]棘手的操作 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1979 Solved: 772[Submit][Stat ...
- 2333: [SCOI2011]棘手的操作[离线线段树]
2333: [SCOI2011]棘手的操作 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2325 Solved: 909[Submit][Stat ...
- 2333: [SCOI2011]棘手的操作[我不玩了]
2333: [SCOI2011]棘手的操作 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1979 Solved: 772[Submit][Stat ...
- 【BZOJ 2333 】[SCOI2011]棘手的操作(离线+线段树|可并堆-左偏树)
2333: [SCOI2011]棘手的操作 Description 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边 ...
- 洛谷P3273 [SCOI2011] 棘手的操作 [左偏树]
题目传送门 棘手的操作 题目描述 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 ...
- 真--可并堆模板--BZOJ2333: [SCOI2011]棘手的操作
n<=300000个点,开始是独立的,m<=300000个操作: 方法一:单点修改.查询,区间修改.查询?等等等等这里修改是块修改不是连续的啊,那就让他连续呗!具体方法:离线后,每次连接两 ...
- BZOJ 2333: [SCOI2011]棘手的操作
题目描述 真的是个很棘手的操作.. 注意每删除一个点,就需要clear一次. #include<complex> #include<cstdio> using namespac ...
- P3273 [SCOI2011]棘手的操作
吐槽 上午风浔凌julao问我的神题 操作又多又毒瘤又棘手... 然后bzoj题号正好是2333,2333333333 思路 貌似只有我是这么写的 线段树合并, 每个线段树存每个连通块的信息,维护点的 ...
随机推荐
- JQuery和Servlet来实现跨域请求
在网上看到很多的JQuery跨域请求的文章,比较有意思.这里我发表一个Servlet与JQuery配置实现跨域的代码,供大家参考.不足之处请指教 原理:JavaScript的Ajax不可以跨域,但是可 ...
- Eng1—English daily notes
English daily notes 2015年 4月 Phrases 1. As a side note #作为附注,顺便说句题外话,和by the way意思相近,例句: @1:As a sid ...
- Tool1—安装配置Windows Live Writer
详细步骤请看:http://home.cnblogs.com/group/topic/8550.html . Windows Live Writer手工配置步骤(在博客园配置时输入用户名与密码会自动完 ...
- 【NOI2017】游戏 2-sat算法
[题目]LibreOJ [题意]n场游戏,有三种车ABC,给定长度为n的字符串,'a'表示不能选A,'b''c'同理,'x'表示不限,至多d个'x'.有m个限制(i,hi,j,hj)表示如果第i场选择 ...
- 使用Skyworking 作全链路api调用监控,Integration of Skyworking, auditing the whole chain circuit.
Applicable scenario: Structure Map ~ Skywalking uses elasticsearch to store data, don't mistake elas ...
- koa源码阅读[3]-koa-send与它的衍生(static)
koa源码阅读的第四篇,涉及到向接口请求方提供文件数据. 第一篇:koa源码阅读-0第二篇:koa源码阅读-1-koa与koa-compose第三篇:koa源码阅读-2-koa-router 处理静态 ...
- http之100-continue
[http之100-continue] 1.http 100-continue用于客户端在发送POST数据给服务器前,征询服务器情况,看服务器是否处理POST的数据,如果不处理,客户端则不上传POST ...
- Ubuntu16.04安装记
Ubuntu16.04安装记 基本信息: 华硕笔记本 Windows 10 家庭版 处理器:Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2.71GHz 已安装的内 ...
- PHP用imageTtfText函数在图片上写入汉字
https://blog.csdn.net/smstong/article/details/43955705 PHP绘图,imageString()这个函数并不支持汉字的绘制.这往往会给入门者当头一棒 ...
- JNDI(Java Naming and Directory Interface,Java命名和目录接口)
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访 ...