zoukankan      html  css  js  c++  java
  • 找数

    所谓分治就是指的分而治之,即将较大规模的问题分解成几个较小规模的问题,通过对较小规模问题的求解达到对整个问题的求解。
    当我们将问题分解成两个较小问题求解时的分治方法称之为二分法。
    分治的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相似。
    找出各部分的解,然后把各部分的解组合成整个问题的解。
     
    Eg:

    找数

    找一个长度为n的单调递增的正整数序列,即序列中的每一个数都比前一个数大。有m个询问,每次询问一个x,问序列中最后一个小于等于x的数是什么?
     
    输入 第一行2整数n,m。
     
    接下来m行每行一个数,表示这个序列。
     
    接下来m行每行一个数,表示一个询问。
     
    输出m行,表示序列中最后一个小于等于x的数是什么。假如没有,输出-1;
     

    思路:

      这很显然就是二分答案的题

    上代码:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    int n,m,a[111111];
    
    int main() {
        scanf("%d %d",&n,&m);
        for(int i=1; i<=n; i++) cin>>a[i];
        a[0]=-1;
        for(int i=1,x; i<=m; i++) {
            int l=1,r=n,mid;
            cin>>x;
            while(l<=r) {
                mid=l+r>>1;
                if(a[mid]<=x) l=mid+1;
                else r=mid-1;
            }
            cout<<a[r]<<endl;
        }
        return 0;
    }

    如果运气好也是错,那我倒愿意错上加错!

    ❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

  • 相关阅读:
    BZOJ 3506 机械排序臂 splay
    BZOJ 2843 LCT
    BZOJ 3669 魔法森林
    BZOJ 2049 LCT
    BZOJ 3223 文艺平衡树 splay
    BZOJ 1433 假期的宿舍 二分图匹配
    BZOJ 1051 受欢迎的牛 强连通块
    BZOJ 1503 郁闷的出纳员 treap
    BZOJ 1096 ZJOI2007 仓库设计 斜率优化dp
    BZOJ 1396: 识别子串( 后缀数组 + 线段树 )
  • 原文地址:https://www.cnblogs.com/zxqxwnngztxx/p/6623834.html
Copyright © 2011-2022 走看看