小Z的袜子

【题目链接】小Z的袜子

【题目类型】莫队算法

&题解:

莫队算法第一题吧,建议先看这个理解算法,之后在参考这个就可以写出简洁的代码

我的比第2个少了一次sort,他的跑了1600ms,我的跑了800ms.

【时间复杂度】\(O(n^{1.5})\)

&代码:

#include <cstdio>
#include <bitset>
#include <iostream>
#include <set>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
using namespace std;
#define INF 0x3f3f3f3f
#define ll long long
const int maxn = 5e4 + 7;
int n, m, col[maxn], pos[maxn], ans, num[maxn];
ll fz[maxn], fm[maxn];
struct data { int l, r, id; } a[maxn];
bool cmp(data a, data b) {
if(pos[a.l] == pos[b.l]) return a.r < b.r;
return a.l < b.l;
}
void update(int x, int d) {
int c = col[x];
ans -= num[c] * num[c];
num[c] += d;
ans += num[c] * num[c];
}
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
int main() {
//("E:1.in", "r", stdin);
while(~scanf("%d%d", &n, &m)) {
int bk = sqrt(n);
for(int i = 1; i <= n; i++) {
scanf("%d", col + i);
pos[i] = (i - 1) / bk;
}
for(int i = 1; i <= m; i++) {
scanf("%d%d", &a[i].l, &a[i].r);
a[i].id = i;
}
sort(a + 1, a + 1 + m, cmp);
memset(num, 0, sizeof(num));
ans = 0;
for(int i = 1, l = 1, r = 0; i <= m; i++) {
for(; r < a[i].r; r++)
update(r + 1, 1);
for(; r > a[i].r; r--)
update(r, -1);
for(; l < a[i].l; l++)
update(l, -1);
for(; l > a[i].l; l--)
update(l - 1, 1);
if(a[i].l == a[i].r) {
fz[a[i].id] = 0, fm[a[i].id] = 1;
continue;
}
//引用& 是跟着变量的,不是跟着类型的
ll &tz = fz[a[i].id], &tm = fm[a[i].id];
tz = ans - (a[i].r - a[i].l + 1);
tm = (ll)(a[i].r - a[i].l + 1) * (a[i].r - a[i].l);
ll k = gcd(tz, tm);
tz /= k, tm /= k;
}
for(int i = 1; i <= m; i++) {
printf("%lld/%lld\n", fz[i], fm[i]);
}
}
return 0;
}

bzoj 2308 小Z的袜子(莫队算法)的更多相关文章

  1. bzoj 2038 小Z的袜子 莫队算法

    题意 给你一个长度序列,有多组询问,每次询问(l,r)任选两个数相同的概率.n <= 50000,数小于等于n. 莫队算法裸题. 莫队算法:将序列分为根号n段,将询问排序,以L所在的块为第一关键 ...

  2. BZOJ 2038 小z的袜子 & 莫队算法(不就是个暴力么..)

    题意: 给一段序列,询问一个区间,求出区间中.....woc! 贴原题! 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过 ...

  3. bzoj 2038 小z的袜子 莫队例题

    莫队,利用可以快速地通过一个问题的答案得到另一问题的答案这一特性,合理地组织问题的求解顺序,将已解决的问题帮助解决当前问题,来优化时间复杂度. 典型用法:处理静态(无修改)离线区间查询问题. 线段树也 ...

  4. 【国家集训队2010】小Z的袜子[莫队算法]

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

  5. [日常摸鱼]bzoj2038[2009国家集训队]小Z的袜子-莫队算法

    今天来学了下莫队-这题应该就是这个算法的出处了 一篇别人的blog:https://www.cnblogs.com/Paul-Guderian/p/6933799.html 题意:一个序列,$m$次询 ...

  6. bzoj 2038 小z的袜子 莫队

    莫队大法好,入坑保平安 只要能O(1)或O(log)转移,离线莫队貌似真的无敌. #include<cstdio> #include<iostream> #include< ...

  7. Luogu 1494 - 小Z的袜子 - [莫队算法模板题][分块]

    题目链接:https://www.luogu.org/problemnew/show/P1494 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天 ...

  8. 小Z的袜子 & 莫队

    莫队学习 & 小Z的袜子 引入 莫队 由莫涛巨佬提出,是一种离线算法 运用广泛 可以解决广大的离线区间询问题 莫队的历史 早在mt巨佬提出莫队之前 类似莫队的算法和莫队的思想已在Codefor ...

  9. BZOJ 2038 [2009国家集训队]小Z的袜子 莫队

    2038: [2009国家集训队]小Z的袜子(hose) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Descriptionw ...

随机推荐

  1. tensorflow的assgin方法

    官网API是这么说的 This operation outputs a Tensor that holds the new value of 'ref' after the value has bee ...

  2. Vue2 dist 目录下各个文件的区别

    vue2 经过 2.2 版本升级后, 文件变成了 8 个: vue.common.js vue.esm.js vue.js vue.min.js vue.runtime.common.js vue.r ...

  3. 转:JAVA 的wait(), notify()与synchronized同步机制

    原文地址:http://blog.csdn.net/zyplus/article/details/6672775 转自:https://www.cnblogs.com/x_wukong/p/40097 ...

  4. idea 在tomcat启动的时候发现控制台输出的是乱码

    先前觉得是tomcat的问题,后来发现是idea的问题: 打开IntelliJ IDEA本地安装目录中bin文件夹下的idea.exe.vmoptions和idea64.exe.vmoptions这两 ...

  5. Java线程的状态分析

    线程状态 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于“可运行线程池”中,变得可运行,只 ...

  6. 文件批量scp分发脚本

    #!/bin/bash SERVERS="172.17.xx.y 172.17.pp.mm" PASSWORD=机器登录密码 auto_ssh_copy_file() { expe ...

  7. winform嵌入word解决方案一

    最近一直想用VC#2005做个内嵌WORD/OFFICE的WINFORM程序,目前主要有以下解决途径: 1.直接通过API把WORD/OFFICE的窗口句柄给放到WINFORM中(感觉较为复杂): 2 ...

  8. zabbix宏(macro)使用:自定义监控阈值

    一.简单应用场景 zabbix在监控cpu load时并没有考虑客户端cpu的个数和核心数量,当平均5分钟的负载达到5时zabbix执行报警动作,这样是非常不合理的,笔者的被监控机器有四核和单核,现在 ...

  9. es的timeout机制

    GET /_search?timeout=10ms默认情况下,es的timeout机制是关闭的.比如,如果你的搜索特别慢,每个shard都要花好几分钟才能查询出来所有的数据,那么你的搜索请求也会等待好 ...

  10. JavaScript学习(七)