#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. Ice的HelloWorld(Java)

    Ice是一种面向对象的中间间平台,入门ice,简单的HelloWorld是必不可少的. 转载请注明http://www.cnblogs.com/zrtqsk/p/3745286.html,谢谢. 一. ...

  2. Spring MVC 急速集成 Shiro 实录

    相信有很多的程序员,不愿意进行用户管理这块代码实现. 原因之一,不同的JavaEE 系统,用户管理都会有个性化的实现,逻辑很繁琐. 而且是系统门面,以后背锅的几率非常大,可谓是低收益高风险. 最近在系 ...

  3. lecture12-玻尔兹曼机和受限玻尔兹曼机

    这是Hinton的第12课,结合前一课可以知道RBM是来自BM,而BM是来自Hopfield的,因为水平有限,是直译的,虽然有时候会看不懂,但是好歹不会曲解原来的本意,看的话:1.先看ppt:2.通读 ...

  4. SQL 批量修改表结构

    项目中发现一批语言表的某个字段设的值太小了需要增大,因为涉及到很多张表,所以采用游标一张张的处理. 代码很简单 ) ) DECLARE LangTable CURSOR FOR SELECT name ...

  5. 3到6年的.NETer应该掌握哪些知识?

    我们组的开发人力一直比较紧张,今年春节后,高层终于给了几个headcount,我们可以开始招人了.从三月初我们就开始找简历,渠道有拉钩,内推,我司自己的招聘网站和智联等.简历筛了很多,也打了很多电话, ...

  6. [BZOJ2257][Jsoi2009]瓶子和燃料(数学)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2257 分析: 1.先考虑确定的瓶子下的最小体积是多少 ①假设只有两个瓶子v1,v2,易 ...

  7. JavaScript学习笔记-商品管理新增/删除/修改功能

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  8. 【JavaEE企业应用实战学习记录】struts2登录

    <%-- login.jsp Created by IntelliJ IDEA. User: Administrator Date: 2016/10/6 Time: 16:26 To chang ...

  9. 查询和修改(Queries and Mutations)

    On this page, you'll learn in detail about how to query a GraphQL server. 在这个页面,你将会学习更多的关于如何查询GraphQ ...

  10. Using LINQ to SharePoint

    LINQ and LINQ Providers   LINQ is a feature of the programming languages C# and Microsoft Visual Bas ...