【BZOJ 2038】小Z的袜子
来源:互联网 发布:鲁迅 祝福 知乎 编辑:程序博客网 时间:2024/05/01 09:22
题目来源:BZOJ 2038
思路:
莫队算法。
先考虑计算答案的表达式,如果一种颜色
分式下面的值为常数,所以说我们现在要求的就是分子的部分。
(下面转自hzwer的博客)
如果我们已知
其实就是找一个数据结构支持插入、删除时维护当前答案。
这道题的话我们很容易用数组来实现,做到
转移具体的代码:
void update(int p, int k){ res -= s[c[p]] * (s[c[p]] - 1); s[c[p]] += k; res += s[c[p]] * (s[c[p]] - 1);}
那么莫队算法怎么做呢?
以下都是在转移为
如果已知
将n个数分成
按区间排序,以左端点所在块内为第一关键字,右端点为第二关键字,进行排序,也就是以
然后按这个排序直接暴力,复杂度分析是这样的:
1.
2.
3.
于是就是
代码:
#include <cstdio>#include <algorithm>#include <iostream>#include <cmath>using namespace std;typedef long long ll;const int maxn = 50010;struct node{ int l, r, id; ll a, b;}v[maxn];int each, n, m, res;ll c[maxn], pos[maxn], s[maxn];bool cmp(node a, node b){return pos[a.l] == pos[b.l] ? a.r < b.r : a.l < b.l;}bool cmp_id(node a, node b){return a.id < b.id;}void update(int p, int k){ res -= s[c[p]] * (s[c[p]] - 1); s[c[p]] += k; res += s[c[p]] * (s[c[p]] - 1);}int main(){ scanf("%d%d", &n, &m), each = (int)sqrt(n); for(int i = 1; i <= n; i ++) scanf("%d", &c[i]); for(int i = 1; i <= n; i ++) pos[i] = (i-1)/each+1; for(int i = 1; i <= m; i ++) scanf("%d%d", &v[i].l, &v[i].r), v[i].id = i; sort(v+1, v+1+m, cmp); for(int i = 1, l = 1, r = 0; i <= m; i ++){ for( ; r < v[i].r; r ++) update(r+1, 1); for( ; r > v[i].r; r --) update(r, -1); for( ; l < v[i].l; l ++) update(l, -1); for( ; l > v[i].l; l --) update(l-1, 1); if(v[i].l == v[i].r){v[i].a = 0, v[i].b = 1; continue;} v[i].a = res, v[i].b = (ll)(r-l+1)*(r-l); ll k = __gcd(v[i].a, v[i].b); v[i].a /= k, v[i].b /= k; } sort(v+1, v+1+m, cmp_id); for(int i = 1; i <= m; i ++) printf("%lld/%lld\n", v[i].a, v[i].b); return 0;}
0 0
- BZOJ 2038: 小Z的袜子
- BZOJ 2038小Z的袜子 分块
- BZOJ 2038 小z的袜子
- bzoj-2038 小Z的袜子 hose
- BZOJ 2038 小Z的袜子(hose)
- BZOJ 2038 小Z的袜子
- 【BZOJ】2038 小Z的袜子
- BZOJ 2038 小Z的袜子
- 【BZOJ 2038】小Z的袜子
- BZOJ 2038 小Z的袜子
- BZOJ 2038小z的袜子
- bzoj 2038 小Z的袜子
- bzoj 2038 小Z的袜子 莫队
- bzoj 2038 小z的袜子 莫队
- bzoj 2038 小z的袜子
- bzoj 2038: [2009国家集训队]小Z的袜子(hose)
- 【BZOJ 2038】 [2009国家集训队]小Z的袜子(hose)
- 线性莫队算法 BZOJ 2038 小Z的袜子
- iOS UIButton的基本设置与切圆角
- SQLiteDatabase实例
- IOS动画中的枚举UIViewAnimationOptions
- Redis系列-存储篇sorted set主要操作函数小结
- 英伟达jetson TX1的caffe-ssd配置
- 【BZOJ 2038】小Z的袜子
- web前端标签学习
- test
- TCP-IP网络协议基础 03——传输层协议TCP
- angularJS1 Error: [jqLite:nosel]
- Windows - Hook键盘和鼠标消息
- hbase通过row key 的前缀查询记录
- ceph存储修改vm密钥(密码)
- 内部类