UESTC 360 Another LCIS
Another LCIS
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的更多相关文章
- (中等) 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 ...
- 【37.07%】【UESTC 360】Another LCIS
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status F ...
- UESTC 360(1425) another LCIS
这道题是CD老OJ上面的一道题,现在在新OJ上的题号是360,开始在VJ上做的提交一直RE(囧).后来才知道OJ移位了. 这道题是一个简单的成段更新+区间合并的线段树的题,1A还让我小激动了一下 这道 ...
- UESTC 1425 Another LCIS
也是一个求最长连续单调区间的问题,不同于HDU 3308LCIS的是,单点更新变成了区间成段增加,没关系同样的方法可破之.由于是成段更新,所以比更新区间小的区间是最大连续区间长度是不变的,所以更新su ...
- uestc 360(区间合并)
题意:有一个长度为n的序列.然后有两种操作,Q a b是输出区间a b内最长上升子序列的长度.A a b c是把区间a b内全部数字加上c. 题解:用线段树维护区间的最长上升子序列长度,那么一个区间的 ...
- uestc Another LCIS
Another LCIS Time Limit: 1000 ms Memory Limit: 65536 kB Solved: 193 Tried: 2428 Description For a se ...
- Three.js制作360度全景图
这是个基于three.js的插件,预览地址:戳这里 使用方法: 1.这个插件的用法很简单,引入如下2个js <script src="js/three.min.js"> ...
- 360安全卫士造成Sharepoint文档库”使用资源管理器打开“异常
备注:企业用户还是少用360为妙 有客户反馈:部门里的XP SP2环境客户机全部异常,使用资源管理器打开Sharepoint文档库,看到的界面样式很老土,跟本地文件夹不一样 ...
- 内核控制Meta标签:让360浏览器默认使用极速模式打开网页(转)
为了让网站页面不那么臃肿,也懒的理IE了,同时兼顾更多的国内双核浏览器,在网页页头中添加了下面两行Meta控制标签. 1,网页头部加入 <meta name="renderer&quo ...
随机推荐
- mysql-幻读及其例子
第一步建表并插入5条记录: 接下来我们看下大部分mysql所说的幻读现象: 事务1(开启事务查询发现没有记录6准备插入): 事务2(开启事务,发现没有记录6插入,并提交事务): 事务1:查询发现 ...
- 拥抱PBO(基于项目的组织)聚焦核心价值创造
近年来.PBO(Project-Based Organizations)作为一种新兴的整合各类专业智力资源和专业知识的组织结构,受到越来越多的关注,第五版PMBOK出现的新词汇.三种组织(职能型.矩阵 ...
- 图像几何变换(geometric transformation)
1. imwarp B = imwarp(A,tform) demo I = imread('cameraman.tif'); tform = affine2d([1 0 0; .5 1 0; 0 0 ...
- Most common words
To find the most common words, we can apply the DSU pattern; most_common takes a histogram and retur ...
- String slices
String slices A segment of a string is called a slice. Selecting a slice is similar selecting a char ...
- BZOJ 1001 平面图与对偶图的转化 最短路Or最大流
思路: 1.按照题意求最小割 转换成最大流用Dinic解 2. 转换成对偶图 求最短路 Dinic: //By SiriusRen #include <queue> #include &l ...
- linux中不同颜色的文件代表什么不同的类型
linux 文件颜色的含义,蓝色代表目录,绿色代表可执行文件,红色表示压缩文件,浅蓝色表示链接文件,灰色表示其他文件,红色闪烁表示链接的文件有问题了,黄色表示设备文件.蓝色文件----------目. ...
- KafkaProducer的整体逻辑
概述 KafkaProducer是用户向kafka servers发送消息的客户端.官网上对producer的记载如下: Kafka所有的节点都可以应答metadata的请求,这些metadata中包 ...
- Android项目实战(四十四):浅谈Postman (网络请求调试插件)
前言: Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件. 在项目开发中,可以依赖此工具模拟API测试. 使用详解: 各种情况Api的模拟请求的Postman使用方 ...
- Spring MVC模式示例(未采用解耦控制器)
Product package com.mstf.bean; import java.io.Serializable; /** * Product类,封装了一些信息,包含三个属性 * @author ...