20251014 杂题

news/2025/10/14 21:58:03/文章来源:https://www.cnblogs.com/Dreamerseve/p/19142108

图片

atcoder一类常见的折半问题.

枚举子集和枚举超集可以均摊,改为枚举一半子集,一半超级.

具体地:

图片

其中枚举子集我写的太劣了还T了

图片


P7252 [JSOI2011] 棒棒糖

区间查询绝对众数.

首先直接随机化就可以过,每次随机一个数钦定他是绝对众数,正确率很高.

然后一种确定性做法是回滚莫队(不是)

log做法是:

弄一个可持久化线段树,权值开,,每个版本对应下标前缀和

然后扫描线直接查即可

图片

点击查看代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;// 权值主席树(persistent segment tree)实现
// 值域 [1..MAXV]
const int MAXN = 50000 + 5;
const int MAXV = 50000; // 按题意 c_i <= 5e4
// 估计节点上限: n * (log2(MAXV)+2) 安全取 20 * MAXN
const int MAXNODE = MAXN * 20;int lc[MAXNODE], rc[MAXNODE], sumv[MAXNODE];
int roots[MAXN]; // roots[i] 表示前缀 i 的版本(i 从 0 开始,roots[0] = 0)
int tot = 1; // 0 号节点为空节点,节点编号从 1 开始int newnode() {// 返回一个新节点编号(已清零)++tot;lc[tot] = rc[tot] = 0;sumv[tot] = 0;return tot;
}// 在 prev 版本的树上插入位置 pos,返回新版本根节点编号
int update(int prev, int l, int r, int pos) {int cur = newnode();lc[cur] = lc[prev];rc[cur] = rc[prev];sumv[cur] = sumv[prev] + 1;if (l == r) {return cur;}int mid = (l + r) >> 1;if (pos <= mid) {lc[cur] = update(lc[prev], l, mid, pos);} else {rc[cur] = update(rc[prev], mid + 1, r, pos);}return cur;
}// 在区间 [l,r] 中,比较两个版本 u (root_r) 和 v (root_{l-1}),长度 len,寻找多数元素的值或 0
int query_major(int u, int v, int l, int r, int len) {if (l == r) {int cnt = sumv[u] - sumv[v];if (cnt > len / 2) return l;else return 0;}int mid = (l + r) >> 1;int cntLeft = sumv[ lc[u] ] - sumv[ lc[v] ];if (cntLeft > len / 2) {return query_major(lc[u], lc[v], l, mid, len);}int total = sumv[u] - sumv[v];int cntRight = total - cntLeft;if (cntRight > len / 2) {return query_major(rc[u], rc[v], mid + 1, r, len);}return 0;
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n, m;if (!(cin >> n >> m)) return 0;vector<int> a(n + 1);for (int i = 1; i <= n; ++i) cin >> a[i];// 初始化空节点 0 的数据(tot 从 1 开始,所以 0 作为空节点)lc[0] = rc[0] = 0;sumv[0] = 0;// 确保 tot >= 1 且节点 1 留作第一个 newnode() 的结果tot = 1; lc[1] = rc[1] = 0;sumv[1] = 0;roots[0] = 0;// 构建每个前缀的版本for (int i = 1; i <= n; ++i) {// 在 roots[i-1] 上插入 a[i]roots[i] = update(roots[i-1], 1, MAXV, a[i]);}while (m--) {int l, r;cin >> l >> r;int len = r - l + 1;int ans = query_major(roots[r], roots[l - 1], 1, MAXV, len);cout << ans << '\n';}return 0;
}
---

P3594 [POI 2015 R3] 狼坑 Trous de loup

无敌好题.

枚举区间,再枚举减去的东西 n^3

枚举改成双指针 n^2

发现中间删除那一段是
图片

可以用单调队列维护.

双指针过程中,右指针移动时维护单调,左指针移动时维护合法

#include<bits/stdc++.h>
using namespace std;#define maxn 2000005
long long n, p, d, ans;
long long a[maxn], sum[maxn];
int l, h, t, q[maxn];signed main() {if (!(cin >> n >> p >> d)) return 0;for(int i = 1; i <= n; ++ i) {if (!(cin >> a[i])) return 0;sum[i] = sum[i - 1] + a[i];}ans = d, q[t] = d, l = 1;for(int i = d + 1; i <= n; ++ i) {while(h <= t && sum[i] - sum[i - d] > sum[q[t]] - sum[q[t] - d]) -- t;q[++ t] = i;while(h <= t && sum[i] - sum[l - 1] - sum[q[h]] + sum[q[h] - d] > p) {++ l;while(h <= t && q[h] - d + 1 < l) ++ h;}ans = max(ans, (long long)i - l + 1);}cout << ans << endl;return 0;
}

是单调的

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

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

相关文章

SQL在智能自动化业务场景中的应用 - Irving11

一、连续登录问题关键逻辑: 连续日期(如 2023-01-01、2023-01-02、2023-01-03)减去各自的排序序号(1、2、3)后,结果都是 2023-12-31,因此会被分到同一组 通过分组统计天数,即可筛选出连续登录的用户2、总结:整…

实用指南:【53道前端必考】JavaScript 基础面试题

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

完整教程:Android Framework默认给应用添加dangerous级别权限

完整教程:Android Framework默认给应用添加dangerous级别权限pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

拼接字符串要求字典序最小

好唐啊,这种题我目前已经知道三道一样的了,无聊记录一下。 传递性可以通过 题解:P1012 [NOIP 1998 提高组] 拼数 中的转小数来证明,而最优性就是,我们本来就考虑的相邻两个 \(i,j\) 谁在前面更优,显然把,当然我…

20251013 模拟赛 总结

考虑每个铁路拆除造成的影响. 如果在开始或者结束,如果旁边的铁轨被拆除,连续段数-1,否则无影响. 如果不在开始结尾. 如果两边都被拆了,连续段数-1 如果一边被拆了,不变. 两边都没被拆,答案+1. 当然直接线段树做也是没…

高级语言作业第一次随笔

这个作业属于 https://edu.cnblogs.com/campus/fzu/gjyycx 这个作业的要求在 https://edu.cnblogs.com/campus/fzu/gjyycx/homework/13558 学号:102500415 姓名:林帅前 一.安装dev.c 1.过程 (1)先打开安装包并解压(2…

.net Core资料

.net Core资料ASP.NET Core入门到精通 .NET项目中NLog的配置与使用 .NET Core 学习资料精选 教程:ASP.NET Core 入门 C#/.NET/.NET Core推荐学习书籍 如何学习CORE .net core中使用Autofac Autofac在.…

C#实现开机自启动应用多种方式

在 Windows 操作系统中,我们可以通过多种方式来实现程序的开机自启,下面将为大家详细介绍几种常用的方法及其对应的代码示例,同时也会提及一些可能遇到的问题及待解决事项。注册表配置开机自启Startup文件夹任务计划…

吾の歌单

吾の歌单英文: 《String Theocracy》神权政治之绳 《And Then Is Heard No More》句末无声 《From a Place of Love》来源于爱 《Iron Lotus》铁血莲华 《Children of the City》 都市之子 《Gone Angels》别离的天使…

什么是反应式编程 - 详解

什么是反应式编程 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

SDL3和其附属的编译记录

SDL3的构建记录 环境 windows11 + msys2 + gcc + cmake 编辑器使用vscode,插件为cmake tool,c++和clangd。 子模块 神奇的 sdl3-mixer 还在设计阶段 vcpkg 没有,如果从0构建需要的版本 vcpkg 也不支持。 正常情况下…

Qwen多模态系列模型笔记—Qwen2-VL

方法 Qwen2-VL系列包含三种体量的模型,分别是Qwen2-VL-2B, Qwen2-VL-7B, Qwen2-VL-72B。表1列举出这些模型的超参数和重要信息。值得注意的是,这三个模型视觉编码器始终都采用675M参数量的ViT,没有因模型而改变。此…

k8s Service Nodeport 用于集群外部访问

k8s Service Nodeport 用于集群外部访问 热爱孤独生活

WPF 调用 ChangeWindowMessageFilterEx 修改指定窗口 (UIPI) 消息筛选器的用户界面特权隔离

一、回顾 上一篇博客:记录一下 WPF进程 SendMessage 发送窗口消息进行进程间通信,存在进程权限无法接受消息的问题 - wuty007 - 博客园 说到了 发送端是普通权限的窗体 给 接收端是 管理员权限的窗体,通过 Win32 A…

机器学习比赛

机器学习比赛基本上来就用sklearn的随机森林, 和xgboost库. 2个算法先跑一下.基本能拿到一个能看的结果. 速度都很快. 基本30秒内跑完. 然后再考虑其他的特征工程, 深度学习等等..

牙科诊所借力AI营销4个月创收13万

一个叫Jordan的牙科营销老板用AI在4个月里赚了13万。我来说说他具体怎么做的。 Jordan发现一个问题:英国90%的牙科诊所还在用老旧的预约系统,效率很低。他决定用AI来解决这个问题。 📌 他的做法搭建AI预约系统• 以…

10月14日日记

1.今天上午进行工程实训课程,下午学习英语视听说 2.明天学习离散数学 3.只知道把代码用try-catch包起来,但不清楚应该捕获什么异常,什么时候该抛出(throws),什么时候该处理。搞清楚Error和Exception的区别,Runt…

P4653 [CEOI 2017] Sure Bet

题目描述 现在有 n 个A类灯泡和 n 个B类灯泡,每个灯泡都有各自的权值。 我们将这些灯泡分为 n 组,每组包含一个来自A类的灯泡和一个来自B类的灯泡。 你可以从中选取任意个灯泡,每选取一个灯泡需要花费 1 的代价。 在…

PHP虚拟主机测试页面

<?php /*** PHP 虚拟主机测试页面* 说明:用于测试 PHP 是否正常工作及查看服务器基本信息*/// 设置页面编码 header("Content-Type: text/html; charset=utf-8"); ?> <!DOCTYPE html> <ht…