hdu 3308
终于A了,我好想砍人,虽然这是一道基础的区间合并。但是这错误我也是醉了。
错误我表在注释里。
题目意思不多说,sha崽题目出的很简洁。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int maxn=100010;
int lsum[maxn<<2],rsum[maxn<<2],msum[maxn<<2],p[maxn];
struct node {
int x,y;
} cover[maxn<<2];
void pushup(int l,int r,int rt)
{
cover[rt].x=cover[rt<<1].x;
cover[rt].y=cover[rt<<1|1].y;
lsum[rt]=lsum[rt<<1];
rsum[rt]=rsum[rt<<1|1];
msum[rt]=max(msum[rt<<1],msum[rt<<1|1]);
int mid=(l+r)>>1;
if(cover[rt<<1].y<cover[rt<<1|1].x)
{
if(lsum[rt]==mid-l+1)
lsum[rt]+=lsum[rt<<1|1];
if(rsum[rt]==r-mid)
rsum[rt]+=rsum[rt<<1];
msum[rt]=max(rsum[rt<<1]+lsum[rt<<1|1],msum[rt]);
}
}
void build(int l,int r,int rt)
{
if(l==r)
{
msum[rt]=lsum[rt]=rsum[rt]=1;
cover[rt].x=cover[rt].y=p[l];
return ;
}
int mid=(l+r)>>1;
build(lson);
build(rson);
pushup(l,r,rt) ;
}
void update(int xx,int yy,int l,int r,int rt)
{
if(l==r)
{
cover[rt].x=cover[rt].y=yy;
return ;
}
int mid=(l+r)>>1;
if(xx<=mid)
update(xx,yy,lson);
else
update(xx,yy,rson);
pushup(l,r,rt);
}
int query(int L,int R,int l,int r,int rt)//错就错在这个查找
{
if(L<=l&&r<=R)
return msum[rt];
int mid=(l+r)>>1;
int ans = 0; //就错在这,ans要初始化0
if(L<=mid)ans = query(L,R,lson);
if(R>mid)ans = max ( ans, query(L,R,rson) );
if(cover[rt<<1].y<cover[rt<<1|1].x)ans=max ( ans , min(mid-L+1, rsum[rt<<1])+min(R-mid,lsum[rt<<1|1]) );
return ans;
}
int main()
{
int n,m,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)scanf("%d",&p[i]);
build(0,n-1,1);
int a,b;
char op[5];
while(m--)
{
scanf("%s%d%d",op,&a,&b);//printf("%d %d\n",a,b);
if(*op=='Q')printf("%d\n",query(a,b,0,n-1,1));
else update(a,b,0,n-1,1);
//for(int i=1;i<=5;i++)printf("%d %d %d %d %d\n",cover[i].x,cover[i].y,lsum[i],rsum[i],msum[i]);
}
}
}
下面我把为什么不把ans初始化的问题写一下。
比如原序列是1 2 3 那么要查找 【1 ,2】 区间的话。
看图

反正意思就差不多这样吧,但是好像图上这种情况是不返回数的,所以ans是系统随机给的一个数。
hdu 3308的更多相关文章
- hdu 3308 最长连续上升区间
LCIS Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- POJ 3667 & HDU 3308 & HDU 3397 线段树的区间合并
看到讲课安排上 线段树有一节课"区间合并" 我是迷茫的 因为并没有见过 然后了解了一下题目 发现以前写过 还是很麻烦的树链剖分 大概是 解决带修改的区间查询"连续问题&q ...
- LCIS HDU - 3308 (线段树区间合并)
LCIS HDU - 3308 Given n integers. You have two operations: U A B: replace the Ath number by B. (inde ...
- HDU 3308 LCIS (线段树区间合并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 题目很好懂,就是单点更新,然后求区间的最长上升子序列. 线段树区间合并问题,注意合并的条件是a[ ...
- hdu 3308 LCIS(线段树区间合并)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=3308 LCIS Time Limit: 6000/2000 MS (Java/Others) ...
- HDU 3308 (线段树区间合并)
http://acm.hdu.edu.cn/showproblem.php?pid=3308 题意: 两个操作 : 1 修改 单点 a 处的值. 2 求出 区间[a,b]内的最长上升子序列. 做法 ...
- 线段树 HDU 3308
t 题目大意:给你n个数,m个操作.操作有两种:1.U x y 将数组第x位变为y 2. Q x y 问数组第x位到第y位连续最长子序列的长度.对于每次询问,输出一个答案 #include< ...
- HDU 3308 LCIS(线段树)
题目链接 模板题吧,忘了好多,终于A了... #include <cstring> #include <cstdio> #include <string> #inc ...
- HDU 3308 LCIS
题意: U A B: 把第A个数变成BQ A B: 输出[A,B]最长连续上升子序列(注意是连续 相当于子串) 思路:单点更新 ,区间合并几下左边开头最小 和右边结束最大的两个数即可. #incl ...
- HDU 3308 LCIS(线段树)
Problem Description Given n integers.You have two operations:U A B: replace the Ath number by B. (in ...
随机推荐
- Unity5 的新旧延迟渲染Deferred Lighting Rendering Path
unity5 的render path ,比4的区别就是使用的新的deferred rendering,之前的4的deferred rendering(其实是light prepass)也被保留了下来 ...
- 关于Unity的ViewSpace(CameraSpace)的坐标系
从昨天开始遇到一个看似很小,但令我苦恼的问题,由于对Unity的坐标系没有直接搞清楚,所以导致一个shader没看懂,于是发了个贴:http://game.ceeger.com/forum/read. ...
- 银联手机支付(.Net Csharp),3DES加密解密,RSA加密解密,RSA私钥加密公钥解密,.Net RSA 3DES C#
前段时间做的银联支付,折腾了好久,拼凑的一些代码,有需要的朋友可以参考,本人.Net新手,不保证准确性! 这个银联手机支付没有SDK提供,技术支持也没有.Net的,真心不好搞! RSA加解密,这里有个 ...
- span元素之间的间距
去除inline-block元素间间距的N种方法- zhangxinxu http://www.zhangxinxu.com/wordpress/2012/04/inline-block-space- ...
- Python 函数的参数知识汇总
函数搞不熟,后边就晕头转向了,在此重新归纳一下廖大神的函数教程,加深记忆 一.函数的参数分为: 位置参数 def power(x): # x 就是power(x)的一个位置参数,我们调用power(x ...
- 不区分大小写的in_array实现 thinkphp框架
// 不区分大小写的in_array实现 function in_array_case($value,$array) { return in_array(strtolower($value),arra ...
- 【题解】警位安排( 树形 DP)
[题目描述]一个重要的基地被分成了 n 个连通的区域 , 出于某种原因 , 这个基地以某一个区域为核心,呈一树形分布.在每个区域里安排警卫的费用是不同的,而每个区域的警卫都可以望见其相邻的区域 .如果 ...
- SQL profile纵览(10g)
第一篇:介绍 10g开始,查询优化器(Query optimizer)扩展成自动调整优化器(Automatic Tuning Optimizer).也就是扩展了功能.此时,我们就可以让 ...
- Android 颜色渲染(二) 颜色区域划分原理与实现思路
版权声明:本文为博主原创文章,未经博主允许不得转载. 上一篇讲到颜色选择器,该demo不能选择黑白或者具体区间颜色,这是为什么呢,还是要从原理部分讲起,首先看一下两张图: 图1 ...
- OSX 10.10+Xcode5.1 无法启动或者安装应用程序到iOS 6.1 simulator
错误症状: OSX 10.10+Xcode5.1 无法启动或者安装应用程序到iOS 6.1 simulator 错误原因: iOS Simulator 内核要使用OSX 系统内核,所以iOS Simu ...