zoukankan      html  css  js  c++  java
  • 二分查找模板

    二分查找题目(持续更新)

    (1.) (CF835E)

    单调递增序列中查找第一个 (leqslant x) 的数

    细节: (l+r) 的写法要与 (mid) 的写法配套。

    $View$ $Code$
    
    int a[MAX];
    int leqs(int l,int r,int x)
    {
    	while(l>1;
    		if(a[mid]>=x)
    			r=mid;
    		else
    			l=mid+1;
    	}
    	return a[l];
    }
    

    单调递增序列中查找第一个 (geqslant x) 的数

    $View$ $Code$
    
    int a[MAX];
    int geqs(int l,int r,int x)
    {
    	while(l>1;
    		if(a[mid]<=x)
    			l=mid;
    		else
    			r=mid-1;
    	}
    	return a[l];
    }
    

    实数域上的二分(可以确定精度,保留 (k) 位小数)

    细节:左右 (mid) 的写法相同。

    $View$ $Code$
    
    int k,l=0,r=MAXN;
    const double eps=1e-(k+2);
    while(r-l>eps)
    {
    	double mid=(l+r)/2;
    	if(calc(mid))
    		r=mid;
    	else
    		l=mid;
    }
    

    实数域上的二分(不能确定精度)

    $View$ $Code$
    
    int tms=MAX,l=0,r=MAXN;
    for(register int i=1;i<=tms;i++)
    {
    	double mid=(l+r)/2;
    	if(calc(mid))
    		r=mid;
    	else
    		l=mid;
    }
    
  • 相关阅读:
    [virsh] error: unknown OS type hvm解决办法
    TCP长连接与短连接的区别
    MySQL数据优化总结-查询备忘录
    Tomcat 调优测试
    MySQL的分表与分区
    iptables防火墙入门
    regex正则
    xtrabackup
    锁&lock与latch
    文档测试
  • 原文地址:https://www.cnblogs.com/Peter0701/p/11262810.html
Copyright © 2011-2022 走看看