【JZOJ4932】【NOIP2017提高组模拟12.24】B
来源:互联网 发布:电子口岸数据分中心 编辑:程序博客网 时间:2024/05/17 10:41
Description
现在你有N个数,分别为A1,A2,…,AN,现在有M组询问需要你回答。每个询问将会给你一个L和R(L<=R),保证Max{Ai}-Min{Ai}<=R-L,你需要找出并输出最小的K(1<=K<=N,不存在输出-1)满足以下两个条件:
①能够在原来的N个数中选出不重复(下标不重复)的K个数,使得这K个数的和在区间[L,R]内。
②能够在原来的N个数中选出不重复(下标不重复)的K个数,使得这K个数的和不在区间[L,R]内。
Data Constraint
Solution
我们先来讨论一下怎样才能满足条件2:我们先将A排序。设min[i]表示前i个数的和,max[i]表示后i个数的和。那么显然会有
我们再来讨论一下怎样才能满足条件1:由于数据保证Max{Ai}-Min{Ai}<=R-L,所以我们会发现只要存在
简单证明一下
假如min[k]或max[k]在[l,r]内,那么显然可以。
假如min[k]或max[k]不在[l,r]内,那么显然
证明完毕
现在我们知道这两个条件,我们强制max[k]>min[k],那么将两条式子统一一下结成了
Code
#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>#define ll long longusing namespace std;const int maxn=1e5+5;ll a[maxn],f[maxn],g[maxn];ll n,m,i,t,j,k,l,x,y,r,mid;bool bz;int main(){ //freopen("data.in","r",stdin);freopen("data.out","w",stdout); scanf("%lld%lld",&n,&m); for (i=1;i<=n;i++) scanf("%lld",&a[i]); sort(a+1,a+n+1); for (i=1;i<=n;i++) f[i]=f[i-1]+a[i]; for (i=n;i>=1;i--) g[n-i+1]=g[n-i]+a[i]; for (i=1;i<=m;i++){ scanf("%lld%lld",&x,&y); l=0; r=n+1; while (l<r){ mid=(l+r+1)/2; if (f[mid]>y) r=mid-1; else l=mid; } t=l; r=l+1; l=0; while (l<r){ mid=(l+r)/2; if (g[mid]>y) r=mid; else l=mid+1; } if (l==t+1) t=0; else t=l; l=0; r=n+1; while (l<r){ mid=(l+r+1)/2; if (f[mid]>x-1) r=mid-1; else l=mid; } k=l; r=l+1; l=0; while (l<r){ mid=(l+r)/2; if (g[mid]>=x) r=mid; else l=mid+1; } if (l==k+1) k=0; else k=l; if (t && k) k=min(t,k); else k=max(t,k); if (k && k!=n+1) printf("%d\n",k); else printf("-1\n"); }}
- 【JZOJ4932】【NOIP2017提高组模拟12.24】B
- 【NOIP2017提高组模拟12.24】B
- 【NOIP2017提高组模拟12.24】B
- JZOJ 4932. 【NOIP2017提高组模拟12.24】B
- 【JZOJ 4932】【NOIP2017提高组模拟12.24】B
- B【NOIP2017提高组模拟12.18】
- 【NOIP2017提高组模拟12.18】B
- 【JZOJ4929】 【NOIP2017提高组模拟12.18】B
- 【NOIP2017提高组模拟12.18】B
- 【JZOJ4929】【NOIP2017提高组模拟12.18】B
- 【NOIP2017提高组模拟6.27】B
- {小结}2017.04.15【NOIP2017提高组】模拟赛B组
- 2017.04.15【NOIP2017提高组】模拟赛B组总结
- 2017.04.15【NOIP2017提高组】模拟赛B组 总结
- 2017.04.15【NOIP2017提高组】模拟赛B组
- 2017.04.15【NOIP2017提高组】模拟赛B组
- 2017.04.15【NOIP2017提高组】模拟赛B组
- 2017.04.15【NOIP2017提高组】模拟赛B组题解
- git获取github远程仓库
- 百度地图
- Django运行访问项目出现的问题:DisallowedHost at / Invalid HTTP_HOST header
- Mysql数据库 (1)建表与简单查询
- First Missing Positive
- 【JZOJ4932】【NOIP2017提高组模拟12.24】B
- java集合Collection、List、map、ConcurrentHashMap讲解
- libgdx NativeLabel addListener点击事件没响应
- 虚拟机及Linux安装
- TensorFlow四种Cross Entropy算法实现和应用
- 引用
- mtr 使用笔记
- Mysql数据库 (2)函数
- UVA12298--FFT(递归)