bzoj3747
经典题,记录每个位置对应数下次出现的位置next[i]
每个位置维护当前左端点下到这个位置的和
随着左端点的右移一位到i+1,对[i+1,next[i]-1] 的影响是-a[i], [next[i],next[next[i]]-1]的影响是a[i]
线段树维护,pascal过不去系列
UPD:现在时限开大能过去了
var lazy,tree:array[..*] of int64;
s:array[..] of int64;
next,last,w,a:array[..] of longint;
i,n,m:longint;
ans:int64; function max(a,b:int64):int64;
begin
if a>b then exit(a) else exit(b);
end; procedure ins(i:longint;z:int64);
begin
tree[i]:=tree[i]+z;
lazy[i]:=lazy[i]+z;
end; procedure push(i:longint);
begin
ins(i*,lazy[i]);
ins(i*+,lazy[i]);
lazy[i]:=;
end; procedure add(i,l,r,x,y,z:longint);
var m:longint;
begin
if (x<=l) and (y>=r) then ins(i,z)
else begin
m:=(l+r) shr ;
if lazy[i]<> then push(i);
if x<=m then add(i*,l,m,x,y,z);
if y>m then add(i*+,m+,r,x,y,z);
tree[i]:=max(tree[i*],tree[i*+]);
end;
end; begin readln(n,m);
for i:= to n do
read(a[i]);
for i:= to m do
begin
read(w[i]);
last[i]:=n+;
end;
for i:=n downto do
begin
if last[a[i]]=n+ then s[i]:=s[i+]+w[a[i]]
else s[i]:=s[i+];
next[i]:=last[a[i]];
last[a[i]]:=i;
end;
for i:= to m do
if last[i]> then add(,,n,last[i],next[last[i]]-,w[i]); for i:= to n do
begin
if s[i]<=ans then break;
ans:=max(ans,tree[]);
add(,,n,i,next[i]-,-w[a[i]]);
if next[i]<=n then add(,,n,next[i],next[next[i]]-,w[a[i]]);
end;
writeln(ans);
end.
bzoj3747的更多相关文章
- BZOJ3747 POI2015Kinoman(线段树)
考虑固定左端点,求出该情况下能获得的最大值.于是每次可以在某数第一次出现的位置加上其价值,第二次出现的位置减掉其价值,查询前缀最大值就可以了.每次移动左端点在线段树上更新即可. #include< ...
- BZOJ3747 POI2015 Kinoman 【线段树】*
BZOJ3747 POI2015 Kinoman Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[ ...
- 【bzoj3747】Kinoman[POI2015](线段树)
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3747 对于这种题,考虑固定区间的右端点为r,设区间左端点为l能取得的好看值总和为a[l] ...
- 【BZOJ3747】[POI2015]Kinoman 线段树
[BZOJ3747][POI2015]Kinoman Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第 ...
- [bzoj3747][POI2015]Kinoman_线段树
Kinoman bzoj-3747 POI-2015 题目大意:有m部电影,第i部电影的好看值为w[i].现在放了n天电影,请你选择一段区间l~r使得l到r之间的好看值总和最大.特别地,如果同一种电影 ...
- 【BZOJ-3747】Kinoman 线段树
3747: [POI2015]Kinoman Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 715 Solved: 294[Submit][Stat ...
- BZOJ3747: [POI2015]Kinoman
传送门 线段树经典运用. 设$last_i$表示上一个与$i$相同的类型.然后每次更新$[last[i]+1,i]$和$[last[last[i]]+1,last[i]]$的答案就行了. //BZOJ ...
- 【bzoj3747】[POI2015]Kinoman
题解: 水题 从左向右维护以每一个作为右端点的最大值 线段树维护 代码: #include <bits/stdc++.h> using namespace std; #define rin ...
- 2018.08.15 bzoj3747: [POI2015]Kinoman(线段树)
传送门 简单题. 先不管时间复杂度看看怎么做. 对于一段区间[l,r],如果从右端加入一个数a[r+1],对这个区间有什么影响?显然如果区间中已经有了a[r+1]这个数就会产生-a[i+1]的影响,否 ...
随机推荐
- Careercup - Facebook面试题 - 23594662
2014-05-02 03:19 题目链接 原题: Given a sequence of numbers A() ..A(n), find the continuous subsequenceA(i ...
- [resource-]Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
reference: http://www.52nlp.cn/python-%e7%bd%91%e9%a1%b5%e7%88%ac%e8%99%ab-%e6%96%87%e6%9c%ac%e5%a4% ...
- html+css学习笔记 2[标签]
img标签/a标签 <img src="图片地址" alt="图片名"/> 图片(单标签)alt属性 是图片名字,是给百度搜索引擎抓取使用: ...
- Codeforces Round #352 (Div. 2) D. Robin Hood
题目链接: http://codeforces.com/contest/672/problem/D 题意: 给你一个数组,每次操作,最大数减一,最小数加一,如果最大数减一之后比最小数加一之后要小,则取 ...
- [vijos 1770]大内密探
描述 在古老的皇宫中,有N个房间以及N-1条双向通道,每条通道连接着两个不同的房间,所有的房间都能互相到达.皇宫中有许多的宝物,所以需要若干个大内密探来守护.一个房间被守护当切仅当该房间内有一名大内密 ...
- sql2008安装时提示重启计算机失败解决方法
安装sql 2008的时候,在检测安装环境中有一项是”重新启动计算机”显示的结果是“失败”.上网看了半天,找到了解决方案,虽然我没弄明白具体原因,但问题是解决了,解决方案如下: 一.Windows+R ...
- hdu 1253 胜利大逃亡(广搜,队列,三维,简单)
题目 原来光搜是用队列的,深搜才用栈,我好白痴啊,居然搞错了 三维的基础的广搜题 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #in ...
- 实战案例--Grunt构建Web程序
GruntJS构建Web程序.使用Gruntjs来搭建一个前端项目,然后使用grunt合并,压缩JS文件,熟练了node.js安装和grunt.js安装后,接下来来实战一个案例,案例是根据snandy ...
- 关于Python的super用法
Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this),用于传递对象本身,而在调用的时候则不必显式传递,系统会自动传递. 举一个很常见的例子: >> ...
- 【mysql的编程专题①】流程控制与其他语法
流程控制与内置函数,一般用在select的field字段上,或者用在函数,存储过程,触发器中; 如果用在select上就会随着query出来的row来隐式迭代; 注释与语句结束符 语句结束符 默认有两 ...