zoukankan      html  css  js  c++  java
  • [CF1486C2] Guessing the Greatest (hard version)

    [CF1486C2] Guessing the Greatest (hard version) - 交互,二分

    Description

    给定一个序列 (n le 10^5),元素各不相同,支持区间次大值位置询问,在不超过 20 次查询中,找到最大元素的位置。

    Solution

    第一步,我们找到次大元素,设他的位置为 y

    第二步,判断最大元素在次大的左边还是右边。我们可以对 ([1,y]) 做一次查询,如果结果 =y,就是在左边,否则在右边

    第三步,二分找到最大值位置

    对于在左边的情况,我们二分一个 mid,每次查询 ([mid,y]),如果结果 =y,那么 l=mid+1,否则 r=mid

    对于在右边的情况,我们二分一个 mid,每次查询 ([y,mid]),如果结果 =y,那么 r=mid,否则 l=mid+1

    #include <bits/stdc++.h>
    using namespace std;
    
    signed main()
    {
        int n, l, r;
        cin >> n;
        cout << "? " << 1 << ' ' << n << endl;
        int y;
        cin >> y;
        int z;
        if (y > 1)
        {
            cout << "? " << 1 << ' ' << y << endl;
            cin >> z;
        }
        else
        {
            z = 0;
        }
        if (z == y)
        {
            l = 1, r = y;
            while (l < r)
            {
                int mid = (l + r) / 2;
                int x;
                if (mid != y)
                {
                    cout << "? " << mid << ' ' << y << endl;
                    cin >> x;
                }
                else
                    x = 0;
                if (x == y)
                    l = mid + 1;
                else
                    r = mid;
            }
            cout << "! " << l - 1 << endl;
        }
        else
        {
            l = y, r = n;
            while (l < r)
            {
                int mid = (l + r) / 2;
                int x;
                if (y != mid)
                {
                    cout << "? " << y << ' ' << mid << endl;
                    cin >> x;
                }
                else
                    x = 0;
                if (x != y)
                    l = mid + 1;
                else
                    r = mid;
            }
            cout << "! " << r << endl;
        }
    }
    
  • 相关阅读:
    生成doc
    Struts2 配置
    Struts(一)struts2.2概述与MVC模式深度剖析
    [DOM Event Learning] Section 4 事件分发和DOM事件流
    jquery 高亮显示案例
    jquery 下拉菜单
    3_1:操作样式
    2_2:筛选器
    2_1:选择元素
    本地存储小案例:记住用户名
  • 原文地址:https://www.cnblogs.com/mollnn/p/14458449.html
Copyright © 2011-2022 走看看