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的更多相关文章

  1. 主席树[可持久化线段树](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 ...

  2. 最大矩阵覆盖权值--(静态连续最大子段 (线段树) )-HDU(6638)Snowy Smile

    这题是杭电多校2019第六场的题目 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6638 题意:给你平面上n个点,每个点都有权值(有负权),让你计算一 ...

  3. 敌兵布阵(线段树HDU 1166)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...

  4. HDU 6464 权值线段树 && HDU 6468 思维题

    免费送气球 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  5. 区间第k大问题 权值线段树 hdu 5249

    先说下权值线段树的概念吧 权值平均树 就是指区间维护值为这个区间内点出现次数和的线段树 用这个加权线段树 解决第k大问题就很方便了 int query(int l,int r,int rt,int k ...

  6. 线段树 HDU 3397(真)

    5 种操作  0 1 然后 异或 似乎这种2个更新的先后每次都搞不清 覆盖有覆盖就可以不异或 也不知道为什么 #include<stdio.h> #include<string.h& ...

  7. 线段树 HDU 3397

    5种操作 具体看代码 #include<iostream> #include<stdio.h> #include<string.h> #include<alg ...

  8. 二维线段树 HDU 1823最简单的入门题

    xiaoz 征婚,首先输入M,表示有M个操作. 借下来M行,对每一行   Ih a l     I 表示有一个MM报名,H是高度, a是活泼度,L是缘分. 或   Q h1 h2 a1 a2    求 ...

  9. bzoj 3038: 上帝造题的七分钟2 线段树||hdu 4027

    3038: 上帝造题的七分钟2 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1066  Solved: 476[Submit][Status][Dis ...

随机推荐

  1. 关于csrss.exe和winlogon.exe进程多、占用CPU高的解决办法,有人在暴力破解

    关于csrss.exe和winlogon.exe进程多.占用CPU高的解决办法 最近VPS的CPU一直处在100%左右,后台管理上去经常打不开,后来发现上远程都要好半天才反映过来,看到任务管理器有多个 ...

  2. 转载:WinForm中播放声音的三种方法

    转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...

  3. RunLoop-Custom input source

    Creating Creating a custom input source involves defining the following: The information you want yo ...

  4. 迁移Reporting Services的方法与WMI错误

    今天上午,接到一个任务:迁移SQL SERVER 2005的报表服务到另外一台SQL SERVER 2008服务器,结果等我备份了两边服务器的ReportServer,ReportServerTemp ...

  5. 浅析SQL SERVER执行计划中的各类怪相

    在查看执行计划或调优过程中,执行计划里面有些现象总会让人有些疑惑不解: 1:为什么同一条SQL语句有时候会走索引查找,有时候SQL脚本又不走索引查找,反而走全表扫描? 2:同一条SQL语句,查询条件的 ...

  6. MS SQL 错误:无法绑定由多个部分组成的标识符 "xxxxx"

    今天有个同事问我一个SQL问题,觉得有点意思,虽然能很快定位并解决问题,但是就是有种说不清道不明的感觉.因为不能解释清楚(很多是建立在假设上),顺便记录一下,希望有清楚原理的人能解答一二. 原SQL语 ...

  7. JavaSe:Cookie 管理的API介绍

    CookieManager 在使用HttpURLConnection中,并没有关于Cookie的管理.如果使用Java程序时,怎么管理cookie呢? Cookie案例 1. User Agent - ...

  8. Windows 64位下装Oracle 11g,PLSQL Developer的配置问题,数据库处显示为空白的解决方案

    安装pl sql 后,若下图的数据库处为空.则需要安装32位的客户端,说明pl sql不支持64位客户端连接. 解决办法:  1.下载32位Oracle客户端,并安装 2.设置PLSQL Develo ...

  9. JavaScript 易错知识点整理

    本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一些ES ...

  10. 3-4 linux 用户及权限管理

    1. 安全上下文(secure context) 取决于资源权限和进程权限 分为三种:r:读,w:写,x:执行 每一类用户都有三个权限 文件: r:可读,可以使用类似cat等命令来查看文件内容 w:可 ...