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

这一题是一个关于多次查询区间状态的一个问题,暴力肯定会超限,但是可以用莫队来优化暴力。

莫队的思想就是,用上一个区间的状态来更新当前区间的状态。

问题就是状态怎么更新以及求出当前区间的状态、也就是有多少对相同的袜子以及总共有多少袜子,通过这两个值可以求出来概率。

如何求出来有多少对相同的袜子,只需要遍历一遍当前区间记录每个颜色出现了多少次,当到了某个位置的时候,只需要知道之前的袜子有多少能跟自己配对即可。从区间中删除某个袜子也是如此,减去区间中跟自己颜色相同的袜子即可。

解释的不太好,看代码吧还是。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl "\n"
//#define x first
//#define y second
#define int long long
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<int, string> pis;
typedef struct{int l, r, i;
}aa;
const int mod = 1e9 + 7;
const int N = 1e6+ 10;
int dx[] = {-1, 0, 1, 0, -1, 1, 1, -1};
int dy[] = {0, 1, 0, -1, 1, 1, -1, -1};
int n, m;
int o[N], f[N][2];
aa p[N];
int x, y;
int st[N], s;inline void add(int a) // 加上当前位置
{// 首先需要知道之前一共有多少袜子颜色跟自己相同,就是当前袜子可以跟之前的组成多少对。s += st[o[a]] ++;// 加完之后把这个颜色的袜子加一
}
inline void del(int a) // 减去当前位置
{// 先是把当前的袜子从区间内减去,// 然后需要知道区间内一共有多少袜子颜色跟自己相同,就是当前袜子可以跟区间内的袜子组成多少对。s -= -- st[o[a]];
}
inline void query(int i, int l, int r) // 记录当前区间的概率, i表示是第i个问题,因为要按顺序输出
{if(s == 0)  // 特判不能组成袜子 {f[i][0] = 0, f[i][1] = 1;return ;}int k = r - l + 1; k = k * (k - 1) / 2; // 这两行通过组合数求出不分颜色可以组成多少对袜子。int a = __gcd(k, s); // 化简为最简分数,需要计算出来最大公约数。
//	cout << s << " " << k << " " << a << endl;f[i][0] = s / a, f[i][1] = k / a; // 记录分子、分母。
}
int id[N];
inline void sovle()
{st[0] = 1;cin >> n >> m;int len = sqrt(n);for(int i = 1; i <= n; i ++){cin >> o[i];id[i] = (i - 1) / len + 1;} for(int i = 0; i < m; i ++){cin >> p[i].l >> p[i].r;p[i].i = i;}stable_sort(p, p + m, [&](aa a, aa b){  // 莫队特殊的排序方式if(id[a.l] == id[b.l]) {if(id[a.l] & 1 == 1) return a.r < b.r;else return a.r > b.r;}elsereturn id[a.l] < id[b.l];	});int l = 0, r = 0, k = 0;for(int i = 0; i < m; i ++) {while(r > p[i].r) del(r --);while(r < p[i].r) add(++ r);while(l > p[i].l) add(-- l);while(l < p[i].l) del(l ++); // 这四部可以通过之前的区间移动到当前区间,在移动的过程中进行计算。query(p[i].i, p[i].l, p[i].r); // 记录当前区间的概率}for(int i = 0; i < m; i ++){cout << f[i][0] << "/" << f[i][1] << endl;}
}signed main(void)
{IOS;int t = 1;
//	cin >> t;while(t --) sovle();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/151307.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloudAlibaba实战-nacos集群部署

写在前面&#xff1a;在学习阶段&#xff0c;我们想快速学习SpringCloudAlibaba功能&#xff0c;但总是花费大量时间跟着视频或博客做组件配置。由于版本的更迭&#xff0c;我们学习时的组件版本很可能和作者的不一致&#xff0c;又或者是各自环境不一&#xff0c;只能一坑又一…

【Javascript】输入一个数字计算一个数的阶乘

function test(n){if(n1){return n;}else{return n*test(n-1);}} console.log(test(3));首先判断参数等于1的时候&#xff0c;结果返回他的自身 如果不等于1则返回n*test(n-1) 传入参数为3&#xff0c;3*test(2) test(2)又调用了一遍函数&#xff0c;2*test&#xff08;1&…

Android开发知识学习——HTTP基础

文章目录 学习资源来自&#xff1a;扔物线HTTPHTTP到底是什么HTTP的工作方式URL ->HTTP报文List itemHTTP的工作方式请求报文格式&#xff1a;Request响应报文格式&#xff1a;ResponseHTTP的请求方法状态码 HeaderHostContent-TypeContent-LengthTransfer: chunked (分块传…

CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试

CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试 文章目录 CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试一、前言二、Windows运行时软plc配置编程1、安装Windows下的运行时扩展包&#xff08;非必要&#xff09;2、创建项目2.1、创建标准…

ue5 右击.uproject generator vs project file 错误

出现如下错误 Unable to find valid 14.31.31103 C toolchain for VisualStudio2022 x64 就算你升级了你的 vs installer 也不好使 那是因为 在C:\Users\{YourUserName}\AppData\Roaming\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml 这个缓存配置文件中写死了 14…

ubuntu tools

1 cloc calculate lines of your code sudo apt-get install cloccloc ./file

轻量封装WebGPU渲染系统示例<3>-纹理立方体(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/version-1.01/src/voxgpu/sample/ImgTexturedCube.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 5…

Pytorch入门实例

数据集是受教育年限和收入,如下图 代码如下 import torch import numpy as np import matplotlib.pyplot as plt import pandas as pd import torch.nn as nn import torch.optim as optimdata pd.read_csv(./Income.csv)X torch.from_numpy(data.Education.values.reshape…

速卖通商品详情API接口(标题|主图|SKU|价格|商品描述)

速卖通商品详情接口的用途是获取商品信息。 速卖通商品详情接口可以获取到商品的完整详细信息&#xff0c;包括商品名称、价格、图片、描述、规格、库存等&#xff0c;这些信息能够帮助用户了解商品特点、性能和市场定位&#xff0c;并做出购买决策。同时&#xff0c;通过使用…

【计算机网络】认识协议

目录 一、应用层二、协议三、序列化和反序列化 一、应用层 之前的socket编程&#xff0c;都是在通过系统调用层面&#xff0c;如今我们来向上打通计算机网络。认识应用层的协议和序列化与反序列化 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应…

自动驾驶,从“宠儿”走进“淘汰赛”

从“一步到位”到场景、技术降维。从拼落地路径&#xff0c;到拼雷达、算力&#xff0c;再到如今的性价比之争&#xff0c;自动驾驶似乎变得愈发“接地气”。 作者|斗斗 编辑|皮爷 出品|产业家 比起去年&#xff0c;黄文欢和张放今年显得更加忙碌。 “自动驾驶赛道&…

nrf52832 开发板入手笔记:资料搜集

前言 最近翻箱&#xff0c;发现了两块几年前买的 NRF52832 与 NRF52840 的开发板&#xff0c;打算搭个 BLE 的开发环境 NRF52832 与 NRF51822 之前用过&#xff0c; NRF52840 没有用过&#xff0c;好像是 BLE4 与 BLE5 的区别吧 相关介绍 除了开发板&#xff0c;最重要的还是…