[题解] 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: 2038User: Bj2002Language: C++Result: AcceptedTime:11036 msMemory: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!
转载于:https://www.cnblogs.com/bj2002/p/10791896.html
[题解] 2038: [2009国家集训队]小Z的袜子(hose)相关推荐
- 2038: [2009国家集训队]小Z的袜子(hose)+莫队入门
题目链接:2038: [2009国家集训队]小Z的袜子(hose) 题目: Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 9894 Solved: 4561 [Su ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块
分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 2938 Solved: 13 ...
- 莫队算法 BOJ 2038 [2009国家集训队]小Z的袜子(hose)
题目传送门 1 /* 2 莫队算法:求出[l, r]上取出两只相同袜子的个数. 3 莫队算法是离线处理一类区间不修改查询类问题的算法.如果你知道了[L,R]的答案,可以在O(1)的时间下得到 4 [L ...
- 2038: [2009国家集训队]小Z的袜子(hose)
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 15879 Solved: 7205 [S ...
- 莫队(bzoj 2038: [2009国家集训队]小Z的袜子(hose))
莫队也是暴力的一种,不过可以很有效的降低复杂度 如果我们已知[l, r]的答案,能在O(1)时间得到[l+1,r]的答案以及[l, r-1]的答案,即可使用莫队算法. 时间复杂度为O(n^1.5).如 ...
- [BZOJ 2038][2009国家集训队]小Z的袜子(hose)(莫队)
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...
- 2038: [2009国家集训队]小Z的袜子(hose) - BZOJ
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...
- 莫队入门例题:2038: [2009国家集训队]小Z的袜子(hose)
题目大意: Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说, ...
- bzoj - 2038: [2009国家集训队]小Z的袜子(hose)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 莫队算法可以解决一类不修改.离线查询问题.而这题可以用莫队来做. *我是看这个论文学 ...
最新文章
- [题解]RGB Substring (hard version)-前缀和(codeforces 1196D2)
- 最大流 ---- 最大密度子图 ----- 2014-2015 ACM-ICPC, Asia Xian Regional Contest C The Problem Needs 3D Arrays
- 烧钱大战数以亿计 无人驾驶无法突破局限?
- 安装Live communication server 2005存档服务
- 启动项目的时候,一直打印日志
- jQuery UI resizble、draggable的div包含iframe导致缩放和拖拽的不平滑解决方法
- 【Asp.net】Cookie对象
- 晨风机器人突破限制_厉害了!工程建设领域首创!会自动测量、自动调平的测量机器人...
- 前端学习(2706):重读vue电商网站26之JSON格式的配置文件
- IntelliJ IDEA 设置代码检查级别
- java 调用window程序_Windows下Java调用可执行文件代码实例
- CSS3 Version
- c#特性 java注解,Java注解全面了解
- Remote Desktop Connection Manager (RDCMan)
- LeetCode 刷题记录模板
- Unite 2018展区全曝光,Made with Unity精彩游戏等你来体验
- java面向对象小知识
- Excel如何将工作表按照表内某一单元格命名
- IP-guard功能详解——屏幕监控
- 贵州支教之第一天(11月7日)