hdu 3308 线段树

输入一串数字,有两个操作:Q a b 查询a到b区间内严格递增子串的最大长度 ; U a b 把第a位数字替换成b 。注意输入的编号是从0开始

解法:线段树维护区间的严格递增子串的最大长度即可。注意细节。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>using namespace std;
struct Tree{int l,r;int valuel,valuer,value;int ld,rd;}nod[100020<<2];
int n,m;
int w[1000020] ;void Pushup(int k)
{nod[k].valuel = nod[k].valuer = 1;if(nod[k<<1].rd < nod[k<<1|1].ld){nod[k].value=max(nod[k<<1].valuer+nod[k<<1|1].valuel,max(nod[k<<1].value,nod[k<<1|1].value));if(nod[k<<1].valuel == nod[k<<1].r-nod[k<<1].l+1 ){nod[k].valuel=nod[k<<1].valuel+nod[k<<1|1].valuel ;}if(nod[k<<1|1].valuer == nod[k<<1|1].r-nod[k<<1|1].l+1){nod[k].valuer=nod[k<<1|1].valuer+nod[k<<1].valuer;}nod[k].valuel=max(nod[k].valuel,nod[k<<1].valuel) ;nod[k].valuer=max(nod[k].valuer,nod[k<<1|1].valuer) ;//cout<<nod[2].valuer<<endl;
    }else{nod[k].value=max(nod[k<<1].value,nod[k<<1|1].value) ;nod[k].valuel = nod[k<<1].valuel ;nod[k].valuer = nod[k<<1|1].valuer ;}nod[k].ld=nod[k<<1].ld , nod[k].rd=nod[k<<1|1].rd ;
}void Build(int l,int r,int k)
{nod[k].l=l,nod[k].r=r , nod[k].ld=w[nod[k].l] , nod[k].rd=w[nod[k].r] ;if(nod[k].l == nod[k].r){nod[k].value= nod[k].valuel =nod[k].valuer= 1;return ;}int mid = (l+r)>>1 ;Build(l,mid,k<<1);Pushup(k) ;Build(mid+1,r,k<<1|1);Pushup(k);
}int Query(int l,int r,int k)
{int ans =0;if(nod[k].l==l && nod[k].r==r ){return nod[k].value ;}int mid=(nod[k].l + nod[k].r)>>1 ;if(r<=mid){return Query(l,r,k<<1) ;}else if(l>mid){return Query(l,r,k<<1|1) ;}else{if(nod[k<<1].rd < nod[k<<1|1].ld  ){ans = max(Query(l,mid,k<<1) , Query(mid+1,r,k<<1|1)) ;int temp = min(mid-l+1,nod[k<<1].valuer)+min(r-(mid+1)+1,nod[k<<1|1].valuel) ;ans=max(ans,temp);}else{ans= max(Query(l,mid,k<<1),Query(mid+1,r,k<<1|1)) ;}}return ans ;}void Update(int l,int k,int value)
{if(nod[k].l==nod[k].r && nod[k].l == l){nod[k].ld = nod[k].rd = value ;w[nod[k].r]=value ;nod[k].valuel = nod[k].valuer = nod[k].value =1 ;return ;}int mid=(nod[k].l+ nod[k].r)>>1 ;if(l<=mid){Update(l,k<<1,value);}else{Update(l,k<<1|1,value) ;}Pushup(k);return ;}
int main()
{int t;scanf("%d",&t) ;while(t--){scanf("%d%d",&n,&m) ;memset(w,0,sizeof w) ;for(int i=1;i<=n;i++){scanf("%d",&w[i]) ;}//getchar() ;
Build(1,n,1) ;/*for(int i=1;i<=30;i++){cout<<i<<" "<<nod[i].value<<" "<<nod[i].valuel<<" "<<nod[i].valuer<<endl;}cout<<"-------------------------------------"<<endl;*/for(int i=0;i<m;i++){char c;int a,b;cin>>c;scanf("%d%d",&a,&b);//cout<<c<<endl;if(c=='Q'){a++,b++;if(a>b){swap(a,b) ;}int ans = Query(a,b,1);//cout<<c<<endl;printf("%d\n",ans) ;}else{a++;Update(a,1,b) ;/*for(int i=1;i<=30;i++){cout<<i<<" "<<nod[i].value<<" "<<nod[i].valuel<<" "<<nod[i].valuer<<endl;}cout<<"-------------------------------------"<<endl;*/}}}return 0;
}

 

转载于:https://www.cnblogs.com/Scale-the-heights/p/4707336.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka创建topic命令_0748-5.14.4-Kafka的扩容和缩容

​文档编写目的在Kafka集群资源使用已超出系统配置的资源时&#xff0c;或者有大量资源闲置造成资源浪费的时候&#xff0c;需要分别通过扩容Kafka和缩容Kafka来进行调整。本篇文章Fayson主要介绍如何进行Kafka的扩容和缩容&#xff0c;以及变更后的Kafka集群如何进行负载均衡的…

java 对话框 显示图片_Java对话框上显示图片

手掌心其实有很多种方法可以解决图片显示大小的问题:使用photoshop修改. 优点是可以节省系统资源, 显示图片的时候,不用做处理,缺点是需要了解ps的基本操作使用JDialog 自定义对话框. 优点 可以实现复杂的效果, 缺点,代码量比较多使用ImageIcon, Image 类 实现图片的缩放,. 优点…

class-dump获取iOS私有api

转自&#xff1a;http://blog.csdn.net/sunyuanyang625/article/details/41440167 获取各类iOS私有api 安装工具class&#xff0d;dump 资源地址http://download.csdn.net/detail/map625/8191343 运行class&#xff0d;dump并编译src项目 编译之后在produce中找到编译好的class…

python能开发什么产品_三周学 Python ?不,三周做个产品

我的同事在看到毫无开发经验的我用三周时间&#xff0c;不但从零基础用上了 Python&#xff0c;还做出了一个客户关系管理系统&#xff0c;强烈邀请我分享经验。惶恐&#xff0c;因为我并没有出色的智商&#xff0c;也没有觉得三周学 Python 是一个体现自己牛叉的事情(不少人可…

爬楼梯 java_Leetcode 70.爬楼梯(Java)

题目&#xff1a;假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f;注意&#xff1a;给定 n 是一个正整数。示例 1&#xff1a;输入&#xff1a; 2输出&#xff1a; 2解释&#xff1a; 有两种方法可以爬…

WebView之2

首先需要添加权限&#xff1a; <uses-permission android:name"android.permission.INTERNET"/>   MainActivity: package com.wyl.webview;import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.vie…

火星云分发全网视频_好用的短视频一键分发软件,让工作效率提高10倍

随着近几年新媒体行业的高速发展&#xff0c;新媒体行业的红利也越来越来&#xff0c;也有越来越多的人想要享受到这波红利&#xff0c;于是不管是个人是企业都纷纷开始进入这个市场。不过也随之诞生了一系列麻烦繁琐的问题&#xff0c;如怎么持续创作内容&#xff0c;怎么花费…

java 采样_Java编程实现beta分布的采样或抽样实例代码

本文研究的主要是Java编程实现beta分布的采样或抽样&#xff0c;具体如下。本文将使用math3提供的工具包&#xff0c;对beta分布进行采样。如下程序是对alpha81&#xff0c;beta219的beta分布函数&#xff0c;进行抽样&#xff0c;共采样10000次。package function;/*** author…

树莓派 蓝牙音响_你应该拥有一个树莓派

为什么你应该拥有一个树莓派树莓派并不是极客的玩具树莓派可以用来做什么?它能实现的实在是太多了,最常见的比如自动化脚本 各种机器人bot: QQ/wechat/微博/facebook/telegram,IM结合爬虫 telegram的bot如今被黑产们结合比特币,做成了交易系统 使用宝塔linux面板,一键安装word…

训练集的识别率一直波动_机器学习验证集为什么不再有新意?

机器学习中&#xff0c;一般将样本数据分成独立的三部分&#xff1a;训练集、验证集和测试集。其中验证集在机器学习中所起到的作用是&#xff1a;开发模型总需要调节模型的参数&#xff0c;而整个调节过程需要在验证集数据上运行训练的模型&#xff0c;从而给出其表现的反馈信…

java写一个web聊天工具_javaweb写的在线聊天应用

写这个玩意儿就是想练练手&#xff0c; 用户需要登陆才能在线聊天&#xff0c;不要依赖数据库&#xff0c; 不需要数据库的操作&#xff0c; 所有的数据都是保存在内存中&#xff0c; 如果服务器一旦重启&#xff0c;数据就没有了&#xff1b;登录界面&#xff1a;聊天界面&…

python dataframe删除重复行_详解pandas使用drop_duplicates去除DataFrame重复项参数

Pandas之drop_duplicates&#xff1a;去除重复项方法DataFrame.drop_duplicates(subsetNone, keepfirst, inplaceFalse)参数这个drop_duplicate方法是对DataFrame格式的数据&#xff0c;去除特定列下面的重复行。返回DataFrame格式的数据。subset : column label or sequence o…

O-C相关-08-动态类型与静态类型

08-动态类型与静态类型 1, 什么是动态类型和静态类型 1) 动态语言 又叫动态编程语言&#xff0c;是指程序在运行时可以改变其结构&#xff1a;新的函数可以被引进&#xff0c;已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除…

python中numpy是什么_什么是NumPy?

本文是对官方文档的翻译&#xff0c;原文在此What is NumPy? - NumPy v1.14 Manual​docs.scipy.org以下开始正文。NumPy是Python的一个用于科学计算的基础包。它提供了多维数组对象&#xff0c;多种衍生的对象(例如隐藏数组和矩阵)和一个用于数组快速运算的混合的程序&#x…

java for循环 等待_java – 主题:忙等待 – 空循环

参见英文答案 > Is this starvation? 2个在我们的大学课程中,我们学习了Threads并使用“Busy Waiting”方法作为在TrafficLight等待的汽车的示例.为此,我们构建了三个类&#xff1a;> TrafficLight(实现Runnable)>汽车(实现Runna…

人物角色群体攻击判定(一)

我们制作3D动作游戏的时候,常常主人公是一对多人进行攻击,或者敌人在角色前方一定范围内进行攻击. 我们怎么实现这种效果呢&#xff1f; 1. 使用触发器(多体攻击)方便调试,可视化(推荐)2. 运用点乘和叉乘,判断敌人的角度和位置(单,多)一般3. 使用Physics的Physics.OverlapSpher…

mfc cimage加载显示图片_在微信小程序里实现图片预加载组件

网页中的图片预加载我们知道在 Web 页面中实现图片的预加载其实很简单&#xff0c;通常的做法是在 JS 中使用 Image 对象即可&#xff0c;代码大致如下var image new Image() image.onload function() {console.log(图片加载完成) } image.src"//misc.360buyimg.com/lib…

java mongodb 删除字段类型_Mongodb基本数据类型、常用命令之增加、更新、删除

1.null---表示空值或者该字段不存在&#xff0c;如{"name"&#xff1a;null}2.布尔 --- 和java中的布尔一样&#xff0c;有两种&#xff1a;true,false,如{"sex":true}3.浮点数---shell中所有的数字都是浮点数&#xff0c;如{"age":12},{"m…

HDU 2242 双连通分量 考研路茫茫——空调教室

思路就是求边双连通分量&#xff0c;然后缩点&#xff0c;再用树形DP搞一下。 代码和求强连通很类似&#xff0c;有点神奇&#xff0c;_&#xff0c;慢慢消化吧 1 #include <cstdio>2 #include <cstring>3 #include <algorithm>4 #include <vector>5 #…

wxpython菜单栏嵌套窗口_如何在wxpython中使嵌套的Panel和Sizer工作

此处的逻辑是创建一个Panel,在其中添加控件,然后创建一个BoxSizer,在其中声明您在Panel中添加的每个控件在调整大小时的行为,并最终在Panel上设置应用BoxSizer的对象.您有2期.>首先,您缺少posPnlobject的上述语句的最后一部分.添加&#xff1a;posPnl.SetSizer(posPnlSzr)将…