首页 > 其他分享 >二分

二分

时间:2022-09-04 20:24:36浏览次数:96  
标签:二分 ch 下标 val bound mid ans

STL函数

lower_bound(begin,end,val);、
//在a数组中查找3第一次出现的位置
//如果查到val,返回val的下标
//如果没查到val,返回第一个大于val的元素的下标
//如果没查到val,并且val大于所有元素,返回数组末尾的元素的下标
//最后减数组名
//例:lower_bound(a,a+n,3)-a;
upper_bound(begin,end,val);
//在a数组中查找第一个比3大的元素
//返回第一个比3大的元素下标 
//如果没找到,返回数组中最后一个元素的下标 
//例:upper_bound(a,a+n,3)-a

函数应用:通过记录1

二分查找模版

#include<bits/stdc++.h>
using namespace std;
int n, m, a[10005], k, l, r, mid, ans;
int read(){
	int x = 0, w = 1;
	char ch = 0;
	while(ch < '0' || ch > '9'){
		if(ch == '-')w = -1;
		ch = getchar();
	}
	while(ch >= '0' &&ch <= '9'){
		x = x * 10 + (ch - '0');
		ch = getchar();
	}
	return x * w;
}
int main(){
	n = read(), m = read();
    for(int i = 1; i <= n; i++)a[i] = read();
    sort(a+1, a+n+1);
    //1. k可以不存在   2.数组a中可以出现重复数值(输出第一次出现的位置)  
    while(m--){
        cin >> k;
        l = 1, r = n, ans = -1;
        while(l <= r){
            mid = l + (r - l) / 2;
            if(a[mid] >= k)ans = mid, r = mid-1;
            else l = mid+1;
        }
        if(a[ans] != k)cout << -1 << endl;
        else cout << ans << endl;
    }
    return 0;
}

标签:二分,ch,下标,val,bound,mid,ans
From: https://www.cnblogs.com/hnzzlxs01/p/16655926.html

相关文章

  • 二分查找
    一、时间复杂度假设数据量是n、则每次查找的数据量分别是n、n/2、n/4、n/8、……n/2^k。k就是在找到数据的时候总共缩小的次数、而每次缩小的操作都只涉及两个数的操作......
  • 二分查找
    一、思路使用二分查找的前提是数组是有序的,思路是把整个数组根据中点一分为二,如果target小于中点,则将搜索目标缩小为左半部分再继续搜索,否则搜索目标缩小为右半部分,直到找......
  • 二分法查找
    1.需求:给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。2.示例:输入:nums=[-......
  • 二分图
    二分图,顾名思义,能分成两部分,每部分之间没有边的图。判定很简单,染色法,没有奇环就行。voiddfs(intx,intcol){ v[x]=col; for(inti=head[x];i;i=edge[i].next){ if(!......
  • 2019ACM-ICPC 西安邀请赛 D.Miku and Generals——二分图染色+01背包
    目录题意思路代码目录题意将n个将军卡片分成两份,要求两份卡片之间的差值尽可能小,求最大的那一份卡片的和,这里有m组卡片是不能放在同一份的思路对有矛盾的组我们建图进......
  • D. 2+ doors(构造 二分图) CF 1715D
    题目:​ 现在有一个长度为n的序列待构造,给出m对关系\(i,j,x\),表示\(a_i|a_j=x\),请在满足这m对关系的情况下构造出的最小字典序的序列。分析:​ 每当我们看到最小字典序的......
  • 【luogu P7518】宝石(主席树)(二分)
    宝石题目链接:luoguP7518题目大意给你一棵树,树上每个点有颜色,然后给你一个颜色序列,保证序列上没有一样的颜色。然后多次操作每次问你树上的一条路径,要你找到一个最大的......
  • 染色法二分图
    #include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10,M=1e5+10,INF=0x3f3f3f3f;intn,m,h[N],e[M<<1],ne[M<<1],idx,color[N];vo......
  • 2022-8-31 每日一题-栈模拟-剑指offer-二分查找
    946.验证栈序列难度中等303收藏分享切换为英文接收动态反馈给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入......
  • 1.二分查找
    1.模板intsearch(vector<int>&nums,inttarget){intl=0;intr=nums.size();intmid;while(l<r){mid=(l+r)/2;if(nums[mid]<t......