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

网站备案期间 权重网站开发技术历史

网站备案期间 权重,网站开发技术历史,桂林做手机网站,精品无人区高清不用下载题目 有 N N N 个元素,编号 1 , 2.. N 1,2..N 1,2..N,每一对元素之间的大小关系是确定的,关系具有反对称性,但不具有传递性。 注意:不存在两个元素大小相等的情况。 也就是说,元素的大小关系是 N N N…

题目

N N N 个元素,编号 1 , 2.. N 1,2..N 1,2..N,每一对元素之间的大小关系是确定的,关系具有反对称性,但不具有传递性。

注意:不存在两个元素大小相等的情况。

也就是说,元素的大小关系是 N N N 个点与 N ∗ ( N − 1 ) / 2 N*(N−1)/2 N(N1)/2 条有向边构成的任意有向图。

然而,这是一道交互式试题,这些关系不能一次性得知,你必须通过不超过 10000 次提问来获取信息,每次提问只能了解某两个元素之间的关系。

现在请你把这 N N N 个元素排成一行,使得每个元素都小于右边与它相邻的元素。

你可以通过我们预设的 bool 函数 compare 来获得两个元素之间的大小关系。

例如,编号为 a a a b b b 的两个元素,如果元素 a a a 小于元素 b b b,则 compare(a,b) 返回 true,否则返回 false

N N N 个元素排好序后,把他们的编号以数组的形式输出,如果答案不唯一,则输出任意一个均可。

数据范围

1 ≤ N ≤ 1000 1≤N≤1000 1N1000

输入样例

[[0, 1, 0], [0, 0, 0], [1, 1, 0]]

输出样例

[3, 1, 2]

分析

根据数学归纳法,假设前 k − 1 k-1 k1 个元素已经按要求排成一行,如果能确定第 k k k 个元素应该放在哪一个前面,即可解决此问题。

可以通过这样一种二分法确定第 k k k 个元素的位置:若第 k k k 个元素比第 m i d mid mid 个元素小,令 r = m i d r = mid r=mid,否则令 l = m i d + 1 l = mid + 1 l=mid+1。二分的初始区间可设为 [ 1 , k ] [1,k] [1,k],区间中的 k k k 这个值表示放在所有 k − 1 k-1 k1 个元素之后。

可以证明二分一定可以找到一个合法的位置插入,证明如下。

  1. 如果第 k k k 个元素比第 m i d mid mid 个元素小。
    继续比较 k k k m i d − 1 mid-1 mid1 这两个元素,若第 k k k 个元素比第 m i d − 1 mid - 1 mid1 个元素大,则 k k k 可以插在 m i d − 1 mid - 1 mid1 m i d mid mid 之间;否则说明元素 k k k 比元素 m i d − 1 mid - 1 mid1 小,那就再比较 k k k m i d − 2 mid - 2 mid2 这两个元素,依此类推,直到发现第 k k k 个元素比第 1 个元素小,那就放在最前边。
  2. 如果第 k k k 个元素比第 m i d mid mid 个元素大,同理。

以上只是一个证明,当然不会真的去依次比较 k k k 与每个元素。实际上通过二分,每询问一次 ( k k k m i d mid mid),就可以把区间 [ l , r ] [l,r] [l,r] 缩小一半,因此至多 l o g k logk logk 次询问就可以确定 k k k 应该放在哪里。把 N N N 个元素排成一行的总询问次数不超过 N l o g N NlogN NlogN

代码

// Forward declaration of compare API.
// bool compare(int a, int b);
// return bool means whether a is less than b.class Solution {
private:vector<int> arr;//第一个比arr[k]大的数的位置int binarySearch(int k) {int left = 0;int right = k;while (left < right) {int mid = (left + right) >> 1;if (compare(arr[k], arr[mid])) { //arr[k] < arr[mid]right = mid;} else {left = mid + 1;}}return left;}
public:vector<int> specialSort(int N) {for (int i = 0; i < N; i++) {arr.emplace_back(i + 1);}for (int k = 0; k < N; k++) {int cur = arr[k];int pos = binarySearch(k); //arr[k]应该放到pos位置for (int j = k - 1; j >= pos; j--) { //pos到k-1位置的数全部向后移动一个位置arr[j + 1] = arr[j];}arr[pos] = cur;}return arr;}
};
http://www.yayakq.cn/news/810449/

相关文章:

  • 福建建设工程交易网站网站广告投放价格表
  • 承德网站设计公司婚庆网站搭建的流程
  • 建最便宜的网站要多少钱wordpress 缩略图优化
  • 邯郸专业做网站多少钱网页的分类
  • 百度知道山东网站建设17一起做网站株洲
  • 网站建设需要汇报哪些内容制作网站需要学什么软件有哪些内容
  • 贵州灵溪seo整站优化wordpress 不支持svg
  • 做网站用什么语言好阿里巴巴官网下载
  • 深圳商城网站设计多少钱企业logo设计注意事项
  • 网站图片描述怎么写无锡网站建设君通科技公司
  • seo网络贸易网站推广电子商务网站建设jsp考卷
  • 建设部网站公示钦州公租房摇号查询自己服务器可以做网站
  • 房屋设计软件有哪些seo搜索引擎优化论文
  • 如何做电商网站 昆明新营销方式有哪些
  • 如何做网络推广网站一站式做网站开发
  • 官方网站管理办法天津做填料的公司
  • 本地网站建设多少钱信息大全wordpress生成海报图片
  • 新浦网站制作wordpress开源主题
  • 域名做违法网站网络营销策略的内涵
  • 女生做网站前端设计师工作1月工资257元
  • 江苏省教育现代化建设水平监测网站岳阳市交通建设投资公司门户网站
  • 做网站彩票网站吗重庆服装网站建设地址
  • 专业的论坛网站建设wordpress编辑器经典
  • 做京挑客的网站有哪些佛山医疗网站建设
  • 温州设计网站建设满山红网站建设
  • 怎么做找券网站成都网站建设kaituozu
  • 西安做网站首选品牌网站建设坚持大蝌蚪
  • 建设部网站企业资质丹阳网站建设多少钱
  • 万盛网站制作山东聊城网站设计
  • 宜宾市规划建设局网站wordpress 搜索摘要