zoukankan      html  css  js  c++  java
  • 二分

    二分的话,你真不懂也没必要一定搞懂(初赛,高中信息技术考试可能需要),真正打代码不需要搞懂二分。。

    只要知道它是在有序数列里花log n 的时间找一个值就行了,

    本质就是查找的优化

    关于输出什么可能会不会,但基本知道这些就好了:

    下面是找数字的二分模板(数据很小,随便写的)

    #include <bits/stdc++.h>
    using namespace std;
    int a[105];
    int main()
    {
    	int n,x;
    	cin>>n>>x;
    	for(int i=1;i<=n;i++)
    	    cin>>a[i];
    	int l=0,r=n;
    	while(l<r)//这里l<r 最后的结果就是l=r退出循环,如果是l<=r,最后就是l=r+1
    	{
    		int mid=(l+r)>>1;
    		if(a[mid]<x) l=mid+1;
    		else r=mid-1;
    	}
    	cout<<r;
    	return 0;
    }
    

      

    假如数据不存在 如

    5   3

    1   2   4   5   6

    只要稍微想想就好了:(按while(l<r)来)while终止之前肯定是l=2,r=3; 代入循环:a[(2+3)/2]=a[2]<3 所以 l=mid+1=3=r 退出循环

    这样就好了,你不需要从开头一个个推。。。

  • 相关阅读:
    洛谷 [SDOI2015]约数个数和 解题报告
    multiset-count
    multiset-begin
    multiset-begin
    set-value_comp
    set-value_comp
    multiset-constructors
    multiset-constructors
    set-upper_bound
    set-upper_bound
  • 原文地址:https://www.cnblogs.com/wdxxz3274/p/14858660.html
Copyright © 2011-2022 走看看