线段树 HDU 3308
t
题目大意:给你n个数,m个操作。操作有两种:1.U x y 将数组第x位变为y 2. Q x y 问数组第x位到第y位连续最长子序列的长度。对于每次询问,输出一个答案
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; #define MAXN 100010 struct node
{
int l,r,ls,rs,ms;//维护从左边开始 最大 到右边结束 3个最长上升子序列个数
}x[MAXN<<]; int z[MAXN],a1,b1;
void push_up(int a)
{
int l=x[a].l,r=x[a].r;
int mid=(l+r)>>;
x[a].ls=x[a<<].ls;
x[a].rs=x[a<<|].rs;
x[a].ms=max(x[a<<].ms,x[a<<|].ms);//这三条是显然的
if(z[mid]<z[mid+])//成立的话就要合并
{
if(x[a].ls==mid-l+)//左边满 右孩子也左边要加上去
x[a].ls+=x[a<<|].ls;
if(x[a].rs==r-mid) //同理
x[a].rs+=x[a<<].rs;
x[a].ms=max(x[a].ms,x[a<<].rs+x[a<<|].ls);//中间那段
}
} void Build(int l,int r,int a)
{
x[a].l=l;
x[a].r=r;
if(l==r)
{
x[a].ls=x[a].rs=x[a].ms=;
return ;
}
int mid=(l+r)>>;
Build(l,mid,a<<);
Build(mid+,r,a<<|);
push_up(a);
}
void add(int l,int r,int a1,int a)//其实就是更新操作
{
if(l==r)
return ;
int mid=(l+r)>>;
if(a1<=mid)
add(l,mid,a1,a<<);
else
add(mid+,r,a1,a<<|);
push_up(a);
} int Ques(int l,int r,int a1,int b1,int a)
{
if(a1<=l&&r<=b1)
return x[a].ms;
int mid=(l+r)>>;
if(b1<=mid)
return Ques(l,mid,a1,b1,a<<);
if(a1>mid)
return Ques(mid+,r,a1,b1,a<<|);
int t1=Ques(l,mid,a1,b1,a<<);
int t2=Ques(mid+,r,a1,b1,a<<|);
int ans=max(t1,t2);//上面应该都能看懂
if(z[mid]<z[mid+])//这边合并可能成为答案
ans=max(ans,min(b1-mid,x[a<<|].ls)+min(x[a<<].rs,mid-a1+));//如果x[a<<1|1].ls+mid>b1 那么查询范围就变大的了 所哟要取下min 左边同理
return ans;
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&z[i]);
Build(,n,);
while(m--)
{
char s[];
int a,b;
scanf("%s%d%d",s,&a,&b);//变成从1开始
a++;
if(s[]=='U')
{
z[a]=b;
add(,n,a,);//其实就是一个更新操作
}
else
{
b++;
printf("%d\n",Ques(,n,a,b,));//查询
}
}
}
return ;
}
线段树 HDU 3308的更多相关文章
- 主席树[可持久化线段树](hdu 2665 Kth number、SP 10628 Count on a tree、ZOJ 2112 Dynamic Rankings、codeforces 813E Army Creation、codeforces960F:Pathwalks )
在今天三黑(恶意评分刷上去的那种)两紫的智推中,突然出现了P3834 [模板]可持久化线段树 1(主席树)就突然有了不详的预感2333 果然...然后我gg了!被大佬虐了! hdu 2665 Kth ...
- 最大矩阵覆盖权值--(静态连续最大子段 (线段树) )-HDU(6638)Snowy Smile
这题是杭电多校2019第六场的题目 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6638 题意:给你平面上n个点,每个点都有权值(有负权),让你计算一 ...
- 敌兵布阵(线段树HDU 1166)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...
- HDU 6464 权值线段树 && HDU 6468 思维题
免费送气球 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- 区间第k大问题 权值线段树 hdu 5249
先说下权值线段树的概念吧 权值平均树 就是指区间维护值为这个区间内点出现次数和的线段树 用这个加权线段树 解决第k大问题就很方便了 int query(int l,int r,int rt,int k ...
- 线段树 HDU 3397(真)
5 种操作 0 1 然后 异或 似乎这种2个更新的先后每次都搞不清 覆盖有覆盖就可以不异或 也不知道为什么 #include<stdio.h> #include<string.h& ...
- 线段树 HDU 3397
5种操作 具体看代码 #include<iostream> #include<stdio.h> #include<string.h> #include<alg ...
- 二维线段树 HDU 1823最简单的入门题
xiaoz 征婚,首先输入M,表示有M个操作. 借下来M行,对每一行 Ih a l I 表示有一个MM报名,H是高度, a是活泼度,L是缘分. 或 Q h1 h2 a1 a2 求 ...
- bzoj 3038: 上帝造题的七分钟2 线段树||hdu 4027
3038: 上帝造题的七分钟2 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1066 Solved: 476[Submit][Status][Dis ...
随机推荐
- Android Do not keep activities选项分析
Android Do not keep activities选项分析 Developer Options里面有一项: Do not keep activities -> 不保留Activitie ...
- (一)Maven初步了解与认识
Apache Maven是一个软件项目管理的综合工具.基于项目对象模型(POM)的概念,提供了帮助管理构建.文档.报告.依赖.发布等方法,Maven简化和标准化项目建设过程.处理编译,分配,文档,团队 ...
- Python基础算法综合:加减乘除四则运算方法
#!usr/bin/env python# -*- coding:utf-8 -*-#python的算法加减乘除用符号:+,-,*,/来表示#以下全是python2.x写法,3.x以上请在python ...
- OpenStack 架构 - 每天5分钟玩转 OpenStack(15)
终于正式进入 OpenStack 部分了. 今天开始,CloudMan 将带着大家一步一步揭开 OpenStack 的神秘面纱. OpenStack 已经走过了 6 个年头. 每半年会发布一个版本,版 ...
- 原生js事件的添加和删除
在IE浏览器中添加或删除事件用attachEvent.detachEvent.在其他标准浏览器中则用addEventListener.removeEventListener.下面的对事件的添加和删除做 ...
- [django]用户认证中只允许登陆用户访问(网页安全问题)
当设计一个重要网页时,一般要求未从登陆界面访问的用户不能进入其他页面,那么需要如何设置呢? 如下 django中的url.py urlpatterns = [ url(r'^$', 'login ...
- [麦先生]TP3.2之微信开发那点事[基础篇](获取access_token)
在微信文档中一共提供了两个access_token:一个是伪全局配置的Access_token;一个是在微信网页授权时的小Access_token 很多刚刚接触微信开发的人经常会混淆这两个的作用: 我 ...
- 深入.NET平台的软件系统分成开发(1/6)
第一章软件系统的分层开发 1.1 分成架构 分成模式定义:将解决方案中功能不同的模块分到不同的项目中实现.每一层中的主键应保持内聚性,每一层都应与他下面的各层保持松耦合. 分层模式是最常见的一种架构模 ...
- What is a RaycastHit normal?
The normal is the direction pointing away from the collider it hits. http://answers.unity3d.com/ques ...
- [No000081]SVN学习笔记1-服务端搭建
目录 一:SVN服务器搭建和使用. 1.首先来下载和搭建SVN服务器,地址http://subversion.apache.org/packages.html 2.安装完成后,启动VisualSVN ...