Yet Another Data Structure Problem (ZOJ - 3998,双懒惰标记线段树)

TB6600驱动器共阴共阳接法傻傻分不清?一张图搞定STM32与42步进电机的接线避坑指南 本文详细解析了TB6600驱动器共阴共阳接法的本质区别,提供了STM32与42步进电机的高效连接方案。通过实际案例和接线图示,帮助读者避免常见错误,确保驱动器与MCU的安全连接,提升项目稳定性。 阅读详情

一.题目链接:

ZOJ-3998

二.题目大意:

给你 n 个数 a[1 ~ n].

现有 3 种 m 次操作:

① l r v 将 a[l ~ r] 的数都乘以 v

② l r v 将 a[l ~ r] 的数变为 a[l]^v....a[r]^v

③ l r 查询 a[l] ×......× a[r].

三.分析:

双懒惰标记的线段树.

详见代码吧...

四.代码实现:

#include <set>
#include <map>
#include <ctime>
#include <queue>
#include <cmath>
#include <stack>
#include <vector>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define eps 1e-6
#define pi acos(-1.0)
#define ll long long int
using namespace std;

const int M = (int)1e5;
const int mod = 1000000007;

struct node
{
    int l;
    int r;
    ll w;
    ll f1;
    ll f2;
}tree[M * 4 + 5];

ll ans;

void build(int k, int l, int r)
{
    tree[k].l = l;
    tree[k].r = r;
    tree[k].f1 = tree[k].f2 = 1;
    if(l == r)
    {
        scanf("%lld", &tree[k].w);
        return;
    }
    int mid = (l + r) / 2;
    build(k * 2, l, mid);
    build(k * 2 + 1, mid + 1, r);
    tree[k].w = tree[k * 2].w * tree[k * 2 + 1].w % mod;
}

ll quick(ll a, ll b)
{
    ll sum = 1;
    while(b)
    {
        if(b & 1)
            sum = sum * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return sum % mod;
}

void push(int k)
{
    tree[k * 2].f2 = tree[k * 2].f2 * tree[k].f2 % (mod - 1);
    tree[k * 2 + 1].f2 = tree[k * 2 + 1].f2 * tree[k].f2 % (mod - 1);
    tree[k * 2].f1 = quick(tree[k * 2].f1, tree[k].f2) * tree[k].f1 % mod;
    tree[k * 2 + 1].f1 = quick(tree[k * 2 + 1].f1, tree[k].f2) * tree[k].f1 % mod;
    tree[k * 2].w = quick(tree[k * 2].w, tree[k].f2) * quick(tree[k].f1, tree[k * 2].r - tree[k * 2].l + 1) % mod;
    tree[k * 2 + 1].w = quick(tree[k * 2 + 1].w, tree[k].f2) * quick(tree[k].f1, tree[k * 2 + 1].r - tree[k * 2 + 1].l + 1) % mod;
    tree[k].f1 = tree[k].f2 = 1;
}

void interver(int k, int l, int r, int a, int b, ll c, bool flag)
{
    if(l >= a && r <= b)
    {
        if(!flag)
        {
            tree[k].f1 = tree[k].f1 * c % mod;
            tree[k].w = tree[k].w * quick(c, tree[k].r - tree[k].l + 1ll) % mod;
            return;
        }
        else
        {
            tree[k].w = quick(tree[k].w, c);
            tree[k].f1 = quick(tree[k].f1, c);
            tree[k].f2 = tree[k].f2 * c % (mod - 1);
            return;
        }
    }
    push(k);
    int mid = (l + r) / 2;
    if(a <= mid)
        interver(k * 2, l, mid, a, b, c, flag);
    if(mid < b)
        interver(k * 2 + 1, mid + 1, r, a, b, c, flag);
    tree[k].w = tree[k * 2].w * tree[k * 2 + 1].w % mod;
}

void query(int k, int l, int r, int a, int b)
{
    if(l >= a && r <= b)
    {
        ans = ans * tree[k].w % mod;
        return;
    }
    push(k);
    int mid = (l + r) / 2;
    if(a <= mid)
        query(k * 2, l, mid, a, b);
    if(mid < b)
        query(k * 2 + 1, mid + 1, r, a, b);
    tree[k].w = tree[k * 2].w * tree[k * 2 + 1].w % mod;
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        int n, m;
        scanf("%d %d", &n, &m);
        build(1, 1, n);
        while((m--) > 0)
        {
            int dir, l, r;
            scanf("%d %d %d", &dir, &l, &r);
            if(dir <= 2)
            {
                ll v;
                scanf("%lld", &v);
                interver(1, 1, n, l, r, v, dir - 1);
            }
            else
            {
                ans = 1;
                query(1, 1, n, l, r);
                printf("%lld\n", ans);
            }
        }
    }
    return 0;
}

 

加权余量法求解偏微分方程 加权余量法(Weighted Residual Method)是一种数值方法,用于求解偏微分方程(PDEs)。其基本思想是将偏微分方程的残差(或余量)通过加权函数加权,并使加权余量在定义域上为零,从而形成一组代数方程进行求解。 阅读详情

相关推荐

OpenFoam实用技巧——starccm网格高效转换openfoam格式全解析

本文详细解析了如何利用OpenFOAM官方工具`ccm26toFoam`,将STAR-CCM+生成的高质量网格高效、稳定地转换为OpenFOAM格式。内容涵盖从STAR-CCM+正确导出网格、执行转换命令、解读转换日志,到转换后关键的边界条件修复与网格质量检查等全流程,旨在帮助用户规避常见错误,实现无缝工作流衔接。

weixin_28309571的博客 456

ZOJ3998:Yet Another Data Structure Problem(线段树区间更新)

Given  integers . There are 3 types of operations:1 l r v: Multiply  by ;2 l r k: Change each element in  to ;3 l r: Query the multiplication of  modulo 1,000,000,007.For each query, please output the...

junior19的博客 537

1173:阶乘和

1173:阶乘和 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 6010 通过数: 3049 【题目描述】 用高精度计算出S=1!+2!+3!+…+n!(n≤50),其中“!”表示阶乘,例如:5!=5×4×3×2×1。 输入正整数n,输出计算结果S。 【输入】 一个正整数n。 【输出】 计算结果S。 【输入样例】 5 【输出样例】 153 思路: ...

zqhf123的博客 1260

ZOJ---3998:Yet Another Data Structure Problem【线段树+离散对数】

题面: ZOJ---3998 题意: 给定一个序列,再给出三种操作:(1)区间每个数乘V(2)区间每个数变为原来的K次幂(3)询问区间乘积 分析: 由于只查询区间元素的乘积,直接开两个lazy+降幂是可以写的,但转化离散对数会优化掉快速幂的log 离散对数(摘自百度百科): 当模m有原根时,设l为模m的一个原根,则当时: 为x以整数l为底,模时的离散对数值,可以通过BS...

KobeDuu 484

STC8H8K64U ADC采样实战:从蜂鸣器控制到电压测量(附完整代码)

本文以STC8H8K64U单片机为核心,通过两个实战案例详细讲解ADC采样的应用。首先介绍如何利用ADC采样值动态控制蜂鸣器响度,实现模拟PWM效果;其次深入探讨高精度外部电压测量的方法,包括硬件连接、两点校准技巧以及软件滤波,旨在帮助开发者从理论到实践全面掌握ADC功能。

weixin_29159441的博客 558

什么是三极管推挽电路

当没有信号输入时,电源通过PNP三极管EB间的二极管,然后通过NPN三极管BE间而二极管到地,这时这两个三极管都是导通的,三极管很容易由于电流过大而损坏。当输入信号为VCC时,上面的三极管导通,下面的三极管截止,输出信号为VCC-0.7V,这个0.7V就是上面NPN三极管BE间的导通压降。比如上面的三极管导通,那么输出电压就是输入电压减去0.7V,所以下面的PNP三极管由于基极电压大于发射极电压,是不会导通的。这是一个三极管推挽电路,上面是一个NPN的三极管,下面是一个PNP的三极管。

谢谢关注“小鱼教你模数电”,各平台同号 3369

ZOJ 3998(线段树)

传送门题面:Yet Another Data Structure ProblemTime Limit: 5 Seconds      Memory Limit: 65536 KBGiven  integers . There are 3 types of operations:1 l r v: Multiply  by ;2 l r k: Change each element in  to ;3...

Chen.Jr的博客 448

CTF逆向-[GWCTF 2019]babyvm-WP-虚机模拟流程反向编码和z3约束求解器解方程工具的使用

CTF逆向-[GWCTF 2019]babyvm-WP-虚机模拟流程反向编码和z3约束求解器解方程工具的使用 来源:https://buuoj.cn/ 内容: 附件:https://pan.baidu.com/s/1FKkXN6JDI0QkGw-UE2crNA?pwd=grb0 提取码:grb0 答案:Y0u_hav3_r3v3rs3_1t! 总体思路 发现是虚机模拟 形成每个指令的逆向 找到加密值位置(有可能不止一个位置,该题就给了一个误导的) 找到命令执行的流程(也是不止一个) 逆向编写反向加密得到f

serfend's blog 976

[ZOJ]ZOJ3998(线段树,费马小定理)

题意:询问数列中一段的乘积,支持区间乘法和区间乘方 基本类似于支持区间加法和区间乘法的区间求和的线段树,对两种操作打两个tag,根据运算规则pushdown维护好标记即可。 乘方的取模利用费马小定理的推论:a^n≡ a^ (n mod φ(p))(modp),p为质数时φ(p)=p-1 #include<bits/stdc++.h> using namespace std...

weixin_30246221的博客 161

Autowired的使用介绍

我们都知道在spring中@Autowired注解,是用来自动装配对象的。@Service@Autowired没错,这样是能够装配成功的,因为默认情况下spring是按照类型装配的,也就是我们所说的byType方式。此外,@Autowired注解的required。

白话机器学习 1350

SAP:QUERY中SQ02增加选择屏幕权限控制

【代码】SAP:QUERY中SQ02增加选择屏幕权限控制。

weixin_43734184的博客 2325

UVA11426:GCD - Extreme (II) (欧拉函数)

题意:给定N(1 < N < 4000001)求 G=0; for(i=1;i<N;i++) { for(j=i+1;j<=N;j++) { G+=gcd(i,j); } } G=? 思路:phi函数打表+递推。 参考代码来源:这里 #include<iostream> #include<cstdio> #incl...

weixin_34357887的博客 125

泰凌微8258入门教程 环境篇④——开发板+烧录器 8258mesh新手套件购买

工欲善其事,必先利其器。 淘宝链接:https://item.taobao.com/item.htm?

4128

E - Yet Another Data Structure Problem ZOJ - 3998(线段树维护区间乘积,k次方)

题意: 3种询问。 1 l r v,代表[l,r]区间每个数乘以v 2 l r v,代表[l,r]区间每个数变成v次方 3 l r,求[l,r]区间乘积 思路: 裸的线段树维护区间次幂和区间乘积。lazy1表示子区间还需要乘以lazy1,lazy2表示子区间要变成lazy2次方。 注意维护次幂的时候要模(mod-1)(欧拉降幂),且要先维护lazy2,再维护lazy1。 #include <cstdio> #include <cstring> #include <algorit

tomjobs的博客 602

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

UVA 10516 - Another Counting Problem(递推)

Problem H Another Counting Problem Input: Standard Input Output: Standard Output Tree is an important data structure in Computer Science. Of all trees we work with, Binary Tree is probably the mos

Remilia's 1325

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ZOJ 3998 Yet Another Data Structure Problem (线段树)

Description Sample Input 1 5 5 1 2 1 2 1 3 2 4 1 1 5 2 3 2 4 2 1 1 4 3 1 1 Sample Output 4 32 16 Solution 两个tag的线段树 + 欧拉降幂 Code ll t[maxn << 2], lazy1[maxn << 2], lazy2[maxn << 2]; ll a[maxn]; ll qpow(ll x,ll n) { ll res = 1; while(n)

chr1stopher 164

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ZOJ 3998 Yet Another Data Structure Problem(线段树)

有三种操作,区间内每个数数乘一个数,区间内每个数成为他的K次方,求区间内数的乘积。 容易看出这是需要线段树来做的。 我们在这里放置两个lazy数组,用原线段树来维护区间内现在区间乘积是多少。一个lazy数组表示下方未更新的区间需要进行几次方的运算。另一个数组来表示下方为处理区间除了乘方操作外,所有的需要额外的进行乘的数是多少~~。需要注意的是在进行pushdown操作的...

柳予欣的三味书屋~ 216

杭电第九场 题解

比赛传送门 作者: fn 目录基本题1003题 Dota2 Pro Circuit / Dota2职业巡回赛1002题 Just another board game / 又一个棋盘游戏1007题 Boring data structure problem / 无聊的数据结构问题进阶题1010题 Unfair contest / 黑哨 基本题 1003题 Dota2 Pro Circuit / Dota2职业巡回赛 题目大意 给定每个队伍之前的得分 aia_iai​ 和下一场比赛每个名次的得分 bib_

weixin_51937688的博客 615

acwing-246. 区间最大公约数(线段树+gcd)

给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一: C l r d,表示把 A[l],A[l+1],…,A[r] 都加上 d。 Q l r,表示询问 A[l],A[l+1],…,A[r] 的最大公约数(GCD)。 对于每个询问,输出一个整数表示答案。 输入格式 第一行两个整数 N,M。 第二行 N 个整数 A[i]。 接下来 M 行表示 M 条指令,每条指令的格式如题目描述所示。 输出格式 对于每个询问,输出一个整数表示答案。 每个答案占一行。 数据范围 N≤500000,M≤1

m0_46656833的博客 244

ZOJ 4009 And Another Data Structure Problem [线段树+想法]

ZOJ 4009 And Another Data Structure Problem [线段树+想法]

ACTerminate的博客 733

【循环节+线段树】ZOJ4009 And Another Data Structure Problem

Source:Source:Source:151 - ZOJ Monthly, March 2018 Problem:Problem:Problem: 1 l r: Change (al,al+1,…,ar)(al,al+1,…,ar)(a_l, a_{l+1}, \dots, a_r) to (a3l,a3l+1,…,a3r)(al3,al+13,…,ar3)(a_l^3, ...

Tooc0ld 612

ZOJ Monthly, January 2018 - E Yet Another Data Structure Problem

题意: 线段树的乘和次方操作。 POINT: 学习一下lazy数组的更新就行了。 类似区间加和乘操作。 bozj 1798 mul和fang数组代表,下面的区间要^fang 然后乘mul。 mul操作就在mul数组正常更新。 fang操作就要把mul数组也更新掉。 mul=mul^fang。 #include #include

Mr_Treeeee的博客 663

迷宫问题 (POJ - 3984 ,BFS + 路径输出)

一.题目链接: POJ-3984 二.题目大意: 给出一个迷宫,输出路径. 三.分析: 初学 bfs 的小伙伴在入坑 bfs 后,终于学会了判断迷宫问题是否能够到达终点。 那么, 现在又迎来了一个新的问题 —— 若迷宫的解唯一, 那么怎样输出迷宫路径呢 ? 比如 poj 3984 迷宫问题 在 AC 之后, 写这篇博客不仅是为了供大家学习,斧正, 更是为了自身的总结, 吸取教训。 ...

The___Flash的博客 1923

Sorting It All Out (POJ - 1094 ,拓扑排序 + 链式向前星存图)

一.题目链接: POJ-1094 二.题目大意: 给出 n,m. 字母由 A 到 A + n. 给出 m 个关系,形式如:A<B. 输入结束后 若字母顺序已确定,则输出 "Sorted sequence determined after 最少步数relations: 字母顺序." 若有矛盾,则输出 "Inconsistency found after 最小步数relati...

The___Flash的博客 889

Eight II (HDU - 3567,BFS 打表 + 思维)

一.题目链接: HDU-3567 二.题目大意: Eight的升级版,游戏规则相同. 每次给出两个字符串 A, B,问 从 A 到 B 的最少步数 并 打印最小字典序的路径. 三.分析: 看了大神的分析才懂。。。 在这里阐述一下. 只考虑 X 的位置,由于 1 ~ 8 数字无特殊性 所以可将所给的 A 重新编号. 例如 A1:8 7X 6 5 4 3 2 1 编号为 A...

The___Flash的博客 485

Kth Minimum Clique(2019牛客暑期多校训练营(第二场)D,K 大完全子图)

一.题目链接: Kth Minimum Clique 二.题目大意: 有 n 个点,有着各自的点权. 给出连通的边. 求权值 k 大的完全子图. 三.分析: 由于 n ≤ 1e3,所以直接暴搜即可. 这里和状压 DP 有点像,搜索的是状态以及对应的权值. 考虑状态的转移,比如在什么情况下,i 点可以加入. 因为是求完全子图,所以现状态应真包含于 i 点的连接点,否则就不是完全图...

The___Flash的博客 465
上一篇: The Limit (ZOJ - 3999,表达式读入 + 多项式极限模拟)
下一篇: Transformation( HDU - 4578 ,多重懒惰标记线段树 + 思维)
The___Flash
博客等级 码龄8年 79粉丝 223原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值