Java教程

二分及离散化板子

本文主要是介绍二分及离散化板子,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
点击查看代码
#include<cstdio>
#include<algorithm>
using namespace std;
const int M = 1000;
int n,a[100],m;
void discrete(int a[]){
sort(a+1,a+1+n);
a[0] = unique(a+1,a+1+n)-a-1;
}
int query(int x){
return lower_bound(a+1,a+1+a[0],x)-a;
}
int find(int x){
int l = 1,r = n;
while(l<r){
int mid = (l+r+1)>>1;
if(a[mid]>x)l = mid;
else r = mid-1;
}//>=x的最小的,raise
return a[l];
}
int find2(int x){
int l = 1,r = n;
while(l<r){
int mid = (l+r)>>1;
if(a[mid]<x)r = mid;
else l = mid+1;
}
return a[l];
//<=x最大的,raise
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){scanf("%d",&a[i]);}
printf("%d %d\n",find(6),find2(6));
return 0;
}
/*
10
1 2 3 4 5 6 7 8 9 10
10
10 9 8 7 6 5 4 3 2 1
*/
这篇关于二分及离散化板子的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!