「国家集训队」小Z的袜子
「国家集训队」小Z的袜子
传送门
莫队板子题。
注意计算答案的时候,由于分子分母都要除以2,所以可以直接约掉,这样在开桶算的时候也方便一些。
参考代码:
#include <algorithm>
#include <cstdio>
#include <cmath>
#define rg register
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)
#define int long long
using namespace std;
template < class T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while ('0' > c || c > '9') f |= c == '-', c = getchar();
while ('0' <= c && c <= '9') s = s * 10 + c - 48, c = getchar();
s = f ? -s : s;
}
const int _ = 50010;
int n, gap, m, c[_], pos[_], s[_], ans;
struct Ask { int l, r, id; } ask[_];
struct Ans { int a, b; } res[_];
inline bool cmp(const Ask& x, const Ask& y)
{ return pos[x.l] == pos[y.l] ? x.r < y.r : x.l < y.l; }
inline void update(int x, int v)
{ ans -= s[c[x]] * s[c[x]], s[c[x]] += v, ans += s[c[x]] * s[c[x]]; }
signed main() {
#ifndef ONLINE_JUDGE
file("cpp");
#endif
read(n), read(m), gap = sqrt(1.0 * n);
for (rg int i = 1; i <= n; ++i)
read(c[i]), pos[i] = (i - 1) / gap + 1;
for (rg int i = 1; i <= m; ++i)
read(ask[i].l), read(ask[i].r), ask[i].id = i;
sort(ask + 1, ask + 1 + m, cmp);
for (rg int i = 1, l = 1, r = 0; i <= m; ++i) {
while (l < ask[i].l) update(l++, -1);
while (l > ask[i].l) update(--l, 1);
while (r < ask[i].r) update(++r, 1);
while (r > ask[i].r) update(r--, -1);
int now = ask[i].id;
if (ask[i].l == ask[i].r) { res[now].a = 0, res[now].b = 1; continue; }
res[now].a = ans - (ask[i].r - ask[i].l + 1);
res[now].b = 1ll * (ask[i].r - ask[i].l + 1) * (ask[i].r - ask[i].l);
int g = __gcd(res[now].a, res[now].b);
res[now].a /= g, res[now].b /= g;
}
for (rg int i = 1; i <= m; ++i) printf("%lld/%lld\n", res[i].a, res[i].b);
return 0;
}
「国家集训队」小Z的袜子的更多相关文章
- AC日记——[国家集训队2010]小Z的袜子 cogs 1775
[国家集训队2010]小Z的袜子 思路: 传说中的莫队算法(优雅的暴力): 莫队算法是一个离线的区间询问算法: 如果我们知道[l,r], 那么,我们就能O(1)的时间求出(l-1,r),(l+1,r) ...
- 洛谷 1775. [国家集训队2010]小Z的袜子
1775. [国家集训队2010]小Z的袜子 ★★★ 输入文件:hose.in 输出文件:hose.out 简单对比时间限制:1 s 内存限制:512 MB [题目描述] 作为一个生活 ...
- 数据结构(莫队算法):国家集训队2010 小Z的袜子
[题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到 ...
- [国家集训队2010]小Z的袜子
★★★ 输入文件:hose.in 输出文件:hose.out 简单对比 时间限制:1 s 内存限制:512 MB [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜 ...
- 【BZOJ2038】【2009国家集训队】小Z的袜子(hose) 分块+莫队
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- 1775. [国家集训队2010]小Z的袜子
[题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到 ...
- [国家集训队][bzoj2038] 小Z的袜子 [莫队]
题面: 传送门 思路: 又是一道标准的莫队处理题目,但是这道题需要一点小改动:求个数变成了求概率 我们思考:每次某种颜色从i个增加到i+1个,符合要求的情况多了多少? 原来的总情况数是i*(i-1)/ ...
- [国家集训队2009]小Z的袜子
题目:洛谷P1494.BZOJ2038. 题目大意:给你一列袜子的颜色,每次要你求从区间$[L,R]$内随机选两个袜子颜色相同的概率.解题思路:首先,对于某个特定区间$[L,R]$,它的概率是$\fr ...
- 【BZOJ 2038】【2009 国家集训队】小Z的袜子(hose) 分块+莫队
$SDOI2016Day-1$临时抱佛脚学习一下莫队算法$233$ 我预感到自己省选要爆0hhh #include<cmath> #include<cstdio> #inclu ...
随机推荐
- Java进阶学习(3)之对象容器.小练习
查找里程(10分) 题目内容: 下图为国内主要城市之间的公路里程: 你的程序要读入这样的一张表,然后,根据输入的两个城市的名称,给出这两个城市之间的里程. 注意:任何两个城市之间的里程都已经给出,不需 ...
- 《实战Java高并发程序设计》读书笔记六
第六章 Java 8 与并发 1.函数式编程 函数作为一等公民: 将函数作为参数传递给另外一个函数这是函数式编程的特性之一. 函数可以作为另外一个函数的返回值,也是函数式编程的重要特点. 无副作用: ...
- 【译】高级T-SQL进阶系列 (七)【上篇】:使用排序函数对数据进行排序
[译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 什么是排序函数(Ranking Functions)? 排序函数基于一组记录的集合返回一个排序值.一个排序值其实 ...
- NPC脚本界面自定义美化参数说明
觉得NPC对话界面太单调了 可以自己定义: 在[@main]下面加上 #ACT OPENMERCHANTBIGDLG 参数(WIL文件序号 图片序号 是否可以移动(0,1) 显示位置(0=左上角,1 ...
- //C语言:将一个由字符0和1组成的表示二进制数的字符串,转换成相应的十进制数返回。
//函数fun:将一个由字符0和1组成的表示二进制数的字符串,转换成相应的十进制数返回. #include <stdio.h> #pragma warning (disable:4996) ...
- 【MYSQL建库和建表】MYSQL建库和建表
1.Navicat创建Mysql数据库 2.创建创建用户表和索引 CREATE TABLE `t_user` ( `id` ) NOT NULL AUTO_INCREMENT COMMENT '主键' ...
- chkconfig 原理 (企业应用)
企业应用:如何让某个服务开机自启动 chkconfig --level 345 serviceName on chkconfig --level 345 serviceName off chkconf ...
- laravel 监听模型创建事件
注意:
- Many Formulas
You are given a string S consisting of digits between 1 and 9, inclusive. You can insert the letter ...
- python安装MySQLclient
直接使用pip命令安装mysqlclient : pip3 install mysqlclient 如果windows安装不了MySQL-python mysqlclient 参考以下解决方案: 这个 ...