日常刷题2025-2-20

news/2025/2/21 23:21:02/文章来源:https://www.cnblogs.com/califeee/p/18727427

日常刷题2025-2-20

lz的序列问题

思路:常规线段树

比较常规的线段树。

代码

#include <bits/stdc++.h>
#define lson (rt << 1)
#define rson (rt << 1 | 1)using i64 = long long;const int mod = 1000000007;int a[200005];
struct node {i64 v, rmx, lz;
}tr[200005 << 2];i64 ksm(i64 a, i64 b) {i64 res = 1;while(b) {if (b & 1) {res = res * a % mod;}b >>= 1;a = a * a % mod;}return res;
}node mer(node x, node y) {if (x.v == 0) return y;node res = {0, 0, 0};res.v = x.rmx * y.v % mod + x.v;res.v %= mod;res.rmx = x.rmx * y.rmx % mod;return res;
}void push_down(int rt, int l, int r) {if (tr[rt].lz) {int mid = l + r >> 1;int x = tr[rt].lz;tr[lson].lz = x;tr[rson].lz = x;if (tr[rt].lz == 1) {tr[lson].v = mid - l + 1;tr[rson].v = r - mid;tr[lson].rmx = 1;tr[rson].rmx = 1;}else {tr[lson].v = (ksm(x, mid - l + 1) - 1) * x % mod * ksm(x - 1, mod - 2) % mod;tr[rson].v = (ksm(x, r - mid) - 1) * x % mod * ksm(x - 1, mod - 2) % mod;tr[lson].rmx = ksm(x, mid - l + 1);tr[rson].rmx = ksm(x, r - mid);}tr[rt].lz = 0;}
}void build(int rt, int l, int r) {if (l == r) {tr[rt].v = a[l];tr[rt].rmx = a[l]; return;}int mid = l + r >> 1;build(lson, l, mid);build(rson, mid + 1, r);tr[rt] = mer(tr[lson], tr[rson]);
}void update(int rt, int l, int r, int L, int R, int x) {if (l >= L && r <= R) {tr[rt].lz = x;if (x == 1) {tr[rt].v = r - l + 1;tr[rt].rmx = 1;}else {tr[rt].v = (ksm(x, r - l + 1) - 1) * x % mod * ksm(x - 1, mod - 2) % mod;tr[rt].rmx = ksm(x, (r - l + 1));}return;}push_down(rt, l, r);int mid = l + r >> 1;if (mid >= L)update(lson, l, mid, L, R, x);if (mid < R) {update(rson, mid + 1, r, L, R, x);}tr[rt] = mer(tr[lson], tr[rson]);
}node query(int rt, int l, int r, int L, int R) {if (l >= L && r <= R) {return tr[rt];}push_down(rt, l, r);node res = {0, 0, 0};int mid = l + r >> 1;if (mid >= L) {res = mer(res, query(lson, l, mid, L, R));}if (mid < R){res = mer(res, query(rson, mid + 1, r, L, R));}return res;
}void solve() {int n, m;std::cin >> n >> m;for (int i = 1; i <= n; i++) {std::cin >> a[i];}build(1, 1, n);while (m--) {int op;std::cin >> op;if (op == 1) {int l, r, x;std::cin >> l >> r >> x;update(1, 1, n, l, r, x);}else {int l, r;std::cin >> l >> r;std::cout << query(1, 1, n, l, r).v << '\n';}}
}signed main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);int t = 1;// std::cin >> t;while (t--) {solve();}return 0;
}

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

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

相关文章

系统注册前后端代码

前端 <!DOCTYPE html> <html lang="en"> <head><meta charset="utf-8"><title>注册</title><link rel="stylesheet" type="text/css" href="css/common.css"><link rel="…

牛客题解 | 字符串的排列

题目 题目链接 描述 这是一篇针对初学者的题解,用递归方法解决。 知识点:字符串,递归,回溯 难度:一星题解 题目抽象:给定一个字符串,求该字符串的全排列。 方法:递归法 如图:如图所示的全排列可以发现,对于这个排列,我们是固定A不动,然后交换B与C,从而得到"A…

牛客题解 | 岛屿数量

题目 题目链接 题目主要信息:给一个01矩阵,1代表是陆地,0代表海洋,如果两个1相邻,则这两个1属于同一个岛 只考虑上下左右为相邻 判断岛屿的个数举一反三: 学习完本题的思路你可以解决如下题目: BM61. 矩阵最长递增路径 方法一:dfs(推荐使用) 知识点:深度优先搜索(d…

牛客题解 | 寻找峰值

牛客输入输出题单题解题目 题目链接 题目主要信息:给定一个长度为n的数组,返回其中任何一个峰值的索引 峰值元素是指其值严格大于左右相邻值的元素 数组两个边界可以看成是最小,\(nums[-1] = nums[n] = -\infty\) 峰值不存在平的情况,即相邻元素不会相等举一反三: 学习完本…

java 线程的生命周期和锁

线程的生命周期: Thread.state枚举类共有6种状态:NEW:尚未启动的线程状态; RUNNABLE:jvm中执行的状态; BLOCKED:被阻塞等待监视器锁定的状态; WAITING:等待其他线程执行的状态; TIME_WAITING:达到执行等待时间的线程状态; TERMINATED:已退出线程的状态;线程生命周…

环境搭建与第一个Web项目

开发环境配置<!-- 创建Maven Web项目依赖 --> <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope> </dependency>…

牛客题解 | 判断是否为回文字符串

牛客输入输出题单题解题目 题目链接 题目的主要信息:判断字符串是否是回文字符 回文字符即首尾相互往中靠,字符都是相同的举一反三: 学习完本题的思路你可以解决如下题目: BM13. 判断一个链表是否为回文结构 BM87. 合并两个有序数组 BM91. 反转字符串 方法一:首尾依次比较…

DeepSeek满血版在IDEA中快的飞起

现在国内的 AI 竞争,已经不是单纯的“谁的模型更强”,而是谁的 AI 生态更繁荣。阿里云靠开源,把自己送上了这个生态的核心位置。当同行还在用API调用次数计算商业价值时,阿里云已化身 AI 时代的"技术普惠者"。作者:沉默王二 有没有发现?不知不觉中,阿里已经完…

牛客题解 | 兑换零钱(一)

牛客输入输出题单题解题目 题目链接 题目主要信息:给定数组arr,arr中所有的值都为正整数且不重复 arr中每个值代表一种面值的货币,每种面值的货币可以使用任意 组成aim的最少货币数 如果无解,请返回-1举一反三: 本题属于背包问题的一种简化版本,学习完本题的思路帮助你解…

牛客题解 | 删除有序链表中重复的元素-I

牛客输入输出题单题解题目 题目链接 题目主要信息:给定一个从小到大排好序的链表 删去链表中重复的元素,每个值只留下一个节点举一反三: 学习完本题的思路你可以解决如下题目: BM16. 删除有序链表中重复的元素-II 方法:遍历删除(推荐使用) 思路: 既然连续相同的元素只留…

牛客题解 | 二叉树的前序遍历

牛客输入输出题单题解题目 题目链接 题目的主要信息:给定一颗二叉树的根节点,输出其前序遍历的结果举一反三: 学习完本题的思路你可以解决如下题目: BM24.二叉树的中序遍历 BM25.二叉树的后序遍历 方法一:递归(推荐使用) 知识点:二叉树递归 递归是一个过程或函数在其定…