2017 Multi-University Training Contest - Team 2:1003&hdu6047、Maximum Sequence
2017-07-27 18:05
405 查看
题目:
Maximum Sequence
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 0 Accepted Submission(s): 0
[align=left]Problem Description[/align]
Steph is extremely obsessed with “sequence problems” that are usually seen on magazines: Given the sequence 11, 23, 30, 35, what is the next number? Steph always finds them too easy for such a genius like
himself until one day Klay comes up with a problem and ask him about it.
Given two integer sequences {ai} and {bi} with the same length n, you are to find the next n numbers of {ai}:an+1…a2n.
Just like always, there are some restrictions on an+1…a2n:
for each number ai,
you must choose a number bk
from {bi}, and it must satisfy ai≤max{aj-j│bk≤j<i},
and any bk
can’t be chosen more than once. Apparently, there are a great many possibilities, so you are required to find max{∑2nn+1ai}
modulo 109+7
.
Now Steph finds it too hard to solve the problem, please help him.
[align=left]Input[/align]
The input contains no more than 20 test cases.
For each test case, the first line consists of one integer n. The next line consists of n integers representing {ai}. And the third line consists of n integers representing {bi}.
1≤n≤250000, n≤a_i≤1500000, 1≤b_i≤n.
[align=left]Output[/align]
For each test case, print the answer on one line: max{∑2nn+1ai}
modulo 109+7。
[align=left]Sample Input[/align]
4
8 11 8 5
3 1 4 2
[align=left]Sample Output[/align]
27
Hint
For the first sample:
1. Choose 2 from {bi}, then a_2…a_4 are available for a_5, and you can let a_5=a_2-2=9;
2. Choose 1 from {bi}, then a_1…a_5 are available for a_6, and you can let a_6=a_2-2=9;
题意:给你长度为n的两个数组a和b。求an+1…a2n。。满足两个条件:在数组b中选择bk,ai≤max{aj-j│bk≤j<i},而且bk只能用一次。1≤n≤250000,
n≤a_i≤1500000, 1≤b_i≤n.所以用__int64。
思路:不知道怎么讲,就是求aj-j的值给数组c。a_n+1~a_2*n就是max(c[j>=b[i]]),自己动手写下就明白了。例如:an+1…a
a_i 8 11 8 5 9 9 5 4
a_i-i 7 9 5 1 4 3 -2 -4
b_i 3 1 4 2
所以答案为9+9+5+4=27.
CODE:
#include<bits/stdc++.h> using namespace std; #define maxn 250005 __int64 a[maxn],b[maxn],c[maxn]; int main() { int n,i; __int64 maxr,sum,mod=1e9+7; while(~scanf("%d",&n)){ for(i=1;i<=n;i++){ scanf("%I64d",&a[i]); a[i]-=i; if(i>1) maxr=max(maxr,a[i]); else maxr=a[i]; } maxr-=(n+1); for(i=n;i>=1;i--){ c[i]=max(maxr,a[i]); if(i<n) c[i]=max(c[i],c[i+1]); } sum=0; for(i=1;i<=n;i++){ scanf("%I64d",&b[i]); sum=(sum+c[b[i]])%mod; } printf("%I64d\n",sum); } return 0; }
b_ian+1…a2n
相关文章推荐
- 2017 Multi-University Training Contest - Team 6:1003&hdu6098、Inversion
- 2017 Multi-University Training Contest - Team 1 1003&&HDU 6035 Colorful Tree【树形dp】
- 2017 Multi-University Training Contest - Team 9 1001&&HDU 6161 Big binary tree【树形dp+hash】
- 2017 Multi-University Training Contest - Team 8 :1011&hdu6143、Killer Names
- 2017 Multi-University Training Contest - Team 9 1002&&HDU 6162 Ch’s gift【树链部分+线段树】
- 2017 Multi-University Training Contest - Team 5:1011&hdu6095、Rikka with Competition
- 2017 Multi-University Training Contest - Team 9 1003&&HDU 6163 CSGO【计算几何】
- 2017 Multi-University Training Contest - Team 4:1009&hdu6075、Questionnaire
- 2017 Multi-University Training Contest - Team 2 && HDU6047
- 2017 Multi-University Training Contest - Team 1 1011&&HDU 6043 KazaQ's Socks【规律题,数学,水】
- 2017 Multi-University Training Contest - Team 9 1004&&HDU 6164 Dying Light【数学+模拟】
- 2017 Multi-University Training Contest - Team 2:1011&hdu6095、Regular polygon
- HDU6033 & 2017 Multi-University Training Contest - Team 1 A
- 2017 Multi-University Training Contest - Team 2:1001&hdu6045、 Is Derek lying?
- 2017 Multi-University Training Contest - Team 9 1005&&HDU 6165 FFF at Valentine【强联通缩点+拓扑排序】
- 2017 Multi-University Training Contest - Team 4:1011&hdu6077、Time To Get Up
- 2017 Multi-University Training Contest - Team 1 1006&&HDU 6038 Function【DFS+数论】
- 2017 Multi-University Training Contest - Team 7 :1008&hdu6127、Hard challenge
- HDU 6034 & 2017 Multi-University Training Contest - Team 1
- HDU6044 & 2017 Multi-University Training Contest - Team 1