纪念自己独立完成的一道省选题(菜鸡如我只会看题解qwq)

还算是一道比较裸的莫队题把,比有的题目简单很多,也很好想怎么O(1)转移,比别的题就多了一个组合数计算(还有gcd??),还没算%意义下,也是很良心了

int get(int x){
if(x<=1)return 0;
return (int)(1.0*x*(x-1)*1.0/2.0);
}

直接获得当前的可能情况。

然后就是莫队的一套全家桶模板了。话说,莫队分块真的很玄学!

对了 题目还贴心的提示了特判问题 luogu不要太好。。!~~

这几天写了一些莫队题。莫队入门的话还是去写那些区间不重复数个数把,应该是最简单的题了(如果不卡莫队的话)然后对转移的add,del函数自己要推一下,然后套个全家桶就完事了

#include<bits/stdc++.h>
#define swap(a,b) {a^=b;b^=a;a^=b}
#define rep(a,b,c) for(int a=b;a<=c;a++)
#define per(i,n,a) for (int i=n;i>=a;i--)
#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a)<(b)?(a):(b)
#define PII pair<int,int>
#define yxdl(qt) priority_queue<int,vector<int>,greater<int> >qt
#define xgd(qt) priority_queue<int,vector<int>,less<int> >qt
#define INF 0x3f3f3f3f
#define lowbit(x) x & -x
#define cs(s) freopen(s,"r",stdin)
#define debug(x) printf(" case-->%d ",x );
using namespace std;
typedef long long ll;
const int maxn =50101;
int a[maxn],flag[maxn],n,m,div1,l=0,r,up,down;
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
int get(int x){
if(x<=1)return 0;
return (int)(1.0*x*(x-1)*1.0/2.0);
}
struct uzi
{
int l,r,id;
bool operator<(const uzi &a)const {
return l/div1==a.l/div1?r<a.r:l<a.l;
}
}p[maxn];
void del(int x){
up-=get(flag[a[x]]);
flag[a[x]]--;
if(flag[a[x]]<=1)return;
up+=get(flag[a[x]]);
}
void add(int x){
up-=get(flag[a[x]]);
flag[a[x]]++;
up+=get(flag[a[x]]);
}
struct node
{
int up,down;
}ans[maxn];
int main(){
scanf("%d%d",&n,&m);
rep(i,1,n)scanf("%d",&a[i]);
div1=sqrt(n);
rep(i,1,m){
scanf("%d%d",&p[i].l,&p[i].r);
p[i].id=i;
}
sort(p+1,p+1+m);
int bj[maxn];
int po=0;
rep(i,1,m){
if(p[i].l==p[i].r){ans[p[i].id].up=0;ans[p[i].id].down=1;bj[++po]=p[i].id;}
else{
while(l<p[i].l)del(l++);
while(l>p[i].l)add(--l);
while(r<p[i].r)add(++r);
while(r>p[i].r)del(r--);
ans[p[i].id].up=up;
ans[p[i].id].down=get(r-l+1);
}
}
rep(i,1,m){
if(ans[i].up==0){puts("0/1");continue;}
int qq=gcd(ans[i].up,ans[i].down);
printf("%d/%d\n",ans[i].up/qq,ans[i].down/qq );
}
}

洛谷P1494 【[国家集训队]小Z的袜子】的更多相关文章

  1. 洛谷 P1494 [国家集训队] 小Z的袜子

    题目概述: 小Z把N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬. 你的任务 ...

  2. 洛谷 P1494 [国家集训队]小Z的袜子(莫队)

    题目链接:https://www.luogu.com.cn/problem/P1494 一道很经典的莫队模板题,然而每道莫队题的大体轮廓都差不多. 首先莫队是一种基于分块的算法,它的显著特点就是: 能 ...

  3. 洛谷P1494 [国家集训队]小Z的袜子

    Code: #include<cstdio> #include<iostream> #include<algorithm> #include<cstring& ...

  4. P1494 [国家集训队]小Z的袜子

    题目 P1494 [国家集训队]小Z的袜子 解析 在区间\([l,r]\)内, 任选两只袜子,有 \[r-l+1\choose2\] \[=\frac{(r-l+1)!}{2!(r-l-1)!}\] ...

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

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

  6. P1494 [国家集训队]小Z的袜子(luogu)

    P1494 小Z的袜子 终于了解了莫队算法(更专业的名称Square Root Decomposition of Queries) 莫队算法: 一般来说解决静态(实际上也有修改的但复杂度更高)的离线( ...

  7. P1494 [国家集训队]小Z的袜子(莫队)

    题目链接:https://www.luogu.org/problemnew/show/P1494 题目大意:中文题目 具体思路:计算概率的时候,每一次是区间的移动,每一次移动,记得先将原来的记录的影响 ...

  8. 【luogu P1494 [国家集训队]小Z的袜子】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1494 #include <cstdio> #include <algorithm> ...

  9. luogu P1494 [国家集训队]小Z的袜子 ( 普 通 )

    题目:    链接:https://www.luogu.org/problemnew/show/P1494 题意:一些袜子排成一排,每个袜子有固定的颜色.                        ...

  10. Luogu P1494 [国家集训队]小Z的袜子

    比较简单的莫队题,主要是为了熟练板子. 先考虑固定区间时我们怎么计算,假设区间\([l,r]\)内颜色为\(i\)的袜子有\(cnt_i\)只,那么对于颜色\(i\)来说,凑齐一双的情况个数为: \( ...

随机推荐

  1. SSH出现Connection refused错误

    笔者在使用ssh localhost时出现Connection refused提示,初步判断是22端口未开启服务,也有可能是防火墙未正确配置. 测试 使用netstat | grep 22测试,发现2 ...

  2. AtCoder arc061C Snuke's Subway Trip

    大意: 给你一张无向图,边有种类. 当你第一次/重新进入某种边时费用 + 1 在同一种边之间行走无费用. 求 1 到 n 的最小费用. 嗯...乍一看有一个很直观的想法:记录每个点的最短路的上一条边的 ...

  3. 用 Homebrew 带飞你的 Mac

    文章目录 资料 安装 基本用法 源镜像 Homebrew也称brew,macOS下基于命令行的最强大软件包管理工具,使用Ruby语言开发.类似于CentOS的yum或者Ubuntu的apt-get,b ...

  4. 判断JDK安装成功的方法

    JDK安装成功之后,主要是要写入环境变量

  5. matlab图片 latex显示

    matlab图片另存为bmp格式,用在线网站转换格式为png. 莫要直接另存为jpg格式,在latex中显示,否则图片显示的质量不高.

  6. 截取 还没有读的txt章节 生成新的文件

    package file; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; imp ...

  7. Counted(内存管理机制)

    class Counted { private: unsigned int count_; public: Counted() : count_() { } virtual ~Counted() { ...

  8. 如何自学 Android 的?

    http://android.jobbole.com/83380/ 1. Java知识储备 本知识点不做重点讲解:对于有基础的同学推荐看<Java编程思想>,巩固基础,查漏补全,了解并熟悉 ...

  9. GD32 ------ 使用外部中断,中断函数需要延时才能读到真正电平

    MCU:GD32F103RCT6 中断引脚没有外界上拉电阻 中断配置如下: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFI ...

  10. vbox的桥接网络

    直接连接到了外网上,宿主机可以访问虚拟机,但是虚拟机不可以访问宿主机.缺点:宿主机没有网络时,将不能ping通. 宿主机:win10 网络:无线 虚拟机系统:centos6.5 vbox版本:6.0. ...