题目传送门

 /*
莫队算法:求出[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. Python模块:time、datetime、random、os、sys、optparse

    time模块的方法: 时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. struct_time时间元组,共有九个元素组.如下图: time.localtime([secs]): ...

  2. 【spring boot 系列】spring data jpa 全面解析(实践 + 源码分析)

    前言 本文将从示例.原理.应用3个方面介绍spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 JPA是什么? JPA (Java ...

  3. [Nescafé 20] 玉蟾宫

    ★   输入文件:jademoon.in   输出文件:jademoon.out   简单对比 时间限制:1 s   内存限制:128 MB [背景] 有一天,小猫rainbow和freda来到了湘西 ...

  4. Devu and Flowers lucas定理+容斥原理

    Devu wants to decorate his garden with flowers. He has purchased n boxes, where the i-th box contain ...

  5. POJ 2456_Aggressive cows

    题意: 给定N个位置,把C头牛分别放入,求相邻两头牛的最大距离. 分析: 即为求两头牛之间最小距离的最大值.二分搜索答案. 代码: #include<iostream> #include& ...

  6. poj——3728 The merchant

    The merchant Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5055   Accepted: 1740 Desc ...

  7. operamasks-omGrid的使用

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="personTab.aspx ...

  8. Why we have tuple and list in python

    The most notable difference between tuple and list is that tuple is immutable and list is mutable. B ...

  9. omnidazzle是mac的画笔工具

    先使用命令 brew cask install omnidazzle 试试,不行参考下面: http://macappstore.org/omnidazzle/

  10. 怎样载入指定路径的Logback.xml

    今天想外置logback.xml,谢了例如以下代码 File logbackFile = new File("./conf/logback.xml"); if (logbackFi ...