题目链接: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的更多相关文章

  1. 2019杭电多校第二场hdu6601 Keen On Everything But Triangle

    Keen On Everything But Triangle 题目传送门 解题思路 利用主席树求区间第k小,先求区间内最大的值,再求第二大,第三大--直到找到连续的三个数可以构成一个三角形.因为对于 ...

  2. 2019杭电多校第二场hdu6602 Longest Subarray(线段树)

    Longest Subarray 题目传送门 解题思路 本题求一个最大的子区间,满足区间内的数字要么出现次数大于等于k次,要么没出现过.给定区间内的数字范围是1~c. 如果r为右边界,对于一种数字x, ...

  3. [2019杭电多校第二场][hdu6602]Longest Subarray(线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6602 题目大意为求最长的区间,满足C种数字在区间内要么不出现,要么出现的次数都不小于K. 大致的分析一 ...

  4. [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]也满足 ...

  5. [2019杭电多校第二场][hdu6598]Harmonious Army(最小割)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6598 题意是说一个军队有n人,你可以给他们每个人安排战士或者法师的职业,有m对人有组合技,组合技的信息 ...

  6. 2019年杭电多校第二场 1008题Harmonious Army(HDU6598+最小割+建图)

    题目链接 传送门 题意 有\(n\)个士兵,要你给他们分配职业.有\(m\)对关系,对于某一对关系\(u,v\),如果同为勇士则总能力增加\(a\),同法师则增加\(c\),一个勇士一个法师增加\(\ ...

  7. 2019年杭电多校第二场 1012题Longest Subarray(HDU6602+线段树)

    题目链接 传送门 题意 要你找一个最长的区间使得区间内每一个数出现次数都大于等于\(K\). 思路 我们通过固定右端点考虑每个左端点的情况. 首先对于每个位置,我们用线段树来维护它作为\(C\)种元素 ...

  8. 2019年杭电多校第二场 1002题Beauty Of Unimodal Sequence(LIS+单调栈)

    题目链接 传送门 思路 首先我们对\(a\)正反各跑一边\(LIS\),记录每个位置在前一半的\(LIS\)中应该放的位置\(ans1[i]\),后一半的位置\(ans2[i]\). 对于字典序最小的 ...

  9. 2018 Multi-University Training Contest 2 杭电多校第二场

    开始逐渐习惯被多校虐orz  菜是原罪 1004  Game    (hdoj 6312) 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6312 虽然披着 ...

随机推荐

  1. Django【第26篇】:中介模型以及优化查询以及CBV模式

    中介模型以及优化查询以及CBV模式 一.中介模型:多对多添加的时候用到中介模型 自己创建的第三张表就属于是中介模型 class Article(models.Model): ''' 文章表 ''' t ...

  2. 洛谷P3768 简单的数学题 莫比乌斯反演+杜教筛

    题意简述 求出这个式子 \[ \sum_{i=1}^n\sum_{j=1}^n ij(i,j) \bmod p \] 做法 先用莫比乌斯反演拆一下式子 \[ \begin{split} \sum_{i ...

  3. [每日一讲] Python系列:Python概述

    Python 序章 概述 Python 是弱类型动态解释型的面向对象高级语言,其具备面向对象的三大特点:封装.继承.多态.Python 代码运行时,其有一个编译过程,通过编译器生成 .pyc 字节码 ...

  4. Python 面试问题

    Python 面试问题 最近正在团队内部普及 Python 语言,有些刚接触 Python 语言的工程师在概念上有很多混淆的地方,刚好看到这篇文章:Python面试问题,里面列举的问题都是关于 Pyt ...

  5. React Native 之FlatList

    1.新建项目 2.因为要用到导航跳转, 所以添加依赖,,这里拷贝这个: "dependencies": { "@types/react": "^16. ...

  6. ASP.NET超大文件上传与下载

    总结一下大文件分片上传和断点续传的问题.因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况.http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件 ...

  7. SSM+PageHelper 使用

    项目中使用了maven 1 引入jar包 首先需要引入PageHelper的jar包.  如果使用了maven,那么只要在pom.xml中引入该插件即可,引入如下: <dependency> ...

  8. 原生JS获取元素宽高实践详解

    开篇的话 任何不是亲身实践中求得的知识,都不是属于你的.任何求得的知识不去时常温习运用,也不是属于你的. 记录由来 在做个上拉广告功能中遇到了一个"理所当然"觉得对的用法,慢慢才排 ...

  9. jquery.ui.widget.js

  10. 高通Android camera运行流程【转】

    本文转载自:http://blog.csdn.net/unicornkylin/article/details/13293295 1.总体架构 Android Camera 框架从整体上看是一个 cl ...