区间无修改莫队学习笔记(lg1494小z的袜子)
这几天感觉要学的要做的有点多,就偷了个懒没写笔记,赶紧补一下
莫队嘛,一个离线处理各种区间(或树上)询问的神奇算法
简单而言,按左端点排个序然后指针l,r递推就好了
复杂度证明貌似是不待修改的n^1.5,带修改的n^5/3(证明又与我何干呢)
这东西我只学了一天左右,感觉常规题没什么亮点,毒瘤起来就不知道了
然后我分享一下无修莫队和带修莫队的两道例题做法,回滚的话后面补吧
小z的袜子https://www.luogu.org/problemnew/show/P1494
抽到一样袜子的情况总和为 cnt[i]∗(cnt[i]−1)(cnt[i]>=2)(1<=i<=n)
那么请手推当cnt[i]+1或cnt[i]-1时的情况
#include<bits/stdc++.h>
#define int long long//这题貌似会爆int
using namespace std;
inline int read(){
int w=,f=;
char ch=getchar();
while(ch<''||ch>''){
if(ch=='-') f=-;
ch=getchar();
}
while(ch>=''&&ch<=''){
w=(w<<)+(w<<)+ch-;
ch=getchar();
}
return w*f;
}
int n,m,block,ans,pos[],col[],cnt[];
struct Query{
int l,r,ans1,ans2,id;//l,r表示当前询问区间,ans1,ans2表示答案的分子分母,id就是这个问题的序号
}q[];
inline int comp1(Query a,Query b){
if(pos[a.l]==pos[b.l]) return a.r<b.r;
else return a.l>b.l;//如果左端点所在块一样,按右端点排序,否则按左端点排序
}//这个貌似有很多种写法,面向数据编程吧(逃
inline int comp2(Query a,Query b){
return a.id<b.id;//回到最初的顺序
}
inline void add(int x){
ans+=cnt[col[x]]*,cnt[col[x]]++;return;//当你加为一个颜色加一的时候答案的变化
}
inline void del(int x){
if(cnt[col[x]]>=)ans-=(cnt[col[x]]-)*,cnt[col[x]]--;return;//当你删一个颜色的时候答案的变化
}
inline void work(){
int i,j,k;int l=,r=;//这个地方我建议写l=1,r=0,这表示一个空区间,如果写l=0,r=0会发生一些奇怪边界问题
for(i=;i<=m;i++){
if(q[i].l==q[i].r){
q[i].ans1=;q[i].ans2=;continue;//题目要求特判的情况
}
else{
/*
四种情况,分别讨论,然而在add的时候应该先移动指针再修改,del的话先修改再移动指针
*/
while(l>q[i].l) add(--l);
while(r<q[i].r) add(++r);
while(l<q[i].l) del(l++);
while(r>q[i].r) del(r--);
q[i].ans1=ans;q[i].ans2=(r-l+)*(r-l);
}
}
}
inline int GCD(int x,int y){//题目要求的
if(!y) return x;
else return GCD(y,x%y);
}
signed main(){//按题目要求走就好了
n=read();m=read();int i,j,k;int block=sqrt(n);
for(i=;i<=n;i++){
col[i]=read();pos[i]=(i-)/block+;
}
for(i=;i<=m;i++){
q[i].id=i;q[i].l=read();q[i].r=read();
}
sort(q+,q+m+,comp1);
work();
sort(q+,q+m+,comp2);
for(i=;i<=m;i++){
if(q[i].ans1==&&q[i].ans2==){
}
else{
int x=GCD(q[i].ans1,q[i].ans2);
q[i].ans1/=x;q[i].ans2/=x;
}
printf("%lld/%lld\n",q[i].ans1,q[i].ans2);
}
return ;
}
区间无修改莫队学习笔记(lg1494小z的袜子)的更多相关文章
- 莫队算法 [国家集训队]小Z的袜子
题目链接 洛古 https://www.luogu.org/problemnew/show/P1494 大概说下自己的理解 先来概率的计算公式 ∑C(2,f(i)) / C(2,r−l ...
- 莫队学习笔记(未完成QAQ
似乎之前讲评vjudge上的这题的时候提到过?但是并没有落实(...我发现我还有好多好多没落实?vjudge上的题目还没搞,然后之前考试的题目也都还没总结?天哪我哭了QAQ 然后这三道题我都是通过一道 ...
- P1494 [国家集训队]小Z的袜子/莫队学习笔记(误
P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...
- AT1219 歴史の研究[回滚莫队学习笔记]
回滚莫队例题. 这题的意思大概是 设 \(cnt_i\) 为 l ~ r 这个区间 \(i\) 出现的次数 求\(m\) 次询问 求 l~r 的 max {\(a_i\) * \(cnt_i\)} \ ...
- SP10707 COT2 - Count on a tree II [树上莫队学习笔记]
树上莫队就是把莫队搬到树上-利用欧拉序乱搞.. 子树自然是普通莫队轻松解决了 链上的话 只能用树上莫队了吧.. 考虑多种情况 [X=LCA(X,Y)] [Y=LCA(X,Y)] else void d ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9894 Solved: 4561[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
- 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)
莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...
- BZOJ2120&2453数颜色——线段树套平衡树(treap)+set/带修改莫队
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...
随机推荐
- 链接github
引用https://www.cnblogs.com/u-1596086/p/11588957.html 第一步:登录git创建项目 右上角头像按钮,点击your repositories 接着绿色按钮 ...
- 查询MS SQL的版本号
可以使用全局变量@@VERSION或者是使用SERVERPROPERTY()函数: 参考: SELECT @@VERSION SELECT SERVERPROPERTY('Edition') Sour ...
- redis 5.0.7 源码阅读——字典dict
redis中字典相关的文件为:dict.h与dict.c 与其说是一个字典,道不如说是一个哈希表. 一.数据结构 dictEntry typedef struct dictEntry { void * ...
- 疫情之下,使用FRP实现内网穿透,远程连接公司电脑进行办公
当前情况下,经常会有需要到公司电脑进行一些操作,比如连接内网OA,数据库或者提交文档.为了减少外出,将使用frp进行内网穿透的方法进行一个说明. 前提条件 1. 一台拥有公网 IP 的设备(如果没有, ...
- 『后缀自动机入门 SuffixAutomaton』
本文的图片材料多数来自\(\mathrm{hihocoder}\)中详尽的\(SAM\)介绍,文字总结为原创内容. 确定性有限状态自动机 DFA 首先我们要定义确定性有限状态自动机\(\mathrm{ ...
- node post 大数据无响应超时
使用 express 框架,post 较大数据量(富文本,里面包含了图片base64数据,大约300k)时,node 无响应,把数据内容减少后能顺利提交. 是因为数据量大过body post 的限制导 ...
- OpenCV学习记录(C++版本)
HighGUI组件 图像的载入:imread()函数 Mat imread(const string& filename, int flag = 1)其中flag=1代表读入RGB彩色图像,- ...
- 如何在vue-cli中使用vuex(配置成功
前言 众所周知,vuex 是一个专为 vue.js 应用程序开发的状态管理模式,在构建一个中大型单页应用中使用vuex可以帮助我们更好地在组件外部管理状态.而vue-cli是vue的官方脚手架,它能帮 ...
- vue.config.js添加路径别名
在组件库中添加配置文件后其它文件需要引用它,此时想到利用路径的别名比较方便,相当于缩写了,请看下面的添加过程: (一)在vue.config.js文件中添加的内容如粗体字体所示: const path ...
- Mybatis的延迟加载和立即加载
Mybatis的延迟加载和立即加载 示例:在一对多中,当我们有一个用户,他有100个帐户 问题1:在查询用户时,要不要把关联的账户查出来? 问题2:在查询账户时,要不要把关联的用户信息查出来? 问题1 ...