[Noi2016十连测第三场]线段树

时间:2022-12-12 19:06:39
 #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. &lbrack;Noi2016十连测第五场&rsqb;二进制的世界

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

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

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

  4. HDU 4614 Vases and Flowers &lpar;2013多校第二场线段树&rpar;

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

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

    题目链接 描述 南将军统率着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&colon; &lbrack;noip2016十连测第五场&rsqb;travel &lpar;构造&plus;贪心&rpar;

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

  9. NOI十连测 第三测 T1

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

随机推荐

  1. Microsoft&period;Office&period;Interop第三方程序 ppt 转换为PDF出错

    错误信息:Retrieving the COM class factory for component with CLSID {91493441-5A91-11CF-8700-00AA0060263B ...

  2. ABAP 销售范围

    *&---------------------------------------------------------------------* *& Report  ZSDR008 ...

  3. 关于android存储

    今天在测试android拍照功能时遇到一个困惑:照片拍成功了,程序能都能读取到,但是在手机储存中怎么也找不到拍的照片.先将学习过程中经过的曲折过程记录如下: 一:拍照并保持 通过调用android 的 ...

  4. css3立体旋转

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. NFS挂载启动

    NFS挂载启动参数: 1.服务器IP.目录(虚拟机IP和 NFS目录) 2.开发的IP 如下我的开发板设置 ipaddr=192.168.1.17           ① 开发板IP serverip ...

  6. Jetty 8长连接上的又一个坑

    Jetty 8 长连接的超时断开连接的机制:超时连接机制针对IO传输过程中的数据阻塞时间超过一定阈值时,断开该连接.阻塞指当前处于数据传输阶段,但是连续指定时间内都没有发出或者接收到任何数据时,Jet ...

  7. 【jenkins 忘记密码】忘记Jenkins管理员密码的解决办法

    一.admin密码未更改情况 1.进入\Jenkins\secrets目录,打开initialAdminPassword文件,复制密码: 2.访问Jenkins页面,输入管理员admin,及刚才的密码 ...

  8. Activity正确获取View宽高

    在View的measure完成后,一般可以通过getMeasureWidth/getMeasureWidth方法可以正确的获取View的宽高,而在特殊情况下,可能需要多次measure才能确定最终的测 ...

  9. 【自动化】基于Spark streaming的SQL服务实时自动化运维

    设计背景 spark thriftserver目前线上有10个实例,以往通过监控端口存活的方式很不准确,当出故障时进程不退出情况很多,而手动去查看日志再重启处理服务这个过程很低效,故设计利用Spark ...

  10. 多线程-synchronized锁

    package 多线程.synchronized锁; /*. * * * * */ public class Sale implements Runnable { ; @Override public ...