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 ...
随机推荐
- Ubuntu登陆密码忘记
在VMware中安装了Ubuntu 10.04,经过了一段时间,再次登录的时候居然进不去了, 一开始不知道怎样在虚拟机中进入到Grub启动界面,网上搜索了一番,按照以下步骤重新为用户设定了新密码. 重 ...
- 玩转Leveldb原理及源码--拙见1
可以说是不知天高地厚.. 可以说是班门弄斧.. 但是,我今天还就这样走了,我喜欢!!!!!! 注:后续文章,限于篇幅,不懂名词都有 紫色+下划线 超链接,有兴趣,可以查阅: 网上关于Leveldb 的 ...
- Flask 文件和流
当我们要往客户端发送大量的数据比较好的方式是使用流,通过流的方式来将响应内容发送给客户端,实现文件的上传功能,以及如何获取上传后的文件. 响应流的生成 Flask响应流的实现原理就是通过Python的 ...
- CentOS7 防火墙firewalld详细操作
1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld 停止: systemctl disab ...
- 逆向集录_00_不同程序OEP特征总结
在分析/逆向 程序时,如果事先知道这类程序的一些特征,那将会是事半功倍的: 分析/逆向 程序,和写程序不同,比喻的话:写程序像在作案,分析/逆向 程序就像是在破案,对破案来讲,重在假想和推理: 特征1 ...
- LxmlLinkExtractor类参数解析
LxmlLinkExtractor LxmlLinkExtractor 是一种强大的链接提取器,使用他能很方便的进行选项过滤,他是通过xml中强大的HTMLParser实现的 源代码如下: class ...
- mybatis的mapper接口代理使用的三个规范
1.什么是mapper代理接口方式? MyBatis之mapper代理方式.mapper代理使用的是JDK的动态代理策略 2.使用mapper代理方式有什么好处 使用这种方式可以不用写接口的实现类,免 ...
- 新概念英语(1-97)A Small Blue Case
Lesson 97 A small blue case 一只蓝色的小箱子 Listen to the tape then answer this question. Does Mr. Hall get ...
- hadoop2.6.0实践:002 检查伪分布式环境搭建
1.检查网络配置[root@hadoop-master ~]# cat /etc/sysconfig/networkNETWORKING=yesHOSTNAME=hadoop-masterGATEWA ...
- python 字符串 字节
字符串 字节 a. 字符串转字节 1 2 key = "xxxx" bkey = bytes(key,encoding='utf-8') b. bytearray 数组 1 2 ...