BZOJ2038 小Z的袜子(莫队之源)
题意+思路:
给你m个区间询问,问每个区间内的$\displaystyle \frac{\sum x^2-(R-L+1)}{(R-L)(R-L+1)} $,其中x为每种数字的个数,用cnt存储;
所以我们需要用莫队处理每个区间的$\displaystyle \sum x^2 $
相邻状态转移如果是$O(i)$,复杂度就为$O(in\sqrt{n})$,因为这里状态转移是$O(1)$的,所以复杂度为$O(n\sqrt{n})$
代码:
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cmath>
- #include<cstring>
- #include<string>
- #include<stack>
- #include<queue>
- #include<deque>
- #include<set>
- #include<vector>
- #include<map>
- #include<functional>
- #define fst first
- #define sc second
- #define pb push_back
- #define mem(a,b) memset(a,b,sizeof(a))
- #define lson l,mid,root<<1
- #define rson mid+1,r,root<<1|1
- #define lc root<<1
- #define rc root<<1|1
- #define lowbit(x) ((x)&(-x))
- using namespace std;
- typedef double db;
- typedef long double ldb;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef pair<int,int> PI;
- typedef pair<ll,ll> PLL;
- const db eps = 1e-;
- const int mod = 1e9+;
- const int maxn = 3e5+;
- const int maxm = 2e6+;
- const int inf = 0x3f3f3f3f;
- const db pi = acos(-1.0);
- inline ll gcd(ll a, ll b){
- return b==?a:gcd(b,a%b);
- }
- int block;
- ll res;//存储sigma x^2
- struct Blc{
- int l, r;
- int id;
- bool operator < (const Blc &b)const{
- if(l/block == b.l/block) return r < b.r;
- return l/block < b.l/block;
- }
- }blc[maxn];
- int a[maxn];
- ll cnt[maxn];
- ll ansx[maxn], ansy[maxn];//储存答案x/y
- void insert(int x){
- res -= cnt[x]*cnt[x];
- cnt[x]++;
- res += cnt[x]*cnt[x];
- return;
- }
- void remove(int x){
- res -= cnt[x]*cnt[x];
- cnt[x]--;
- res += cnt[x]*cnt[x];
- return;
- }
- int main(){
- int n, m;
- scanf("%d %d", &n, &m);
- block = sqrt(n);
- for(int i = ; i <= n; i++)scanf("%d", &a[i]);
- for(int i = ; i < m; i++){
- blc[i].id=i;
- scanf("%d %d", &blc[i].l, &blc[i].r);
- }
- mem(cnt, );
- sort(blc, blc+m);
- int l, r;
- l = r = ;//光标
- cnt[a[]]++;
- res = ;
- for(int i = ; i < m; i++){
- int id = blc[i].id;
- if(blc[i].l==blc[i].r){
- ansx[id] = ;
- ansy[id] = ;
- continue;
- }
- while(l < blc[i].l) remove(a[l++]);
- while(l > blc[i].l) insert(a[--l]);
- while(r < blc[i].r) insert(a[++r]);
- while(r > blc[i].r) remove(a[r--]);
- ll x, y, g;
- x = res - (blc[i].r - blc[i].l + );
- y = (blc[i].r - blc[i].l)*(blc[i].r - blc[i].l + 1ll);
- g = gcd(y, x);
- ansx[id] = x/g;
- ansy[id] = y/g;
- }
- for(int i = ; i < m; i++){
- printf("%lld/%lld\n", ansx[i], ansy[i]);
- }
- return ;
- }
BZOJ2038 小Z的袜子(莫队之源)的更多相关文章
- BZOJ2038 小Z的袜子 莫队
BZOJ2038 题意:q(5000)次询问,问在区间中随意取两个值,这两个值恰好相同的概率是多少?分数表示: 感觉自己复述的题意极度抽象,还是原题意有趣(逃: 思路:设在L到R这个区间中,x这个值得 ...
- [国家集训队][bzoj2038] 小Z的袜子 [莫队]
题面: 传送门 思路: 又是一道标准的莫队处理题目,但是这道题需要一点小改动:求个数变成了求概率 我们思考:每次某种颜色从i个增加到i+1个,符合要求的情况多了多少? 原来的总情况数是i*(i-1)/ ...
- 【填坑向】bzoj2038小Z的袜子 莫队
学莫队必做题,,,但是懒得写.今天来填个坑 莫队水题 莫队实际上就是按一个玄学顺序来离线计算询问,保证复杂度只会多一个n1/2,感觉是玄学(离线算法都很玄学) 易错点:要开long long(卡我半天 ...
- 小Z的袜子 & 莫队
莫队学习 & 小Z的袜子 引入 莫队 由莫涛巨佬提出,是一种离线算法 运用广泛 可以解决广大的离线区间询问题 莫队的历史 早在mt巨佬提出莫队之前 类似莫队的算法和莫队的思想已在Codefor ...
- BZOJ 2038 [2009国家集训队]小Z的袜子 莫队
2038: [2009国家集训队]小Z的袜子(hose) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Descriptionw ...
- 【国家集训队2010】小Z的袜子[莫队算法]
[莫队算法][国家集训队2010]小Z的袜子 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程, ...
- bzoj 2308 小Z的袜子(莫队算法)
小Z的袜子 [题目链接]小Z的袜子 [题目类型]莫队算法 &题解: 莫队算法第一题吧,建议先看这个理解算法,之后在参考这个就可以写出简洁的代码 我的比第2个少了一次sort,他的跑了1600m ...
- P1494 [国家集训队]小Z的袜子/莫队学习笔记(误
P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...
- BZOJ2038 [2009国家集训队]小Z的袜子 莫队+分块
作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从 ...
随机推荐
- .Net Core Linux 下面的操作
这里以 Ubuntu 8.04版本为例: 1. 注册 Microsoft 密钥 注册产品存储库 安装必需的依赖项 wget -q https://packages.microsoft.com/ ...
- Keystone V3 API Examples
There are few things more useful than a set of examples when starting to work with a new API. Here a ...
- JS中如何比较两个数组,取得数组二相对于数组一新增和去除的元素
//数组二相对于数组一所新增的数据 function add_msg(a,b){ return a.filter(function(i){ return b.indexOf(i) === -1 }) ...
- Spring Boot2 系列教程 (十) | 实现声明式事务
前言 如题,今天介绍 SpringBoot 的 声明式事务. Spring 的事务机制 所有的数据访问技术都有事务处理机制,这些技术提供了 API 用于开启事务.提交事务来完成数据操作,或者在发生错误 ...
- 树dp 统计异或值
链接:https://ac.nowcoder.com/acm/contest/272/B来源:牛客网 题目描述 给定一棵n个点的树,每个点有权值.定义表示 到 的最短路径上,所有点的点权异或和. ...
- 【 Tomcat 】tomcat8.0 基本参数调优配置-----(2)
Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断重新启动,甚至在午夜时分唤醒你.对于操作系统优化来说,是尽可能的增大可使用的内存容量.提高CPU 的频率,保证文件 ...
- Splash简单应用
jd->iphone import requests from lxml import etree # search_key = 'iphone' jd_url = "https:// ...
- 替代 Hystrix,Spring Cloud Alibaba Sentinel 快速入门
提起 Spring Cloud 的限流降级组件,一般首先想到的是 Netflix 的 Hystrix. 不过就在2018年底,Netflix 宣布不再积极开发 Hystrix,该项目将处于维护模式.官 ...
- 【Four-Week-Task】四周学习CTF之第一周【寒假更新】
写在最前:为了更好地系统学习CTF(楞头冲很惨 别问我怎么知道的 除非你是天才),决定先看再学,先正向再逆向. /* 出版排版规范中,标题序号等级为:第一级,一.二.三.(用顿号):第二级,(一).( ...
- pandas时间序列常用操作
目录 一.时间序列是什么 二.时间序列的选取 三.时间序列的生成 四.时间序列的偏移量 五.时间前移或后移 五.时区处理 六.时期及算术运算 七.频率转换 一.时间序列是什么 时间序列在多个时间点观察 ...