[2019杭电多校第二场][hdu6601]Keen On Everything But Triangle
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6601
题意是说用给定区间内的数字组成周长最大的三角形。
大致做法就是求区间第1大,第2大和第3大然后判断是否满足,不满足再求第4大,第5大....。
原本以为复杂度爆炸,结果想想发现最坏的情况只是斐波那契的样子,每个区间也不会很大。
求区间第i大就套了个主席树
1 #include <algorithm> 2 #include<iostream> 3 #include <cstdio> 4 #include <vector> 5 #include <cstring> 6 #include<queue> 7 using namespace std; 8 typedef long long ll; 9 const int maxn = 2e5 + 3; 10 int a[maxn], b[maxn]; 11 int root[maxn], ls[maxn * 20], rs[maxn * 20], cnt; 12 ll val[maxn * 20]; 13 void build(int l, int r, int &i) { 14 i = ++cnt; 15 val[i] = 0ll; 16 if (l == r) 17 return; 18 int mid = l + r >> 1; 19 build(l, mid, ls[i]); 20 build(mid + 1, r, rs[i]); 21 } 22 void update(int k, int l, int r, int &i) { 23 ls[++cnt] = ls[i], rs[cnt] = rs[i], val[cnt] = val[i] + 1; 24 i = cnt; 25 if (l == r) 26 return; 27 int mid = l + r >> 1; 28 if (k <= mid) 29 update(k, l, mid, ls[i]); 30 else 31 update(k, mid + 1, r, rs[i]); 32 } 33 ll query(int u, int v, int k, int l, int r) { 34 if (l == r) 35 return l; 36 int x = val[ls[v]] - val[ls[u]]; 37 int mid = l + r >> 1; 38 if (k <= x) 39 return query(ls[u], ls[v], k, l, mid); 40 else 41 return query(rs[u], rs[v], k - x, mid + 1, r); 42 } 43 int main() { 44 int n, m; 45 while (scanf("%d%d", &n, &m) != EOF) { 46 cnt = 0; 47 for (int i = 1; i <= n; i++) 48 scanf("%d", &a[i]), b[i] = a[i]; 49 sort(b + 1, b + 1 + n); 50 int k = unique(b + 1, b + 1 + n) - b - 1; 51 build(1, k, root[0]); 52 for (int i = 1; i <= n; i++) { 53 int t = lower_bound(b + 1, b + 1 + k, a[i]) - b - 1; 54 t++; 55 root[i] = root[i - 1]; 56 update(t, 1, k, root[i]); 57 } 58 for (int i = 1; i <= m; i++) { 59 int l, r; 60 scanf("%d%d", &l, &r); 61 int len = r - l + 1; 62 if (len < 3) { 63 printf("-1\n"); 64 continue; 65 } 66 ll ans = -1; 67 ll x = b[query(root[l - 1], root[r], len, 1, k)]; 68 ll y = b[query(root[l - 1], root[r], len - 1, 1, k)]; 69 for (int i = 3; i <= len; i++) { 70 ll z = b[query(root[l - 1], root[r], len - i + 1, 1, k)]; 71 if (x < y + z) { 72 ans = x + y + z; 73 break; 74 } 75 else { 76 x = y; 77 y = z; 78 } 79 } 80 printf("%lld\n", ans); 81 } 82 } 83 84 }
转载于:https://www.cnblogs.com/sainsist/p/11328824.html
[2019杭电多校第二场][hdu6601]Keen On Everything But Triangle相关推荐
- 2019杭电多校第二场1009 HDU6599:求本质不同的回文串长度及数量
hdu6599:求本质不同的回文串长度及数量 hdu6599题意: manacher+后缀自动机+倍增 $O(nlog(n))$ manacher+后缀数组+二分 $O(nlog(n))$ 回文树(回 ...
- 2022“杭电杯”中国大学生算法设计超级联赛 (2) 杭电多校第二场
题目 1001 Static Query on Tree AC代码 1002 C++ to Python AC代码 1003 Copy AC代码 1005 Slayers Come AC代码 1007 ...
- 20190724杭电多校第二场
没有补题..倒是又想到了1002的二分做法,比原来好写了不少,也快了不少. #include<bits/stdc++.h> using namespace std; #define p_b ...
- 树形dp ---- 2018年杭电多校第二场 H travel
题目大意: 就是给你一个带点权的树,找到3条独立互不相交的路径使得权值和最大 解题思路: 很经典的树形dp 我们设dp[root][j][k]dp[root][j][k]dp[root][j][k]表 ...
- 2018杭电多校第二场1006(容斥原理,组合数学)
有能力时再回来解决吧= ̄ω ̄= 转载于:https://www.cnblogs.com/ldudxy/p/9521721.html
- 2019杭电多校第一场 Operation HDU - 6579
题意:给出一个序列,两种操作,求区间[l,r]的区间最大异或和,和在末尾添加一个数 思路:强制在线,保存每个线性基的数值,接下去直接去搜第r个线性基,但要保持时间比l要大,新增了一个pos数组代表一个 ...
- 2019杭电多校第九场 Rikka with Cake (hdu6681)
题意:给出一个n * m的蛋糕,切 k 刀,每次从一个点(x,y)向 上下左右的一个方向切,问最后蛋糕被切成了几块 题解:显然,蛋糕的块数就是那么多线段的交点数 + 1.先离散,考虑向左切和向上切的, ...
- 2019杭电多校第一场 HDU 6599
题解 枚举所有的回文串 注意,本质不同的回文串最多只有∣S∣|S|∣S∣个 在这些回文串中,有一些是满足要求的,我们对这些串打上标记 首先跑一个ManacherManacherManacher,然后枚 ...
- 2022杭电多校第二场
1001 Static Query on Tree 题意:树上有A,B,C三个集合,求有多少个点在A某个点到C某个点的路径与A某个点到C某个点的路径的交上 把1到A集合中所有点的路径打上标记1,把1到 ...
- 2020杭电多校第二场 Lead of Wisdom(爆搜)
Problem Description In an online game, "Lead of Wisdom" is a place where the lucky player ...
最新文章
- oracle修改数据高性能,oracle数据库的性能调整
- python读取大文件-python快速读取一个大文件内容(瞎猜)
- 成功解决TypeError: sequence item 0: expected str instance, bytes found
- python教程:闭包函数
- Struts2使用!动态方法调用无效
- windows下实现微秒级的延时
- 【BZOJ4559】【JLOI2016】—成绩比较(拉格朗日插值+dp)
- QT学习笔记(十六):setwindowflags的属性总结
- C#Convert.ToInt32(byte)方法-将字节值转换为int
- NOIP1996复赛 普及组 第二题 python
- 小程序 | 云数据库模糊查询
- ElK STACK的简要分析
- 游戏服务器里怎么看在线人数,数据大佬统计服务器在线人数 来看看哪区最鬼...
- java百度地图逆地址解析_web前端通过百度地图API批量逆解析地址
- 判断质数和合数python代码_质数,非质数之Python
- pandas列是否为空_如果列值不为空,Python pandas将应用函数
- FCPX插件:视频转场插件Stupid Raisins Panel Pop
- Cocos Creator皮毛功能之拖动多选扑克麻将
- UVA 12563 Jin Ge Jin Qu hao(多阶段决策问题,DP)
- 关于作Presentation