博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Keen On Everything But Triangle(2019 HDU 2019 Multi-University Training Contest 2 )
阅读量:4695 次
发布时间:2019-06-09

本文共 2022 字,大约阅读时间需要 6 分钟。

题意

给你n个数,然后询问l,r区间能构成三角形的最大周长是多少?

链接

[]

分析

因为a<=1e9所以不超过44个斐波那契数,无论什么区间最多在那个范围内判断即可

也就是你要找某个区间的前四十五大的数,这个就用到主席树去找了
我有个垃圾错误浪费了我好多时间

代码

#include
using namespace std;typedef long long ll;const int N = 5000000;int ls[N],rs[N],sum[N],T[N],a[N],b[N];int n,tot;void build(int l,int r,int &x){ x = ++tot; sum[x] = 0; if(l==r) return; int m = (l+r)>>1; build(l,m,ls[x]); build(m+1,r,rs[x]);}void update(int last,int p,int l,int r,int &x){ x = ++tot; ls[x] = ls[last]; rs[x] = rs[last]; sum[x] = sum[last] + 1; if(l==r) return; int m = (l+r)>>1; if(p<=m) update(ls[last],p,l,m,ls[x]); else update(rs[last],p,m+1,r,rs[x]);}int query(int s,int t,int l,int r,int k){ if(l==r) return l; int m = (l+r)>>1; int cnt = sum[ls[t]] - sum[ls[s]]; if(k<=cnt) return query(ls[s],ls[t],l,m,k); else return query(rs[s],rs[t],m+1,r,k-cnt);}int main(){ int n,m; while(~scanf("%d%d",&n,&m)) { tot=0; for(int i = 1;i <= n;i++) { scanf("%d",&a[i]); b[i]=a[i]; } sort(a+1,a+n+1); int sz = unique(a+1,a+n+1) - (a+1); build(1,sz,T[0]); for(int i = 1; i <= n;i++) b[i] = lower_bound(a+1,a+sz+1,b[i]) - a; for(int i = 1;i <= n;i++) update(T[i-1],b[i],1,sz,T[i]); int x,y,k; while(m--) { scanf("%d%d",&x,&y); ll ans = -1; k=(y-x+1); bool flag = 0; for(int i = k;i >= 3;i--){ int x1 = query(T[x-1],T[y],1,sz,i); int x2 = query(T[x-1],T[y],1,sz,i-1); int x3 = query(T[x-1],T[y],1,sz,i-2); if(1ll*a[x2]+1ll*a[x3] > 1ll*a[x1]){ ans = 1ll*a[x1]+a[x2]+a[x3];//我错的是没把后面转成long long 就死在那里 flag=1; break; } } if(flag) printf("%lld\n",ans); else puts("-1"); } } return 0;}

转载于:https://www.cnblogs.com/mch5201314/p/11256479.html

你可能感兴趣的文章
2017-2018-1 20155339 《信息安全系统设计基础》第8周学习总结
查看>>
socket.io 消息发送
查看>>
C# 两个datatable中的数据快速比较返回交集或差集
查看>>
关于oracle样例数据库emp、dept、salgrade的mysql脚本复杂查询分析
查看>>
一些有趣的代码
查看>>
Major Performance Impacts
查看>>
读《图解HTTP》有感-(返回结果的HTTP状态码)
查看>>
操作数栈
查看>>
转:文本分类问题
查看>>
tensorflow_python中文手册
查看>>
Vs2012在Linux应用程序开发(3):加入新平台hi3516
查看>>
adb shell am 的用法
查看>>
实现自动点击
查看>>
MVP开发模式的理解
查看>>
Unity多开的方法
查看>>
File类中的list()和listFiles()方法
查看>>
我的VS CODE插件配置 主要针对.NET和前端插件配置
查看>>
关于js中的事件
查看>>
一致性哈希算法运用到分布式
查看>>
决策树和随机森林->信息熵和条件熵
查看>>