2022年多校冲刺NOIP联训测试13 51nod2023省选联训 第三场

news/2024/4/28 14:49:29/文章来源:https://www.cnblogs.com/Chencgy/p/16608061.html

A 隔离

二分答案,简单\(check\)一下即可

code
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<iostream>
#include<random>using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const int maxn = 100005;
inline ll read(){ll x = 0; char c = getchar();while(c < '0' || c > '9')c = getchar();do{x = (x << 3) + (x << 1) + (c ^ 48); c = getchar();}while(c <= '9' && c >= '0');return x;
}
int n, m;
struct node{ll l, r;}d[maxn];
bool cmp(node x, node y){return x.l < y.l;}
bool check(ll mid){ll las = -1e18;int p = 1;for(int i = 1; i <= n; ++i){while(p <= m && d[p].r < las + mid)++p;if(p > m)return false;las = max(las + mid, d[p].l);}return true;
}
int main(){n = read(), m = read();for(int i = 1; i <= m; ++i)d[i].l = read(), d[i].r = read();sort(d + 1, d + m + 1, cmp);ll l = 0, r = 1e18, ans = 0;while(l <= r){ll mid = (l + r) >> 1;if(check(mid))ans = mid, l = mid + 1;else r = mid - 1;}printf("%lld\n",ans);return 0;
}

B 绽放的花火

首先发现维度是假的,只要知道 \(\sum n_i\) 即可

\(f_i\) 表示从 \(i\) 到第 \(i +1\) 号点的期望步数

每次有 \(p\) 的概率到 \(i +1\)\(1 - p\) 的概率到 \(i - 1\) , 到 \(i - 1\) 还需要 \(f_{i -1} + f_i\) 才能到 \(i +1\)

那么 $f_i = 1 + (1 - p) (f_i + f_{i - 1}) $

移项即可得到递推公式, 然后到 \(\sum n_i\) 的期望步数就是 \(\sum f_i\)

code
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<iostream>
#include<random>using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const int maxn = 500005;
const int mod = 1e9 + 7;
inline int read(){int x = 0; char c = getchar();while(c < '0' || c > '9')c = getchar();do{x = (x << 3) + (x << 1) + (c ^ 48); c = getchar();}while(c <= '9' && c >= '0');return x;
}
int n, sum, p;
int f[maxn];
ll qpow(int x, int y){ll ans = 1;for(; y; y >>= 1, x = 1ll * x * x % mod)if(y & 1)ans = 1ll * ans * x % mod;return ans;
}
int main(){int t = read();for(int ask = 1; ask <= t; ++ask){n = read(); sum = 0;for(int i = 1; i <= n; ++i)sum += read();sum = sum - n  + 1;p = read();int invp = qpow(p, mod - 2);f[1] = 1;for(int i = 2; i < sum; ++i)f[i] = 1ll * invp * ((1ll * (1 - p + mod) * f[i - 1] % mod + 1) % mod) % mod;int ans = 0;for(int i = 1; i < sum; ++i)ans = (ans + f[i]) % mod;for(int i = 1; i < sum; ++i)printf("%d ",f[i]);printf("%d\n",ans);}	return 0;
}

C 美化数列

线段树维护等差数列,等比数列,对应加斐波那契数列

等差好处理, 维护首项 \(k\), 以及公差 \(d\), 因为是加法, 所以首项和公差都有可加性

等比数列, 发现公比 \(D\) 是固定的,那么首项就可以直接相加,预处理 \(D^n\) 可以快速求首项, 区间和预处理 \(\sum_{i= 1}^n D^i\)即可

对应加斐波那契, 发现对应区间加一段斐波那契,可以转化为对应区间加上 \(f1\) 倍的从 \(fib_1\) 开始的序列, \(f2\) 倍从 \(fib_2\) 开始的序列, 预处理 \(fib\) 每一项是多少 \(fib_1\)\(fib_2\) 构成的即可快速 \(push\_down\)

码量感人

code
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<iostream>
#include<random>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int maxn = 100005;
const int mod = 19260817;
const int inv2 = 9630409;
inline int read(){int x = 0; char c = getchar();while(c < '0' || c > '9')c = getchar();do{x = (x << 3) + (x << 1) + (c ^ 48); c = getchar();}while(c <= '9' && c >= '0');return x;
}
int fib[maxn], a[maxn], dpow[maxn], sd[maxn], f1[maxn], f2[maxn], sb[maxn], sf1[maxn], sf2[maxn];
int n, m, D;
struct tree{struct node{int sum, k1, d, k2, f1, f2; }t[maxn << 2 | 1];void push_up(int x){t[x].sum = (t[x << 1].sum + t[x << 1 | 1].sum) % mod;}void push_down(int x, int l, int r){int mid = (l + r) >> 1, ls = x << 1, rs = x << 1 | 1;if(t[x].d || t[x].k1){t[ls].d = (t[ls].d + t[x].d) % mod;t[rs].d = (t[rs].d + t[x].d) % mod;int nk = (t[x].k1 + 1ll * (mid + 1 - l) * t[x].d % mod) % mod;t[ls].k1 = (t[ls].k1 + t[x].k1) % mod;t[rs].k1 = (t[rs].k1 + nk) % mod;t[ls].sum = (t[ls].sum + 1ll * (t[x].k1 + 1ll * (mid - l) * t[x].d % mod + t[x].k1) % mod * (mid - l + 1) % mod * inv2 % mod) % mod;t[rs].sum = (t[rs].sum + 1ll * (nk + 1ll * (r - mid - 1) * t[x].d % mod + nk) % mod * (r - mid) % mod * inv2 % mod) % mod;t[x].k1 = t[x].d = 0;}if(t[x].k2){t[ls].k2 = (t[x].k2 + t[ls].k2) % mod;int nk = 1ll * t[x].k2 * dpow[mid + 1 - l] % mod;t[rs].k2 = (nk + t[rs].k2) % mod;t[ls].sum = (t[ls].sum + 1ll * t[x].k2 * sd[mid - l] % mod) % mod;t[rs].sum = (t[rs].sum + 1ll * nk * sd[r - mid - 1] % mod) % mod;t[x].k2 = 0;}if(t[x].f1 || t[x].f2){t[ls].f1 = (t[ls].f1 + t[x].f1) % mod;t[ls].f2 = (t[ls].f2 + t[x].f2) % mod;int len = mid - l + 1 ;t[ls].sum = (t[ls].sum + 1ll * t[x].f1 * sb[len] % mod + 1ll * t[x].f2 * (sb[len + 1] - 1) % mod) % mod;int nf1 = 1ll * t[x].f1 * f1[len + 1] % mod + 1ll * t[x].f2 * f1[len + 2] % mod;int nf2 = 1ll * t[x].f1 * f2[len + 1] % mod + 1ll * t[x].f2 * f2[len + 2] % mod;t[rs].f1 = (t[rs].f1 + nf1) % mod;t[rs].f2 = (t[rs].f2 + nf2) % mod;t[rs].sum = (t[rs].sum + 1ll * nf1 * sb[r - mid] % mod + 1ll * nf2 * (sb[r - mid + 1] - 1) % mod) % mod;t[x].f1 = t[x].f2 = 0; }}void built(int x, int l, int r){if(l == r){t[x].sum = a[l];return;}int mid = (l + r) >> 1;built(x << 1, l, mid);built(x << 1 | 1, mid + 1, r);push_up(x);}void modify_dc(int x, int l, int r, int L, int R, int k, int d){if(L <= l && r <= R){t[x].k1 = (t[x].k1 + k) % mod;t[x].d = (t[x].d + d) % mod;t[x].sum = (t[x].sum + 1ll * (k + 1ll * (r - l) * d % mod + k) % mod * (r - l + 1) % mod * inv2 % mod) % mod;return;}push_down(x, l, r);int mid = (l + r) >> 1;if(L <= mid) {modify_dc(x << 1, l, mid, L, R, k, d);k = (k + 1ll * (mid - max(L, l) + 1) * d % mod) % mod;}if(R > mid) modify_dc(x << 1 | 1, mid + 1, r, L, R, k, d);push_up(x);}void modify_db(int x, int l, int r, int L, int R, int k){if(L <= l && r <= R){t[x].k2 = (t[x].k2 + k) % mod;t[x].sum = (t[x].sum + 1ll * sd[r - l] * k) % mod;return;}push_down(x, l, r);int mid = (l + r) >> 1;if(L <= mid){modify_db(x << 1, l, mid, L, R, k);k = 1ll * k * dpow[mid - max(l, L) + 1] % mod;}if(R > mid)modify_db(x << 1 | 1, mid + 1, r, L, R, k);push_up(x);}void modify_fib(int x, int l, int r, int L, int R, int nf1, int nf2){if(L <= l && r <= R){t[x].sum = (0ll + t[x].sum + 1ll * nf1 * sb[r - l + 1] % mod + 1ll * nf2 * (sb[r - l + 2] - 1) % mod) % mod;t[x].f1 = (t[x].f1 + nf1) % mod;t[x].f2 = (t[x].f2 + nf2) % mod;return;}push_down(x, l, r);int mid = (l + r) >> 1;if(L <= mid){modify_fib(x << 1, l, mid, L, R, nf1, nf2);int len = mid + 2 - max(l, L), lf1 = nf1, lf2 = nf2;nf1 = 1ll * lf1 * f1[len] % mod + 1ll * lf2 * f1[len + 1] % mod;nf2 = 1ll * lf1 * f2[len] % mod + 1ll * lf2 * f2[len + 1] % mod;}if(R > mid)modify_fib(x << 1 | 1, mid + 1, r, L, R, nf1, nf2);push_up(x);}int query(int x, int l, int r, int L, int R){if(L <= l && r <= R)return t[x].sum;push_down(x, l, r);int mid = (l + r) >> 1, ans = 0;if(L <= mid)ans += query(x << 1, l, mid, L, R);if(R > mid)ans = (ans + query(x << 1 | 1, mid + 1, r, L, R)) % mod;return ans % mod;}
}t;
int main(){n = read(), m = read(), D = read();for(int i = 1; i <= n; ++i)a[i] = read();t.built(1, 1, n);for(int i = 1; i <= n; ++i)a[i] = 0;dpow[0] = 1; for(int i = 1; i <= n; ++i)dpow[i] = 1ll * dpow[i - 1] * D % mod;sd[0] = 1; for(int i = 1; i <= n; ++i)sd[i] = (sd[i - 1] + dpow[i]) % mod;fib[1] = fib[2] = 1; f1[1] = f2[2] = 1;for(int i = 3; i <= n; ++i)fib[i] = (fib[i - 1] + fib[i - 2]) % mod;for(int i = 3; i <= n; ++i)f1[i] = (f1[i - 1] + f1[i - 2]) % mod;for(int i = 3; i <= n; ++i)f2[i] = (f2[i - 1] + f2[i - 2]) % mod;for(int i = 1; i <= n; ++i)sb[i] = (sb[i - 1] + fib[i]) % mod;for(int i = 1; i <= m; ++i){int o = read(), l = read(), r = read();if(o == 1){int k = read(), d = read();t.modify_dc(1, 1, n, l, r, k, d);}if(o == 2){int k = read();t.modify_db(1, 1, n, l, r, k);}if(o == 3) t.modify_fib(1, 1, n, l, r, 1, 0);if(o == 4) printf("%d\n",t.query(1, 1, n, l, r));}	return 0;
}

D ZB的旋转树

image

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

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

相关文章

低风险稳健策略:BTC套利策略

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。 币安零手续费带来的机会 从7月8日的20点开始,币安推出了BTC现货交易零手续费的优惠活动,不论是Maker还是Taker都不收取手续费。此次活动包括了交易量最大的BTC/USDT和BTC/BUSD。BT…

适用于ps的Raw格式图像插件

Adobe Camera Raw14 中文版是适用于ps的Raw格式图像插件,安装上Camera Raw插件能在PS中打开编辑RAW格式文件,可以说是专业摄影师必备工具。目前Adobe Camera Raw中文版已经支持大部分主流相机,可以让用户在PS中处理各种形态的RAW文件。 软件下载地址 Camera Raw 软件是作为一…

AJAX概念和AJAX实现_原生JS方式

AJAX概念:概念:ASynchronous JavaScript And XML 异步的JavaScript和XML AJAX是一种在无需重新加载整个网页的情况下能够更新部分网页的技术。通过在后台于服务器进行少量数据叫唤,Ajax可以使网页实现异步更新,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进…

RadioGroup+RadioButton进行美化,以替换之前的选择状态

效果图: 1、进行样式定义 radio_sel_state:<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_checked="false"android:drawab…

Hadoop常见的文件格式及压缩算法

前言该文章中将会整理一些大数据中常见的文件格式及压缩算法的理论知识,作为后期实践的理论指导。理论+实践才会更方便用这些文件格式和压缩算法。 目前hadoop中常见的文件格式有textfile、sequencefile、avro、rcfile、orcfile、parquet等,上述六种文件格式又可以划分为行…

Vue3 + Socket.io + Knex + TypeScript 实现可以私聊的聊天室

前言 下文只在介绍实现的核心代码,没有涉及到具体的实现细节,如果感兴趣可以往下看,在文章最后贴上了仓库地址。项目采用前后端模式,前端使用 Vite + Vue3 + TS;后端使用 Knex + Express + TS。目前项目还没有完全实现,文章的目的是记录阶段性“胜利”和分享知识。 关于搭…

Docker入门-基础知识

Docker入门-基础知识 Cloud研习社 Cloud研习社 2022-06-17 07:26 发表于山东收录于合集#实战经验33个 #云计算34个 #计算机37个 #docker3个 #IT23个 Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分离,以便您可以快速交付软件。…

AJAX概念和AJAX实现原生JS方式

AJAX概念 概念:ASynchronous JavaScript And XML 异步的JavaScript 和 XML1.异步和同步:客户端和服务器端相互通信的基础上同步:客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。异步:客户端不需要等待服务器端的响应。在服务器处理请求的过程中,客户端…

mysql初识

mysql需要了解哪些知识 1.sql操作 2.索引 索引原理 索引优化 sql语句优化 3.事务 并发读异常的问题 并发死锁怎么解决 4. mysql与缓存 解决读性能问题 集群的内容OLTP: OLTP(online transaction processing)翻译为联机事务处理;主要对数据库增删改查; OLTP主要用来记录某类…

5个必知的高级SQL函数

5个必知的高级SQL函数SQL是关系数据库管理的标准语言,用于与数据库通信。它广泛用于存储、检索和操作数据库中存储的数据。SQL不区分大小写。用户可以访问存储在关系数据库管理系统中的数据。SQL允许描述数据。用户可以轻松创建和删除表和数据库。我们可以使用SQL库、模块和预…

Golang基础教程

以下使用goland的IDE演示,包含总计的golang基础功能共20个章节 一、go语言结构: 二、go基础语法:三、变量四、常量五、运算符 六、条件语句 七、循环 八、函数 九、变量作用域 十、数组 十一、指针 十二、结构体 十三、切片 十四、范围(Range) 十五、集合 十六、递归 十七、…

ceph 009 管理定义crushmap 故障域

管理和自定义crushmap 定义pg到osd的映射关系 通过crush算法使三副本映射到理想的主机或者机架 更改故障域提高可靠性 pg到osd映射由crush实现下载时需要将对象从osd搜索到,组成文件,那么对象多了就会效率变低,那么从pg组里面搜索。提高效率 对象放在pg要通过hash算法 95个…

网络编程-TCP通信程序(下)代码

TCP通信的客户端:向服务器发送连接请求,给服务端发送数据,读取服务端回写的数据 表示客户端的类:java.net.Socket:该类实现客户端套接字(也称为“套接字”)。 套接字是两台机器之间通讯的端点。套接字:包含了IP地址和端口号的网络单位 构造方法: Socket(String host, …

IfcDocumentInformation

IfcDocumentInformation实体定义 IfcDocumentInformation捕获外部文档的“元数据”。本规范未定义文件的实际内容;相反,它可以在Location属性之后找到。可以使用IfcDocumentReference从交换结构中全部或部分引用相同的IFCDocationInformation(例如,通过引用特定章节或段落)…

Volatile介绍

介绍 volatile 是 Java 虚拟机提供的轻量级的同步机制,它可以保证可见性(缓存一致性协议)和有序性(禁止指令重排序,也就是通过内存屏障来实现),但是不保证原子性。JMM 介绍 JMM 是一个抽象的概念,它描述的是一种规范。这些规范定义了程序中各种变量的访问规则。 JMM 定…

monodepth2学习-KITTI数据集内容

KITTI数据集介绍 monodepth2采用KITTI数据集进行训练,KITTI数据集主要是针对自动驾驶领域的图形处理技术,主要应用在评测立体图像(stereo)、光流(optical flow)、3D物体检查等计算机视觉领域。KITTI数据集采用配备有两个灰度摄像头,两个彩色摄像头和一个Velodye 64激光雷…

代码审计-PHP反序列化漏洞

什么是序列化序列化可以实现将对象压缩并格式化,方便数据的传输和存储。 为什么要序列化? PHP 文件在执行结束时会把对象销毁,如果下次要引用这个对象的话就很麻烦,所以就有了对象序列化,实现对象的长久存储,对象序列化之后存储起来,下次调用时直接调出来反序列化之后就…

世事无常,人生有定,此乃时也、运也、命也

参考: https://www.163.com/dy/article/H6NVOULE0528OPI5.html“万般皆由命,半点不由人。”半生已过,红尘辗转,才真正明白人的寿命与财富,在你来到人世间的那一刻上天就安排好了,半点由不得我们自己。正所谓“世事无常,人生有定,此乃时也、运也、命也!” 所谓命者。先…

三次握手,四次挥手

三次握手 连接建立阶段: 第一次握手:客户端的应用进程主动打开,并向服务端发出请求报文段。其首部中:SYN=1,seq=x。 第二次握手:服务器应用进程被动打开。若同意客户端的请求,则发回确认报文,其首部中:SYN=1,ACK=1,ack=x+1,seq=y。 第三次握手:客户端收到确认报文之后…

操作系统学习笔记4 | CPU管理 多进程图像

操作系统的核心功能就是管理计算机硬件,而CPU就是计算机中最核心的硬件。操作系统通过多进程图像实现对CPU的管理。所以多进程图像是操作系统的核心图像。操作系统的核心功能就是管理计算机硬件,而CPU就是计算机中最核心的硬件。而通过学习笔记3的简史回顾,操作系统通过多进…