博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
luogu 1314 聪明的质检员
阅读量:4562 次
发布时间:2019-06-08

本文共 1295 字,大约阅读时间需要 4 分钟。

二分答案的边界问题还是要注意

double挨着,int+1-1,

此题用到long long,所以初始化ans要足够大,前缀和优化

依然根据check答案大小左右mid,虽然有s,但是有了+1-1加持所以能够自动推出

#include
#define int long long#define rep(i,x,y) for(register int i=x;i<=y;i++)using namespace std;const int N=2e6+50;int n,m,s,mi,mx,ans,w[N],v[N],l[N],r[N];inline int read(){ int x=0,f=1;char ch=getchar(); while(!isdigit(ch)){
if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();} return x*f;}inline int aabs(int x){
return x>0?x:-x;}int sum[N],cnt[N];bool check(int mid){
int y=0; memset(sum,0,sizeof sum); memset(cnt,0,sizeof cnt); rep(i,1,n){ sum[i]=sum[i-1],cnt[i]=cnt[i-1]; if(w[i]>=mid) sum[i]+=v[i],cnt[i]++; }rep(i,1,m) y+=(cnt[r[i]]-cnt[l[i]-1])*(sum[r[i]]-sum[l[i]-1]); ans=min(ans,aabs(y-s)); if(y>s) return 1; else return 0;}signed main(){ n=read(),m=read(),s=read();ans=mi=999999999999999999; rep(i,1,n) w[i]=read(),v[i]=read(),mi=min(mi,w[i]),mx=max(mx,w[i]); rep(i,1,m) l[i]=read(),r[i]=read(); int l=mi,r=mx; while(l<=r) { int mid=(l+r)>>1; bool FG=check(mid); if(FG) l=mid+1; else r=mid-1; } printf("%lld\n",ans);return 0;}

怀挺

转载于:https://www.cnblogs.com/asdic/p/9737564.html

你可能感兴趣的文章
UIImangeView的用法
查看>>
阿里云SDK手册之java SDK
查看>>
js获取select标签选中的值[转]
查看>>
mysql连接出现error node【1045】
查看>>
踩vue的bug
查看>>
Ansible安装及配置
查看>>
浅析Sql Server参数化查询
查看>>
CodeBlocks 配置
查看>>
机器学习:随机森林
查看>>
[网络流24题] 试题库问题
查看>>
面试分享:应届前端面试经历
查看>>
Essentially No Barriers in Neural Network Energy Landscape
查看>>
A pure L1-norm principal component analysis
查看>>
SVM
查看>>
Dimension reduction in principal component analysis for trees
查看>>
Deep Linear Networks with Arbitrary Loss: All Local Minima Are Global
查看>>
golang开发:类库篇(五)go测试工具goconvey的使用
查看>>
浅谈限流(下)实战
查看>>
jpa(Java Persistence API)
查看>>
spring之雜談
查看>>