HDU 6047 Maximum Sequence
来源:互联网 发布:windows10装mac系统 编辑:程序博客网 时间:2024/06/06 04:49
题目地址
题意:给你两个序列,一个是A序列,一个是B序列,序列B告诉你你可以取max(a[i]-i)(b[j]<=i<=MAX),让你求出新添加的和为多少
思路:把A序列从后往前遍历,求出A[i]-i,每次对A[i]赋值的时候选取的是A[i]-i和A[i+1]的最大值,因为后面的如果大是一定能够选到的,然后再用一个变量去记录后面生成的有没有比前面大的,再更新那个变量,最后得出的和就是最大的了。
#include <iostream>#include <cstring>#include <string>#include <queue>#include <vector>#include <map>#include <set>#include <stack>#include <cmath>#include <cstdio>#include <algorithm>#define N 250010#define M 510#define LL __int64#define inf 0x3f3f3f3f#define lson l,mid,ans<<1#define rson mid+1,r,ans<<1|1using namespace std;const LL mod = 1e9 + 7;const double eps = 1e-9;int a[N], b[N];int main() { cin.sync_with_stdio(false); int n; while (cin >> n) { for (int i = 1; i <= n; i++) { cin >> a[i]; a[i] = a[i] - i; } for (int i = 1; i <= n; i++) { cin >> b[i]; } for (int i = n - 1; i > 0; i--) { a[i] = max(a[i], a[i + 1]); } LL ans = 0; int cnt = 0; sort(b + 1, b + n + 1); for (int i = 1; i <= n; i++) { ans += max(cnt, a[b[i]]); ans %= mod; cnt = max(cnt, a[b[i]] - n - i); } cout << ans << endl; } return 0;}
阅读全文
0 0
- [HDU]-6047 Maximum Sequence
- hdu 6047 Maximum Sequence
- [HDU 6047]Maximum Sequence
- HDU 6047 Maximum Sequence
- hdu 6047 Maximum Sequence
- HDU 6047 Maximum Sequence
- hdu 6047 Maximum Sequence
- HDU 6047 Maximum Sequence
- hdu--6047--Maximum Sequence
- hdu 6047 Maximum Sequence
- HDU 6047 Maximum Sequence
- hdu 6047 Maximum Sequence
- HDU 6047 Maximum Sequence
- hdu-6047-Maximum Sequence
- HDU 6047 Maximum Sequence
- hdu 6047 Maximum Sequence
- HDU 6047 Maximum Sequence
- Maximum Sequence HDU 6047
- Windows APC机制 & 可警告alertable的线程等待状态
- 12 在ZStack里实现uart数据接收功能
- C#文件加密和解密
- 补间动画
- 机器学习基石 6.4 A Pictorial Proof
- HDU 6047 Maximum Sequence
- Ansible安装完后使用ssh进行连接测试
- 32.Android端向web端(服务器)提交数据(GET-POST-AsyncHttpClient)
- 【CJ Cup】分解
- python 项目结构
- 牛客网编程基础9-11
- 订单分库分表实践总结
- dubbo源码深度解读一之common模块
- 生产者和消费者