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 思路 貌似只有我是这么写的 线段树合并, 每个线段树存每个连通块的信息,维护点的 ...
随机推荐
- asp.net后台代码动态添加JS文件和css文件的引用
首先添加命名空间 using System.Web.UI.HtmlControls; 代码动态添加css文件的引用 HtmlGenericControl myCss = new HtmlGeneric ...
- 在asp.net 中生成PDF的方法
近期要用asp.net 2.0生成PDF,看了下书,查了下资料,发现可以有组件帮得上忙,可以下载itextsharp(https://sourceforge.net/projects/itextsha ...
- VC改变CListCtrl 表格中文字颜色,和背景颜色。
(1)首先需要自定义一个类,派生自CListCtrl.如下图: (2)然后在派生类的头文件中声明一个成员函数,如下图: (3)在源文件中实现该成员方法,如图: (4)在源文件中做消息映射,如图: 这时 ...
- GCD HDU - 1695 莫比乌斯反演入门
题目链接:https://cn.vjudge.net/problem/HDU-1695#author=541607120101 感觉讲的很好的一个博客:https://www.cnblogs.com/ ...
- Django 自定义分页类
分页类代码: class Page(object): ''' 自定义分页类 可以实现Django ORM数据的的分页展示 输出HTML代码: 使用说明: from utils import mypag ...
- 大数据系列之分布式数据库HBase-0.9.8安装及增删改查实践
若查看HBase-1.2.4版本内容及demo代码详见 大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践 1. 环境准备: 1.需要在Hadoop启动正常情况下安 ...
- 以太坊go-ethereum项目源码本地环境搭建
如果要深入了解go-ethereum项目的实现与机制,看源代码是必不可少的.今天这篇博客就简单介绍一下如何在本地搭建项目的开发环境. GO语言环境搭建 以win8为例,访问地址https://gola ...
- DB2和Oracle中Date比较
- Django之进阶相关操作
一.QuerySet的特点 1.可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. 1 >>> Entry.objec ...
- IOS - Safari中click点击事件无效
做web移动端页面时,安卓端一点问题也没,发现在ios真机上点击事件无效,发现Safari下只有默认可点击的元素才click点击事件,像span div等元素是不具有点击事件的. 解决问题四种方式: ...