lower_bound 返回第一个范围内大于或等于查找值的地址单位,若没查找到则返回end地址,反之通过减去首地址+首地址下标得目标地址
upper_bound返回第一个小于目标值。。。。
注意精度给的对象是谁
ll快快读模版:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inmax=40000008;
char IN[inmax+5],*ipos;
#define read() (strtol(ipos,&ipos,10))
const double eps=1e-6;
int main ()
{
fread(IN,inmax,1,stdin);ipos=IN;
int n,k;
int a[100005];
n=read(),k=read();
for(int i=1;i<=n;++i)
{
a[i]=read();
}
sort(a+1,a+1+n);
int l=0,r=a[n];
int mid;
int sum;
int ans=r;
while(l<=r)//整数二分模版
{
sum=0;
mid=(l+r)>>1;
for(int i=1;i<=n;++i)
{
sum+=a[i]/mid;
}
if(sum<k)
{
r=mid-1;
ans=mid;//记录满足
}
else l=mid+1;//一定不满足的一边推进
}
cout<<ans;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inmax=40000008;
char IN[inmax+5],*ipos;
#define read() (strtol(ipos,&ipos,10))
const double eps=1e-6;
double a[5];
double f(double x)
{
double ans=0;
for(int i=1;i<=4;++i)
{
ans=ans*x+a[i];
}
return ans;
}
double solve(double l,double r)
{
double fl=f(l),mid;
while(l+eps<r)//浮点数二分模版
{
mid=(l+r)/2.0;
if(fl*f(mid)<=0.0)
{
r=mid;
}
else l=mid;
}
return l;
}
int main ()
{
//fread(IN,inmax,1,stdin);ipos=IN;
double ans[4];
for(int i=1;i<=4;++i)
{
scanf("%lf",&a[i]);
}
int cnt=0;
for(double i=-100.0;i<=100;i+=0.9)
{
if(f(i+0.9)*f(i)<=0.0)
{
ans[++cnt]=solve(i,i+0.9);
}
}
for(int i=1;i<3;++i)
printf("%.2lf ",ans[i]);
printf("%.2lf",ans[3]);
return 0;
}