2015 多校联赛 ——HDU5316(线段树)
Magicians, sorcerers, wizards, magi, and practitioners of magic by other titles have appeared in myths, folktales, and literature throughout recorded history, with fantasy works drawing from this background.
In medieval chivalric romance, the wizard often appears as a wise old man and acts as a mentor, with Merlin from the King Arthur stories representing a prime example. Other magicians can appear as villains, hostile to the hero.

Mr. Zstu is a magician, he has many elves like dobby, each of which has a magic power (maybe negative). One day, Mr. Zstu want to test his ability of doing some magic. He made the elves stand in a straight line, from position 1 to position n, and he used two
kinds of magic, Change magic and Query Magic, the first is to change an elf’s power, the second is get the maximum sum of beautiful subsequence of a given interval. A beautiful subsequence is a subsequence that all the adjacent pairs of elves in the sequence
have a different parity of position. Can you do the same thing as Mr. Zstu ?
Each of the test case begins with two integers n, m represent the number of elves and the number of time that Mr. Zstu used his magic.
(n,m <= 100000)
The next line has n integers represent elves’ magic power, magic power is between -1000000000 and 1000000000.
Followed m lines, each line has three integers like
type a b describe a magic.
If type equals 0, you should output the maximum sum of beautiful subsequence of interval [a,b].(1 <= a <= b <= n)
If type equals 1, you should change the magic power of the elf at position a to b.(1 <= a <= n, 1 <= b <= 1e9)
1 1
1
0 1 1
// 以前没专门学习过线段树,所有是参考别人代码写出了的(表示最初并没有看懂题意 OoO!)
题意:有n个数,两个操作,0操作,输出l到r ,所有奇偶交替的子序列中,值的最大和。 1操作是把a位置的数改成b。
用oo代表偶始偶终:oo可以由oj oo合成,oo jo 合成。其他与此类似
#include <iostream>
#include <cstdio>
#include <cstring>
typedef long long ll;
using namespace std;
const int n= 100010;
const ll INF = 1000000000000000000; struct pnode
{
int l,r;
ll jj,jo,oj,oo;
} node[n<<2];
ll a[n]; ll max(ll x, ll y)
{
if(x < y)
return y;
return x;
} void work(int i)
{
int lc = i << 1;
int rc = lc | 1; node[i].jj = max(node[lc].jj,node[rc].jj);
node[i].jj = max(node[i].jj,node[lc].jj+node[rc].oj);
node[i].jj = max(node[i].jj,node[lc].jo+node[rc].jj); node[i].oj = max(node[lc].oj,node[rc].oj);
node[i].oj = max(node[i].oj,node[lc].oo+node[rc].jj);
node[i].oj = max(node[i].oj,node[lc].oj+node[rc].oj); node[i].jo = max(node[lc].jo,node[rc].jo);
node[i].jo = max(node[i].jo,node[lc].jj+node[rc].oo);
node[i].jo = max(node[i].jo,node[lc].jo+node[rc].jo); node[i].oo = max(node[lc].oo,node[rc].oo);
node[i].oo = max(node[i].oo,node[lc].oj+node[rc].oo);
node[i].oo = max(node[i].oo,node[lc].oo+node[rc].jo);
}
void build(int i,int l,int r)
{
node[i].l = l;
node[i].r = r; if(l == r)
{
if(l % 2)
{
node[i].jj = a[l];
node[i].jo = node[i].oj = node[i].oo = -INF;
}
else
{
node[i].oo = a[l];
node[i].jo = node[i].oj = node[i].jj = -INF;
}
return;
} build(i << 1,l ,(l+r)/2);
build(i << 1 | 1, (l+r)/2 + 1,r); work(i);
} void update(int i,int pos,int val)
{
if(node[i].l == pos && node[i].r == pos)
{
if(pos % 2)
{
node[i].jj = val;
}
else
{
node[i].oo = val;
}
return;
} int mid = (node[i].l + node[i].r)/2;
if(pos <= mid)
update(i << 1,pos, val);
else
update(i << 1 | 1,pos, val); work(i);
} pnode query(int i,int l,int r)
{
if(node[i].l == l && node[i].r == r) return node[i]; int lc = i << 1;
int rc = lc+1;
int mid = ( node[i].l + node[i].r )/2; if(r <= mid )
return query(lc,l,r);
else if(l > mid)
return query(rc,l,r);
else
{
pnode ln = query( lc, l, mid ), rn = query( rc, mid + 1, r ), res;
res.jj = max( ln.jj, rn.jj );
res.jj = max( res.jj, ln.jj + rn.oj );
res.jj = max( res.jj, ln.jo + rn.jj );
res.jo = max( ln.jo, rn.jo );
res.jo = max( res.jo, ln.jj + rn.oo );
res.jo = max( res.jo, ln.jo + rn.jo );
res.oj = max( ln.oj, rn.oj );
res.oj = max( res.oj, ln.oj + rn.oj );
res.oj = max( res.oj, ln.oo + rn.jj );
res.oo = max( ln.oo, rn.oo );
res.oo = max( res.oo, ln.oo + rn.jo );
res.oo = max( res.oo, ln.oj + rn.oo );
return res;
}
} int main ()
{ int t,m,k;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&k); for(int i = 1; i <= m; i++)
scanf("%I64d",&a[i]); build(1,1,m); while(k--)
{
int op;
scanf("%d", &op);
if ( op == 0 ) {
int l, r;
scanf("%d%d", &l, &r);
pnode nn = query( 1, l, r );
ll ans = nn.jj;
ans = max( ans, nn.jo );
ans = max( ans, nn.oj );
ans = max( ans, nn.oo );
printf("%I64d\n", ans); }
else if ( op == 1 ) {
int pos, val;
scanf("%d%d", &pos, &val);
update( 1, pos, val );
}
}
}
return 0;
}
2015 多校联赛 ——HDU5316(线段树)的更多相关文章
- 2015 多校联赛 ——HDU5372(树状数组)
Sample Input 3 0 0 0 3 0 1 5 0 1 0 0 1 1 0 1 0 0 Sample Output Case #1: 0 0 0 Case #2: 0 1 0 2 有0, ...
- 2015 多校联赛 ——HDU5299(树删边)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission ...
- HDU 4614 Vases and Flowers (2013多校2 1004 线段树)
Vases and Flowers Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others ...
- HDU 4614 Vases and Flowers (2013多校第二场线段树)
题意摘自:http://blog.csdn.net/kdqzzxxcc/article/details/9474169 ORZZ 题意:给你N个花瓶,编号是0 到 N - 1 ,初始状态花瓶是空的,每 ...
- HDU6602 Longest Subarray hdu多校第二场 线段树
HDU6602 Longest Subarray 线段树 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6602 题意: 给你一段区间,让你求最长的区间使 ...
- 2015 多校联赛 ——HDU5325(DFS)
Crazy Bobo Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Tota ...
- 2015 多校联赛 ——HDU5303(贪心)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- 2015 多校联赛 ——HDU5334(构造)
Virtual Participation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- 2015 多校联赛 ——HDU5302(构造)
Connect the Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
随机推荐
- 201621123044 《Java程序设计》第六周实验总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...
- Struts2之Struts2的下载与安装
Struts2的下载 登陆struts的官网 下载Full Distribution这个选项的struts2的包. 这是Struts2的完整版,里面包括Struts2的实例应用,空实例应用,核心库,源 ...
- poj 2142 The Balance
The Balance http://poj.org/problem?id=2142 Time Limit: 5000MS Memory Limit: 65536K Descripti ...
- asp.net web api 控制器
1控制器操作的参数 控制器操作的参数可以是内置类型也可以是自定义类型,无参也是允许的. 2控制器操作返回值 类型 说明 void 操作返回值为void时,Web API返回空HTTP响应,其状态码为2 ...
- iot前台开发环境:搭建 SpringBoot+angularJs2
参考网站 Angular 中文官网:https://angular.cn/ 参考代码:https://ng.ant.design/#/components/dropdown npm install ...
- api-gateway实践(15)API网关的待改进点 20171207
一.API网关能力 API网关负责服务请求路由.组合及协议转换.客户端的所有请求都首先经过API网关,然后由它将请求路由到合适的微服务.API网关的客户端通过统一的网关接入微服务,在网关层处理所有的非 ...
- api-gateway实践(05)新网关工作 - 缓存定义
一.缓存分类 1.服务注册信息 1.1.[GroupCode_VersionCode]对应[Version定义]的缓存 缓存类型:hash ...
- YML(2)yml 语法
YAML 语法 来源:yaml 这个页面提供一个正确的 YAML 语法的基本概述, 它被用来描述一个 playbooks(我们的配置管理语言). 我们使用 YAML 是因为它像 XML 或 JSON ...
- IIFE的形式、原理和常见写法
immediately invoked function expression 立即调用的函数表达式 出现的形式: 最近做牛客网的JS在线编程,遇到几道考闭包的题目,发现闭包的尾巴那儿经常会出现一对小 ...
- Python/Django(CBV/FBV/ORM操作)
Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...