BZOJ 3747 POI2015 Kinoman 段树
标题效果:有m点,每个点都有一个权值。现在我们有这个m为点的长度n该序列,寻求区间,它仅出现一次在正确的点区间内值和最大
想了很久,甚至神标题,奔说是水的问题……我醉了
枚举左点 对于每个请求留点右键点 树维护最大值
考虑每一个数对答案的贡献 记录一个数组next表示这个位置上的点下一次出现的位置 那么这个点贡献的作用范围就是[i,next[i]-1] 假设没有next就是[i,n]
于是我们先把全部第一个出现的数对答案的贡献增加线段树 然后从左到右扫一遍 每次统计完答案之后把i对答案的贡献去除 然后把next[i]对答案的贡献增加线段树
这常数我也是醉了……速度倒数第二啥的 正解一定不是这种……
此外POI2015是我穿错年代了?
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- #define M 1001001
- using namespace std;
- struct Segtree{
- Segtree *ls,*rs;
- long long num,mark;
- void Build_Tree(int x,int y);
- void Update(int x,int y,int l,int r,long long val);
- long long Get_Ans(int x,int y,int l,int r);
- }*root=new Segtree,mempool[M<<1],*C=mempool;
- int n,m;
- int a[M],w[M],next[M],last[M];
- bool v[M];
- long long ans;
- void Segtree :: Build_Tree(int x,int y)
- {
- int mid=x+y>>1;
- num=0;mark=0;
- if(x==y) return ;
- ls=C++;rs=C++;
- ls->Build_Tree(x,mid);
- rs->Build_Tree(mid+1,y);
- }
- void Segtree :: Update(int x,int y,int l,int r,long long val)
- {
- int mid=x+y>>1;
- if(x==l&&y==r)
- {
- num+=val;
- mark+=val;
- return ;
- }
- if(mark)
- {
- ls->num+=mark;
- rs->num+=mark;
- ls->mark+=mark;
- rs->mark+=mark;
- mark=0;
- }
- if(r<=mid) ls->Update(x,mid,l,r,val);
- else if(l>mid) rs->Update(mid+1,y,l,r,val);
- else ls->Update(x,mid,l,mid,val),rs->Update(mid+1,y,mid+1,r,val);
- num=max(ls->num,rs->num);
- }
- long long Segtree :: Get_Ans(int x,int y,int l,int r)
- {
- int mid=x+y>>1;
- if(x==l&&y==r)
- return num;
- if(mark)
- {
- ls->num+=mark;
- rs->num+=mark;
- ls->mark+=mark;
- rs->mark+=mark;
- mark=0;
- }
- if(r<=mid) return ls->Get_Ans(x,mid,l,r);
- if(l> mid) return rs->Get_Ans(mid+1,y,l,r);
- return max( ls->Get_Ans(x,mid,l,mid) , rs->Get_Ans(mid+1,y,mid+1,r) );
- }
- int main()
- {
- int i;
- cin>>n>>m;
- for(i=1;i<=n;i++)
- scanf("%d",&a[i]);
- for(i=1;i<=m;i++)
- scanf("%d",&w[i]);
- for(i=1;i<=n;i++)
- {
- if(last[a[i]])
- next[last[a[i]]]=i;
- else
- v[i]=1;
- last[a[i]]=i;
- }
- root->Build_Tree(1,n);
- for(i=1;i<=n;i++)
- if(v[i])
- root->Update(1,n,i,next[i]?next[i]-1:n,w[a[i]]);
- for(i=1;i<=n;i++)
- {
- ans=max(ans, root->Get_Ans(1,n,i,n) );
- root->Update(1,n,i,next[i]?next[i]-1:n,-w[a[i]]);
- if(next[i])
- root->Update(1,n,next[i],next[next[i]]?next[next[i]]-1:n,w[a[next[i]]]);
- }
- cout<<ans<<endl;
- }
BZOJ 3747 POI2015 Kinoman 段树的更多相关文章
- Bzoj 3747: [POI2015]Kinoman 线段树
3747: [POI2015]Kinoman Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 553 Solved: 222[Submit][Stat ...
- BZOJ 3747: [POI2015]Kinoman 【线段树】
Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...
- BZOJ 3747 POI2015 Kinoman
因为上午没有准备够题目,结果发现写完这道题没题可写了QAQ 又因为这道题范围是100w,我写了发线段树,以为要T,上午就花了一个小时拼命卡常数 结果下午一交居然过了QAQ 我们考虑枚举L,求最大R使得 ...
- 3747: [POI2015]Kinoman|线段树
枚举左区间线段树维护最大值 #include<algorithm> #include<iostream> #include<cstdlib> #include< ...
- 【BZOJ 3747】 3747: [POI2015]Kinoman (线段树)
3747: [POI2015]Kinoman Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 830 Solved: 338 Description ...
- 【BZOJ3747】[POI2015]Kinoman 线段树
[BZOJ3747][POI2015]Kinoman Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第 ...
- 【bzoj3747】[POI2015]Kinoman 线段树区间合并
题目描述 一个长度为n的序列,每个数为1~m之一.求一段连续子序列,使得其中之出现过一次的数对应的价值之和最大. 输入 第一行两个整数n,m(1<=m<=n<=1000000). 第 ...
- 【bzoj3747】[POI2015]Kinoman - 线段树(经典)
Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...
- BZOJ3747:[POI2015]Kinoman(线段树)
Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...
随机推荐
- table明明设置了固定值
IE真的快把我搞死了 0.0 可爱的迷人的让人醉了的IE你真棒 今天用表格写一个4列的表格 要实现的效果大概是这种 确有用普通浏览器都没有问题 非常easy明了的一个表格嘛!用IE8下面的看就成这样子 ...
- 理解Lambda表达式
1.什么是Lambda表达式 Lambda表达式是一个匿名方法,通常在LINQ中被用来创建委托 简单来说.它是一个没有声明,没有访问修饰符,没有返回值.甚至没有名字的方法. 2.为什么我们需要使用La ...
- thinkPHP 模板的使用技巧(十三)
原文:thinkPHP 模板的使用技巧(十三) 模板的使用技巧:页面跳转 .模板包含.模板渲染.模板的继承 页面跳转 <a href='__URL__/index'>我要跳转到首页面,用这 ...
- Java程序员们最常犯的10个错误(转)
1.将数组转化为列表 将数组转化为一个列表时,程序员们经常这样做: 1 List<String> list = Arrays.asList(arr); Arrays.asList(&quo ...
- 【Cocos2d-X开发笔记】第一期 Cocos2d-X的环境搭建
作者今天开始正式开始学习Cocos2d-X引擎进行游戏编程,预计两天会更新一期,最后实现ios游戏的appsore上线. (部分内容转载自:http://blog.csdn.net/yan ...
- Office 2016九大新功能
Office 2016将于2015年秋季正式公布,下面是九大新功能. 预測 基于数据透视表的时间分组建模 联机分析(OLAP)下的PowerView 数据透视表(PivotTable)建模的自己主动关 ...
- SynchronousQueue、LinkedBlockingQueue、ArrayBlockingQueue性能测试
SynchronousQueue.LinkedBlockingQueue.ArrayBlockingQueue性能测试 JDK6对SynchronousQueue做了性能优化,避免对竞争资源加锁,所以 ...
- 菜鸟学Java(十九)——WEB项目測试好帮手,Maven+Jetty
做WEB开发,測试是一件非常费时间的事情.所以我们就应该用更简单.更快捷的方式进行測试.今天就向大家介绍一个轻量级的容器--jetty.j今天说的etty是Maven的一个插件jetty-maven- ...
- 备份恢复与CRM集成的sharepoint站点
在部署CRM与Sharepoint2010集成文档管理之后,一直担心如果需要在新服务器上重新部署CRM, 那么之前与CRM集成的Sharepoint2010文档内容,是否可以重新正确映射到相应的文档位 ...
- A Game of Thrones(4) - Eddard
The visitors poured(倾泻:流出) through the castle gates in a river of gold and silver and polished steel ...