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

  1. 【2017 Multi-University Training Contest - Team 2】TrickGCD

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6053 [Description] 给你一个b数组,让你求一个a数组: 要求,该数组的每一位都小于等 ...

  2. 【2017 Multi-University Training Contest - Team 2】 Regular polygon

    [Link]: [Description] 给你n个点整数点; 问你这n个点,能够组成多少个正多边形 [Solution] 整点只能构成正四边形. 则先把所有的边预处理出来; 枚举每某两条边为对角线的 ...

  3. 【2017 Multi-University Training Contest - Team 2】 Is Derek lying?

    [Link]: [Description] 两个人都做了完全一样的n道选择题,每道题都只有'A','B','C' 三个选项,,每道题答对的话得1分,答错不得分也不扣分,告诉你两个人全部n道题各自选的是 ...

  4. 【2017 Multi-University Training Contest - Team 5】Rikka with Competition

    [Link]: [Description] [Solution] 把所有人的能力从大到小排; 能力最大的肯定可能拿冠军; 然后一个一个地往后扫描; 一旦出现a[i-1]-a[i]>k; 则说明从 ...

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

  6. 【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= ...

  7. 【2017 Multi-University Training Contest - Team 4】Time To Get Up

    [Link]: [Description] [Solution] 把每个数字长什么样存到数组里就好;傻逼题. (直接输入每一行是什么样子更快,不要一个字符一个字符地输入) [NumberOf WA] ...

  8. 【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 ...

  9. 【2017 Multi-University Training Contest - Team 3】RXD and math

    [Link]: [Description] [Solution] 发现1010mod(109+7)=999999937; 猜测答案是nk 写个快速幂; 注意对底数先取模; [NumberOf WA] ...

随机推荐

  1. HNU 12961 BitTorrent DP

    题意: 你在网上下载东西,一个文件存储在一段或者多段里面,问怎么选择能在规定的流量内下载最多的文件数量.每段的大小一样. 思路: 习惯了做答案保存在DP数组里的题,做这种答案保存在下标里的题,转不过弯 ...

  2. 【Educational Codeforces Round 37 F】SUM and REPLACE

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 那个D函数它的下降速度是很快的. 也就是说到最后他会很快的变成2或者1 而D(2)==2,D(1)=1 也就是说,几次操作过后很多数 ...

  3. 137 - ZOJ Monthly, November 2014 - J Poker Face

    Poker Face Time Limit: 2 Seconds      Memory Limit: 65536 KB As is known to all, coders are lack of ...

  4. ArcGIS api for javascript——渲染-计算相等间隔分级

    描述 本例展示了如何配置分级渲染使用一个相等间隔分类.在这个分类类型中,断点被设置为相等的距离. 可以手工添加相等距离的断点:然而,如果数据被修改了,那些断点就会是不合理的.本例自动地计算断点,因此相 ...

  5. 【 D3.js 入门系列 --- 2.1 】 关于怎样选择,插入,删除元素

    本人的个人博客首页为: http://www.ourd3js.com/  ,csdn博客首页为:http://blog.csdn.net/lzhlzz/. 转载请注明出处,谢谢. 在D3.js中,选择 ...

  6. 设置UITableViewCell高度的问题

    有非常多时候.UITableViewCell每行的高度是不固定的,须要动态设置. UITableView有个代理方法, -(CGFloat)tableView:(UITableView *)table ...

  7. POJ1833 &amp; POJ3187 &amp; POJ3785 next_permutation应用

    要是没有next_permutation这个函数,这些题认为还不算特别水,只是也不一定,那样可能就会有对应的模板了. 反正正是由于next_permutation这个函数.这些题包含之前的POJ122 ...

  8. POJ 1258 Agri-Net (最小生成树+Prim)

    Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39820   Accepted: 16192 Descri ...

  9. style="background-image: url(__HOMEPAGE__/views/IMJ2V2/images/banner2.jpg)"

    style="background-image: url(__HOMEPAGE__/views/IMJ2V2/images/banner2.jpg)" 一.问题 backgroun ...

  10. Linux企业应用--RHAS 2.1 下安装中文 Lotus Domino R 6.5 图解

    原文请到ftp.jms165.com下载,是用上传用户                                                 (RHAS3+ksnapshot+OperOff ...