BZOJ3747: [POI2015]Kinoman
线段树经典运用。
设$last_i$表示上一个与$i$相同的类型。然后每次更新$[last[i]+1,i]$和$[last[last[i]]+1,last[i]]$的答案就行了。
//BZOJ 3747
//by Cydiater
//2016.10.28
#include <iostream>
#include <queue>
#include <map>
#include <ctime>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <cstdlib>
#include <bitset>
using namespace std;
#define ll long long
#define up(i,j,n) for(int i=j;i<=n;i++)
#define down(i,j,n) for(int i=j;i>=n;i--)
#define cmax(a,b) a=max(a,b)
#define cmin(a,b) a=min(a,b)
const int MAXN=1e6+5;
const int oo=0x3f3f3f3f;
inline int read(){
char ch=getchar();int x=0,f=1;
while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int N,M,typ[MAXN],hap[MAXN],last[MAXN],newpos[MAXN],L,R;
ll v,ans=0;
struct Tree{
ll delta,v;
}t[MAXN<<2];
namespace solution{
inline void reload(int root){t[root].v=max(t[root<<1].v,t[root<<1|1].v);}
void init(){
N=read();M=read();
up(i,1,N){
typ[i]=read();
last[i]=newpos[typ[i]];
newpos[typ[i]]=i;
}
up(i,1,M)hap[i]=read();
}
void downit(int root){
if(t[root].delta==0) return;
ll delta=t[root].delta;t[root].delta=0;
t[root<<1].delta+=delta;t[root<<1|1].delta+=delta;
t[root<<1].v+=delta;t[root<<1|1].v+=delta;
}
void updata(int leftt,int rightt,int root){
if(leftt!=rightt)downit(root);
if(leftt>R||rightt<L) return;
if(leftt>=L&&rightt<=R){
t[root].delta=v;
t[root].v+=v;
return;
}
int mid=(leftt+rightt)>>1;
updata(leftt,mid,root<<1);
updata(mid+1,rightt,root<<1|1);
reload(root);
}
void slove(){
up(i,1,N){
L=last[i]+1;R=i;v=hap[typ[i]];
updata(1,N,1);
if(last[i]!=0){
L=last[last[i]]+1;R=last[i];v=-hap[typ[i]];
updata(1,N,1);
}
cmax(ans,t[1].v);
}
cout<<ans<<endl;
}
}
int main(){
//freopen("input.in","r",stdin);
using namespace solution;
init();
slove();
return 0;
}
BZOJ3747: [POI2015]Kinoman的更多相关文章
- BZOJ3747 POI2015 Kinoman 【线段树】*
BZOJ3747 POI2015 Kinoman Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[ ...
- 2018.08.15 bzoj3747: [POI2015]Kinoman(线段树)
传送门 简单题. 先不管时间复杂度看看怎么做. 对于一段区间[l,r],如果从右端加入一个数a[r+1],对这个区间有什么影响?显然如果区间中已经有了a[r+1]这个数就会产生-a[i+1]的影响,否 ...
- BZOJ3747:[POI2015]Kinoman(线段树)
Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...
- 【线段树】bzoj3747 [POI2015]Kinoman
题解:http://www.cnblogs.com/zyfzyf/p/4105184.html 一.下传标记写法 #include<cstdio> #include<algorith ...
- 【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 ...
- Bzoj 3747: [POI2015]Kinoman 线段树
3747: [POI2015]Kinoman Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 553 Solved: 222[Submit][Stat ...
- 【BZOJ 3747】 3747: [POI2015]Kinoman (线段树)
3747: [POI2015]Kinoman Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 830 Solved: 338 Description ...
随机推荐
- Oracle RAMN 备份解决方案一例
以前在博客里面介绍了RMAN备份脚本一列分享,通过RMAN备份到本地路径,然后通过FTP将备份文件上传到FTP服务器. 下面简单介绍另外一例RMAN备份解决方案,下面是我简单画的一个图(很少画图,感觉 ...
- .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)
阅读目录: 1.需求背景介绍(Model元数据设置项应该与View绑定而非ViewModel) 1.1.确定问题域范围(可以使用DSL管理问题域前提是锁定领域模型) 2.迁移ViewModel设置到外 ...
- 《InsideUE4》-10-GamePlay架构(九)GameInstance
一人之下,万人之上 引言 上篇我们讲到了UE在World之上,继续抽象出了Player的概念,包含了本地的ULocalPlayer和网络的UNetConnection,并以此创建出了World中的Pl ...
- Fiery Youth
青春和时间是一对好兄弟,让人留恋的时光总是那么快偷偷溜走了.学习java不能确定改变生活和现状,至少是迈出了进步的决定,而不是停滞不前.既然这样,那就动起来吧!看了刘树勇老师的演讲,就得出一个结论:千 ...
- Android UI组件----AppWidget控件入门详解
Widget引入 我们可以把Widget理解成放置在桌面上的小组件(挂件),有了Widget,我们可以很方便地直接在桌面上进行各种操作,例如播放音乐. 当我们长按桌面时,可以看到Widget选项,如下 ...
- 第5章 Java数组
1.什么是数组 数组可以想象成一个巨大的盒子,这个盒子里面存放的是同一个数据类型的数据 例如:int[] scores = {78,68,94,93}; 2.如何使用Java中的数组 2.1申明数组 ...
- Cacti -- Advance Ping
一.搭建Cacti 1. 安装epel扩展源:yum install -y epel-release 2. 安装lamp环境:yum install -y httpd php php-mysql my ...
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 能支撑10万以上客户端的数据同步下载问题
庞大的业务系统,特别是需要有离线作业操作支持的核心业务系统,需要有强大的基础数据同步功能,基础数据有在增加.有在变动.有在失效,同时有大量的客户端全天侯的在连接服务器.不间断的在处理核心数据. 经过2 ...
- 使用Memberane Moniter监控HTTP & SOAP requests
Memberane Moniter 使用方法见左侧Documentation 此工具可以监控到每一次发生在指定端口的http请求或者soap请求,如图所示. 但是个人认为仍然有几个问题: 1.不能真正 ...
- .NET定时任务执行管理器开源组件–FluentScheduler
在日常项目里通常会遇到定时执行任务的需求,也就是定时器..NET Framework里关于定时器的类有3个,分别是System.Windows.Forms.Timer.System.Timers.Ti ...