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. browserify文件后函数调用报is not defined的原因

    举个例子: a.js ; module.exports.a = a; b.js var result = require('./a'); var getA =() => { console.lo ...

  2. 用c写一个小的聊天室程序

    1.聊天室程序——客户端 客户端我也用了select进行I/O复用,同时监控是否有来自socket的消息和标准输入,近似可以完成对键盘的中断使用. 其中select的监控里,STDOUT和STDIN是 ...

  3. cocos2dx lua 一键资源管理PowerShell脚本实现

    特别说明 此管理脚本不包含图片资源加密,热更新资源文件列表是md5 和 文件路径构成的txt,如下 脚本文件是放在和res src 同级的文件夹里面 脚本内容如下 clear $PSDefaultPa ...

  4. 网页静态化解决方案-Freemarker

    1.1    技术简介与使用 1.1.1     简介 为什么使用: 1.  减轻数据库的访问压力,静态化比较适合大规模且相对变化不太频繁的数据: 2.  有利于SEO(搜索引擎优化); 纯的HTML ...

  5. bootstrap世界探索2——万物的起源(网格系统)

    万物的起源是非常神奇的,谁又能想到小小的细胞(文字排版)竟能构建大千世界. <!DOCTYPE html> <html lang="en"> <hea ...

  6. 1、win10下的Docker+Redis 的下载及简单使用

    一.下载Docker: 因为始终注册docker账号不成功,所以在这里点击下载. 选中docker-for-windows/ 选中beta/ 下载这个.msi文件 二.安装 1.安装.msi文件,桌面 ...

  7. phporjquery生成二维码

    一.php生成二维码 下载文章末尾链接中phpcode文件 include "./phpqrcode/qrlib.php"; //QRcode::png('http://www.b ...

  8. PHP常用函数归类【持续整理】

    学习了这么久PHP,基础知识总感觉不牢靠,尤其是数组,字符串函数的应用,全部手敲过次手,做出总结都是基础,在回顾一下吧. 一.PHP基础语法 变量,常量     严格区分大小写,但内置结构或关键字无所 ...

  9. 【原创】CRM 2015/2016,SSRS 生成PDF文件,幷以附件的形式发送邮件

    主要步骤如下: 生成一条邮件记录 生成一条ActivityParty记录 生成PDF文件,并以Base64添加到ActivityMimeAttachment 中去 打开发送邮件窗口,以便编辑及发送邮件 ...

  10. TCP/IP协议中的UDP与TCP的区别

    TCP面向连接,UDP面向非连接即发送数据前不需要建立链接TCP提供可靠的服务(数据传输),UDP无法保证,它没有TCP的接受确认.窗口等机制,因此也不需要交换控制信息:发生丢包也一概不负责.TCP面 ...