CF1919E

news/2024/11/17 6:23:03/文章来源:https://www.cnblogs.com/LCat90/p/18436225

给定长度为 \(n\) 的数列 \(p\),求有多少个长度为 \(n\) 的数列 \(a\) 满足:\(\forall i\in[1,n],|a_i|=1\);其前缀和数组排序后恰为数列 \(p\)\(\sum n\leq 5000\)

这个题真的抽象,还是先不管了。


Conclusion

  • 用折线图观察操作。

  • 自定义统一操作生成最终答案。

  • 题外话:感觉连续段 dp 也可做?https://www.luogu.com.cn/article/i8kmk5tr


给你一个长为 \(n\) 的非负整数序列 \(a\),求有多少区间 \([l,r]\) 满足 \(\text{popcount}(\max\limits_{i=l}^r a_i)=\text{popcount}(\min\limits_{i=l}^r a_i)\)\(1\le n\le 10^6,0\le a_i\le 10^{18}\)

Conclusion

  • Min/Max 分治模型:

所以这个题我们 \(i\)\(mid\)\(l\) 走,动态指针维护 \(p,q\),然后分别计算这三段的贡献。(对于每个 \(l\) 计算合法的 \(r\)

具体来说每次枚举的就是 \(l'\),然后看 \(r'\)\((mid,p],(p,q],(q,r]\) 分别有多少个即可。最麻烦的是第 2 种计算,这个时候我们讨论是哪一个在左边。

void dfs(int l, int r) {if(l == r) return ans ++, void();int mid = l + r >> 1;dfs(l, mid);dfs(mid + 1, r);pre[mid] = 0; mx[mid] = -1e18, mn[mid] = 1e18;for(int i = mid + 1;i <= r; ++i) mx[i] = max(mx[i-1], a[i]), mn[i] = min(mn[i-1], a[i]), pre[i] = pre[i - 1] + (pc(mx[i]) == pc(mn[i]));// 我们的桶维护 (p1, p2] 的 pop 个数 for(int i = mid, maxn = -1, minn = 1e18, p1 = mid, p2 = mid;i >= l; --i) {maxn = max(maxn, a[i]), minn = min(minn, a[i]);// p1while(p1 < r and maxn >= mx[p1 + 1] and minn <= mn[p1 + 1]) {++p1; --cnt1[pc(mx[p1])], --cnt2[pc(mn[p1])];}// p2while(p2 < r and (maxn >= mx[p2 + 1] or minn <= mn[p2 + 1])) {++p2; ++cnt1[pc(mx[p2])], ++cnt2[pc(mn[p2])];}// 1. <= p1if(pc(maxn) == pc(minn)) ans += p1 - mid;// 2. p1 < x <= p2,也就是一边 max 一边 min,比较有难度,分讨 maxmin 在哪边 if(maxn >= mx[p2]) // max 在左边 ans += cnt2[pc(maxn)]; // minelse // min 在左边ans += cnt1[pc(minn)];// 3. > p2,max/min 都在右边,左边完全不影响 ans += pre[r] - pre[p2]; // 那么就看 max 和 min pc 相等的 r' 个数即可 }memset(cnt1, 0, sizeof cnt1); memset(cnt2, 0, sizeof cnt2);
}

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

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

相关文章

信息学奥赛复赛复习05-CSP-J2020-01优秀的拆分-对数函数、自然对数、以2为底的对数、幂函数、打表

PDF文档公众号回复关键字:202409271 2020 CSP-J 题目1 优秀的拆分 [题目描述] 一般来说,一个正整数可以拆分成若干个正整数的和 例如,1=1,10=1+2+3+4 等。对于正整数 n的一种特定拆分,我们称它为“优秀的”,当且仅当在这种拆分下,n被分解为了若干个不同的 2 的正整数次幂…

【蓝桥杯】“萌新首秀”全国高校新生编程排位赛2

1.世上有10种人 题目 世上有10种人 代码#include using namespace std; int main() {cout<<2;return 0; }2.01切换 题目 01切换 题目分析 直接判断字符串最后一个字符是0还是1就好了 代码#include using namespace std; int main() {string str;cin>>str;int l =…

Avalonia如何与通用主机Host集成实现MsDI

如果想在Aavalonia使用IOC,目前我能想到的就是使用Prism或者是MsDI,Prism内部使用的是DryIoc,这个和WPF几乎没什么差别,那如果我想使用微软实现的Ioc呢,也是可以的,实现方式其实很简单,就是使用IHost,其中依赖有两个库 Microsoft.Extensions.DependencyInjectionMicros…

软工第一次结对作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13261这个作业的目标 学习使用原型软件,辅助完成软件工程的前期任务学号 102201137结对成员学号 102201137 102201237原型链接 https…

C#爬取动态网页上的信息:B站主页

目录简介获取 HTML 文档解析 HTML 文档测试参考文章 简介 动态内容网站使用 JavaScript 脚本动态检索和渲染数据,爬取信息时需要模拟浏览器行为,否则获取到的源码基本是空的。爬取步骤如下:使用 Selenium 获取渲染后的 HTML 文档 使用 HtmlAgilityPack 解析 HTML 文档新建项…

基于 LangChain 的自动化测试用例的生成与执行

在前面的章节中,分别介绍了 Web、App、接口自动化测试用例的生成。但是在前文中实现的效果均为在控制台打印自动化测试的用例。用例需要手动粘贴,调整之后再执行。 那么其实这个手动粘贴、执行的过程,也是可以直接通过人工智能完成的。 应用价值通过人工智能代替人工操作的部…

数字孪生赋能BMS:开启电池管理新纪元

这几天,全世界的媒体几乎都在报道黎巴嫩爆炸案。原本此类地缘冲突的影响力是较为有限的,但是这次的事件不太一样:这次爆炸的,是几千个传呼机。这一事件迅速引发了全球范围内对于电子设备安全性的广泛关注:随着社会日益依赖各种高科技产品,从日常通信到交通出行,人们开始…

20240927

Fun is Counting 我们可以发现数组 \(a\) 必须是 \(x\) 或 \(x - 1\),然后分类讨论即可 #include <bits/stdc++.h>using namespace std;#define int long longconst int N = 1e6 + 5, mod = 998244353;int inv[N], f[N], g[N], t, n, a[N];int C(int a, int b) {if (a &l…

海报作业

海报主题:知识的力量设定: 目标:强调教育和知识对个人成长和社会发展的重要性 设计构思:1. 色彩:选择明亮且有活力的颜色,如蓝色和黄色,吸引眼球并传达积极的情绪。图像: 中心可以用一棵大树象征知识之树,树冠由书籍组成。 在树下,可以画出一群不同年龄和背景的人在学…

驱动导致win蓝屏(蓝屏code: 0x9f)

描述:在9月27日12点35分24秒系统发生蓝屏通过系统事件日志来看发现发现从发生蓝屏开始到下一次开机之间相隔4分钟左右 继续分析dump日志,此次蓝屏代码为0x9f通过dump日志来看,造成此次蓝屏的原因是驱动程序处于不一致或无效的电源状态。 In Windows Vista and later version…

wireshark抓不到TLS1.3数据包中证书的解决方案

近日工作中遇到需要分析使用TLS1.3协议进行通信的数据包的情况,但使用wireshark进行分析发现不能抓到服务端证书,感到诧异遂设法解决 这篇博客给出解决方案,和简单的原理分析近日工作中遇到需要分析使用TLS1.3协议进行通信的数据包的情况,但使用wireshark进行分析发现不能抓…