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],在 A[] 中找到一个数字A[p]满足 B[i] <= p <= N+K-1
令 A[N+K] = A[p]-p,直到A[]的长度等于2N
问 A[N+1] + A[N+2] + ... + A[N<<1] 最大是多少
分析:
将A[]中元素全部减去其下标
将B[]排序,可分析一定是从小往大选择最优
每次从可以选择的A[]中选最大的一个,过程用单调队列来实现
编码时长:13分钟
*/
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const LL MOD = 1e9+7;
const int N = 250004;
int n;
int a[N<<1], b[N];
struct Node {
int x, id;
}q[N<<1];
int head, tail;
void solve()
{
for (int i = 1; i <= n; i++) a[i] -= i;
head = tail = 0;
for (int i = 1; i <= n; i++)
{
while (head < tail && q[tail-1].x < a[i]) tail--;
q[tail++] = Node{a[i], i};
}
for (int i = n+1; i <= n<<1; i++)
{
while (head < tail && q[head].id < b[i-n]) head++;
a[i] = q[head].x-i;
while (head < tail && q[tail-1].x < a[i]) tail--;
q[tail++] = Node{a[i], i};
}
}
int main()
{
while (~scanf("%d", &n))
{
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
for (int i = 1; i <= n; i++) scanf("%d", &b[i]);
sort(b+1, b+1+n);
solve();
LL ans = 0;
for (int i = n+1; i <= n<<1; i++)
{
ans += a[i] + i;
if (ans > MOD) ans -= MOD;
if (ans < 0) ans += MOD;
}
ans = (ans%MOD + MOD) % MOD;
printf("%lld\n", ans);
}
}
HDU 6047 - Maximum Sequence | 2017 Multi-University Training Contest 2的更多相关文章
- hdu 6047: Maximum Sequence (2017 多校第二场 1003)【贪心】
题目链接 可以贪心写,先把b数组按从小到大的顺序排个序,根据b[i]的值来产生a[n+i] 借助一个c数组,c[i]记录,j从i到n,a[j]-j的最大值,再加上一个实时更新的变量ma,记录从n+1到 ...
- 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) ...
- 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) ...
- HDU 6047 Maximum Sequence(贪心+线段树)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...
- 【多校训练2】HDU 6047 Maximum Sequence
http://acm.hdu.edu.cn/showproblem.php?pid=6047 [题意] 给定两个长度为n的序列a和b,现在要通过一定的规则找到可行的a_n+1.....a_2n,求su ...
- hdu 6047 Maximum Sequence(贪心)
Description Steph is extremely obsessed with "sequence problems" that are usually seen on ...
- 2017ACM暑期多校联合训练 - Team 2 1003 HDU 6047 Maximum Sequence (线段树)
题目链接 Problem Description Steph is extremely obsessed with "sequence problems" that are usu ...
- hdu 6047 Maximum Sequence 贪心
Description Steph is extremely obsessed with “sequence problems” that are usually seen on magazines: ...
随机推荐
- ThinkPHP composer的安装,及image图像处理类库的加载
以下教程针对windows系统,示例系统使用win7 composer安装 下载composer安装包,点击安装. 出现'composer choose the command-line php' 要 ...
- pyton 类(4) 静态方法
class Cat(): tag = ' 猫科动物 ' def __init__(self, name): self.name = name @staticmethod def breah(): pr ...
- python病毒
介绍 今天碰到一个有趣的python病毒,在这里https://github.com/cranklin/Python-Virus/blob/master/pythonvirus.py#L37 源码 分 ...
- 单档——PK单号新增、修改时不允许编辑,PK单号自动生成
由系统自动生成单号(日期+流水),用户新增.修改时不允许编辑单号: 范例(cxmt631): 1)在#单头栏位开启设定#中,即 cxmt631_set_entry(p_cmd)下: #add-poin ...
- pb datawindow 类型
DataWindow.Processing 判断 DataWindow 对象的类型 可用 DataWindow.Processing 判断 DataWindow 对象的类型,dw的类型如下: ...
- Fabric的简介
1,初识fabric 1,什么是fabric fabric是一个Python的库和命令行工具,用来提高基于SSH的应用部署和系统管理的效率. 简单来说: (1)一个让你通过命令行执行无参数python ...
- lua与c的交互(函数专用)
Lua与C的交互 Lua是一个嵌入式的语言,它不仅可以是一个独立运行的程序,也可以是一个用来嵌入其它应用的程序库. C API是一个C代码与Lua进行交互的函数集,它由以下几部分构成: 1. 读写L ...
- LinqToSQL2
扩展方法: 扩展方法是C#3.0的新特性,可以通过为已知类型添加新方法来到到扩展类型的目的,同时不需对此类型做任何改动. 重点记住的是,定义为静态方法的扩展方法只能在通过using指令显示地将名称空间 ...
- HTTP请求管道事件BeginRequest和EndRequest
这是一个测试示例,代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; ...
- docker容器生态技术链
图片来源:https://blog.51cto.com/liuleis/2067116 说明:学习Docker容器技术,先纵向了解大致内容架构,再横向逐一分解涉及的各项技术内容,对容器所涉及的技术体系 ...