NOIP提高组 同余
来源:互联网 发布:新侠客行 知乎 编辑:程序博客网 时间:2024/05/16 09:48
Description
Data Constraint
Solution
看到这种题(a[i]如此小),果断想到用根号级别的算法。考虑到一个合法的a[i]=kp+q,所以我们分类讨论一下p的范围。设max(a[i])=x。
1、当p>=X−−√ 时,k的枚举范围不会大于X−−√ ,所以直接那么用个桶存一下值为i的有几个,用O(X−−√ )时间扫一下就好了。
2、当p<X−−√ 时,p的至最多也是100。这时我们用一个二维数组g[i][j]表示模i后余数为j的数的个数,直接输出就好了。
那么怎么解决区间查询的问题呢?我们将一个询问l,r,p,q拆成两个询问分别是1,l-1,p,q和1,r,p,q,然后将这2*m个询问按右端点的大小排个序,从左到右用个扫描线O(N)扫一下就好了。所以程序的总复杂度为O(NX−−√ )。
代码
#include<iostream>#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#define ll long longusing namespace std;const int maxn=100005,maxn1=105;struct code{ int a,b;}b[maxn*2];int f[maxn1][maxn1],n,m,i,x,t,j,k,l,y,mid,a[maxn],r,p[maxn],q[maxn],xx,yy,ans[maxn*2],g[maxn];bool cmp(code x,code y){ return x.a<y.a;}int pan(int x){ if (x) return x;return m;}int main(){// freopen("data.in","r",stdin);freopen("data.out","w",stdout); scanf("%d%d",&n,&m); for (i=1;i<=n;i++) scanf("%d",&a[i]); for (i=1;i<=m;i++) scanf("%d%d%d%d",&b[i].a,&b[i+m].a,&p[i],&q[i]),b[i].a--,b[i].b=i,b[i+m].b=i+m; sort(b+1,b+2*m+1,cmp);r=0; for (i=1;i<=2*m;i++){ for (j=r+1;j<=b[i].a;j++){ g[a[j]]++; for (k=1;k<=100;k++) f[k][a[j]%k]++; }r=b[i].a; t=pan(b[i].b%m); if (p[t]<=100) ans[b[i].b]=f[p[t]][q[t]]; else{ for (k=0;k<=(maxn-q[t])/p[t];k++){ x=k*p[t]+q[t]; ans[b[i].b]+=g[x]; } } } for (i=1;i<=m;i++) printf("%d\n",ans[i+m]-ans[i]);}
3 0
- NOIP提高组 同余
- NOIP提高组 2012 同余方程
- NOIP 2012 提高组 复赛 day2 mod 同余方程
- Codevs 1200 同余方程 2012年NOIP全国联赛提高组
- codevs1200 同余方程 (2012年NOIP全国联赛提高组)拓展欧几里得
- Noip 提高组 2014 Day2 T3 解方程 同余系
- 【NOIP2016提高组模拟】同余
- NOIP2012提高组 同余方程
- 扩展欧几里得模板(洛谷1082 同余方程NOIP 2012 提高组 第二天 第一题)
- [noip 2012] 同余方程
- NOIP 2012 同余方程
- NOIP 2012 同余方程
- Noip 2012 同余方程
- NOIP模拟 Math 【同余】
- NOIP 2012 同余方程
- Noip 2012 同余方程
- 【JZOJ4744】【NOIP2016提高A组模拟9.2】同余
- 【NOIP2016提高A组模拟9.2】同余
- CentOS 配置mono运行环境
- docker 安装mysql
- 整理项目(一)——安防
- POJ2502 subway(dijkstra以最短时间代替最短路)
- GPIO工作原理 及 寄存器应用
- NOIP提高组 同余
- Camera Vision - video surveillance on C#
- 好美的一段话
- JAVA流程控制语句 循环 while for
- 前端路由与后端路由
- C++基础4:计算一字符串中出现频率最大的元素
- SpringMVC启动后初始化
- 9.2-9.5学习列表
- I/O控制方式