题目传送门

 /*
莫队算法:求出[l, r]上取出两只相同袜子的个数。
莫队算法是离线处理一类区间不修改查询类问题的算法。如果你知道了[L,R]的答案,可以在O(1)的时间下得到
[L,R-1]和[L,R+1]和[L-1,R]和[L+1,R],4个while是精华!
对于莫队算法我感觉就是暴力。只是预先知道了所有的询问。可以合理的组织计算每个询问的顺序以此来降低复杂度。
详细解释:http://blog.csdn.net/bossup/article/details/39236275
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std; typedef long long ll;
const int MAXN = 5e4 + ;
const int INF = 0x3f3f3f3f;
struct Data
{
int b, l, r, id;
ll x, y;
Data () {}
Data (int b, ll l, ll r, int id) : b (b), l (l), r (r), id (id) {};
}data[MAXN];
int cnt[MAXN];
int a[MAXN];
int n, m;
ll ans; bool cmp_pre(Data x, Data y)
{
if (x.b == y.b) return x.r < y.r;
return x.b < y.b;
} bool cmp_id(Data x, Data y) {return x.id < y.id;} ll cal(int v) {return (ll) v * v;} void updata(int v, int add)
{
ans -= cal (cnt[v]);
cnt[v] += add;
ans += cal (cnt[v]);
} ll GCD(ll a, ll b) {return b == ? a : GCD (b, a % b);} void Modui(void)
{
sort (data+, data++m, cmp_pre);
memset (cnt, , sizeof (cnt)); int l = , r = ; ans = ;
for (int i=; i<=m; ++i)
{
while (data[i].l < l) updata (a[--l], );
while (data[i].l > l) updata (a[l], -), l++;
while (data[i].r > r) updata (a[++r], );
while (data[i].r < r) updata (a[r], -), r--; if (data[i].l == data[i].r)
{
data[i].x = ; data[i].y = ;
continue;
}
data[i].x = ans - (data[i].r - data[i].l + );
data[i].y = (ll) (data[i].r - data[i].l + ) * (data[i].r - data[i].l);
ll k = GCD (data[i].x, data[i].y);
data[i].x /= k; data[i].y /= k;
} sort (data+, data++m, cmp_id);
for (int i=; i<=m; ++i)
{
printf ("%lld/%lld\n", data[i].x, data[i].y);
}
} int main(void) //BOJ 2038 [2009国家集训队]小Z的袜子(hose)
{
// freopen ("BZOJ_2038.in", "r", stdin); while (scanf ("%d%d", &n, &m) == )
{
for (int i=; i<=n; ++i) scanf ("%d", &a[i]); int block = (int) sqrt (n * 1.0);
for (int i=; i<=m; ++i)
{
int l, r;
scanf ("%d%d", &l, &r);
data[i] = Data (l / block, l, r, i);
} Modui ();
} return ;
}

莫队算法 BOJ 2038 [2009国家集训队]小Z的袜子(hose)的更多相关文章

  1. 莫队乱搞--BZOJ2038: [2009国家集训队]小Z的袜子(hose)

    $n \leq 50000$的$\leq 50000$的数字序列,$m \leq 50000$个询问,每次问一个区间中随机拿两次(不放回)拿到相同数字的概率,以既约分数形式输出. 莫队入门.把询问按“ ...

  2. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】

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

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

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 ...

  4. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】

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

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

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 专题练习: http://acm.hust.edu.cn/vjudge/conte ...

  6. Bzoj 2038: [2009国家集训队]小Z的袜子(hose) 莫队,分块,暴力

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

  7. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) ( 莫队 )

    莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5) --------------------------- ...

  8. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)

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

  9. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块

    分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 2938  Solved: 13 ...

随机推荐

  1. JPA的一些坑

    推荐一篇比较好的介绍JPA的文章:使用 Spring Data JPA 简化 JPA 开发 JPA坑1:不支持Limit查询 JPA是不支持Limit分页查询,而我们有时又因为某些原因不想用JPA提供 ...

  2. Organize Your Train part II 字典树(此题专卡STL)

    Organize Your Train part II Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8787   Acce ...

  3. substring详细用法,截取不行就用替换

    SUBSTRING 返回字符.binary.text      或      image      表达式的一部分.有关可与该函数一起使用的有效      Microsoft®      SQL    ...

  4. AndroidStudio NDK开发、调试测试工程

    ## 验证内容:1.支持NDK调试 2.支持native方法快速创建jni封装(但是没有加入extern "C"声明,会导致native方法找不到jni,进而报错) 3.支持通过修 ...

  5. how to read openstack code: Neutron architecture

    今天这一章节非常重要.我们知道neutron是一个非常复杂的系统,由很多组件构成.研究这样一个复杂的系统,正确的顺序应该是现在宏观上对其整体结构有所了解,然后再由针对性的对其组件进行深入了解.本章要做 ...

  6. spring,spring mvc之所以起作用是因为开启了注解解释器,即spring的annotation on

    spring,spring mvc之所以起作用是因为开启了注解解释器,即spring的annotation on

  7. Nginx/Spring:增加上传文件尺寸限制

    Nginx: 1. vi /etc/nginx/nginx.config 2. 在server中增加如下行 # set client body size to 20M # client_max_bod ...

  8. win7如何更改语言教程

    一.首先从桌面左下角的开始菜单中找到“控制面板”,然后打开,如下图所示: 打开电脑控制面板 二.进入控制面板之后,我们再进入“时钟.语言和区域”设置,如下图所示: 电脑语言改成英文方法 三.进入电脑语 ...

  9. Linux VSFTP服务器

    Linux VSFTP服务器 一.Linux FTP服务器分类: <1>wu-ftp <2>proftp=profession ftp <3>vsftp=very ...

  10. 中文分词实践(基于R语言)

    背景:分析用户在世界杯期间讨论最多的话题. 思路:把用户关于世界杯的帖子拉下来.然后做中文分词+词频统计,最后将统计结果简单做个标签云.效果例如以下: 兴许:中文分词是中文信息处理的基础.分词之后.事 ...