[2019杭电多校第二场][hdu6601]Keen On Everything But Triangle
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6601
题意是说用给定区间内的数字组成周长最大的三角形。
大致做法就是求区间第1大,第2大和第3大然后判断是否满足,不满足再求第4大,第5大....。
原本以为复杂度爆炸,结果想想发现最坏的情况只是斐波那契的样子,每个区间也不会很大。
求区间第i大就套了个主席树
#include <algorithm>
#include<iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include<queue>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + ;
int a[maxn], b[maxn];
int root[maxn], ls[maxn * ], rs[maxn * ], cnt;
ll val[maxn * ];
void build(int l, int r, int &i) {
i = ++cnt;
val[i] = 0ll;
if (l == r)
return;
int mid = l + r >> ;
build(l, mid, ls[i]);
build(mid + , r, rs[i]);
}
void update(int k, int l, int r, int &i) {
ls[++cnt] = ls[i], rs[cnt] = rs[i], val[cnt] = val[i] + ;
i = cnt;
if (l == r)
return;
int mid = l + r >> ;
if (k <= mid)
update(k, l, mid, ls[i]);
else
update(k, mid + , r, rs[i]);
}
ll query(int u, int v, int k, int l, int r) {
if (l == r)
return l;
int x = val[ls[v]] - val[ls[u]];
int mid = l + r >> ;
if (k <= x)
return query(ls[u], ls[v], k, l, mid);
else
return query(rs[u], rs[v], k - x, mid + , r);
}
int main() {
int n, m;
while (scanf("%d%d", &n, &m) != EOF) {
cnt = ;
for (int i = ; i <= n; i++)
scanf("%d", &a[i]), b[i] = a[i];
sort(b + , b + + n);
int k = unique(b + , b + + n) - b - ;
build(, k, root[]);
for (int i = ; i <= n; i++) {
int t = lower_bound(b + , b + + k, a[i]) - b - ;
t++;
root[i] = root[i - ];
update(t, , k, root[i]);
}
for (int i = ; i <= m; i++) {
int l, r;
scanf("%d%d", &l, &r);
int len = r - l + ;
if (len < ) {
printf("-1\n");
continue;
}
ll ans = -;
ll x = b[query(root[l - ], root[r], len, , k)];
ll y = b[query(root[l - ], root[r], len - , , k)];
for (int i = ; i <= len; i++) {
ll z = b[query(root[l - ], root[r], len - i + , , k)];
if (x < y + z) {
ans = x + y + z;
break;
}
else {
x = y;
y = z;
}
}
printf("%lld\n", ans);
}
} }
[2019杭电多校第二场][hdu6601]Keen On Everything But Triangle的更多相关文章
- 2019杭电多校第二场hdu6601 Keen On Everything But Triangle
Keen On Everything But Triangle 题目传送门 解题思路 利用主席树求区间第k小,先求区间内最大的值,再求第二大,第三大--直到找到连续的三个数可以构成一个三角形.因为对于 ...
- 2019杭电多校第二场hdu6602 Longest Subarray(线段树)
Longest Subarray 题目传送门 解题思路 本题求一个最大的子区间,满足区间内的数字要么出现次数大于等于k次,要么没出现过.给定区间内的数字范围是1~c. 如果r为右边界,对于一种数字x, ...
- [2019杭电多校第二场][hdu6602]Longest Subarray(线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6602 题目大意为求最长的区间,满足C种数字在区间内要么不出现,要么出现的次数都不小于K. 大致的分析一 ...
- [2019杭电多校第二场][hdu6599]I Love Palindrome String(回文自动机&&hash)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6599 题目大意为求字符串S有多少个子串S[l,r]满足回文串的定义,并且S[l,(l+r)/2]也满足 ...
- [2019杭电多校第二场][hdu6598]Harmonious Army(最小割)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6598 题意是说一个军队有n人,你可以给他们每个人安排战士或者法师的职业,有m对人有组合技,组合技的信息 ...
- 2019年杭电多校第二场 1008题Harmonious Army(HDU6598+最小割+建图)
题目链接 传送门 题意 有\(n\)个士兵,要你给他们分配职业.有\(m\)对关系,对于某一对关系\(u,v\),如果同为勇士则总能力增加\(a\),同法师则增加\(c\),一个勇士一个法师增加\(\ ...
- 2019年杭电多校第二场 1012题Longest Subarray(HDU6602+线段树)
题目链接 传送门 题意 要你找一个最长的区间使得区间内每一个数出现次数都大于等于\(K\). 思路 我们通过固定右端点考虑每个左端点的情况. 首先对于每个位置,我们用线段树来维护它作为\(C\)种元素 ...
- 2019年杭电多校第二场 1002题Beauty Of Unimodal Sequence(LIS+单调栈)
题目链接 传送门 思路 首先我们对\(a\)正反各跑一边\(LIS\),记录每个位置在前一半的\(LIS\)中应该放的位置\(ans1[i]\),后一半的位置\(ans2[i]\). 对于字典序最小的 ...
- 2018 Multi-University Training Contest 2 杭电多校第二场
开始逐渐习惯被多校虐orz 菜是原罪 1004 Game (hdoj 6312) 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6312 虽然披着 ...
随机推荐
- Linux中查看某 个软件的安装路径
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...
- 6364. 【NOIP2019模拟2019.9.20】养马
题目描述 题解 一种显然的水法:max(0,-(点权-边权之和*2)) 这样会挂是因为在中途体力值可能会更小,所以考虑求走完每棵子树所需的至少体力值 考虑从子树往上推求出当前点的答案 设每棵子树从根往 ...
- css3 中的2D转换
一.CSS3转换 通过转换实现对对元素进行旋转.缩放.移动.拉伸的效果:这种原来必须要通过JS或者图片处理才可以实现的效果,现在都可以通过CSS3来完成. 2D转换采用transform属性来实现效果 ...
- RPA走专有云还是公共云?阿里云RPA公共云给出了这样几组数据…
自从近年国外UIPATH.AUTOMATION ANYWHERE.BLUE PRISM等RPA企业的崛起,Robotic Process Automation(RPA)走进了人们视野.它以节省成本.提 ...
- Java的基本使用
1.如何运行一个Java源码 打开文本编辑器,输入以下代码: public class Hello { public static void main(String[] args) { System. ...
- Leetcode 12. Integer to Roman(打表,水)
12. Integer to Roman Medium Roman numerals are represented by seven different symbols: I, V, X, L, C ...
- 【BZOJ1521】Est(单调队列优化DP)
题意:From https://www.cnblogs.com/CXCXCXC/p/4725249.html 思路:本身就两维状态了,把问题关键s[i][j]写成二维比一维好写多了 #include& ...
- websocket 传输数据帧打包 (client端)
/* Vertion: 0.2.1 date: 2015.8.11 content: gcc 编译通过 */ //websocket 传输数据帧打包 client端 //参数:src 为输入字符串 / ...
- 使用struts2的内置标签,采用submit()提交表单时,浏览器报404
如图 url是没有问题的,结果我将提交方式改为get时,发现有2个参数的name值是一样的,如下图, 解决方法:将name的值修改就OK了.
- 【30分钟学完】canvas动画|游戏基础(2):从零开始画画
前言 上篇主要是理论的概述,本篇会多些实践,来讲讲canvas的基础用法,并包含一些基础三角函数的应用,推荐没有canvas基础的朋友阅读,熟悉的朋友可以跳过. 本人能力有限,欢迎牛人共同讨论,批评指 ...