莫队算法 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 ...
随机推荐
- Django:(7)auth用户认证组件 & 中间件
用户认证组件 用户认证组件: 功能:用session记录登陆验证状态 前提:用户表:django自带的auth_user 创建超级用户的命令: python manage.py createsuper ...
- [转]如何阅读android framework源码
但如果想深入的了解Android系统, 那么可以看下我的一些简单的总结. 知识 Java Java是AOSP的主要语言之一. 没得说, 必需熟练掌握. 熟练的Android App开发 Linux A ...
- 【BZOJ3925】地震后的幻想乡(期望概率DP,状压DP)
题意:给定一张点数不超过10的无向连通图,每条边有一个[0,1]之间的随机权值,求最小生成树上最大边的期望值 提示:对于n个[0,1]之间的随机变量x1,x2,...,xn,第k小的那个的期望值是k/ ...
- ZOJ 2770_Burn the Linked Camp
题意: 给定每个兵营的最大容量,以及第i到第j个兵营至少有多少个士兵,问所有兵营一共至少有多少个士兵? 分析: 差分约束系统,注意 第i到第j至少有k个 第i到第j最多有最大容量之和个 每个兵营至少有 ...
- [bzoj3306]树_dfs序_线段树_倍增lca
树 bzoj-3306 题目大意:给定一颗n个节点的树,支持换根.修改点权.查询子树最小值. 注释:$1\le n,q\le 10^5$. 想法: 如果没有换根操作,就是$dfs$序+线段树维护区间最 ...
- Spring Boot多数据源连接8小时后断开的问题解决(MySQL)
这个问题涉及的方面很多,需要一步步去排查,可能环境有问题,数据库有问题,但是网上最多的应该是如下的方式去解决. 以单个数据源为主,多个数据源基本方法一致. 1.MySQL 5版本之前可以通过在URL后 ...
- TCP/IP协议族-----22、万维网和HTTP
- 经常使用的android设计模式
一般来说,经常使用的android设计模式有下面8种:单例.工厂.观察者.代理.命令.适配器.合成.訪问者. 单例模式:目的是为了让系统中仅仅有一个调用对象,缺点是单例使其它程序过分依赖它,并且不 ...
- [Java Spring] Spring Annotation Configuration Using XML
Add context to our application. main/resources/applicationContext.xml: <?xml version="1.0&qu ...
- C# 如何修改Form不能修改窗体大小
把窗体的FormBorderSytle改一下就可以了,改成FixedSingle或者Fixed3D都可以