首页 > 其他分享 >【题解】CF1589D Guess the Permutation

【题解】CF1589D Guess the Permutation

时间:2022-09-27 18:22:36浏览次数:78  
标签:10 Guess log int 题解 mid ask CF1589D 逆序

这是一个交互题!

题目链接 --> Problem - D - Codeforces

题目大意

这是一个交互题!

给定一个长度为 \(n\) 的自然排列,但其中 \([i,j-1],[j,k]\)两部分被翻转了。

你可以进行如下询问:

  • 给出 \([l,r]\) ,回答 \([l,r]\) 这一段的逆序对数量。

询问次数不超过40次,其中 \((n <= 10^9, i < j-1,j < k)\)

分析

  • 我们可以先通过二分得到 \(i\),即找到满足 \([1,x]\) 中逆序对等于 \(0\) 的最大数 \(x\)

  • 这一步的时间复杂度为 \(O(log(n))\),大约 \(log_2(10^9)=30\) 次询问

  • 然后我们观察 \([i, n]\) 和 \([i+1,n]\) 这两段区间的逆序对差值

举个例子,对于下面这个自然排列

\[1, 2, 3, 4, 5, 6, 7, 8, 9, 10 \]

假设 \(i = 2, j = 5, k= 8\),则反转后的排列为

\[1, 4, 3, 2, 8, 7, 6, 5, 9, 10 \]

  • \([i, n]\) (即 \([2, 10]\) )的逆序对数量为 \(2 + 1\)

  • \([i+1, n]\) (即 \([3, 10]\) )的逆序对数量为 \(1\)

实际上,\([i,n]\) 和 \([i+1,n]\) 的逆序对之差围为 \(j-1-i\)

同理,\([j,n]\) 和 \([j+1,n]\) 的逆序对之差为\(k - j\)

所以我们只需要 \(log(n)+4\) 次询问即可得出答案

Code

这是一个交互题!

il int ask(int x, int y) {
    cout << "? " << x << " " << y << endl;
    int ans;    cin >> ans;
    return ans;
}

void solve() {
    cin >> n;
    int l = 1, r = n;
    // 二分 i 的位置
    while (l < r) {
        int mid = (l + r + 1) >> 1;
        if (ask(1, mid) == 0)   l = mid;
        else    r = mid - 1;
    }
    int i = l;
    int j = i + ask(i, n) - ask(i + 1, n) + 1;
    int k = j + ask(j, n) - ask(j + 1, n);

    cout << "! " << i << " " << j << " " << k << endl;
    return;
}

标签:10,Guess,log,int,题解,mid,ask,CF1589D,逆序
From: https://www.cnblogs.com/Yi-Shan/p/16715968.html

相关文章

  • 题解【P7515 [省选联考 2021 A 卷] 矩阵游戏】
    P7515[省选联考2021A卷]矩阵游戏解题报告。不一定更好的阅读体验。一年前我在省选赛场上折戟沉沙,一年后我从到下的地方再摔一跤。我成功了,我仍然是以前的那个......
  • 洛谷 CF1257F Make Them Similar 灰 题解
    前言本题解采用折半搜索算法完成,对于不打算用这种方法的同学,这篇题解可能会浪费你人生中宝贵的十几分钟。思路此题似乎找不出什么好的性质,那么考虑暴力。发现\(x,a\)......
  • LG4463 calc 题解
    传送门题意一个序列$a_1,a_2,\dots,a_n$是合法的,当且仅当:$a_1,a_2,\dots,a_n$都是\([1,k]\)中的整数。$a_1,a_2,\dots,a_n$互不相等。一个序列的值定义为它里......
  • P4965 题解
    题目传送门被同机房神犇使用一顿晚饭的时间爆切并当成作业布置给我的题...虽然是紫,但实际难度处于可以接受的范围内。题目分析开始的思路是\(\text{set}\)乱搞,因为发......
  • AtCoder ABC 270 题解(D-F)
    AtCoderABC270题解(D-F)D-Stones(博弈DP)题目:​ 现在有一堆石子,一个序列a表示每次可以从石头里拿走多少个石子。当无法再拿出石头的时候,游戏结束。两边都以最佳策略......
  • 题解【CF1436E Complicated Computations】
    CF1436EComplicatedComputations解题报告。不一定更好的阅读体验。对于一个数\(x\),考虑什么条件\(x\)可以作为答案。首先要满足\(\forally\in[1,x)\),\(y\)......
  • SpringBoot+Mybatis-Plus 数据表字段是关键字的问题解决
    如果字段名是关键字,用mybatisplus时会报以下错误:badSQLgrammar[];nestedexceptionisjava.sql.BatchUpdateException:ORA-01747:user.table.column,table.column......
  • 力扣算法第1题--两数之和(暴力题解&优化题解)
    两数之和题目描述:给定一个整数数组nums 和一个整数目标值target,请你在该数组中找出和为目标值target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输......
  • P2044 随机数生成器 题解
    这么标准的不动点居然只有一篇不动点题解?而且唯一的不动点题解关于不动点的描述还是错的?所以,来写一篇题解讲讲,MO中是怎么弄这种一阶线性递推式的。单个数,虽然省常数,却......
  • P6835 [Cnoi2020]线形生物 题解
    通过这道题可以看出来pz根本不会期望考虑期望线性性质,设\(E_{x\toy}\)表示从\(x\)走到\(y\)的期望步数,那么有\(E_{1\ton+1}=\sum_{i=1}^nE_{i\toi+1}\),因此考......