博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(线段树)UESTC 360-Another LCIS
阅读量:5115 次
发布时间:2019-06-13

本文共 2847 字,大约阅读时间需要 9 分钟。

For a sequence S1,S2,,SNS1,S2,⋯,SN, and a pair of integers (i,j)(i,j), if 1ijN1≤i≤j≤N and Si<Si+1<Si+2<<Sj1<SjSi<Si+1<Si+2<⋯<Sj−1<Sj, then the sequence Si,Si+1,,SjSi,Si+1,⋯,Sj is a CIS (Continuous Increasing Subsequence). The longest CIS of a sequence is called the LCIS (Longest Continuous Increasing Subsequence).

In this problem, we will give you a sequence first, and then some add operations and some query operations. An add operation adds a value to each member in a specified interval. For a query operation, you should output the length of the LCIS of a specified interval.

Input

The first line of the input is an integer TT, which stands for the number of test cases you need to solve.

Every test case begins with two integers NN, QQ, where NN is the size of the sequence, and QQ is the number of queries. S1,S2,,SNS1,S2,⋯,SN are specified on the next line, and then QQ queries follow. Every query begins with a character a or qa is followed by three integers LL, RR, VV, meaning that add VV to members in the interval [L,R][L,R] (including LL, RR), and q is followed by two integers LL, RR, meaning that you should output the length of the LCIS of interval [L,R][L,R].

T10T≤10;

1N,Q1000001≤N,Q≤100000;

1LRN1≤L≤R≤N;

10000S1,S2,,SN,V10000−10000≤S1,S2,⋯,SN,V≤10000.

Output

For every test case, you should output Case #k: on a single line first, where kkindicates the case number and starts at 11. Then for every q query, output the answer on a single line. See sample for more details.

Sample Input

15 60 1 2 3 4 q 1 4a 1 2 -10a 1 1 -6a 5 5 -4q 2 3q 4 4

Sample Output

Case #1:421 线段树维护各个左闭右开区间。需要注意的是区间合并的条件,为方便判断,每个结点记录这个区间左右两侧的值,方便进行比较能否合并。每次查询、修改的时候,没完全在目标区间内的时候 不要忘记将之前未传下去的改变传递下去。
1 #include 
2 //#include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 using namespace std; 12 typedef long long ll; 13 typedef unsigned long long ull; 14 const int MAX=1e5+5; 15 struct node 16 { 17 int left,right,mid;//分别表示从区间左侧开始最长的单调子序列,区间中最长,以右侧结尾的最长单调子序列长度 18 int x,y;//区间左侧的值,右侧的值 19 int num; 20 }st[10*MAX]; 21 //int col[10*MAX]; 22 void pushup(int l,int r,int k) 23 { 24 st[k].left=st[2*k].left; 25 st[k].right=st[2*k+1].right; 26 st[k].mid=max(st[2*k].mid,st[2*k+1].mid); 27 st[k].x=st[2*k].x; 28 st[k].y=st[2*k+1].y; 29 if(st[2*k].y
=ul&&r<=ur) 68 { 69 st[k].num+=z; 70 st[k].x+=z; 71 st[k].y+=z; 72 return; 73 } 74 pushdown(k); 75 if(l+1==r) 76 return; 77 int m=(l+r)/2; 78 if(ul
m) 81 update(ul,ur,m,r,2*k+1,z); 82 pushup(l,r,k); 83 } 84 int query(int ql,int qr,int l,int r,int k)//[ql,qr)是查询区间,[l,r)是当下区间 85 { 86 if(l>=ql&&r<=qr) 87 return st[k].mid; 88 pushdown(k); 89 int m=(l+r)/2; 90 int maxn; 91 if(ql
 

 

 

转载于:https://www.cnblogs.com/quintessence/p/6428877.html

你可能感兴趣的文章
类库与框架,强类型与弱类型的闲聊
查看>>
webView添加头视图
查看>>
php match_model的简单使用
查看>>
在NT中直接访问物理内存
查看>>
Intel HEX 文件格式
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
回调没用,加上iframe提交表单
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
mmap和MappedByteBuffer
查看>>