Another LCIS

Time Limit: 1000ms
Memory Limit: 65536KB

This problem will be judged on UESTC. Original ID: 1425
64-bit integer IO format: %lld      Java class name: Main

For a sequence S1,S2,...,SN, and a pair of integers (i, j), if 1 <= i <= j <= N and Si < Si+1 < Si+2 <...< Sj-1 < Sj, then the sequence Si,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 T, which stands for the number of test cases you need to solve.

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

T <= 10;
1 <= N, Q <= 100000;
1 <= L <= R <= N;
-10000 <= S1,S2,...,SN, V <= 10000.

 

Output

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

 

Sample Input

1
5 6
0 1 2 3 4 
q 1 4
a 1 2 -10
a 1 1 -6
a 5 5 -4
q 2 3
q 4 4

Sample Output

Case #1:
4
2
1

Source

 
解题:线段树往死里搞
 
 #include <bits/stdc++.h>
using namespace std;
const int maxn = ;
struct node {
int ret,lv,rv,lsum,rsum,lazy;
} tree[maxn<<];
void pushup(int v,int k) {
tree[v].lsum = tree[v<<].lsum;
tree[v].rsum = tree[v<<|].rsum;
tree[v].lv = tree[v<<].lv;
tree[v].rv = tree[v<<|].rv;
if(tree[v].lsum == k - (k>>) && tree[v<<].rv < tree[v<<|].lv)
tree[v].lsum += tree[v<<|].lsum;
if(tree[v].rsum == (k>>) && tree[v<<].rv < tree[v<<|].lv)
tree[v].rsum += tree[v<<].rsum;
tree[v].ret = max(tree[v<<].ret,tree[v<<|].ret);
if(tree[v<<].rv < tree[v<<|].lv)
tree[v].ret = max(tree[v].ret,tree[v<<].rsum + tree[v<<|].lsum);
}
void pushdown(int v,int k) {
if(tree[v].lazy) {
tree[v<<].lazy += tree[v].lazy;
tree[v<<|].lazy += tree[v].lazy;
tree[v<<].lv += tree[v].lazy;
tree[v<<].rv += tree[v].lazy;
tree[v<<|].lv += tree[v].lazy;
tree[v<<|].rv += tree[v].lazy;
tree[v].lazy = ;
}
}
void build(int L,int R,int v) {
tree[v].lazy = ;
if(L == R) {
tree[v].lsum = tree[v].rsum = ;
scanf("%d",&tree[v].rv);
tree[v].lv = tree[v].rv;
tree[v].ret = ;
return;
}
int mid = (L + R)>>;
build(L,mid,v<<);
build(mid+,R,v<<|);
pushup(v,R - L + );
}
void update(int L,int R,int lt,int rt,int val,int v) {
if(lt <= L && rt >= R) {
tree[v].lazy += val;
tree[v].lv += val;
tree[v].rv += val;
return;
}
pushdown(v,R - L + );
int mid = (L + R)>>;
if(lt <= mid) update(L,mid,lt,rt,val,v<<);
if(rt > mid) update(mid+,R,lt,rt,val,v<<|);
pushup(v,R - L + );
}
int query(int L,int R,int lt,int rt,int v) {
if(lt <= L && rt >= R) return tree[v].ret;
pushdown(v,R - L + );
int ret = ,mid = (L + R)>>;
if(lt <= mid) ret = max(ret,query(L,mid,lt,rt,v<<));
if(rt > mid) ret = max(ret,query(mid+,R,lt,rt,v<<|));
if(lt <= mid && rt > mid && tree[v<<].rv < tree[v<<|].lv)
ret = max(ret,min(mid - lt + ,tree[v<<].rsum) + min(rt - mid,tree[v<<|].lsum));
pushup(v,R - L + );
return ret;
}
int main() {
int T,n,m,x,y,val,cs = ;
char op[];
scanf("%d",&T);
while(T--) {
scanf("%d %d",&n,&m);
printf("Case #%d:\n",cs++);
build(,n,);
while(m--) {
scanf("%s%d%d",op,&x,&y);
if(op[] == 'a') {
scanf("%d",&val);
update(,n,x,y,val,);
} else if(op[] == 'q')
printf("%d\n",query(,n,x,y,));
}
}
return ;
}
/*
1
5 6
0 1 2 3 4
q 1 4
a 1 2 -10
a 1 1 -6
a 5 5 -4
q 2 3
q 4 4 Case #1:
4
2
1
*/

UESTC 360 Another LCIS的更多相关文章

  1. (中等) UESTC 360 Another LCIS ,线段树+区间更新。

    Description: For a sequence S1,S2,⋯,SN, and a pair of integers (i,j), if 1≤i≤j≤N and Si<Si+1<S ...

  2. 【37.07%】【UESTC 360】Another LCIS

    Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  Status F ...

  3. UESTC 360(1425) another LCIS

    这道题是CD老OJ上面的一道题,现在在新OJ上的题号是360,开始在VJ上做的提交一直RE(囧).后来才知道OJ移位了. 这道题是一个简单的成段更新+区间合并的线段树的题,1A还让我小激动了一下 这道 ...

  4. UESTC 1425 Another LCIS

    也是一个求最长连续单调区间的问题,不同于HDU 3308LCIS的是,单点更新变成了区间成段增加,没关系同样的方法可破之.由于是成段更新,所以比更新区间小的区间是最大连续区间长度是不变的,所以更新su ...

  5. uestc 360(区间合并)

    题意:有一个长度为n的序列.然后有两种操作,Q a b是输出区间a b内最长上升子序列的长度.A a b c是把区间a b内全部数字加上c. 题解:用线段树维护区间的最长上升子序列长度,那么一个区间的 ...

  6. uestc Another LCIS

    Another LCIS Time Limit: 1000 ms Memory Limit: 65536 kB Solved: 193 Tried: 2428 Description For a se ...

  7. Three.js制作360度全景图

    这是个基于three.js的插件,预览地址:戳这里 使用方法: 1.这个插件的用法很简单,引入如下2个js <script src="js/three.min.js"> ...

  8. 360安全卫士造成Sharepoint文档库”使用资源管理器打开“异常

           备注:企业用户还是少用360为妙        有客户反馈:部门里的XP SP2环境客户机全部异常,使用资源管理器打开Sharepoint文档库,看到的界面样式很老土,跟本地文件夹不一样 ...

  9. 内核控制Meta标签:让360浏览器默认使用极速模式打开网页(转)

    为了让网站页面不那么臃肿,也懒的理IE了,同时兼顾更多的国内双核浏览器,在网页页头中添加了下面两行Meta控制标签. 1,网页头部加入 <meta name="renderer&quo ...

随机推荐

  1. 微信公众号开发将war包导入新浪sae出现错误

    JAVA_Error: Error for /wechat.do java.lang.NoSuchFieldError: INSTANCE at org.apache.http.impl.io.Def ...

  2. SPOJ1812: LCS2 - Longest Common Substring II & BZOJ2946: [Poi2000]公共串

    [传送门:SPOJ1811&BZOJ2946] 简要题意: 给出若干个字符串,求出这些字符串的最长公共子串 题解: 后缀自动机 这两道题的区别只是在于一道给出了字符串个数,一个没给,不过也差不 ...

  3. TortoiseGit配合msysGit在Git@OSC代码托管的傻瓜教程

    命令行太麻烦,肿么破?便便利用睡觉的时间解决了一点效率问题,tortoiseGit处理GitHub,一样可以处理 Git @osc ,虽然说可以用gitk来调出图形界面,but,我就是不想看见黑黑的命 ...

  4. Dictionaries and tuples

    Dictionaries have a method called items that returns a list of tuples, where each tuple is a key-val ...

  5. Kali linux 2016.2(Rolling)里Metasploit连接(包括默认和自定义)的PostgreSQL数据库之后的切换到指定的工作空间

    不多说,直接上干货! 为什么要这么做? 答: 方便我们将扫描不同的目标或目标的不同段,进行归类.为了更好的后续工作! 前期博客 Kali linux 2016.2(Rolling)里Metasploi ...

  6. tnsnames.ora文件说明

    目录位置 unix:$ORACLE_HOME/network/admin WINDOW:%ORACLE_HOME%\network\admin 设置相应的环境变量:TNS_ADMIN tnsname. ...

  7. P1452 Beauty Contes(旋转卡壳版)

    题目背景 此处省略1W字^ ^ 题目描述 贝茜在牛的选美比赛中赢得了冠军”牛世界小姐”.因此,贝西会参观N(2 < = N < = 50000)个农场来传播善意.世界将被表示成一个二维平面 ...

  8. PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(3)

    2.3 理解一致性和数据丢失 挖掘PostgreSQL事务日志而不考虑一致性是不可能的.在本章的第一部分,我们已经大体上解释了事务日志的基本思想.您已经知道,无需事先的日志改变的能力,使数据处于一种好 ...

  9. dedecms4张关键表解析之1

    虽然dedecms默认共有87张表,但是只有4张最核心,最最要的表. 1.第一张表:dede_arctype  栏目表 dede设计者认为不管存放什么样的数据(文章,商品,电影)都应该属于某个栏目(类 ...

  10. How Javascript works (Javascript工作原理) (十五) 类和继承及 Babel 和 TypeScript 代码转换探秘

    个人总结:读完这篇文章需要15分钟,文章主要讲解了Babel和TypeScript的工作原理,(例如对es6 类的转换,是将原始es6代码转换为es5代码,这些代码中包含着类似于 _classCall ...