区间无修改莫队学习笔记(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 接着绿色按钮 ...
- 传智播客C++视频学习笔记(3)
#include<iostream> using namespace std; //内存分区模型 //代码区,存放二进制代码,由操作系统进行管理 //全局区,存放全局变量.静态变量.常量( ...
- python——面向对象(3),搬家具
"""date: 2020.2.9搬家具:将小于房子剩余面积的家具搬进房子1.定义家具类,房屋类""" class Furniture(): ...
- centos配置网络yum源 和本地yum源
一,网络yum源 1.备份 yum文件 cd /etc/ cp -r yum.repos.d yum.repos.d.bak 2.在系统联网的情况下执行下面命令下载 wget -O /etc/yu ...
- 微软帮助类SqlHelper
using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collect ...
- centos 7.6 docker 安装 nextcloud -使用sqlite数据库
docker search nextcloud docker pull docker.io/nextcloud docker images mkdir /home/nextcloud chmod -R ...
- LeetCode 面试题22. 链表中倒数第k个节点
题目链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/ 输入一个链表,输出该链表中倒数第 ...
- java基础之----23种设计模式(单例模式)
概述 提到单例模式,我们并不陌生,而且面试中也常常会问单例模式相关的问题,接下来就谈谈单例模式,这篇文章会回答如下几个问题: 什么是单例模式? 单例模式有几种实现方式,以及各种实现方式的优劣? 单例模 ...
- Beego 过滤器
过滤器 beego 支持自定义过滤中间件,例如安全验证,强制跳转等. 过滤器函数如下所示: beego.InsertFilter(pattern string, position int, filte ...
- 无人机通信协议MAVLink简介
MAVLink MAVLink(Micro Air Vehicle Link,微型空中飞行器链路通讯协议)是无人飞行器与地面站(Ground Control Station ,GCS)之间通讯,以及无 ...