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{aj -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的更多相关文章

  1. 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],在 ...

  2. HDU 6047 Maximum Sequence(线段树)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...

  3. HDU 6047 Maximum Sequence(贪心+线段树)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...

  4. HDU 6047 Maximum Sequence

    Maximum Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. 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) ...

  6. 2017ACM暑期多校联合训练 - Team 2 1003 HDU 6047 Maximum Sequence (线段树)

    题目链接 Problem Description Steph is extremely obsessed with "sequence problems" that are usu ...

  7. hdu 6047: Maximum Sequence (2017 多校第二场 1003)【贪心】

    题目链接 可以贪心写,先把b数组按从小到大的顺序排个序,根据b[i]的值来产生a[n+i] 借助一个c数组,c[i]记录,j从i到n,a[j]-j的最大值,再加上一个实时更新的变量ma,记录从n+1到 ...

  8. hdu 6047 Maximum Sequence(贪心)

    Description Steph is extremely obsessed with "sequence problems" that are usually seen on ...

  9. hdu 6047 Maximum Sequence 贪心

    Description Steph is extremely obsessed with “sequence problems” that are usually seen on magazines: ...

随机推荐

  1. vue-resource emulateJSON的作用

    如果Web服务器无法处理编码为application/json的请求,你可以启用emulateJSON选项. 启用该选项后,请求会以application/x-www-form-urlencoded作 ...

  2. archsummit_bj2016

    http://bj2016.archsummit.com/schedule 大会日程 2016年12月02日,星期五 7:45-9:00 签到 8:45-9:00 开始入场 9:00-9:30 开场致 ...

  3. 浏览器报错问题解决:Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight respons

    FAQ: Failed to load http://www.erpshop.com/index.php: Request header field Content-Type is not allow ...

  4. 51nod 1417 天堂里的游戏

    基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 多年后,每当Noder看到吉普赛人,就会想起那个遥远的下午. Noder躺在草地上漫无目的的张望,二 ...

  5. CentOS 7上修改主机名

                                       如何在CentOS 7上修改主机名                                           在Cent ...

  6. (一) Docker in Docker

    一.  背景介绍 工作中,要实现在docker中运行docker,实现镜像的拉取,创建,修改,上传等操作. 尝试过在docker中,安装docker.行不通,服务起不来. 而且直接在 docker 容 ...

  7. vue 父子组件的加载顺序

    一.加载渲染过程 父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount ...

  8. focus,focusin,blur,focusout区别

    focus与focusin 1.共同点:当 <div> 元素或其任意子元素获得焦点时执行事件 2.区别:focus不支持冒泡,而focusin支持冒泡: blur与focusout 1.共 ...

  9. luogu P3916 图的遍历

    P3916 图的遍历 题目描述 给出 N 个点, M 条边的有向图,对于每个点 v ,求 A(v) 表示从点 v 出发,能到达的编号最大的点. 输入输出格式 输入格式: 第1 行,2 个整数 N,MN ...

  10. Css选择器和JQuery基本编程接口

    使用JQuery之前,首先从官网下载库文件 http://jquery.com/ jquery-2.1.4.js和jquery-2.1.4.min.js,前者是完整无压缩版本,用于开发调试:后者是压缩 ...