炼石计划 NOIP 模拟赛 #20

news/2024/11/16 12:53:04/文章来源:https://www.cnblogs.com/wyyqwq/p/18549273

A.

\(kx + (\sum_{i=1}^{k} a_i - 1) \times y = k(x - y) + y \times \sum_{i=1}^{k} a_i\)

\((a_1 - 1) * 1 + (a_2 - 1) * (a_1 - 1) * 1 + (a_3 - 1) * (a_2 - 1) * (a_1 - 1) * 1\)

$ \prod_{i=1}^{k} a_i > N$

两数和相等时乘积最大,因此 \(a\) 数组中任意两个数的差的绝对值小于等于1(一定是形如 \(p, p + 1\))。

设有 \(t\)\(p\)

\(p^t \times (p + 1) ^ {k-t} > N\)

\(k(x - y) + y \times (t \times p + (k - t) \times (p + 1)) = k(x-y) + y \times (k \times p + k - t)\)

变成了满足一式的情况下要求二式最小。

枚举 \(k\)\(\log N\),可以再枚举一个 \(t\),再对 \(p\) 二分。

时间复杂度 \(\log ^4 N\)

代码
#include<bits/stdc++.h>
#define int __int128
using namespace std;const int N = 1e6 + 7;
const int M = 61;
const int inf = 1e20;
void write(int x)
{if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10+'0');return;
}
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0' && ch<='9')x=x*10+ch-'0',ch=getchar();return x*f;
}
signed main() {freopen("dice.in", "r", stdin);freopen("dice.out", "w", stdout);int N, x, y;N = read(), x = read(), y = read();int ans = inf;for(int k = 1; k <= M; k ++) {int l = 0, r = inf;for(int t = 1; t <= k; t ++) {int l = 0, r = inf;int res;while(l <= r) {int mid = l + r >> 1;int flag;int now = 1;int ck = 1;for(int i = 1; i <= t; i ++) {now = now * mid;if(now > N) {ck = 0;break;}}if(!ck) flag = 1;if(ck) {for(int i = 1; i <= k - t; i ++) {now = now * (mid + 1);if(now > N) {ck = 0;break;}}}if(!ck) flag = 1;if(ck && now > N) flag = 1;else if(ck) flag = 0;if(flag) {res = mid;r = mid - 1;}else l = mid + 1;}// cout << k * (x - y) + y * (k * res + k - t) << endl;ans = min(ans, (k * (x - y) + y * (k * res + k - t)));}}write(ans);
}

B.

好题。

\(L_i (j)\) 表示序列中等于 \(i\) 的第 \(j\) 个出现的位置。我们要找最小的 \(k\),使得 \(L_k(j) - L_k(j-1) > x\),记 \(f_i\) 表示 \(L_i(j) - L_i(j-1)\) 的最大值, \(G(i)\) 表示 \(\max_{j=1}^{i}f(j)\),要求的就是最小的 \(k\) 使得 \(G(k) > x\)

对于交换 \(a_p, a_{p+1}\),找到 \(x, y\) 满足 \(L_{a[p]}(x) = p, L_{a_[p+1]}(y) = p + 1\)\(L_{a[p]}[x] ++,L_{a[p + 1]}[y] --\)。然后用线段树维护 \(G\),每次查询二分即可,时间复杂度 \(O(q\log^2n)\)

代码
#include<bits/stdc++.h>
using namespace std;const int N = 5e5 + 10;int a[N];struct tree {int l, r;int mxx;
}T[N << 2];void build(int l, int r, int rt = 1) {T[rt].l = l, T[rt].r = r;if(l == r) {return;}int mid = l + r >> 1;build(l, mid, rt << 1);build(mid + 1, r, rt << 1 | 1);T[rt].mxx = max(T[rt << 1].mxx, T[rt << 1 | 1].mxx);
}
void modify(int pos, int x, int rt = 1) {if(T[rt].l == T[rt].r) {T[rt].mxx = x;return;}int mid = T[rt].l + T[rt].r >> 1;if(pos <= mid) modify(pos, x, rt << 1);else modify(pos, x, rt << 1 | 1);T[rt].mxx = max(T[rt << 1].mxx, T[rt << 1 | 1].mxx);
}
int query(int l, int r, int rt = 1) {if(l <= T[rt].l && r >= T[rt].r) {return T[rt].mxx;}int mid = T[rt].l + T[rt].r >> 1;int ans = -1;if(l <= mid) ans = max(ans, query(l, r, rt<< 1));if(r > mid) ans = max(ans, query(l, r, rt << 1 | 1));return ans;
}
set<int> L[N];
multiset<int> dis[N];void ins(int x) {auto it = L[a[x]].lower_bound(x);int r = *it, l = *(--it);L[a[x]].insert(x);dis[a[x]].erase(dis[a[x]].lower_bound(r - l - 1));dis[a[x]].insert(r - x - 1);dis[a[x]].insert(x - l - 1);modify(a[x] + 1, *dis[a[x]].rbegin());
}
void del(int x) {L[a[x]].erase(x);auto it = L[a[x]].lower_bound(x);int r = *it, l = *(--it);dis[a[x]].insert(r - l - 1);dis[a[x]].erase(dis[a[x]].lower_bound(r - x - 1));dis[a[x]].erase(dis[a[x]].lower_bound(x - l - 1));modify(a[x] + 1, *dis[a[x]].rbegin());
}
int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);freopen("star.in", "r", stdin);freopen("star.out", "w", stdout);int n, q;cin >> n >> q;build(1, n + 1);for(int i = 0; i < n; i ++) {L[i].insert(0), L[i].insert(n + 1);dis[i].insert(n + 1);modify(i + 1, n + 1);}for(int i = 1; i <= n; i ++) {cin >> a[i];ins(i);}while(q --) {int x, y;cin >> x >> y;if(x == 1) {del(y);del(y + 1);swap(a[y], a[y + 1]);ins(y);ins(y + 1);}else {int l = 1, r = n;int ans = n + 1;while(l <= r) {int mid = l + r >> 1;if(query(1, mid) >= y) {ans = mid;r = mid - 1;}else l = mid + 1;}cout << ans - 1 << endl;}}
}

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

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

相关文章

golang: 在线上用nginx部署应用

一,启动应用: 1,编译程序 $ go build 2,用nohup启动应用的二进制程序 $ nohup /data/goapp/industry/industry >> /data/logs/gologs/back.log 2>&1 & [1] 4896 3,检查应用是否启动: $ ss -lntp | grep 3000 LISTEN 0 4096 0.0.0.0:3000 …

go fiber:路由中间件

一,目录结构:二,代码 1,中间件代码 package middlewareimport ("fmt""github.com/gofiber/fiber/v2""industry/config" )// token校验 func CheckUser(c *fiber.Ctx) error {token:=c.Query("token")fmt.Println("token:"…

20222327 2024-2025-1 《网络与系统攻防技术》实验六实验报告

一、实验内容 学习掌握了Metasploit工具的使用,具体的操作总结来说就是Search-Use-Show-Set-Exploit/run 学习了利用相关漏洞进行模拟攻击的操作,对防范恶意攻击有了一些认识(安装杀软,不要点击陌生网站、文件链接等) 二、实验过程 1、前期渗透 ①主机发现(可用Aux中的ar…

快速量产低功耗 4G 定位方案?Air201 模组来搞定!

今天我们来了解的是Air201模组快速量产低功耗 4G 定位方案,希望大家有所收获。今天我们来了解的是Air201模组快速量产低功耗 4G 定位方案,希望大家有所收获。 寻寻觅觅低功耗4G定位方案? 一个Air201就够了! ——定位准、体积小、功耗低,助力行业客户快速量产! 01 Air201是…

如何挑选海外4G模组?这里有秘籍!

今天我会告诉大家如何挑选海外4G模组,我会把优势给贴出作为参考。去过国外的都知道国外4G网络各种状况实在让人无力吐槽,做海外设备的朋友,是时候了解一下Air780EEN/EEU/EEJ系列海外模组——集成vSIM功能,最大程度解决海外联网稳定性的问题。今天我会告诉大家如何挑选海外4…

无线基础配置

所需配置 AC1 [AC6605]vlan batch 10 20 100 [AC6605]interface GigabitEthernet 0/0/1 [AC6605-GigabitEthernet0/0/1]port link-type trunk[AC6605-GigabitEthernet0/0/1]port trunk allow-pass vlan 10 20 100 [AC6605]interface Vlanif 100 [AC6605-Vlanif100]ip address 1…

基于YOLO实现滑块验证码破解

申明:本案例中的思路和技术仅用于学习交流。请勿用于非法行为。 一、训练模型 详细训练步骤和导出模型参考 滑块验证码识别模型训练 二、模型试用 通过YoloDotNet运行模型,计算出滑块缺口位置后用RESTful格式的接口返回坐标给其它应用调用。YoloDotNet案例参考 物体检测框架Y…

本地oracle数据库实例启动报错 TNS-12545 TNS-12560 TNS-00515

oracle 实例启动报错 TNS-12545 TNS-12560 TNS-00515 具体提示如下: 监听该对象时出错: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host.docker.internal)(PORT=1521))) TNS-12545: 因目标主机或对象不存在, 连接失败 TNS-12560: TNS: 协议适配器错误 TNS-00515: 因目标主机…

jenkinsfile

k8s集群中用的jenkinsfile部署 java后台项目# x项目 test-java-eladmin-ci// harbor镜像仓库地址和密码信息 def registry = "harbor.solomon.com" // jenkins中定义的连接harbor的用户名密码凭据 def registry_se = "d2318c77-8a32-4618-bced-d6cabb0454b4&quo…

[网鼎杯 2018]Fakebook 1

[网鼎杯 2018]Fakebook 1 打开实例发现为博客列表,有登录跳转和类似注册或者添加博客的join跳转查看源码无果 打开登陆页,尝试万能密码没有用,尝试从join入手,用admin去随便join一个显示博客不存在 期间尝试多种sql注入方法均没有效果,转去其他方向 尝试dirsearch目录爆破…

【Adobe Premiere pro 2025下载与安装教程】

1、安装包「Adobe Premiere Pro 2025」: 链接:https://pan.quark.cn/s/e93beb96accb 提取码:CGY2 2、安装教程 1) 下载软件安装包,打开安装目录,双击Setup.exe安装,弹出安装对话框2) 选择安装目录,尽量不要选C盘,点击继续3) 等待安装过程完成,点…

人工智能同样也会读死书----“过拟合”

上一篇:《“嵌入”在大语言模型中是解决把句子转换成向量表示的技术》 序言:我们常常会说某某人只会“读死书”,题目稍微变一点就不会做了。这其实是我们人类学习中很常见的现象。可是你知道吗?人工智能其实更容易“读死书”。不过在人工智能领域,我们有个听起来高大上的说…