#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define maxn 100005
#define maxk 4000005
int n,m,q,tot,t1,t2,ans,L[maxn][],R[maxn][];
void read(int &x){
x=; int f=; char ch;
for (ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') f=-;
for (;isdigit(ch);ch=getchar()) x=x*+ch-''; x*=f;
}
struct Seg{
int sm;
}tree1[maxk];
struct mess{
int l,r;
}chg[maxn];
struct Segment{
void maketree(int k,int l,int r){
if (l==r){
read(tree1[k].sm);
return;
}int mid=(l+r)>>;
maketree(k<<,l,mid),maketree(k<<|,mid+,r);
tree1[k].sm=max(tree1[k<<].sm,tree1[k<<|].sm);
}
void change(int k,int l,int r,int x,int y){
if (l==r&&r==x){
tree1[k].sm=y;
return;
}int mid=(l+r)>>;
if (x<=mid) change(k*,l,mid,x,y);
else change(k<<|,mid+,r,x,y);
tree1[k].sm=max(tree1[k<<].sm,tree1[k<<|].sm);
}
void query(int k,int l,int r,int x,int y){
if (l>=x&&r<=y){
ans=max(ans,tree1[k].sm);
return;
} int mid=(l+r)>>;
if (x<=mid) query(k<<,l,mid,x,y);
if (y>mid) query(k<<|,mid+,r,x,y);
}
}Tree1;
struct SEg{
int cover;
}tree2[maxk];
int root[maxn],son[maxk][];
struct SEgment{
void insert(int p,int &k,int l,int r,int x,int y,int z){
k=++tot,tree2[k]=tree2[p]; son[k][]=son[p][],son[k][]=son[p][];
if (l>=x&&r<=y){
tree2[k].cover=z;
return;
}int mid=(l+r)/;
if (x<=mid) insert(son[p][],son[k][],l,mid,x,y,z);
if (y>mid) insert(son[p][],son[k][],mid+,r,x,y,z);
}
void query(int k,int l,int r,int x){
t1=max(t1,tree2[k].cover);
if (l==r) return;
int mid=(l+r)>>;
if (x<=mid) query(son[k][],l,mid,x);
else query(son[k][],mid+,r,x);
}
}Tree2;
struct Fseg{
int cover;
}tree3[maxk];
struct Fsegment{
void insert(int k,int l,int r,int x,int y,int z){
if (l>=x&&r<=y){
tree3[k].cover=z;
return;
}int mid=(l+r)>>;
if (x<=mid) insert(k<<,l,mid,x,y,z);
if (y>mid) insert(k<<|,mid+,r,x,y,z);
}
void query(int k,int l,int r,int x){
t1=max(t1,tree3[k].cover);
if (l==r) return;
int mid=(l+r)>>;
if (x<=mid) query(k<<,l,mid,x);
else query(k<<|,mid+,r,x);
}
}Tree3;
int main(){
read(n),read(m),read(q);
Tree1.maketree(,,n);
tot=,memset(root,,sizeof(root));
memset(L,,sizeof(L));
memset(R,,sizeof(R));
for (int i=;i<=m;i++) read(chg[i].l),read(chg[i].r);
for (int i=;i<=m;i++) Tree2.insert(root[i-],root[i],,n,chg[i].l,chg[i].r,i);
for (int i=;i<=m;i++){
t1=; Tree3.query(,,n,chg[i].l); L[i][]=t1;
t1=; Tree3.query(,,n,chg[i].r); R[i][]=t1;
Tree3.insert(,,n,chg[i].l,chg[i].r,i);
}
for (int i=;i<=;i++){
for (int j=;j<=m;j++){
L[j][i]=L[L[j][i-]][i-];
R[j][i]=R[R[j][i-]][i-];
}
}
for (int type,l,r,w,i=;i<=q;i++){
read(type),read(l),read(r);
if (type==) Tree1.change(,,n,l,r);
else{
read(w);
t1=; Tree2.query(root[r],,n,w); t2=t1;
if (t1>=l){
for (int j=;j>=;j--) if (L[t1][j]&&L[t1][j]>=l) t1=L[t1][j];
for (int j=;j>=;j--) if (R[t2][j]&&R[t2][j]>=l) t2=R[t2][j];
ans=,t1=chg[t1].l,t2=chg[t2].r,Tree1.query(,,n,t1,t2);
}else ans=,Tree1.query(,,n,w,w);
printf("%d\n",ans);
}
}
return ;
}

题目大意:线段树

【问题描述】
小

[Noi2016十连测第三场]线段树的更多相关文章

  1. 【省选十连测之一】【线段树】【最小生成树之Kruskal】公路建设

    目录 题意 输入格式 输出格式 数据范围 思路 代码 题意 有n个点,m条双向道路,其中第条公路的两个端点是u[i],v[i],费用是c[i]. 现在给出q个询问,每次给定一个L和一个R,要求你只能够 ...

  2. [Noi2016十连测第五场]二进制的世界

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  3. nyoj 119士兵杀敌(三)(线段树区间最值查询,RMQ算法)

    题目119 题目信息 执行结果 本题排行 讨论区 士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描写叙述 南将军统率着N个士兵,士兵分别编号为1~N,南将军常 ...

  4. HDU 4614 Vases and Flowers (2013多校第二场线段树)

    题意摘自:http://blog.csdn.net/kdqzzxxcc/article/details/9474169 ORZZ 题意:给你N个花瓶,编号是0 到 N - 1 ,初始状态花瓶是空的,每 ...

  5. NYOJ 119 士兵杀敌(三) (线段树)

    题目链接 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算 ...

  6. HDU6602 Longest Subarray hdu多校第二场 线段树

    HDU6602 Longest Subarray 线段树 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6602 题意: 给你一段区间,让你求最长的区间使 ...

  7. 第二十九篇 玩转数据结构——线段树(Segment Tree)

          1.. 线段树引入 线段树也称为区间树 为什么要使用线段树:对于某些问题,我们只关心区间(线段) 经典的线段树问题:区间染色,有一面长度为n的墙,每次选择一段墙进行染色(染色允许覆盖),问 ...

  8. Problem C: [noip2016十连测第五场]travel (构造+贪心)

    题面 https://www.lydsy.com/JudgeOnline/upload/201610/statements(1).pdf 题解 好神仙的贪心-- 首先无解的情况很容易判断,就是\(l= ...

  9. NOI十连测 第三测 T1

    这么二逼的题考试的时候我想了好久,我真是太弱了... 首先,由于ans都乘上了i*(i-1)/2,实际上要求的就是每个数的所有可能出现次数*这个数的权值. 我们发现,每个数的本质是一样的,我们记一个s ...

随机推荐

  1. VS2010/VS2013怎么复制项目/拷贝项目/克隆项目

    本文以vs2013为例,讲述了如何复制项目.vs2008,vs2010,vs2012等版本应操作类似 vs中的项目位于解决方案中,简单的复制粘贴是不能实现项目复制的 一.准备 原项目名称:test 目 ...

  2. GIT常用命令备忘

    Git配置 git config --global user.name "storm" git config --global user.email "stormzhan ...

  3. 简单创建与布署CLR存储过程

    今天的博文是学习CLR存储过程,一个简单的例子,学会怎样创建,编译,布署在SQL中.CLR能做一些T-SQL无法做的事情,很多情况之后,它比T-SQL快. 打开VS2013,创建一个新专案,参考下面5 ...

  4. C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 用户权限树的实现 -- 权限递归树

    业务系统里经常会需要计算类似的树形权限树的业务需求 1:往往会有一些需求,a 对 b 有权限, b对c 有权限, 等等. 2:还需要很直观的看到,整个权限的树形关系,一目了然的那种. 3:程序调用简单 ...

  5. android 获取当前系统时间

    取得系统时间 1. long time=System.currentTimeMillis(); 2. final Calendar mCalendar=Calendar.getInstance(); ...

  6. 进程控制块(Process Control Block, PCB)

    是为了管理进程设置的一个数据结构.是系统感知进程存在的唯一标志.通常包含如以下的信息:(1)进程标识符(唯一)(2)进程当前状态,通常同一状态的进程会被放到同一个队列:(3)进程的程序和数据地址(4) ...

  7. Matlab滤波器设计(转)

    滤波器设计是一个创建满足指定滤波要求的滤波器参数的过程.滤波器的实现包括滤波器结构的选择和滤波器参数的计算.只有完成了滤波器的设计和实现,才能最终完成数据的滤波. 滤波器设计的目标是实现数据序列的频率 ...

  8. Android之捕获TextView超链接

    应该是好久没有写有关技术类的文章了,今天分享一篇捕获TextView超链接的文章,希望对大家有所帮助,我终于在歪路上回归正途了.这个捕获TextView超链接应该算是比较常用吧,如果你会了,就不用看了 ...

  9. VS2013 未找到与約束ContractName

    vs2013打开项目无法加载项目,关闭时提示  未找到与約束ContractName... 解決方法,打開控制面板,找到下面這個程序 右击,选 择 修 复

  10. Hadoop2.6.0伪分布环境搭建

    用到的软件: 一.安装jdk: 1.要安装的jdk,我把它拷在了共享文件夹里面.   (用优盘拷也可以) 2.我把jdk拷在了用户文件夹下面. (其他地方也可以,不过路径要相应改变) 3.执行复制安装 ...