莫队算法 BOJ 2038 [2009国家集训队]小Z的袜子(hose)
/*
莫队算法:求出[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)的更多相关文章
- 莫队乱搞--BZOJ2038: [2009国家集训队]小Z的袜子(hose)
$n \leq 50000$的$\leq 50000$的数字序列,$m \leq 50000$个询问,每次问一个区间中随机拿两次(不放回)拿到相同数字的概率,以既约分数形式输出. 莫队入门.把询问按“ ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
- 莫队算法 2038: [2009国家集训队]小Z的袜子(hose)
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9894 Solved: 4561[Subm ...
- 2038: [2009国家集训队]小Z的袜子(hose) (莫队算法)
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 专题练习: http://acm.hust.edu.cn/vjudge/conte ...
- 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 MBSubmit: 7676 Solved: 3509[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块
分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 2938 Solved: 13 ...
随机推荐
- SQL SERVER 自增字段相关问题
SET IDENTITY_INSERT Data0048_TEST ON --给自增列赋值 DBCC CHECKIDENT(TableName) --查看某个表中的自增列当前的值 DBCC CHECK ...
- 洛谷 P2033 Chessboard Dance
P2033 Chessboard Dance 题目描述 在棋盘上跳舞是件有意思的事情.现在给你一张国际象棋棋盘和棋盘上的一些子以及你的初始位置和方向.求按一定操作后,棋盘的状态. 操作有四种,描述如下 ...
- 【SQL Server 学习系列】-- SQL查询数据库表字段值不为空或Null的所有列
) set @TableName = 'Agency' -- 表名 declare @querySql nvarchar(max) set @querySql = 'select ' ) declar ...
- 怎么让Excel显示时间时候能把秒显示出来
Excel显示时间一般只显示年月日小时分钟怎么能够把秒也显示出来既如下显示 2007-04-11 12:00:00 将单元格格式设为"自定义",在"类型"框中输 ...
- jmeter的master-slave模式
要求: 1.相同的jmeter版本 2.最好相同的java版本 jmeter可以通过master-slave的方式实现更大的并发,但是作为master的机器将会消耗更多的资源,因为所有的slave的压 ...
- Ubuntu和Win7双系统,ubuntu被删,重新启动之后显示,no such partition
准备一张windows7的系统安装盘.从光盘启动电脑,在光盘启动完毕之后.按shift+F10,调出cmd命令终端,在终端输入:bootrec/fixmbr OK.重新启动之后就搞定了
- zabbix学习系列之配置邮件告警
整体思路是:添加监控项-->配置触发器(达到设定的阈值就触发)-->配置动作(将某个触发器绑定到某个动作,达到某个阈值,触发器触发的时候,通过邮件发送告警信息给某个用户) 配置触发器 创建 ...
- yarn-cli 缓存
yarn cache list Yarn 会在你的用户目录下开辟一块全局缓存用以保存下载的包.yarn cache list 用于列出所有已经缓存的包. yarn cache dir 执行 yarn ...
- react新特性 react hooks
本文介绍的是react新特性react hooks,本文面向的是有一定react开发经验的小伙伴,如果你对react还不是很熟悉的话我建议你先学习react并多多联系. 首先我们都知道react有3种 ...
- LeetCode_Mysql_Second Highest Salary
176. Second Highest Salary 1. 问题描写叙述: 写一个sql语句从 Employee 表里获取第二高位的工资. 2. 解决思路: 这道题非常easy,就当热身了.首先用ma ...