题目传送门

 1 /*
 2     莫队算法:求出[l, r]上取出两只相同袜子的个数。
 3         莫队算法是离线处理一类区间不修改查询类问题的算法。如果你知道了[L,R]的答案,可以在O(1)的时间下得到
 4         [L,R-1]和[L,R+1]和[L-1,R]和[L+1,R],4个while是精华!
 5         对于莫队算法我感觉就是暴力。只是预先知道了所有的询问。可以合理的组织计算每个询问的顺序以此来降低复杂度。
 6     详细解释:http://blog.csdn.net/bossup/article/details/39236275
 7 */
 8 #include <cstdio>
 9 #include <cstring>
10 #include <algorithm>
11 #include <cmath>
12 using namespace std;
13
14 typedef long long ll;
15 const int MAXN = 5e4 + 10;
16 const int INF = 0x3f3f3f3f;
17 struct Data
18 {
19     int b, l, r, id;
20     ll x, y;
21     Data () {}
22     Data (int b, ll l, ll r, int id) : b (b), l (l), r (r), id (id) {};
23 }data[MAXN];
24 int cnt[MAXN];
25 int a[MAXN];
26 int n, m;
27 ll ans;
28
29 bool cmp_pre(Data x, Data y)
30 {
31     if (x.b == y.b)    return x.r < y.r;
32     return x.b < y.b;
33 }
34
35 bool cmp_id(Data x, Data y)    {return x.id < y.id;}
36
37 ll cal(int v)    {return (ll) v * v;}
38
39 void updata(int v, int add)
40 {
41     ans -= cal (cnt[v]);
42     cnt[v] += add;
43     ans += cal (cnt[v]);
44 }
45
46 ll GCD(ll a, ll b)    {return b == 0 ? a : GCD (b, a % b);}
47
48 void Modui(void)
49 {
50     sort (data+1, data+1+m, cmp_pre);
51     memset (cnt, 0, sizeof (cnt));
52
53     int l = 1, r = 0;    ans = 0;
54     for (int i=1; i<=m; ++i)
55     {
56         while (data[i].l < l)    updata (a[--l], 1);
57         while (data[i].l > l)    updata (a[l], -1), l++;
58         while (data[i].r > r)    updata (a[++r], 1);
59         while (data[i].r < r)    updata (a[r], -1), r--;
60
61         if (data[i].l == data[i].r)
62         {
63             data[i].x = 0;    data[i].y = 1;
64             continue;
65         }
66         data[i].x = ans - (data[i].r - data[i].l + 1);
67         data[i].y = (ll) (data[i].r - data[i].l + 1) * (data[i].r - data[i].l);
68         ll k = GCD (data[i].x, data[i].y);
69         data[i].x /= k;    data[i].y /= k;
70     }
71
72     sort (data+1, data+1+m, cmp_id);
73     for (int i=1; i<=m; ++i)
74     {
75         printf ("%lld/%lld\n", data[i].x, data[i].y);
76     }
77 }
78
79 int main(void)        //BOJ 2038 [2009国家集训队]小Z的袜子(hose)
80 {
81     // freopen ("BZOJ_2038.in", "r", stdin);
82
83     while (scanf ("%d%d", &n, &m) == 2)
84     {
85         for (int i=1; i<=n; ++i)    scanf ("%d", &a[i]);
86
87         int block = (int) sqrt (n * 1.0);
88         for (int i=1; i<=m; ++i)
89         {
90             int l, r;
91             scanf ("%d%d", &l, &r);
92             data[i] = Data (l / block, l, r, i);
93         }
94
95         Modui ();
96     }
97
98     return 0;
99 }

转载于:https://www.cnblogs.com/Running-Time/p/4644747.html

莫队算法 BOJ 2038 [2009国家集训队]小Z的袜子(hose)相关推荐

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

    莫队也是暴力的一种,不过可以很有效的降低复杂度 如果我们已知[l, r]的答案,能在O(1)时间得到[l+1,r]的答案以及[l, r-1]的答案,即可使用莫队算法. 时间复杂度为O(n^1.5).如 ...

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

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

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

    题目链接:2038: [2009国家集训队]小Z的袜子(hose) 题目: Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再 ...

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

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

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

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 15879  Solved: 7205 [S ...

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

    题目链接 莫队 学习资源 计算公式很简单,化简一下后就是求一个区间的相同的数的个数的平方和,使用莫队算法,合理排序,暴力计算即可 flag[]数组统计每个数的出现次数,整体写法还是比较固定的,设计好d ...

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

    https://www.lydsy.com/JudgeOnline/problem.php?id=2038 本题实际上就是求 设每个区间[l,r]各个颜色的袜子数分别为a,b,c,d,-,每个区间[l ...

  8. 莫队入门例题:2038: [2009国家集训队]小Z的袜子(hose)

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

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

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 莫队算法可以解决一类不修改.离线查询问题.而这题可以用莫队来做. *我是看这个论文学 ...

最新文章

  1. 广东省生态土壤所孙蔚旻团队FEMS: 砷锑污染土壤剖面的微生物世界
  2. IT职场中外企面试最爱提的问题TOP10
  3. C语言的头文件和库文件(函数库)
  4. To B业务如何获取客户?
  5. linux文件内上下移动,Linux中有多个查看文件的命令,如果希望在查看文件内容过程中用光标可以上下移动来查看文件内容,则符合要求的那一个命令是( )。...
  6. 用 Webpack 解决应用性能问题
  7. android服务开启线程,android之service与intentService的不同
  8. 智能对话训练师进阶本领:复杂对话流程处理
  9. 开发人员一定要加入收藏夹的网站
  10. winserve2016 万能驱动网卡_Windows Server 2016中无线网卡驱动问题
  11. 无线认证 服务器是怎么回事,无线wifi认证服务器参数设置方法是什么
  12. Office2010安装出错(Error1406)
  13. ubuntu更换清华镜像源
  14. Python语言为何如此流行?
  15. BBU+RRU基本介绍
  16. 清华大学张亚勤对话朱民:颠覆认知的AI时代及产业机遇
  17. 华为“阳阴面”:阳面是镜子 阴面是体系上的霉斑
  18. 羊毛党大揭秘:上亿黑卡在手,撸垮上市公司
  19. 微课在中职计算机基础中的应用,微课在中职计算机基础教学中的应用探析
  20. C# 调用微信公众号接口发送客服消息示例

热门文章

  1. pipeline python,Python-什么是sklearn.pipeline.Pipeline?
  2. c语言编译后找不到exe,在VS 2015命令提示符中找不到c – rc.exe
  3. java查题小程序_求助大神来写一个java的小程序,题目如下
  4. php中上传图片怎么显示出来,PHP上传图片类显示缩略图功能
  5. 小尼机器人_小尼被机器人嫌弃“唱歌难听,长相一般”?
  6. C语言项目:扫雷大战精简版
  7. matlab 英语怎么读,MATLAB SPTooL
  8. clodeblocks debug断点调试_idea debug调试————简单常用,适合初学者
  9. 串口服务器的通讯模式
  10. 【渝粤题库】广东开放大学 市场营销 形成性考核