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

合肥制作网站企业网页美工设计教程

合肥制作网站企业,网页美工设计教程,wordpress 文章页插件,蜘蛛搜索引擎网页版题目内容 原题链接 给定 n n n 个箱子&#xff0c;问是否存在一个箱子 x x x 是否可以放到另一个箱子 y y y 里。 需要满足 h x < h y , w x < w y , d x < d y h_x<h_y,w_x<w_y,d_x<d_y hx​<hy​,wx​<wy​,dx​<dy​。 箱子可以随意翻转。 …

题目内容

原题链接

给定 n n n 个箱子,问是否存在一个箱子 x x x 是否可以放到另一个箱子 y y y 里。
需要满足 h x < h y , w x < w y , d x < d y h_x<h_y,w_x<w_y,d_x<d_y hx<hy,wx<wy,dx<dy
箱子可以随意翻转。

数据范围

1 ≤ n ≤ 2 ⋅ 1 0 5 1\leq n\leq 2\cdot 10^5 1n2105
1 ≤ h i , w i , d i ≤ 1 0 9 1\leq h_i,w_i,d_i\leq 10^9 1hi,wi,di109

题解

首先按从小到大对 h , w , d h,w,d h,w,d 进行排序。

这里假设对所有的箱子,排序后都有 h ≤ w ≤ d h\leq w\leq d hwd

那么我们再按照 h h h 为第一关键字, w w w 为第二关键字, d d d 为第三关键字对箱子进行从小到大的排序。

然后我们从按 h h h 从小到大枚举,每次将所有 h h h 相同的箱子一起枚举。

这样,我们就可以对剩下的 w w w d d d 构建树状数组了。

对于箱子 i i i ,找到 h j < h i h_j<h_i hj<hi j j j ,且 w j < w i w_j<w_i wj<wi 的最小的 d j d_j dj 。判断 d j < d i d_j < d_i dj<di 是否成立即可。

然后在判断完后,将所有值为 h i h_i hi 的箱子都加入到树状数组中。

q u e r y ( p ) query(p) query(p) 其实是在求 w ≤ p w\leq p wp 的最小的 d d d

这个问题又叫三维偏序。

时间复杂度: O ( n log ⁡ n ) O(n\log n) O(nlogn)

代码

#include <bits/stdc++.h>
using namespace std;const int INF = 0x3f3f3f3f;struct Node {int a[3];
};int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin >> n;vector<Node> vec(n);for (int i = 0; i < n; ++i) {for (int j = 0; j < 3; ++j) cin >> vec[i].a[j];sort(vec[i].a, vec[i].a + 3);}sort(vec.begin(), vec.end(), [](const Node& A, const Node& B) {return A.a[0] < B.a[0];});vector<int> b;for (int i = 0; i < n; ++i) b.push_back(vec[i].a[1]);sort(b.begin(), b.end());b.erase(unique(b.begin(), b.end()), b.end());auto get = [&](int x) {return int(lower_bound(b.begin(), b.end(), x) - b.begin() + 1);};for (int i = 0; i < n; ++i) vec[i].a[1] = get(vec[i].a[1]);int m = int(b.size());vector<int> tr(m + 1, INF);auto update = [&](int p, int x) {while (p <= m) {tr[p] = min(tr[p], x);p += (p & -p);}};auto query = [&](int p) {int res = INF;while (p >= 1) {res = min(res, tr[p]);p -= (p & -p);}return res;};bool ok = false;for (int i = 0; i < n; ++i) {int j = i + 1;while (j < n && vec[j].a[0] == vec[i].a[0]) j += 1;// 找到是否存在这么一个即可for (int k = i; k < j; ++k) {if (query(vec[k].a[1] - 1) < vec[k].a[2]) {ok = true;break;}}if (ok) break;// 把当前的部分全部添加进去for (int k = i; k < j; ++k) {update(vec[k].a[1], vec[k].a[2]);}i = j - 1;}if (ok) cout << "Yes\n";else cout << "No\n";return 0;
}
http://www.yayakq.cn/news/202840/

相关文章:

  • 如何开淘宝店做国外网站建行网站用户名是什么
  • 竹子林网站建设高性能网站建设在线阅读
  • 鸿铭物流网络建站直播软件开发一个多少钱
  • oa网站模板电商网站建设任务分解结构
  • 英语网站建设123cnn网址之家
  • 网站建设公司 信科网络网站建设合同中的违约责任
  • 常州建站程序项目计划书模板word
  • 成都企业网站制作哪家好怎么查询网站所有关键词
  • 网站导航漂浮代码没有企业邮箱怎么填写
  • 高端网站设计定制南通制作网页多少钱
  • iis网站301重定向wordpress 登陆不了
  • 怎样在线做网站404关键词排名优化软件策略
  • 配资网站开发郴州网约车
  • 建设学院网站的通知书阿里云备案
  • dwcc2018怎么做网站东软网站建设方案
  • 便捷网站建设推荐买一个网站多少钱
  • 凡科网站建站教程上市装修公司
  • 橙网站建个什么网站
  • 自己怎么做网站视频赚钱吗金科网站建设
  • 域名如何绑定网站做网站和做电脑软件差别大吗
  • 免费网页建设个人seo优化
  • 深圳价格实惠的网站建设公司信誉好的网站建设案例
  • 如何建设视频网站单页面中添加wordpress的评论
  • 做视频的网站带模板网站开发合同范本
  • 商标 做网站 是几类响应式网站企业
  • wordpress网站如何播放视频济南seo优化外包
  • 为什么网站上传都上传不成功承德网站制作与建设
  • 购物网站的搜索框用代码怎么做精品课程 网站建设质量
  • 河北建设银行石家庄分行招聘网站国家超算互联网公司排名
  • 有没有专门做图的网站在线制作电子公章免费公章在线生成