#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. 深入运用js

    1,eval()函数 这个函数是获取参数的字符串,并将其作为js来处理,所以这里就有可能有人用这个来搞破坏(比如注入JS脚本文件等),所以最好的是方法是尽量少用,或者可以用new function() ...

  2. 获取iTextSharp 的image 报错

    获取itextsharp类库的image对象的时候报错  outofmemory  .经过艰苦的测试发现jpeg类型是可行的的 iTextSharp.text.Image je = iTextShar ...

  3. c语言 指针与数组

    关键概念: 1.多个不同类型的指针可以对应同一个地址: 2.(&p)则是这样一种运算,返回一个指针,该指针的值是当时声明p 时开辟的地址,指针的类型是p的类型对应的指针类型: 3.(*p)操作 ...

  4. jquery-barcode:js实现的条码打印

    这是一个纯js的jQuery插件,项目地址:http://barcode-coder.com/en/barcode-jquery-plugin-201.html 使用示例: <!doctype ...

  5. SQL Server Management Studio无法记住密码

    用sa账户登录sql server 2008,勾选了“记住密码”,但重新登录时,SQL Server Management Studio无法记住密码.   后来发现,在重新登录时,登录名显示的并非是s ...

  6. 求解最大矩形面积 — leetcode 85. Maximal Rectangle

    之前切了道求解最大正方形的题,题解猛戳 这里.这道题 Maximal Rectangle 题意与之类似,但是解法完全不一样. 先来看这道题 Largest Rectangle in Histogram ...

  7. .Net Core+cenos7+Docker+Dockerfile 部署实践

    因为这段时间比较忙,同时也在抽时间将开发框架转移到 .net Core 上 所以写博客的时间就少了,这次我利用dockerfile成功将.net Core程序部署到了cenos7容器中,特抽时间把我的 ...

  8. .NET Core VS Code 环境配置

    VSCode .NET环境配置     在此之前我一直是使用notepad++配置的C/C#环境来写代码,比起打开"笨重"的VS要方便很多.VSCode出来之后,本来也想折腾了一下 ...

  9. PC互联网和移动互联网的本质差别

    网一代,我们先称为PC互联网,这大约可以从2010年作为分界,然后就是基于手机,及可穿戴的移动互联网. 在PC时代,软件都很庞大复杂,甚至客端端和网页混合,比如常见的桌面软件,Office及Photo ...

  10. 从Evernote迁移到Wiz

    实在受不了evernote没完没了的弹出广告和让升级账号,我不过就是想安安静静的记个笔记,真不想看您的广告好吧.于是无奈这下,只能选择转换到别的笔记工具阵营. 由于以前一直听说OneNote是仅次于E ...