[cogs347]地震
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]地震的更多相关文章
- SACS +Petrel 2009地震
		
Bentley SACS V8i SS4 05.07.01.01 海洋平台分析Schlumberger Petrel 2009地震解释油藏模拟课程 Trimble Tekla Structural D ...
 - HDU2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活[多重背包]
		
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
 - 多重背包问题:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(HDU 2191)(二进制优化)
		
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU 2191 一道裸的多重背包问题: #include<iostream> #include<algorithm> #i ...
 - hdu 2191 多重背包 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
		
http://acm.hdu.edu.cn/showproblem.php?pid=2191 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...
 - BZOJ 1574: [Usaco2009 Jan]地震损坏Damage
		
Description 农夫John的农场遭受了一场地震.有一些牛棚遭到了损坏,但幸运地,所有牛棚间的路经都还能使用. FJ的农场有P(1 <= P <= 30,000)个牛棚,编号1.. ...
 - usaco 地震 && 奶牛观光
		
Usaco 地震: Description 一场地震把约翰家的牧场摧毁了,坚强的约翰决心重建家园.约翰已经重建了N个牧场, 现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发现可供修建的道路 ...
 - HDU-2188        悼念512汶川大地震遇难同胞——选拔志愿者
		
http://acm.hdu.edu.cn/showproblem.php?pid=2188 巴什博奕(Bash Game)的转换:换一种说法而已 悼念512汶川大地震遇难同胞——选拔志愿者 Time ...
 - hdoj 2187 悼念512汶川大地震遇难同胞——老人是真饿了【贪心部分背包】
		
悼念512汶川大地震遇难同胞——老人是真饿了 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
 - 基于Hadoop的地震数据分析统计
		
源码下载地址:http://download.csdn.net/detail/huhui_bj/5645641 opencsv下载地址:http://download.csdn.net/detail/ ...
 
随机推荐
- 线性回归 Python实现
			
import numpy as np import pylab def plot_data(data, b, m): x = data[:, 0] y = data[:, 1] y_predict = ...
 - seek()和tell()在文件里转移
			
Seek()方法允许在输入和输出流移动到任意的位置,seek()有好几种形式.包含:seekp() 方法和seekg()方法,p是put的意思,g是get的意思:其中输入流里用seekg()函数,输出 ...
 - 关于tomcat无法启动问题详解
			
通常情况tomcat无法启动,有这么几个原因?(1)代码有问题; (2)tomcat有问题; (3)端口被占; (4)动态web项目为3.0: (5)java环境运行内存不足; 这是比较常见的问题.解 ...
 - URL列表
			
MySql函数大全:http://www.cnblogs.com/xuyulin/p/5468102.html
 - lwip TCP client 客户端  & FreeRTOS
			
static void tcpecho_thread(void *arg) { ip_addr_t serverIpAddr; struct netbuf *buf; void *data; u16_ ...
 - TTL电平, RS232电平以及CMOS电平的区别
			
TTL电平标准 输出 L: <0.8V : H:>2.4V. 输入 L: <1.2V : H:>2.0V TTL器件输出低电平要小于0.8V,高电平要大于2.4V.输入,低于1 ...
 - linux 编译ffmpeg 支持x264, x265
			
1. 前言 本教程涉及的ffmpeg, x264, x265 2. 环境依赖 2.1 删除系统中安装的ffmpeg等库 sudo apt-get --purge remove ffmpeg mplay ...
 - crobtab不执行定时任务的原因及解决办法
			
服务未能启动或者权限问题.路径问题,网上很多种解决办法,就不多的说了. 1.查看crond日志: cat /var/log/cron 刚开始我的日志里面并没有执行写的脚本. 原因在于在脚本开始没有写s ...
 - java Activiti6 工作流引擎 websocket 即时聊天 SSM源码 支持手机即时通讯聊天
			
即时通讯:支持好友,群组,发图片.文件,消息声音提醒,离线消息,保留聊天记录 (即时聊天功能支持手机端,详情下面有截图) 工作流模块---------------------------------- ...
 - Oracle索引实现方式