Fantasy magicians usually gain their ability through one of three usual methods: possessing it as an innate talent, gaining it through study and practice, or receiving it from another being, often a god, spirit, or demon of some sort. Some wizards are depicted as having a special gift which sets them apart from the vast majority of characters in fantasy worlds who are unable to learn magic.

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 ?

 
Input
The first line is an integer T represent the number of test cases.
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)
 
Output
For each 0 type query, output the corresponding answer.
 
Sample Input
1
1 1
1
0 1 1
 
Sample Output
1
 
Source

// 以前没专门学习过线段树,所有是参考别人代码写出了的(表示最初并没有看懂题意 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(线段树)的更多相关文章

  1. 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, ...

  2. 2015 多校联赛 ——HDU5299(树删边)

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission ...

  3. 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 ...

  4. HDU 4614 Vases and Flowers (2013多校第二场线段树)

    题意摘自:http://blog.csdn.net/kdqzzxxcc/article/details/9474169 ORZZ 题意:给你N个花瓶,编号是0 到 N - 1 ,初始状态花瓶是空的,每 ...

  5. HDU6602 Longest Subarray hdu多校第二场 线段树

    HDU6602 Longest Subarray 线段树 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6602 题意: 给你一段区间,让你求最长的区间使 ...

  6. 2015 多校联赛 ——HDU5325(DFS)

    Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Tota ...

  7. 2015 多校联赛 ——HDU5303(贪心)

    Delicious Apples Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  8. 2015 多校联赛 ——HDU5334(构造)

    Virtual Participation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...

  9. 2015 多校联赛 ——HDU5302(构造)

    Connect the Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

随机推荐

  1. 【iOS】swift init构造器

    这几天在使用 Swift 重写原来的一个运动社交应用 SportJoin. 为什么要重写呢? 首先因为实在找不到设计师给我作图; 其次, 我也闲不下来, 想找一些项目做, 所以只好将原来的代码重写了. ...

  2. 2017 清北济南考前刷题Day 4 afternoon

    期望得分:30+50+30=110 实际得分:40+0+0=40 并查集合并再次写炸... 模拟更相减损术的过程 更相减损术,差一定比被减数小,当被减数=减数时,停止 对于同一个减数来说,会被减 第1 ...

  3. JAVA类的方法调用和变量(全套)

    一.类的分类: 1.普通类 2.抽象类(含有抽象方法的类) 3.静态类(不需要实例化,就可以使用的类) 二.方法的分类: 1.私有方法(只有类的内部才可以访问的方法) 2.保护方法(只有类的内部和该该 ...

  4. python 字符串和字典

    一.字符串操作 name = "my name is \t {name} and i am {year} years old" 1.首字母大写 print(name.capital ...

  5. C++ 异常小记

    catch必定使用拷贝构造函数 如下代码编译不通过,因为拷贝构造被标记delete #include <stdexcept> #include <cstdlib> #inclu ...

  6. 常见web攻击总结

    搞Web开发离不开安全这个话题,确保网站或者网页应用的安全性,是每个开发人员都应该了解的事.本篇主要简单介绍在Web领域几种常见的攻击手段及Java Web中的预防方式. XSS SQL注入 DDOS ...

  7. 到底什么是 "method group"

    class Program { delegate void NoParam(); delegate void WithOneParam(string name); static void Main(s ...

  8. 分布式版本控制系统Git的安装及使用

    Git的安装分为客户端安装和服务端安装,鉴于我平时码代码在windows环境下,因此本文客户端安装直接在windows环境,服务端安装在linux环境下(centos). Git客户端安装 客户端下载 ...

  9. SpringCloud的Hystrix(二) 某消费者应用(如:ui、网关)访问的多个微服务的断路监控

    一.验证断路保护监控是否管理多个消费者 app 1.第1个消费者应用:访问自己封装rest服务 saleProd 2.第2个消费者应用:第二个应用没有反应 说明 1.每个应用实例的断路保护机制,只对本 ...

  10. maven常见问题处理(3-3)Gradle编译时下载依赖失败解决方法

    Gradle编译时在本地仓库中如果没有发现依赖,就会从远程仓库中下载, 默认的远程仓库为 mavenCentral(),即 http://repo1.maven.org/maven2/往往访问速度特别 ...