【多校训练2】HDU 6047 Maximum Sequence
http://acm.hdu.edu.cn/showproblem.php?pid=6047
【题意】
- 给定两个长度为n的序列a和b,现在要通过一定的规则找到可行的a_n+1.....a_2n,求sum{a_n+1.....a_2n}的最大值
 - 每次从序列b中选择一个数bk,那么构造的ai就是max{a
j
-j},其中bk<=j<i
 - 每个bk最多用一次
 
【思路】
- 首先我们需要的是aj-j
 - 可以贪心,即对于当前要构造的数ai,尽可能找bk使得能够取得最大的aj-j
 - 线段树区间查询最优值+单点更新
 - 把b排个序,对于每个b查询b[i]~n+i-1的最大值
 
【Accepted】
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#define lson (i<<1)
#define rson (i<<1|1)
#include<vector>
#include<map>
using namespace std;
const int maxn=(25e4+)*;
typedef long long ll;
const ll mod=1e9+;
const int inf=0x3f3f3f3f;
long long val[maxn];
int a[maxn];
int b[maxn];
int n;
struct Seg
{
int l,r,lazy,val;
}tree[maxn<<]; void push_up(int i)
{
tree[i].val=max(tree[lson].val,tree[rson].val);
} void push_down(int i)
{
if(tree[i].lazy==-)
{
return;
}
tree[lson].lazy=tree[lson].val=tree[i].lazy;
tree[rson].lazy=tree[rson].val=tree[i].lazy;
tree[i].lazy=-;
} void Build(int l,int r,long long i=)
{
tree[i].l=l;
tree[i].r=r;
tree[i].lazy=-;
if(l==r)
{
tree[i].val=val[l];
return;
}
push_down(i);
int mid=(tree[i].l+tree[i].r)>>;
Build(l,mid,lson);
Build(mid+,r,rson);
push_up(i);
} int Query(int l,int r,int i=)
{
if(tree[i].l==l&&tree[i].r==r)
{
return tree[i].val;
}
push_down(i);
int mid=(tree[i].l+tree[i].r)>>;
if(r<=mid)
{
return Query(l,r,lson);
}
else if(l>mid)
{
return Query(l,r,rson);
}
else
{
return max(Query(l,mid,lson),Query(mid+,r,rson));
}
} void Setval(int l,int r,int x,int i=)
{
if(tree[i].l==l&&tree[i].r==r)
{
tree[i].lazy=tree[i].val=x;
return;
}
push_down(i);
int mid=(tree[i].l+tree[i].r)>>;
if(r<=mid)
{
Setval(l,r,x,lson);
}
else if(l>mid)
{
Setval(l,r,x,rson);
}
else
{
Setval(l,mid,x,lson);
Setval(mid+,r,x,rson);
}
push_up(i);
} int main()
{
while(~scanf("%d",&n))
{
for(int i=;i<=*n;i++)
{
val[i]=-inf;
}
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
val[i]=a[i]-i;
}
Build(,*n);
for(int i=;i<=n;i++)
{
scanf("%d",&b[i]);
}
sort(b+,b++n);
ll ans=;
b[]=;
for(int i=;i<=n;i++)
{
int mmax=Query(b[i],n+i-);
ans=(ans+(ll)mmax)%mod;
Setval(n+i,n+i,mmax-(n+i));
}
cout<<ans<<endl;
}
return ;
}
线段树区间查询最优值+单点修改
【多校训练2】HDU 6047 Maximum Sequence的更多相关文章
- HDU 6047 - Maximum Sequence  |  2017 Multi-University Training Contest 2
		
/* HDU 6047 - Maximum Sequence [ 单调队列 ] 题意: 起初给出n个元素的数列 A[N], B[N] 对于 A[]的第N+K个元素,从B[N]中找出一个元素B[i],在 ...
 - HDU 6047 Maximum Sequence(线段树)
		
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...
 - HDU 6047 Maximum Sequence(贪心+线段树)
		
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...
 - HDU 6047 Maximum Sequence
		
Maximum Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
 - 2017 Multi-University Training Contest - Team 2&&hdu 6047 Maximum Sequence
		
Maximum Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
 - 2017ACM暑期多校联合训练 - Team 2 1003   HDU   6047     Maximum Sequence    (线段树)
		
题目链接 Problem Description Steph is extremely obsessed with "sequence problems" that are usu ...
 - hdu 6047: Maximum Sequence (2017 多校第二场 1003)【贪心】
		
题目链接 可以贪心写,先把b数组按从小到大的顺序排个序,根据b[i]的值来产生a[n+i] 借助一个c数组,c[i]记录,j从i到n,a[j]-j的最大值,再加上一个实时更新的变量ma,记录从n+1到 ...
 - hdu 6047 Maximum Sequence(贪心)
		
Description Steph is extremely obsessed with "sequence problems" that are usually seen on ...
 - hdu 6047 Maximum Sequence 贪心
		
Description Steph is extremely obsessed with “sequence problems” that are usually seen on magazines: ...
 
随机推荐
- 4. iOS测试常用方法
			
1. [XCUIElement exists]方法只能确定这个View是否存在,即使不在当前屏幕上也返回True.如果要确定View是否在屏幕可见范围内,可以判断其Frame是否在Window的 ...
 - position   位置、表单
			
一.position 位置 1.只要使用了定位,必须有一个相对的参照物 2.具体定位的那个元素需加position:absolute:(绝对的) 绝对的:就是具体到某一个地方,特别详细的意思 ...
 - 网页尺寸scrollHeight/offsetHeight
			
scrollHeight和scrollWidth,获取网页内容高度和宽度. 一.针对IE.Opera: scrollHeight 是网页内容实际高度,可以小于 clientHeight. 二.针对NS ...
 - Excel数据导入SQL Server
			
基本有2种方案,都是无需安装Office的方案 Ole DB读取 + BulkCopy 获取Excel各个SheetName //连接串 string strConn = "Provider ...
 - ES5函数新增的方法(call、apply、bind)
			
1.call()的使用<script type="text/javascript"> var obj1 = { name:'bob', fn:function(){ c ...
 - learnpythonthehardway EX41 相关
			
str.count() # str.count()方法用于统计字符串里某个字符出现的次数.可选参数为在字符串搜索的开始与结束位置. # str.count(sub, start= 0,end=len( ...
 - Jenkins邮件扩展插件Email Extension Plugin配置使用
			
1.在管理插件中搜索并安装邮件扩展插件Email Extension Plugin: 2.在任务中增加构建后操作步骤,选择Editable Email Notification; 3.在高级中Add ...
 - HTTP 200 OK和HTTP 304 Not modified的由来
			
这两个字段都和HTTP协议的缓存控制相关. 浏览器缓存机制是通过HTTP协议Header里的Cache-Control(或Expires)和Last-Modified(或 Etag)等字段来实现. 这 ...
 - 前端什么是BFC
			
什么是BFC? 全称块级格式化上下文?什么意思不懂.看了好多博客,基本都是抄的,真心都不是大白话.我今天来总结一下,用菜鸟级别的语言来描述. BFC 应该可以抽象成一个 独立的个体,出淤泥而不染的白莲 ...
 - 0xc000007b——应用程序无法正常启动
			
0xc000007b——应用程序无法正常启动 原因:缺少exe程序启动所需要的DLL.