当前位置: 首页 > news >正文

积木高楼

时间限制:1秒        内存限制:128M

题目描述

小可有 n 栋积木高楼,编号从 1 到 n,其中第 i 个积木高楼由 aia​i​​ 块积木构成。

如果积木高楼满足 ai>aja​i​​>a​j​​ ,则小可可以从 ii 拿一块积木放到 jj 。

进行任意次上述移动操作之后,a1a​1​​ 最大会是多大。

输入描述

第一行:输入一个正整数 t ,表示多组输入的测试样例数。

对于每组数据:

第一行:输入一个正整数 n ,表示积木高楼的数量。

第二行:输入 n 个正整数 aia​i​​ ,表示每个积木高楼由多少积木构成。

输出描述

对于每组数据,输出最大的 a1a​1​​

输入样例
 
  1. 4
  2. 3
  3. 1 2 3
  4. 3
  5. 1 2 2
  6. 2
  7. 1 1000000000
  8. 10
  9. 3 8 6 7 4 1 2 4 10 1
输出样例
 
  1. 3
  2. 2
  3. 500000001
  4. 9
数据描述

25%的数据下:1≤t≤2,1≤n≤100

100%的数据下:1≤t≤10^4,2≤n≤2×10^5,1≤ai≤10^9 1≤t≤10​^4​​,2≤n≤2×10^​5​​,1≤a​i​​≤10​^9​​ 且多组输入的 n 的和不超过 2×10……5

 

#include<iostream>
#include<queue>
using namespace std;
const int N = 2*1e5+5;
long long n,a[N],t;
priority_queue<long long ,vector<long long>,greater<long long> >q;
int main(){
// 	freopen("building.in","r",stdin);
// 	freopen("building.out","w",stdout);scanf("%lld",&t);while(t--){scanf("%lld",&n);scanf("%lld",&a[1]);for(int i=2;i<=n;i++) scanf("%lld",&a[i]),q.push(a[i]);while(q.size()>0){if(q.top()<=a[1]) q.pop();else{int sum=(q.top()+a[1]);a[1]=(sum+1)/2;q.pop();}}printf("%lld\n",a[1]);}return 0;
}

相关文章:

  • 打卡day36
  • 视频剪辑SDK定制开发技术方案与报价书优雅草卓伊凡
  • 《STL--list的使用及其底层实现》
  • systemverilog的单精度浮点和双精度浮点
  • JavaWeb:SpringBoot配置优先级详解
  • 工程师 - Worm Gear
  • NV171NV173美光闪存颗粒NV181NV186
  • 《仿盒马》app开发技术分享-- 地址管理页(端云一体)
  • Spring Security框架全面解析与应用实践
  • FPGA实战项目4——AI 推理加速器
  • 【鸿蒙开发】Hi3861学习笔记-倾斜传感器
  • 微信小程序常用方法
  • C++23 对部分特性的 constexpr 支持
  • Vue修饰符全解析
  • 代码随想录第42天:图论3
  • 【Linux】权限
  • 如何通过API接口实现自动化上货跨平台铺货?商品采集|商品上传实现详细步骤
  • 康佳Java开发面试题及参考答案
  • NNG和DDS
  • 论文阅读:arxiv 2024 SmoothLLM: Defending LLMs Against Jailbreaking Attacks
  • 华企网络/关键词优化app
  • 电子商务网站服务器/西安网站维护公司
  • 手机怎么建立网站/网站发布与推广
  • 深圳住建网站/百度服务电话
  • 汉中网站建设有限公司/南京seo公司排名
  • 长沙做网站a微联讯点很好/少女长尾关键词挖掘