这几天感觉要学的要做的有点多,就偷了个懒没写笔记,赶紧补一下

莫队嘛,一个离线处理各种区间(或树上)询问的神奇算法

简单而言,按左端点排个序然后指针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的袜子)的更多相关文章

  1. 莫队算法 [国家集训队]小Z的袜子

    题目链接   洛古   https://www.luogu.org/problemnew/show/P1494 大概说下自己的理解 先来概率的计算公式   ∑C(2,f(i))  /  C(2,r−l ...

  2. 莫队学习笔记(未完成QAQ

    似乎之前讲评vjudge上的这题的时候提到过?但是并没有落实(...我发现我还有好多好多没落实?vjudge上的题目还没搞,然后之前考试的题目也都还没总结?天哪我哭了QAQ 然后这三道题我都是通过一道 ...

  3. P1494 [国家集训队]小Z的袜子/莫队学习笔记(误

    P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...

  4. AT1219 歴史の研究[回滚莫队学习笔记]

    回滚莫队例题. 这题的意思大概是 设 \(cnt_i\) 为 l ~ r 这个区间 \(i\) 出现的次数 求\(m\) 次询问 求 l~r 的 max {\(a_i\) * \(cnt_i\)} \ ...

  5. SP10707 COT2 - Count on a tree II [树上莫队学习笔记]

    树上莫队就是把莫队搬到树上-利用欧拉序乱搞.. 子树自然是普通莫队轻松解决了 链上的话 只能用树上莫队了吧.. 考虑多种情况 [X=LCA(X,Y)] [Y=LCA(X,Y)] else void d ...

  6. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 9894  Solved: 4561[Subm ...

  7. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Subm ...

  8. 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)

    莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...

  9. BZOJ2120&2453数颜色——线段树套平衡树(treap)+set/带修改莫队

    题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...

随机推荐

  1. dapi 基于Django的轻量级测试平台八 Docker部署

    QQ群: GitHub:https://github.com/yjlch1016/dapi 采用Docker+Supervisor+Nginx+uWSGI+Django 一.Dockerfile文件: ...

  2. 你没有见过的【高恪】船新版本(SX3000 NAT1 X86魔改)

    最近魔改了高恪SX3000 X86,做了如下更改: 开启了SSH 集成了插件(酸酸乳.V2RXY.SMB等等) 开启了NAT1 DIY了主题 精简了官方内置的无用应用和模块 截图(建议右击图片,在新标 ...

  3. P2214 [USACO14MAR]哞哞哞Mooo Moo

    链接:Miku ---------------------- 这道题还是个背包 --------------------- 首先看一下声音的组成,对于每一个农场的声音,它是由两部分组成的 :上一个农场 ...

  4. 并查集find,merge操作

    一.find操作 //find操作路径压缩版 inline int find(int x){ if(fa[x]==x) return x; int t=find(fa[x]); fa[x]=t; re ...

  5. 静态库&动态库&导入库

    我遇到的问题 先贴一个StackOverflow上的问题 上面的问题让我知道了更多动态库的知识. 我需要使用一个声音库(irrKlang)为2d游戏提供声音,我使用的编译器是mingw-w64,但是i ...

  6. 2.Android网络编程-web介绍以及Tomcat安装使用

    1.CS和BS CS:Client/Server 客户端和服务器,这种软件往往需要安装.比如QQ.迅雷.播放器. 优点 :  可以减轻服务器端压力,将部分代码写到客户端,并且界面很美观. 缺点 :  ...

  7. (转)java 多线程 对象锁&类锁

    转自:http://blog.csdn.net/u013142781/article/details/51697672 最近工作有用到一些多线程的东西,之前吧,有用到synchronized同步块,不 ...

  8. JN_0012:win10的开机启动文件夹

    1,登录所有用户时都能开机启动的启动文件夹.所有用户通用的开机启动文件夹地址是 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp ...

  9. JavaScirpt 认识DOM和BOM (汇总)

    将HTML代码分解为DOM节点层次图 DOM节点有: 1. 元素节点:上图中<html>.<body>.<p>等都是元素节点,即标签. 2. 文本节点:向用户展示的 ...

  10. Linux查看系统硬件信息命令

    Linux查看系统硬件信息命令 查看磁盘类型(是否SSD) cat /sys/block/sda/queue/rotational code:0 SSD盘 code:1 SATA盘 查看物理CPU个数 ...