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

D. Strong Vertices - 思维 + 二分

 

 

 分析:

        首先找到边的指向很容易,但是暴力是o(n2),超时,可以将给定的式子变形,au - av >= bu - bv即au - bu >= av - bv,可以将两个数组转变为一个数组中的任意两个值之间的关系,因此可以遍历整个数组,在其中二分查找每一个符合条件的数,就可以优化时间复杂度。

代码:

#include <bits/stdc++.h>using namespace std;
using ll = long long;typedef pair<ll,int> pii;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int T;cin >> T;while(T --) {int n;cin >> n;vector<pii> a(n);vector<ll> b(n);for(int i=0;i<n;i++) cin>>a[i].first;for(int i=0;i<n;i++) cin>>b[i];vector<int> x(n+1);for(int i=0;i<n;i++) {a[i].first-=b[i];a[i].second = i+1;}// for(int i=0;i<a.size();i++) cout<<a[i].first<<' ';//     cout<<endl;sort(a.begin(),a.end());//for(int i=0;i<a.size();i++) cout<<a[i].first<<' ';//     cout<<endl;for(int i=0;i<a.size();i++) {int l=0;int r=a.size()-1;while(l<r) {int mid=(l+r+1)/2;if(a[mid].first<=a[i].first) l=mid;else r=mid-1;}x[a[i].second]=l;//  cout<<a[i].second << ' ' <<l<<endl;}vector<int> ans;for(int i=1;i<=n;i++) {// cout<<x[i]<<' ';if(x[i]==n-1) ans.push_back(i);}cout<<ans.size()<<'\n';for(int i=0;i<ans.size();i++) cout<<ans[i]<<' ';cout<<'\n';}
}

http://www.lryc.cn/news/117306.html

相关文章:

  • 8月9日上课内容 nginx负载均衡
  • 为何我们都应关心算法备案?
  • [IDEA]使用idea比较两个jar包的差异
  • HTML笔记(2)
  • 前端大屏自适应缩放
  • 【Express.js】全面鉴权
  • 了解华为(H3C)网络设备和OSI模型基本概念
  • Web3到底是个啥?
  • 山东高校的专利申请人经常掉进的误区2
  • 关于webpack的基本配置
  • SpringBoot WebSocket配合react 使用消息通信
  • 【积水成渊】uniapp高级玩法分享
  • 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
  • API接口 |产品经理一定要懂的技术知识
  • C++中访问存储在数组中的数据
  • 【创建型设计模式】C#设计模式之原型模式
  • 用C语言高效地打印杨辉三角
  • TCP/IP四层模型对比OSI七层网络模型的区别是啥?数据传输过程原来是这样的
  • 接口测试实战,Jmeter正则提取响应数据-详细整理,一篇打通...
  • 基于自适应变异粒子群优化BP神经网络 的风速预测,基于IPSO-BP神经网络里的风速预测
  • MySQL—日志
  • uniapp 扩展组件 uni-forms 的表单验证之 validateFunction 只响应一次
  • 每日一题8.10 lc39
  • 贝叶斯深度学习的温和介绍
  • 无涯教程-Perl - glob函数
  • 前端先行模拟接口(mock+expres+json)
  • 老师如何制作学生分班信息查询系统?
  • Java实战:高效提取PDF文件指定坐标的文本内容
  • centos磁盘满了,怎么清理大文件
  • AIGC:【LLM(四)】——LangChain+ChatGLM:本地知识库问答方案