【2017 Multi-University Training Contest - Team 2】Maximum Sequence
【Link】:http://acm.hdu.edu.cn/showproblem.php?pid=6047
【Description】
给你一个数列a和一个数列b;
只告诉你a的前n项各是什么;
然后让你求第出a的第n+1..2*n项;
这里a的第i项等于max(a[j]-j)这里j∈[b[k]..i-1];
(i>n)
且,每个b只能用来推一次a.
让你求出∑2∗nn+1ai的最大值
【Solution】
一开始的a数组,对于ai也直接减去i就好;
这样在推的时候,直接取区间的最值就可以了,省去了减去i的麻烦;
把b数组按从小到大的顺序排;
然后按顺序从左往右用每个b,推出a[n+1],a[n+2]…a[2*n]即可;
这里,b越小,推出来的a的值就越大;
为什么优先用b小的?
因为在较前面,就推出较大的a值;
这样减去的下标i,就会比较小;
这样,我们在推下一个a的时候,之前,肯定都是最大的情况了;
因为我们每个b都会用来推一次;
而b..n这一段的a是一定的;
那么,我们就应该尽量让n+1..i-1这一段的a值更大;
线段树维护区间最值+单点更新即可;
【NumberOf WA】
0
【Reviw】
【Code】
#include <bits/stdc++.h>
#define int long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int N = (int) 50e4;
const int INF = 0x3f3f3f3f;
int n,ma[(N<<2) +100],a[N+10],b[N+10];
void build(int l,int r,int rt){
if (l==r){
ma[rt] = a[l];
return;
}
int m = (l+r)>>1;
build(lson),build(rson);
ma[rt] = max(ma[rt<<1],ma[rt<<1|1]);
}
int get_max(int L,int R,int l,int r,int rt){
if (L <= l && r <= R)
return ma[rt];
int m = (l+r)>>1;
int temp1 = -INF,temp2 = -INF;
if (L <= m)
temp1 = get_max(L,R,lson);
if (m < R)
temp2 = get_max(L,R,rson);
return max(temp1,temp2);
}
void up_data(int pos,int num,int l,int r,int rt){
if (l==r){
ma[rt] = num;
return;
}
int m = (l+r)>>1;
if (pos <= m){
up_data(pos,num,lson);
}else
up_data(pos,num,rson);
ma[rt] = max(ma[rt<<1],ma[rt<<1|1]);
}
main(){
//freopen("F:\\rush.txt","r",stdin);
while (~scanf("%lld",&n)){
for (int i = 1;i <= n;i++){
scanf("%lld",&a[i]);
a[i] -= i;
}
for (int i = i+1;i <= 2*n;i++) a[i] = -INF;
for (int i = 1;i <= n;i++)
scanf("%lld",&b[i]);
sort(b+1,b+1+n);
build(1,2*n,1);
int sum = 0,MOD = (int) 1e9+7;
for (int i = n+1,j = 1;i <= 2*n;i++,j++){
int bk = b[j];
int ai = get_max(bk,i-1,1,2*n,1);
sum = (sum + ai)%MOD;
up_data(i,ai-i,1,2*n,1);
a[i] = ai-i;
}
printf("%lld\n",sum);
}
return 0;
}
【2017 Multi-University Training Contest - Team 2】Maximum Sequence的更多相关文章
- 【2017 Multi-University Training Contest - Team 2】TrickGCD
[Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6053 [Description] 给你一个b数组,让你求一个a数组: 要求,该数组的每一位都小于等 ...
- 【2017 Multi-University Training Contest - Team 2】 Regular polygon
[Link]: [Description] 给你n个点整数点; 问你这n个点,能够组成多少个正多边形 [Solution] 整点只能构成正四边形. 则先把所有的边预处理出来; 枚举每某两条边为对角线的 ...
- 【2017 Multi-University Training Contest - Team 2】 Is Derek lying?
[Link]: [Description] 两个人都做了完全一样的n道选择题,每道题都只有'A','B','C' 三个选项,,每道题答对的话得1分,答错不得分也不扣分,告诉你两个人全部n道题各自选的是 ...
- 【2017 Multi-University Training Contest - Team 5】Rikka with Competition
[Link]: [Description] [Solution] 把所有人的能力从大到小排; 能力最大的肯定可能拿冠军; 然后一个一个地往后扫描; 一旦出现a[i-1]-a[i]>k; 则说明从 ...
- 【2017 Multi-University Training Contest - Team 5】Rikka with Subset
[Link]: [Description] 给你a数组的n个数的所有2^n个子集的2^n个子集元素的和; 子集元素的和最大为m; 告诉你各个子集元素的和出现的次数; 如 1 2 则0出现1次,1出现1 ...
- 【2017 Multi-University Training Contest - Team 5】Rikka with Graph
[Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6090 [Description] 给你n个点; 让你在这n个点上最多连m条无向边; 使得 ∑ni= ...
- 【2017 Multi-University Training Contest - Team 4】Time To Get Up
[Link]: [Description] [Solution] 把每个数字长什么样存到数组里就好;傻逼题. (直接输入每一行是什么样子更快,不要一个字符一个字符地输入) [NumberOf WA] ...
- 【2017 Multi-University Training Contest - Team 4】Counting Divisors
[Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6069 [Description] 定义d(i)为数字i的因子个数; 求∑rld(ik) 其中l,r ...
- 【2017 Multi-University Training Contest - Team 3】RXD and math
[Link]: [Description] [Solution] 发现1010mod(109+7)=999999937; 猜测答案是nk 写个快速幂; 注意对底数先取模; [NumberOf WA] ...
随机推荐
- 【Git 四】一款不错的 Git 客户端
平常做开发使用 git bash 进行代码提交,一直没有使用过 git 相关的客户端. 直到有次同一分支下两个日志进行代码比较时,bash 返回的结果可视化理解起来比较差. 如果更改的部分比较多,问题 ...
- 运行npm start vue.js项目 出现 npm ERR! missing script: start 错误
npm ERR! missing script: start 错误 有可能缺少依赖包,运行nmp install安装依赖(一般都依赖很多包,过程有点慢),安装完后发现多一个 node_modules文 ...
- cookie 实现记住用户名演示 通过代码迅速理解cookie
// 登录页 可直接 tomcat部署 测试 1 package com.itheima.login; import java.io.IOException; import java.io.Print ...
- MapReduce JOB 的输出与输出笔记。
提高 MapReduce 价值,自定义输入和输出. 比如跳过存储到 HDFS 中这个耗时的布置. 而只是从原始数据源接受数据,或者直接将数据发送给某些处理程序. 这些处理程序在 MapReduce 作 ...
- 火狐不支持innerText属性,只支持innerHTML属性
做的一个js的小程序放到火狐上用不了了,原因是innerText不是标准属性,换成innerHTML属性就好,但是可能需要把html标签给去掉
- 解析XML文件之使用DOM解析器
在前面的文章中.介绍了使用SAX解析器对XML文件进行解析.SAX解析器的长处就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析. DOM解析器的长处可能是理解起来比較的直观,当然, ...
- 从零開始怎么写android native service?
从零開始怎么写android native service Android service对于从事android开发的人都不是一个陌生的东西,非常多人可能会认为服务非常easy. 服务是简单,由于复杂 ...
- 我看Java二十年:它是怎样永远改变编程的。
转自jdon的小文章:来自Infoworld的一篇纪念mod=viewthread&tid=3042" target="_blank">Java诞生20周年 ...
- 记录一下 mysql 的查询中like字段的用法
SELECT * from t_yymp_auth_role where role_name not like '%测试%' and role_name not like '%部门%' and rol ...
- Django transaction 误用之后遇到的一个问题与解决方法
今天在调试项目开发好的一个模块的时候,发现了一个很诡异的现象,最后追踪发现是因为在项目中事务处理有误所致.这个问题坑了我好一会,所以记录一下,以免再踩坑.下面开始详述. 我们都知道 Django 框架 ...