[BZOJ2038]小Z的袜子
来源:互联网 发布:阿里算法平台 编辑:程序博客网 时间:2024/05/19 22:46
原题地址
莫队出的莫队算法OLZ
AC code:
#include <cstdio>#include <cmath>#include <algorithm>using namespace std;const int N=100010;int n,m,k,tot,g;int a[N],c[N],app[N],ans1[N],ans2[N];struct inq{ int l,r,num;}q[N];bool cmp(inq x,inq y){ if(x.l/m!=y.l/m) return x.l/m<y.l/m; return x.r<y.r;}int gcd(int x,int y){ return y?gcd(y,x%y):x;}int main(){ scanf("%d%d",&n,&k); m=(int)sqrt(n); for(int i=2;i<=n;i++) c[i]=((long long)i*(i-1))>>1; for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=k;i++){ q[i].num=i; scanf("%d%d",&q[i].l,&q[i].r); } sort(q+1,q+k+1,cmp); for(int i=q[1].l;i<=q[1].r;i++) tot+=app[a[i]]++; g=gcd(tot,c[q[1].r-q[1].l+1]); ans1[q[1].num]=tot/g; ans2[q[1].num]=c[q[1].r-q[1].l+1]/g; for(int i=2;i<=k;i++){ if(q[i].l<q[i-1].l){ for(int j=q[i].l;j<q[i-1].l;j++) tot+=app[a[j]]++; } else{ for(int j=q[i-1].l;j<q[i].l;j++) tot-=--app[a[j]]; } if(q[i].r>q[i-1].r){ for(int j=q[i-1].r+1;j<=q[i].r;j++) tot+=app[a[j]]++; } else{ for(int j=q[i].r+1;j<=q[i-1].r;j++) tot-=--app[a[j]]; } g=gcd(tot,c[q[i].r-q[i].l+1]); ans1[q[i].num]=tot/g; ans2[q[i].num]=c[q[i].r-q[i].l+1]/g; } for(int i=1;i<=k;i++) printf("%d/%d\n",ans1[i],ans2[i]); return 0;}
0 0
- [BZOJ2038]小Z的袜子
- bzoj2038小z的袜子
- 【bzoj2038】 小Z的袜子(hose)
- [题解]bzoj2038 小Z的袜子
- 小Z的袜子 bzoj2038 莫队
- 【BZOJ2038】小Z的袜子,第一次的莫队算法
- [BZOJ2038][2009国家集训队][莫队][分块]小z的袜子
- bzoj2038: [2009国家集训队]小Z的袜子(hose)
- bzoj2038 [2009国家集训队]小Z的袜子(hose) (分块)
- [BZOJ2038]2009集训队 小Z的袜子|莫队算法
- bzoj2038: [2009国家集训队]小Z的袜子(hose)
- bzoj2038 小Z的袜子 莫队算法
- bzoj2038【2009国家集训队】小Z的袜子(hose)
- 【BZOJ2038】[2009国家集训队]小Z的袜子(hose)【莫队】
- bzoj2038 小Z的袜子 序列莫队模板
- 【bzoj2038】[2009国家集训队]小Z的袜子(hose) 莫队
- bzoj2038(小z的袜子——莫队)
- 【2009国家集训队】bzoj2038 小Z的袜子
- Androd UI学习之ImageSwitcher
- 我的世界nat123联机教程
- C#操作数据库中的数据常用方法
- HDU 3681Prison Break
- 编程思想之多线程与多进程(3)——Java中的多线程
- [BZOJ2038]小Z的袜子
- 数据库还原和日志删除的SQL脚本
- HDU 2809God of War
- Linux 修改计算机名称
- LeetCode Remove Duplicates from Sorted Array II
- 《栀子花开》高清迅雷下载地址
- 多线程基础
- HTML文档基础
- Connection closed by 127.0.0.1