UESTC 360 Another LCIS

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

The 9th UESTC Programming Contest Preliminary

解题:线段树往死里搞

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3 const int maxn = 100010;
  4 struct node {
  5     int ret,lv,rv,lsum,rsum,lazy;
  6 } tree[maxn<<2];
  7 void pushup(int v,int k) {
  8     tree[v].lsum = tree[v<<1].lsum;
  9     tree[v].rsum = tree[v<<1|1].rsum;
 10     tree[v].lv = tree[v<<1].lv;
 11     tree[v].rv = tree[v<<1|1].rv;
 12     if(tree[v].lsum == k - (k>>1) && tree[v<<1].rv < tree[v<<1|1].lv)
 13         tree[v].lsum += tree[v<<1|1].lsum;
 14     if(tree[v].rsum == (k>>1) && tree[v<<1].rv < tree[v<<1|1].lv)
 15         tree[v].rsum += tree[v<<1].rsum;
 16     tree[v].ret = max(tree[v<<1].ret,tree[v<<1|1].ret);
 17     if(tree[v<<1].rv < tree[v<<1|1].lv)
 18         tree[v].ret = max(tree[v].ret,tree[v<<1].rsum + tree[v<<1|1].lsum);
 19 }
 20 void pushdown(int v,int k) {
 21     if(tree[v].lazy) {
 22         tree[v<<1].lazy += tree[v].lazy;
 23         tree[v<<1|1].lazy += tree[v].lazy;
 24         tree[v<<1].lv += tree[v].lazy;
 25         tree[v<<1].rv += tree[v].lazy;
 26         tree[v<<1|1].lv += tree[v].lazy;
 27         tree[v<<1|1].rv += tree[v].lazy;
 28         tree[v].lazy = 0;
 29     }
 30 }
 31 void build(int L,int R,int v) {
 32     tree[v].lazy = 0;
 33     if(L == R) {
 34         tree[v].lsum = tree[v].rsum = 1;
 35         scanf("%d",&tree[v].rv);
 36         tree[v].lv = tree[v].rv;
 37         tree[v].ret = 1;
 38         return;
 39     }
 40     int mid = (L + R)>>1;
 41     build(L,mid,v<<1);
 42     build(mid+1,R,v<<1|1);
 43     pushup(v,R - L + 1);
 44 }
 45 void update(int L,int R,int lt,int rt,int val,int v) {
 46     if(lt <= L && rt >= R) {
 47         tree[v].lazy += val;
 48         tree[v].lv += val;
 49         tree[v].rv += val;
 50         return;
 51     }
 52     pushdown(v,R - L + 1);
 53     int mid = (L + R)>>1;
 54     if(lt <= mid) update(L,mid,lt,rt,val,v<<1);
 55     if(rt > mid) update(mid+1,R,lt,rt,val,v<<1|1);
 56     pushup(v,R - L + 1);
 57 }
 58 int query(int L,int R,int lt,int rt,int v) {
 59     if(lt <= L && rt >= R) return tree[v].ret;
 60     pushdown(v,R - L + 1);
 61     int ret  = 0,mid = (L + R)>>1;
 62     if(lt <= mid) ret = max(ret,query(L,mid,lt,rt,v<<1));
 63     if(rt > mid) ret = max(ret,query(mid+1,R,lt,rt,v<<1|1));
 64     if(lt <= mid && rt > mid && tree[v<<1].rv < tree[v<<1|1].lv)
 65         ret = max(ret,min(mid - lt + 1,tree[v<<1].rsum) + min(rt - mid,tree[v<<1|1].lsum));
 66     pushup(v,R - L + 1);
 67     return ret;
 68 }
 69 int main() {
 70     int T,n,m,x,y,val,cs = 1;
 71     char op[3];
 72     scanf("%d",&T);
 73     while(T--) {
 74         scanf("%d %d",&n,&m);
 75         printf("Case #%d:\n",cs++);
 76         build(1,n,1);
 77         while(m--) {
 78             scanf("%s%d%d",op,&x,&y);
 79             if(op[0] == ‘a‘) {
 80                 scanf("%d",&val);
 81                 update(1,n,x,y,val,1);
 82             } else if(op[0] == ‘q‘)
 83                 printf("%d\n",query(1,n,x,y,1));
 84         }
 85     }
 86     return 0;
 87 }
 88 /*
 89 1
 90 5 6
 91 0 1 2 3 4
 92 q 1 4
 93 a 1 2 -10
 94 a 1 1 -6
 95 a 5 5 -4
 96 q 2 3
 97 q 4 4
 98
 99 Case #1:
100 4
101 2
102 1
103 */

时间: 2024-10-10 20:10:19

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<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 (Longe

UESTC 360(1425) another LCIS

这道题是CD老OJ上面的一道题,现在在新OJ上的题号是360,开始在VJ上做的提交一直RE(囧).后来才知道OJ移位了. 这道题是一个简单的成段更新+区间合并的线段树的题,1A还让我小激动了一下 这道题的大概意思是有两种操作,一种是成段地增加一个值,另外一种是询问从l到r这段区间内的最长递增子序列 首先先分析一下,如果某一段的值成段地增加一个量,那么该区间内的数的相对大小是不变的,因此递增子序列的长度是不会改变的 是要分析对于结果有影响的信息与值:一是每个子区间中的最值,二是有可能在两个区间合并

360全景平台的公司有哪些?

360全景平台的公司有哪些?北京做360度全景平台的公司哪家不错?目前在全景技术领域做得相对挺不错的,以技术实力著称的酷雷曼3DVR智能全景系统是一个不错的选择.如果要说全景平台哪家好涉及到很多方面,比如系统是否完善.后续升级更新应用.售后服务如何等等. 比较不错的360度全景平台公司都有哪些特点? 1. 真实感强,无视角死区; 2. 观赏者可通过鼠标任意放大缩小.随意拖动; 3. 数据量小,硬件要求低,用户只需上网打开网页便可观看; 4. 高清晰度的全屏场景,令细节表现更完美; 5. 实景漫游

360全景照片怎么制作哪个平台好?

360全景照片如何制作平台哪家好?全景图在广告宣传等方面应用非常广泛,用广角的手法来渲染衬托,其实很多全景图都是由多张图片拼接而成,展示功能方面还是非常完善的,在行业展示方面酷雷曼3DVR智能全景展示系统受到了众多商家的追捧! 酷雷曼3DVR智能全景系统 酷雷曼全景云平台支持多种设备播放全景,以及随时随地浏览高清全景.特色漫游,一键分享至微信朋友圈及多个社交平台指定好友,轻松传递全景世界无限精彩.http://www.kuleiman.com/kuleiman/100689/ 360全景顾名思义

怎么样拍摄360度全景?

360全景不是凭空生成的,要制作一个360全景,我们需要有原始的图像素材,原始图像素材的来源可以是: A.在现实的场景中,使用相机的全景拍摄功能得到的鱼眼图像 B.通过建模渲染得到的虚拟图像 下文中的表格对比了在不同的设备.拍摄机位.拼合模式.拍摄难度下所能获得到的鱼眼图像 要拍摄全景素材我们需要用到一些专业设备,如下: 数码单反相机 360全景拍摄硬件配备-数码单反相机 首先让我们来认识一下什么是数码单反相机.说白了,数码单反相机就是使用了单反新技术的数码相机.作为专业级的数码相机,用其拍摄出

360全景,专业的全景公司都需要这样去做

随着微信用户的不断增长,微信的普及率已越来越高,微信用户的爆炸性增长同时带动了微信营销的兴起,微营销成为了继网络营销以后另一大产品服务的销售渠道.微信商家号-微信公众平台的拓展功能也是越来越强大!做为微信平台的一大亮点:360全景展示也横空出世,那到底什么是微信360全景呢,专业360全景制作公司酷雷曼今天就和大家分享一些这方面的知识! 简单的说就是360全景依托微信平台,借助手机移动终端全方位展示企业单位或者房产.景区.酒店.家具馆.厂区等,给人以身临其境的感觉!不用到现场,就要以通过移动终端

UESTC 电子科大专题训练 数据结构 D

UESTC 1584 题意:平面坐标上有n个怪物,每个怪物有一个rank值,代表x坐标和y坐标都不大于它本身的怪物数(不包括本身) 思路:对x y坐标从小到大排序,x优先排序,用数状数组计算y坐标小于它的数量 AC代码: #include "iostream" #include "string.h" #include "stack" #include "queue" #include "string" #i

Android插件实例——360 DroidPlugin具体解释

在中国找到钱不难,但你的一个点子不意味着是一个创业.你谈一个再好的想法,比方我今天谈一个创意说,新浪为什么不收购GOOGLE呢?这个创意非常好.新浪一收购GOOGLE.是不是新浪就变成老大了?你从哪儿弄来钱?怎么去整合GOOGLE呢: 之前写过有关于Android 插件方向的文章,解析了一下Android的插件原理与执行方式.非常多小伙伴都问我.为什么不把我制作的插件放到Github上,让大家共享一下. 我仅仅能说.大哥啊,这个插件是我在公司研发的时候制作的,商业机密.不能开源啊. 刚好.近期逛

郑州网站建设360不容忽视市场份额渐大

360haosou今日对外公布,在过去的2014年,haosou在搜索市场的份额超过30%.在此基础上,好搜商业化进程驶入快车道,与国内41家代理商达成了合作关系,实现了二三线城市的覆盖,并已经开始进军三四线城市市场. 据介绍,在构建渠道体系的过程中,360为代理商提供了全方位的支持与服务.其中的增值产品"企业地标"免费为客户提供了专属的企业信息平台,内含五大增值服务,包含了二维码.商家秀.谈谈.地图和百科等一系列服务内容. 在大数据方面,360拥有超过5.09亿的PC端活跃用户和6.