【JZOJ5280】【NOIP提高组模拟A组8.15】膜法师
2017-08-22 22:32
363 查看
Description
Data Constraint
Solution
我们考虑一个a[i]对于g满足条件当且仅当存在一个x(x>0)满足g*x<=a[i]<=g *x+k,我们可以处理一个前缀和,那么对于1-k的答案x,我们只要判一下小于x的数量是否小于f即可。对于k+1~n的答案,我们暴力枚举g *x<=a[i]<=g *x+k中的x,统计一下[g *x,g *x+k]中数的个数即可。时间复杂度O(TAlogA)。Code
#include<iostream> #include<cmath> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; const int maxn=2e6+5; int a[maxn],f[maxn]; int test,n,m,p,i,t,j,k,l,x,y,z,mx; bool cmp(int x,int y){ return x>y; } int main(){ //freopen("data.in","r",stdin);freopen("data.out","w",stdout); scanf("%d",&test); while (test){ test--;mx=0; scanf("%d%d%d",&n,&m,&p); memset(f,0,sizeof(f)); for (i=1;i<=n;i++)scanf("%d",&a[i]),mx=(mx>a[i])?mx:a[i],f[a[i]]++; for (i=1;i<=mx;i++)f[i]+=f[i-1]; for (i=1;i<=m;i++) if (f[i-1]<=p) printf("%d ",i); for (i=m+1;i<=mx;i++){ t=0; for (j=1;i*j<=mx && t+p<n;j++) t+=f[(i*j+m>mx)?mx:i*j+m]-f[i*j-1]; if (t+p>=n) printf("%d ",i); } printf("\n"); } }
相关文章推荐
- JZOJ5280. 【NOIP提高组模拟A组8.15】膜法师
- 【jzoj5280】【NOIP提高组模拟A组8.15】【膜法师】
- 膜法师【NOIP提高组模拟A组8.15】
- [JZOJ 4699][CF583C]【NOIP2016提高A组模拟8.15】Password
- 【NOIP提高组模拟A组8.15】膜法师 (Standard IO)
- JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点
- 【jzoj5279】【NOIP提高组模拟A组8.15】【香港记者】
- JZOJ 4699 Password【NOIP2016提高A组模拟8.15】
- JZOJ5281. 【NOIP提高组模拟A组8.15】钦点 十字链表
- JZOJ5279. 【NOIP提高组模拟A组8.15】香港记者
- JZOJ5281. 【NOIP提高组模拟A组8.15】钦点
- 【jzoj5281】【NOIP提高组模拟A组8.15】【钦点】
- 【jzoj5247】【NOIP2017提高A组模拟8.10】【计算几何】【二分答案】
- JZOJ5385. 【NOIP2017提高A组模拟9.23】Carry 树上倍增
- 【jzoj5290】【NOIP2017提高组A组模拟8.17】【行程的交集】
- JZOJ 5392. 【NOIP2017提高A组模拟10.5】Lucky Transformation
- jzoj5331 【NOIP2017提高A组模拟8.23】壕游戏
- jzoj5400. 【NOIP2017提高A组模拟10.7】Repulsed
- jzoj5335 【NOIP2017提高A组模拟8.24】早苗 (递推优化矩乘)