Bzoj3747 [POI1015] Kinoman
Description
Input
Output
Sample Input
2 3 1 1 4 1 2 4 1
5 3 6 6
Sample Output
样例解释:
观看第2,3,4,5,6,7天内放映的电影,其中看且仅看过一次的电影的编号为2,3,4。
Bzoj权限题。只过了样例,尚未评测。
题面搬运自神犇hzwer博客。
线段树维护区间最值,枚举区间起点,不断把起点前面的电影贡献值删去,再把当前电影“从当前直到它下次出现之前”的区间都新加上当前电影的贡献值,不断更新最大答案。
刚开始按区间加法写的,所以变量用了sum,写到一半发现只搞区间最大值就好,然而懒得改变量名了……
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define ls l,mid,rt<<1
#define rs mid+1,r,rt<<1|1
#define LL long long
using namespace std;
const int mxn=;
int n,m;
int f[mxn],w[mxn];
int next[mxn],last[mxn];
int cnt[mxn];
struct node{
LL sum;//变量名是sum,实际是存区间最大值
LL tag;
}t[mxn<<];
void Build(int l,int r,int rt){//init //实际并没有用到
if(l==r){
t[rt].sum=t[rt].tag=;
return;
}
int mid=(l+r)>>;
Build(ls);Build(rs);
return;
}
void pushdown(int l,int r,int rt){
if(l==r)return;
if(t[rt].tag){
int mid=(l+r)>>;
t[rt<<].tag+=t[rt].tag;
t[rt<<|].tag+=t[rt].tag;
t[rt<<].sum+=t[rt].tag;
t[rt<<|].sum+=t[rt].tag;
t[rt].tag=;
}
}
void add(int L,int R,int v,int l,int r,int rt){
if(t[rt].tag)pushdown(l,r,rt);
if(L<=l && r<=R){
t[rt].tag+=v;
t[rt].sum+=v;
return;
}
int mid=(l+r)>>;
if(L<=mid)add(L,R,v,ls);
if(R>mid)add(L,R,v,rs);
t[rt].sum=max(t[rt<<].sum,t[rt<<|].sum);
return;
}
void read(){
scanf("%d%d",&n,&m);
int i,j;
for(i=;i<=n;i++)scanf("%d",&f[i]);
for(i=;i<=m;i++)scanf("%d",&w[i]);
return;
}
int main(){
read();
int i,j;
for(i=n;i;i--){
next[i]=last[f[i]];
last[f[i]]=i;
}
for(i=;i<=m;i++){
if(last[i]){
if(!next[last[i]])add(last[i],n,w[i],,n,);
else add(last[i],next[last[i]]-,w[i],,n,);
}
}
LL ans=;
for(i=;i<=n;i++){
ans=max(ans,t[].sum);
int tmp=next[i];
if(tmp){
add(i,tmp-,-w[f[i]],,n,);
if(next[tmp])add(tmp,next[tmp]-,w[f[i]],,n,);
else add(tmp,n,w[f[i]],,n,);//如果之后没有相同电影了,从next[i]到n的区间都加值
}
else add(i,n,-w[f[i]],,n,);//删除上一个区间的值
}
printf("%lld",ans);
return ;
}
Bzoj3747 [POI1015] Kinoman的更多相关文章
- BZOJ3747 POI2015 Kinoman 【线段树】*
BZOJ3747 POI2015 Kinoman Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[ ...
- 【BZOJ-3747】Kinoman 线段树
3747: [POI2015]Kinoman Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 715 Solved: 294[Submit][Stat ...
- 【bzoj3747】Kinoman[POI2015](线段树)
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3747 对于这种题,考虑固定区间的右端点为r,设区间左端点为l能取得的好看值总和为a[l] ...
- BZOJ3747: [POI2015]Kinoman
传送门 线段树经典运用. 设$last_i$表示上一个与$i$相同的类型.然后每次更新$[last[i]+1,i]$和$[last[last[i]]+1,last[i]]$的答案就行了. //BZOJ ...
- 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 ...
- POI2015题解
POI2015题解 吐槽一下为什么POI2015开始就成了破烂波兰文题目名了啊... 咕了一道3748没写打表题没什么意思,还剩\(BZOJ\)上的\(14\)道题. [BZOJ3746][POI20 ...
- 【BZOJ3747】[POI2015]Kinoman 线段树
[BZOJ3747][POI2015]Kinoman Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第 ...
随机推荐
- ajax的序列化表单提交
通过传统的 form 表单提交的方式上传文件 ? 1 2 3 4 <form id="uploadForm" action="" method=" ...
- 使用jquery-validate校验表单
注意: 表单校验(validation校验[需要下载JQuery-validate插件,而且必须要在引入JQuery插件之后,再引入validate插件/*validate是建立在JQuery之上*/ ...
- mysql crash cource 书中实例
样例表 CREATE TABLE customers( cust_id int NOT NULL AUTO_INCREMENT, cust_name char(50) ...
- Java-JFrame窗体美化
Java-JFrame窗体美化 JFrame默认的窗体比较土,可以通过一定的美化,让窗体表现的比较漂亮,具体要根据设计的设计图进行美化: JFrame美化的大致思路:先将JFrame去除默认美化效果, ...
- json_encode() 避免转换中文
json_encode() 避免转换中文 我们都知道,json_encode()可以将数据转换为json格式,而且只针对utf8编码的数据有效,而且在转换中文的时候,将中文转换成不可读的”\u***” ...
- NXP低功耗蓝牙集成芯片QN9080C的时钟配置
/*************************************************************************************************** ...
- Linux之ssh服务介绍
一.什么是SSH? 简单说,SSH(Secure Shell Protocol)是一种网络协议,用于计算机之间的加密登录.在默认状态下SSH服务提供俩个服务功能,一个是提供类似telnet远程联机服务 ...
- selenium2中的TestNg注解和数据驱动的简介及使用
TestNg常用注解介绍,先来张图: 先看一下,以上各个注释的运行次序: @Test 表示的意义: 1.表示示该方法是一个测试方法,在运行时,会自动的运行有@Test注脚的方法. 示例: @Be ...
- python - 字符串的格式化输出
# -*- coding:utf-8 -*- '''@project: jiaxy@author: Jimmy@file: study_2_str.py@ide: PyCharm Community ...
- 使用phppgadmin 遇到的小问题
无法登录,显示错误消息如下: Error:login disallowed for security reasons. 解决方法: 修改conf/config.inc.php文件中的extra_log ...