COGS:地震(平衡树)

COGS上一道题。。。文件名是equake

还是又打了一遍板子。。。

加个lazy标记就行了。。。

注意查询时先下传标记(lazy)

// It is made by XZZ
#include<cstdio>
#include<algorithm>
#define Fname "equake"
using namespace std;
#define rep(a,b,c) for(rg int a=b;a<=c;a++)
#define drep(a,b,c) for(rg int a=b;a>=c;a--)
#define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
#define il inline
#define rg register
#define vd void
#define pr pair<point,point>
#define mp make_pair
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
int seed=233333333;
il int Rand(){return seed=seed*48271ll%2147483647;}
typedef struct node* point;
point null;
struct node{
int data,size,rand,maxx,lazy;
point ls,rs;
node(int dat){data=maxx=dat,lazy=0,size=1,rand=Rand(),ls=rs=null;}
il vd down(){
if(this==null)return;
data+=lazy,maxx+=lazy,ls->lazy+=lazy,rs->lazy+=lazy,lazy=0;
}
il vd reset(){
ls->down(),rs->down();
size=ls->size+rs->size+1;
maxx=max(max(ls->maxx,rs->maxx),data);
}
};
point root;
il point build(int n){
point stack[n+2],last;int top=0;
rep(i,1,n){
point now=new node(gi());last=null;
while(top&&stack[top]->rand>now->rand)last=stack[top],stack[top--]->reset();
if(top)stack[top]->rs=now;now->ls=last,stack[++top]=now;
}while(top)stack[top--]->reset();
return stack[1];
}
il point merge(point a,point b){
if(a==null)return b;
if(b==null)return a;
if(a->rand<b->rand){a->down(),a->rs=merge(a->rs,b),a->reset();return a;}
else{b->down(),b->ls=merge(a,b->ls),b->reset();return b;}
}
il pr split(point now,int num){
if(now==null)return mp(null,null);
now->down();
point ls=now->ls,rs=now->rs;
if(ls->size==num){now->ls=null,now->reset();return mp(ls,now);}
if(ls->size+1==num){now->rs=null,now->reset();return mp(now,rs);}
if(ls->size>num){
pr T=split(ls,num);
now->ls=T.second,now->reset();
return mp(T.first,now);
}else{
pr T=split(rs,num-ls->size-1);
now->rs=T.first,now->reset();
return mp(now,T.second);
}
}
il vd del(point now){if(now!=null)del(now->ls),del(now->rs),delete now;}
int main(){
freopen(Fname".in","r",stdin);
freopen(Fname".out","w",stdout);
int a,b,n=gi(),m=gi();
char opt;
null=new node(-2e9);
null->size=0;
root=build(n);
while(m--){
opt=getchar();while(opt<'A'||opt>'Z')opt=getchar();
if(opt=='I'){
pr T=split(root,gi());
root=merge(T.first,merge(build(gi()),T.second));
}else{
a=gi(),b=gi();
pr T=split(root,a-1),TT=split(T.second,b-a+1);
if(opt=='M'){root=merge(T.first,TT.second),del(TT.first);continue;}
TT.first->down();
if(opt=='R')TT.first->lazy=gi();
else printf("%d\n",TT.first->maxx);
root=merge(T.first,merge(TT.first,TT.second));
}
}del(root),delete null;
return 0;
}

[cogs347]地震的更多相关文章

  1. SACS +Petrel 2009地震

    Bentley SACS V8i SS4 05.07.01.01 海洋平台分析Schlumberger Petrel 2009地震解释油藏模拟课程 Trimble Tekla Structural D ...

  2. HDU2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活[多重背包]

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  3. 多重背包问题:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(HDU 2191)(二进制优化)

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU 2191 一道裸的多重背包问题: #include<iostream> #include<algorithm> #i ...

  4. hdu 2191 多重背包 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

    http://acm.hdu.edu.cn/showproblem.php?pid=2191 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...

  5. BZOJ 1574: [Usaco2009 Jan]地震损坏Damage

    Description 农夫John的农场遭受了一场地震.有一些牛棚遭到了损坏,但幸运地,所有牛棚间的路经都还能使用. FJ的农场有P(1 <= P <= 30,000)个牛棚,编号1.. ...

  6. usaco 地震 && 奶牛观光

    Usaco 地震: Description 一场地震把约翰家的牧场摧毁了,坚强的约翰决心重建家园.约翰已经重建了N个牧场, 现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发现可供修建的道路 ...

  7. HDU-2188 悼念512汶川大地震遇难同胞——选拔志愿者

    http://acm.hdu.edu.cn/showproblem.php?pid=2188 巴什博奕(Bash Game)的转换:换一种说法而已 悼念512汶川大地震遇难同胞——选拔志愿者 Time ...

  8. hdoj 2187 悼念512汶川大地震遇难同胞——老人是真饿了【贪心部分背包】

    悼念512汶川大地震遇难同胞——老人是真饿了 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  9. 基于Hadoop的地震数据分析统计

    源码下载地址:http://download.csdn.net/detail/huhui_bj/5645641 opencsv下载地址:http://download.csdn.net/detail/ ...

随机推荐

  1. Maven经常使用命令

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/UP19910522/article/details/25985021 Maven库: http:// ...

  2. Linux环境搭建多项目SVN

    1.安装SVN #yum install subversion 2.创建版本库文件夹 #mkdir -p /var/svn/repos/pro1 (/var/svn/repos是根路径,pro1是项目 ...

  3. 【js】五子棋-UI学习

    http://www.imooc.com/learn/639 棋盘用canvas实现

  4. 算法——(5)B/B+/红黑树

    1. B树——lgdN B树是平衡多路查找树,主要用于文件系统的索引. 1)定义: 对于一个度数为d的B树, 每个结点最多有d个孩子 如果根结点不是叶子结点,那它至少有两个孩子 每个非叶子结点(非根结 ...

  5. Linux 嵌入式 开发环境 交叉编译安装

    1.安装 Ubuntu 系统 安装完毕,系统 提示 重启,这个时候 请拔掉U盘,进行重启 OK. 2.安装 NFS 服务 3.安装 openssh服务 4.开启openSSH服务 5.就可以使用 Wi ...

  6. EF Core 2.1 支持数据库一对一关系

    在使用EF Core和设计数据库的时候,通常一对多.多对多关系使用得比较多,但是一对一关系使用得就比较少了.最近我发现实际上EF Core很好地支持了数据库的一对一关系. 数据库 我们先来看看SQL ...

  7. LINUX下安装pcre出现WARNING: 'aclocal-1.15' is missing on your system错误的解决办法

    1.下载安装包 wget https://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz 2.解压 tar -xzvf automake-1.15.tar. ...

  8. Redhat7.2 ----team网卡绑定

    我先声明一下,team和bonding是一样的作用,只不过team多了几项功能bonding没有, 做team我们要最少准备两个网卡,我们这里主要显示主备模式. 首先我们先把网卡配置文件删除 nmcl ...

  9. orcal 数据库 maven架构 ssh框架 的全xml环境模版 及常见异常解决

    创建maven项目后,毫不犹豫,超简单傻瓜式搞定dependencies(pom.xml 就是maven的依赖管理),这样你就有了所有你要的包 <project xmlns="http ...

  10. Vue packages version conflicts 错误修复

    我们在使用Vue作为weex中的前端框架的开发过程中,某次 npm start 遇到了如下的错误: Vue packages version mismatch: - vue@2.5.16 - vue- ...