#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. IO调度器(二) IO的中断返回

    IO的中断返回也是相当让人激动的一件事情: 28470  1)               |        handle_irq() { 28471  1)   0.237 us    |      ...

  2. HTML5商城开发四 多图或多商品的水平滚动展示

    一.效果图 二.实现 样式: .horz_scroll { float: left; width: 20px; height: 130px; padding-top: 100px; padding-l ...

  3. POJ 1743 Musical Theme

    感觉最近好混乱......各种OJ都刷一点,感觉不太好......尤其是这种英文题 这道题一开始还没有看懂.听了ljh大犇的解释后终于明白了.下面我为英语和我一样的人翻译一下题面: 输入n个数.求最长 ...

  4. 端口扫描base

    #coding:utf8 import os import socket import sys def IsOpen(ip,port): s = socket.socket(socket.AF_INE ...

  5. MyBatis.Net 学习手记

    MyBatis.NET的前身为IBatis,是JAVA版MyBatis在.NET平台上的翻版,相对NHibernate.EntityFramework等重量级ORM框架而言,MyBatis.NET必须 ...

  6. 浅谈设计模式--组合模式(Composite Pattern)

    组合模式(Composite Pattern) 组合模式,有时候又叫部分-整体结构(part-whole hierarchy),使得用户对单个对象和对一组对象的使用具有一致性.简单来说,就是可以像使用 ...

  7. 阿里云Ubuntu 14.04 + Nginx + let's encrypt 搭建https访问

    参考页面: https://certbot.eff.org/#ubuntutrusty-nginx http://bbs.qcloud.com/thread-12059-1-1.html http:/ ...

  8. 转一篇Unity的相机动画控制

    最近真是忙,连研究细看的时间都没有了,原帖地址:https://alastaira.wordpress.com/2013/11/08/smooth-unity-camera-transitions-w ...

  9. MATLAB中plot()画图的颜色线型和希腊字母参数设置

    y         黄色           ·             点线      m         粉红           ○             圈线      c          ...

  10. Entity Framework 出现 "此 ObjectContext 实例已释放,不可再用于需要连接的操作" 的错误

    原因 Entity的导航属性在View中使用,但是该Entity所在的Context已经在Controller中通过 using 释放掉:但是Entity又具有Deferred Query Evalu ...