【题目大意】
给出1-N只袜子的颜色,多次询问L-R中选出一双同色袜子的概率。

【思路】

裸莫队。基本的莫队步骤:
①分组(每组大小为根号sqrt(n),共sqrt(n)组)
②排序(左边界分组,右边界在组内按大小排序)
③暴力转移

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int MAXN=+;
typedef long long ll;
struct node
{
int l,r,id,pos;
ll ansa,ansb;
};
int n,m,c[MAXN];
ll ans=,s[MAXN];
ll sqr(ll x){return x*x;}
node q[MAXN]; ll gcd(ll a,ll b)
{
if (b==) return a;
else return gcd(b,a%b);
} bool cmp(node a,node b)
{
if (a.pos==b.pos) return (a.r<b.r);
else return (a.pos<b.pos);
} bool cmp_id(node a,node b)
{
return (a.id<b.id);
} void update(int x,int delta)
{
ans-=sqr(s[c[x]]);
s[c[x]]+=delta;
ans+=sqr(s[c[x]]);
} void init()
{
memset(s,,sizeof(s));
memset(c,,sizeof(c));
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%d",&c[i]);
int block=int(sqrt(n));
for (int i=;i<m;i++)
{
scanf("%d%d",&q[i].l,&q[i].r);
q[i].id=i;
q[i].pos=(q[i].l-)/block+;
}
sort(q,q+m,cmp);
} void solve()
{
int l=,r=;
s[c[]]=,ans=sqr(s[c[]]);
for (int t=;t<m;t++)
{
for (;r<q[t].r;r++) update(r+,);
for (;r>q[t].r;r--) update(r,-);
for (;l<q[t].l;l++) update(l,-);
for (;l>q[t].l;l--) update(l-,);
if (l==r)
{
q[t].l=;q[t].r=;
continue;
}
q[t].ansa=ans-(r-l+);
q[t].ansb=(ll)(r-l+)*(r-l);
ll minx=min(q[t].ansa,q[t].ansb),maxx=max(q[t].ansa,q[t].ansb);
ll k=gcd(maxx,minx);
q[t].ansa/=k,q[t].ansb/=k;
}
} void print()
{
sort(q,q+m,cmp_id);
for (int i=;i<m;i++) printf("%lld/%lld\n",q[i].ansa,q[i].ansb);
} int main()
{
init();
solve();
print();
return ;
}

【序列莫队】BZOJ2038- [2009国家集训队]小Z的袜子(hose)的更多相关文章

  1. E. XOR and Favorite Number 莫队 2038: [2009国家集训队]小Z的袜子(hose)

    一直都说学莫队,直到现在才学,训练的时候就跪了   T_T,其实挺简单的感觉.其实训练的时候也看懂了,一知半解,就想着先敲.(其实这样是不好的,应该弄懂再敲,以后要养成这个习惯) 前缀异或也很快想出来 ...

  2. BZOJ2038 2009国家集训队 小Z的袜子(hose) 【莫队】

    BZOJ2038 2009国家集训队 小Z的袜子(hose) Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼 ...

  3. BZOJ2038: [2009国家集训队]小Z的袜子(hose) -- 莫队算法 ,,分块

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 3577  Solved: 1652[Subm ...

  4. [BZOJ2038] [2009国家集训队]小Z的袜子(hose) 莫队算法练习

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 10299  Solved: 4685[Sub ...

  5. [bzoj2038][2009国家集训队]小Z的袜子(hose)_莫队

    小Z的袜子 hose 2009-国家集训队 bzoj-2038 题目大意:给定一个n个袜子的序列,每个袜子有一个颜色.m次询问:每次询问一段区间中每种颜色袜子个数的平方和. 注释:$1\le n,m\ ...

  6. bzoj2038: [2009国家集训队]小Z的袜子(hose) [莫队]

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...

  7. BZOJ2038[2009国家集训队]小Z的袜子(hose)——莫队

    题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号 ...

  8. [bzoj2038][2009国家集训队]小Z的袜子(hose)——莫队算法

    Brief Description 给定一个序列,您需要处理m个询问,每个询问形如[l,r],您需要回答在区间[l,r]中任意选取两个数相同的概率. Algorithm Design 莫队算法入门题目 ...

  9. BZOJ2038 [2009国家集训队]小Z的袜子(hose)(莫队算法)

    神奇的莫队算法,用来解决可离线无修改的区间查询问题: 首先对原序列进行分块,√n块每块√n个: 然后对所有查询的区间[l,r]进行排序,首先按l所在的块序号升序排序,如果一样就按r升序排序: 最后就按 ...

随机推荐

  1. Sberbank Russian Housing Market比赛总结

    第一次真正意义上参加kaggle比赛,都是工作之余看看别人的kernel,然后整理整理自己的分析代码. 总体来说,本次比赛对我而言更像一个入门比赛,更多的是走走kaggle比赛的整个流程,看看高手们都 ...

  2. Java中的return语句使用总结

    Java中的return语句总是和方法有密切关系,return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句).   在 ...

  3. splay:优雅的区间暴力!

    万年不更的blog主更新啦!主要是最近实在忙,好不容易才从划水做题的时间中抽出一段时间来写这篇blog 首先声明:这篇blog写的肯定会很基础...因为身为一个蒟蒻深知在茫茫大海中找到一个自己完全能够 ...

  4. mysql之基本数据库操作(二)

    环境信息 数据库:mysql-5.7.20 操作系统:Ubuntu-16.04.3 mysql的启动.退出.重启 # 启动 $ sudo service mysqld start # 停止 $ sud ...

  5. 【Python问题解决】关于解决python3.x无法使用PIL库的解决方法

    因为PIL库目前只更新到python2.x,故python3.x直接安装PIL库会找不到版本.但是python3.x有一个新的库,可以提供和PIL差不多的功能,也就是pillow库. 本人使用的是py ...

  6. 终于解决了Linux下运行OCCI程序一直报Error while trying to retrieve text for error ORA-01804错误

    终于解决了Linux下运行OCCI程序一直报Error while trying to retrieve text for error ORA-01804错误 http://blog.csdn.net ...

  7. ES的优化布局

    分词优化:IK Analyser Elastic Search 5.x官方提供的中文搜索并不友好,分词时经常将一句话分成很多单字,这时候可以使用IK Analyser插件进行优化,当然你在写java代 ...

  8. 2015多校第6场 HDU 5361 并查集,最短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:有n个点1-n, 每个点到相邻点的距离是1,然后每个点可以通过花费c[i]的钱从i点走到距 ...

  9. MyBatis 模糊查询 防止Sql注入

    #{xxx},使用的是PreparedStatement,会有类型转换,所以比较安全: ${xxx},使用字符串拼接,可以SQL注入: like查询不小心会有漏洞,正确写法如下:   Mysql:   ...

  10. python插入oracle数据

    # coding=utf- ''''' Created on -- @author: ''' import json; import urllib2 import sys import cx_Orac ...