[题解] 2038: [2009国家集训队]小Z的袜子(hose)
莫队,卡常数
思路
设\(\text{Vis[i]}\)为元素\(\text{i}\)在区间\(\text{[L,R]}\)的出现次数
考虑区间\(\text{[L,R]}\)和元素\(\text{i}\),首次取出的概率为\(\frac{Vis[i]}{R-L+1}\),再次取出的概率是\(\frac{Vis[i]-1}{R-L}\)
对于区间\(\text{[L,R]}\),答案为\(\sum_{i=1}^{N}{\frac{Vis[i](Vis[i]-1)}{(R-L)*(R-L+1)}}\)。
这样,每次给变\(\text{[L,R]}\),分子的变化可以通过对前、后两项的值做差得到:
- 设X=Vis[i],有:
\[(X+1)X-(X)(X-1)=2X
\]莫队这样修改即可。
Code
/**************************************************************
Problem: 2038
User: Bj2002
Language: C++
Result: Accepted
Time:11036 ms
Memory:2584 kb
****************************************************************/ #include <stdio.h>
#include <string.h>
#include <algorithm>
#define GC getchar()
#define Clean(X,K) memset(X,K,sizeof(X))
using namespace std ;
int Qread () {
int X = 0 ;
char C = GC ;
while (C > '9' || C < '0') C = GC ;
while (C >='0' && C <='9') {
X = X * 10 + C - '0' ;
C = GC ;
}
return X ;
}
long long GCD(long long M, long long N) {
while (N != 0) {
long long T = M % N;
M = N;
N = T;
}
return M;
}
const int Maxn = 50005 ;
int N , M , A[Maxn] , Vis[Maxn] ;
long long Ans[Maxn] , Sum[Maxn];
struct Node {
int Left , Right , Place;
};
Node Q[Maxn] ;
bool Cmp (const Node &X , const Node &Y) {
if (X.Left != Y.Left ) return X.Left < Y.Left ;
if (X.Left & 1) return X.Right < Y.Right ;
else return X.Right > Y.Right ;
}
bool Cmp2 (const Node &X , const Node &Y) {
return X.Place < Y.Place ;
}
void Qwrite(int X) {
if(X > 9) Qwrite(X / 10);
putchar(X % 10 + '0');
} int main () {
// freopen ("P1494.in" , "r" , stdin) ;
// freopen ("P1494.out", "w" , stdout) ;
N = Qread () , M = Qread ();
for (int i = 1 ; i <= N; ++ i) A[i] = Qread () ;
for (int i = 1 ; i <= M; ++ i) Q[i].Left = Qread () , Q[i].Right = Qread () , Q[i].Place = i ;;
sort (Q + 1 , Q + 1 + M , Cmp) ;
Clean (Vis , 0) ;
int L , R ;
long long Now = 0 ;
L = R = Q[1].Left ;
Vis[A[L]] = 1 ;
for (int i = 1 ; i <= M; ++ i) {
while (L < Q[i].Left ) {
-- Vis[A[L]] ;
Now -= (Vis[A[L]] << 1) ;
++ L ;
}
// cout << L <<' '<<R <<' '<<Now<<endl;
while (R < Q[i].Right ) {
++ R ;
Now += (Vis[A[R]] << 1) ;
++ Vis[A[R]] ;
}
// cout << L <<' '<<R <<' '<<Now<<endl;
while (R > Q[i].Right ) {
-- Vis[A[R]] ;
Now -= (Vis[A[R]] << 1) ;
-- R ;
}
// cout << L <<' '<<R <<' '<<Now<<endl;
Ans[Q[i].Place] = Now , Sum[Q[i].Place ] = ((long long)Q[i].Right - Q[i].Left ) * (Q[i].Right - Q[i].Left + 1) ;
}
std :: sort (Q + 1 , Q + 1 + M , Cmp2) ;
for (int i = 1 ; i <= M; ++ i) {
if (Q[i].Left == Q[i].Right ) printf ("0/1\n") ;
else {
int K = GCD (Ans[i] , Sum[i]) ;
Ans[i] /= K , Sum[i] /= K ;
printf ("%lld/%lld\n" , Ans[i] , Sum[i]) ;
}
}
fclose (stdin) , fclose (stdout) ;
return 0 ;
}
Thanks!
[题解] 2038: [2009国家集训队]小Z的袜子(hose)的更多相关文章
- 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) [莫队算法]【学习笔记】
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 ...
- 莫队算法 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) ( 莫队 )
莫队..先按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 ...
- 2038: [2009国家集训队]小Z的袜子(hose) (莫队算法)
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 专题练习: http://acm.hust.edu.cn/vjudge/conte ...
- 2038: [2009国家集训队]小Z的袜子(hose)
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9472 Solved: 4344 Desc ...
随机推荐
- Exchanger兄弟线程间数据信息交换
一.简述 Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据.当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用 ...
- capwap学习笔记——初识capwap(三)(转)
2.5.6 CAPWAP状态机详解 2.5.6.1 Start to Idle 这个状态变迁发生在设备初始化完成. ¢ WTP: 开启CAPWAP状态机. ¢ AC: 开启CAPWAP状态机. ...
- SSM-Spring-22:Spring+Mybatis+JavaWeb的整合
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 众所周知,框架Spring来整合别的框架,但是Mybatis出现的晚,Spring就没有给他提供支持,那怎么办 ...
- html5中viewport与meta详解
网上解释手机浏览器是把页面放在一个虚拟的"窗口"(viewport)中,通常这个虚拟的"窗口"(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中 ...
- python高级编程1
1.如何在列表,字典,集合中根据条件筛选数据? 如: 过滤列表[3, 9, -1, 10, 20, -2...]中的负数 筛出字典{‘小明’:70, 'Jim':88,'Tom':98...}中值高于 ...
- 【贪心+背包】BZOJ1334 [Baltic2008]Elect
Description 从N个数中选出任意个数且和尽量大,但要满足去掉任意一个和就小于总和的一半.n<=300, ai<=1e5. Solution 这个条件其实就是 去掉选出的最小的一个 ...
- BZOJ_3626_[LNOI2014]LCA_离线+树剖
BZOJ_3626_[LNOI2014]LCA_离线+树剖 题意: 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1. 设dep[i]表示点i的深度, ...
- jenkins 解决构建成功后进程消失的问题
最近模块拆分,独立出了几个服务.上线流程并不复杂,只需要在指定目录执行bash deploy.sh master即可上线master分支.但是架不住模块太多,每天在上线流程上也花费了不少时间,所以尝试 ...
- iOS指纹识别Touch ID的安全性探讨
苹果公司在 iPhone 5s 的发布会上公布了全新的指纹识别安全技术,也就是 Touch ID,开创了生物安全识别技术在便携设备上使用的新篇章.此后,苹果还将此技术带到了 iPad 上.此前没有任何 ...
- C#中使用Bogus创建模拟数据
原文:CREATING SAMPLE DATA FOR C# 作者:Bruno Sonnino 译文:C#中使用Bogus创建模拟数据 译者: Lamond Lu 背景 在我每次写技术类博文的时候,经 ...