BZOJ 2038: [2009国家集训队]小Z的袜子
二次联通门 : BZOJ 2038: [2009国家集训队]小Z的袜子
/*
BZOJ 2038: [2009国家集训队]小Z的袜子 莫队经典题 但是我并不认为此题适合入门。。 Answer = ∑ C (sum[i], 2) / C (r - l + 1, 2)
= ∑ (sum[i] ^ 2 - sum[i]) / 2 C (r - l + 1, 2) sum表示区间内数i的出现次数 那么∑sum[i]=r-l+1
2*(r-l+1)!
分母= ----------- = (r-l)*(r-l+1)
2!*(r-l-1) ! sum数组随便记录一下就好。。 */
#include <algorithm>
#include <cstdio>
#include <cmath> #define Max 500090 void read (int &now)
{
now = ;
register char word = getchar ();
while (word < '' || word > '')
word = getchar ();
while (word >= '' && word <= '')
{
now = now * + word - '';
word = getchar ();
}
} int belong[Max]; struct Query_Data
{
int l, r; int Id; bool operator < (const Query_Data &now) const
{
return belong[this->l] == belong[now.l] ? this->r < now.r : belong[this->l] < belong[now.l];
}
}; int N, M;
long long Result;
long long count[Max];
int number[Max]; Query_Data query[Max]; inline void Updata (int now, bool type)
{
if (type)
{
Result -= count[number[now]] * count[number[now]];
count[number[now]] ++;
Result += count[number[now]] * count[number[now]];
}
else
{
Result -= count[number[now]] * count[number[now]];
count[number[now]] --;
Result += count[number[now]] * count[number[now]];
}
} long long Get_Gcd (long long a, long long b)
{
return !b ? a : Get_Gcd (b, a % b);
} long long Answer_up[Max], Answer_down[Max]; inline void Calculate (int now)
{
register int l = query[now].l, r = query[now].r;
Answer_up[query[now].Id] = Result - (r - l + );
Answer_down[query[now].Id] = 1ll * (r - l) * (r - l + );
register long long res = Get_Gcd (Answer_up[query[now].Id], Answer_down[query[now].Id]);
Answer_up[query[now].Id] /= res;
Answer_down[query[now].Id] /= res;
} int main (int argc, char *argv[])
{
read (N);
read (M);
int K_Size = sqrt (N);
for (int i = ; i <= N; i ++)
{
belong[i] = (i + ) / K_Size;
read (number[i]);
}
for (int i = ; i <= M; i ++)
{
read (query[i].l);
read (query[i].r);
query[i].Id = i;
}
std :: sort (query + , query + + M); int l = , r = ;
for (int i = ; i <= M; i ++)
{
while (l < query[i].l)
Updata (l ++, false);
while (l > query[i].l)
Updata (-- l, true);
while (r > query[i].r)
Updata (r --, false);
while (r < query[i].r)
Updata (++ r, true);
Calculate (i);
}
for (int i = ; i <= M; i ++)
{
printf ("%lld/", Answer_up[i]);
printf ("%lld\n", Answer_down[i]);
}
//system ("pause");
return ;
}
BZOJ 2038: [2009国家集训队]小Z的袜子的更多相关文章
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
		
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
 - BZOJ 2038: [2009国家集训队]小Z的袜子(hose)
		
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7676 Solved: 3509[Subm ...
 - BZOJ 2038 [2009国家集训队]小Z的袜子 莫队
		
2038: [2009国家集训队]小Z的袜子(hose) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Descriptionw ...
 - Bzoj 2038: [2009国家集训队]小Z的袜子(hose)  莫队,分块,暴力
		
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 5763 Solved: 2660[Subm ...
 - BZOJ 2038: [2009国家集训队]小Z的袜子(hose) ( 莫队 )
		
莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5) --------------------------- ...
 - BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块
		
分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 2938 Solved: 13 ...
 - BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
		
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9894 Solved: 4561[Subm ...
 - BZOJ 2038: [2009国家集训队]小Z的袜子(hose)&&莫对算法
		
这里跟曼哈顿最小生成树没有太大的关系. 时间复杂度证明: [BZOJ2038 小Z的袜子 AC代码] 排序方式: 第一关键字:l所在的块: 第二关键字:r从小到大. #include<cstdi ...
 - BZOJ 2038: [2009国家集训队]小Z的袜子  (莫队)
		
题目传送门:小Z的袜子 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… ...
 
随机推荐
- 深度学习的激活函数  :sigmoid、tanh、ReLU 、Leaky Relu、RReLU、softsign 、softplus、GELU
			
深度学习的激活函数 :sigmoid.tanh.ReLU .Leaky Relu.RReLU.softsign .softplus.GELU 2019-05-06 17:56:43 wamg潇潇 阅 ...
 - 在论坛中出现的比较难的sql问题:18(字符合并 整数解析星期几)
			
原文:在论坛中出现的比较难的sql问题:18(字符合并 整数解析星期几) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...
 - 【SQL Server高可用性】数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表
			
原文:[SQL Server高可用性]数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表 经常在论坛中看到有人问数据同步的技术,如果只是同步少量的表,那么可以考虑使 ...
 - 使用docker安装gitlab
			
我这里使用的系统是centos7 首先安装docker,docker-compose(非必须,但是使用它可以简化镜像启动参数),需要注意的是docker-compose安装依赖Python的pip,所 ...
 - 预编译And作用域链
			
首先要理解什么是预编译: 预编译就是在JS执行前的一瞬间创建一个AO对象,这个创建AO的过程叫做预编译. console.log(a) var a = 1; function c(b){ b = 10 ...
 - iview-admin本地测试上线登陆问题和文件路径找不到问题
			
在项目中vue.config.js下修改上线路径(图中我修改为:根目录路径) 测试本地上线登陆出现问题: 在main.js下if (process.env.NODE_ENV !== 'producti ...
 - uni-app 入门之 nvue (weex) 爬坑记
			
前言 uni-app 是 DCloud 出品的新一代跨端框架,可以说是目前跨端数最多的框架之一了,目前支持发布到:App(Android/iOS).H5.小程序(微信小程序/支付宝小程序/百度小程序/ ...
 - Python opencv提取视频中的图片
			
作者:R语言和Python学堂链接:https://www.jianshu.com/p/e3c04d4fb5f3 这个函数就是本文要介绍的video2frames()函数,功能就是从视频中提取图片,名 ...
 - gcc 编译的四大过程
			
gcc 编译的四大过程(预处理-编译-汇编-链接 ) 我们来编译一个hello world 程序. #include <stdio.h> int main(int argc,const c ...
 - OpenStack kilo版(2) keystone部署
			
部署在controller节点 配置数据库 MariaDB [(none)]> CREATE DATABASE keystone; Query OK, 1 row affected (0.00 ...