HDU 6047 Maximum Sequence 贪心 区间最值
来源:互联网 发布:知乎什么时候成立的 编辑:程序博客网 时间:2024/06/07 04:46
链接
http://acm.hdu.edu.cn/showproblem.php?pid=6047
题意
给两个长度为n的序列a, b,现要求max(sum(a[n + 1] + … + a[2n])),其中a[i] = max(a[b[k]] … a[i - 1]),其中b[k]为b[1 … n]中的一个,每个a[i]选择的b[k]不能重复
思路
写这个博客蹭点访问量2333
肯定先选能选到的最大的数,贪心就好,用一个线段树维护区间最值
代码
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;template<class T1, class T2> inline void gmax(T1& a, T2 b) { if (a < b) a = b; }typedef long long LL;const int MAXN = 3e5 + 5;const int MAXM = 1 << 21;const int MOD = 1e9 + 7;int n, m;int seg_tree[MAXM], BASE;int a[MAXN << 1], b[MAXN];void update(int x) { x += BASE; seg_tree[x] = a[x - BASE] - x + BASE; for (x >>= 1; x; x >>= 1) seg_tree[x] = max(seg_tree[x << 1], seg_tree[x << 1 | 1]);}int query(int l, int r) { int ret = 0; l += BASE - 1; r += BASE + 1; for (; l ^ r ^ 1; l >>= 1, r >>= 1) { if (~ l & 1) gmax(ret, seg_tree[l ^ 1]); if (r & 1) gmax(ret, seg_tree[r ^ 1]); } return ret;}int main() { while (~scanf("%d", &n)) { for (BASE = 1; BASE <= 2 * n + 1; BASE <<= 1); for (int i = 0; i <= BASE << 1; ++i) seg_tree[i] = 0; for (int i = 1; i <= n; ++i) { scanf("%d", a + i); update(i); } for (int i = 0; i < n; ++i) scanf("%d", b + i); sort(b, b + n); LL ans = 0; for (int i = 0; i < n; ++i) { a[i + n + 1] = query(b[i], i + n); update(i + n + 1); (ans += a[i + n + 1]) %= MOD; } printf("%I64d\n", ans); }}
阅读全文
0 0
- HDU 6047 Maximum Sequence 贪心 区间最值
- HDU 6047 Maximum Sequence (贪心)
- hdu 6047Maximum 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(贪心)
- 2017多校第二场 HDU 6047 Maximum Sequence 线段树或者multiset维护区间最值
- [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
- The import org.springframework.context.support.ClassPathXmlApplicationContext cannot be resolved
- 记录最近遇到的坑
- BootStrap FileInput 插件实现多文件上传前端功能
- spring面向切面编程
- linux记录锁(范围锁)
- HDU 6047 Maximum Sequence 贪心 区间最值
- Druid 连接池 JDBCUtils 工具类的使用
- hive支持sql大全(9-11:复合类型构建操作/复杂类型访问操作/复杂类型长度统计函数)
- django 多并发,多线程。
- 简单实现高度平滑变化的ViewPager
- ArrayList和LinkedList的区别
- Floyd算法
- 牛客面经 | BAT、美团、360、滴滴新锐……2W字干货,这不仅仅是一篇面经
- Please allow Subclipse team to receive anonymous usage statistics for this Eclipse intance(info)