Calculate the Function( ZOJ - 3772,线段树 + 递推矩阵乘积)

别再盲调PID了!手把手教你用VOFA+实时可视化电机速度曲线(附STM32F4源码) 本文详细介绍了如何使用VOFA+工具实现PID参数的可视化调试,帮助开发者从盲调转向精准调优。通过实时可视化电机速度曲线,结合STM32F4源码示例,展示了如何高效调试Kp、Ki、Kd参数,解决响应慢、超调等常见问题,大幅提升电机控制系统的性能。 阅读详情

一.题目链接:

ZOJ-3772

二.题目大意:

给 n 个数 a[1~n]

定义 F_{L_{i}}(x) 如下:

F_{L_{i}}(x) = \left\{\begin{matrix} A_{R_{i}}\ (x - L_{i} < 2) \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, & & & & & & & & & \\ & & & & & & & & & \\ F_{L_{i}}(x - 1) + F_{L_{i}}(x - 2) \times a_{x}\ (x - L_{i} \geq 2)& & & & & & & & & \end{matrix}\right. 

对于每次查询,给出区间端点 L_{i} 和 R_{i} 的值

求出 F_{L_{i}}(R_{i}) .

三.分析:

由递推式可得

F_{1}(5) = \begin{bmatrix} A_{2} & A_{1}\\ 0 &0 \end{bmatrix} \begin{bmatrix} 1 &1 \\ A_{3} & 0 \end{bmatrix} \begin{bmatrix} 1 &1 \\ A_{4} & 0 \end{bmatrix} \begin{bmatrix} 1 &1 \\ A_{5} & 0 \end{bmatrix}

F_{2}(5) = \begin{bmatrix} A_{3} & A_{2}\\ 0 &0 \end{bmatrix} \begin{bmatrix} 1 &1 \\ A_{4} & 0 \end{bmatrix} \begin{bmatrix} 1 &1 \\ A_{5} & 0 \end{bmatrix}

F_{3}(5) = \begin{bmatrix} A_{4} & A_{3}\\ 0 &0 \end{bmatrix} \begin{bmatrix} 1 &1 \\ A_{5} & 0 \end{bmatrix}

所以我们可以建一颗线段树,节点值存为矩阵,父节点就存为矩阵乘积.

然后进行区间查询 (L_{i} + 2,\,\,R_{i}) 即可.

查询得到的矩阵再乘以矩阵 \begin{bmatrix} A_{L_{i} + 1} & A_{L_{i}}\\ 0 &0 \end{bmatrix} 取(0,0)元素即可.

因为线段树的遍历顺序,所以不必担心矩阵相乘的顺序会错误.

四.代码实现:

#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 ll mod = 1000000007;

struct node1
{
    ll D[2][2];
};

struct node2
{
    int l;
    int r;
    node1 T;
}tree[M * 4 + 5];

ll a[M + 5];

node1 ans;

node1 juzhen(node1 s1, node1 s2)
{
    node1 s3;
    for(int i = 0; i < 2; ++i)
        for(int j = 0; j < 2; ++j)
            s3.D[i][j] = 0;
    for(int i = 0; i < 2; ++i)
    {
        for(int j = 0; j < 2; ++j)
        {
            for(int k = 0; k < 2; ++k)
            {
                s3.D[i][j] = (s3.D[i][j] + s1.D[i][k] * s2.D[k][j] % mod) % mod;
            }
        }
    }
    return s3;
}

void build(int k, int l, int r)
{
    tree[k].l = l;
    tree[k].r = r;
    if(tree[k].l == tree[k].r)
    {
        tree[k].T.D[0][0] = 1;
        tree[k].T.D[0][1] = 1;
        tree[k].T.D[1][0] = a[tree[k].l];
        tree[k].T.D[1][1] = 0;
        return;
    }
    int mid = (tree[k].l + tree[k].r) / 2;
    build(k * 2, l, mid);
    build(k * 2 + 1, mid + 1, r);
    tree[k].T = juzhen(tree[k * 2].T, tree[k * 2 + 1].T);
}

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

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        int n, m;
        scanf("%d %d", &n, &m);
        for(int i = 1; i <= n; ++i)
            scanf("%lld", &a[i]);
        build(1, 1, n);
        while((m--) > 0)
        {
            int l, r;
            scanf("%d %d", &l, &r);
            if(r - l < 2)
            {
                printf("%lld\n", a[r]);
                continue;
            }
            ans.D[0][0] = 1;
            ans.D[0][1] = 0;
            ans.D[1][0] = 0;
            ans.D[1][1] = 1;
            query(1, 1, n, l + 2, r);
            node1 s;
            s.D[0][0] = a[l + 1];
            s.D[0][1] = a[l];
            s.D[1][0] = 0;
            s.D[1][1] = 0;
            ans = juzhen(s, ans);
            printf("%lld\n", ans.D[0][0] % mod);
        }
    }
    return 0;
}

 

MOS五类漏电流与优化策略 分析了五种主要漏电流机制:1)反偏结泄漏,由PN结热激发和隧 阅读详情

相关推荐

团结引擎+OpenHarmony 记录 (持续更新中)

获取不到的原因是因为二者不在同一个线程中,所以数据没有同步。而 globalThis.context 数据进行了同步。(TuanjieMainWorkerHandler.ts中可以看到)在进行绘制 UI 的时候 ,如果组件有 Native API 就可能不会显示出来,例如 web 控件就不能展示出来,刚加上权限的时候 会报错 因为缺少 reason ,添加上就不会报错了。只有纯 UI 控件是可以展示出来的,注释掉 web控件后就可以。

m_cainiaokuaifei的博客 1492

ZOJ 3772 Calculate the Function 【线段树维护矩阵乘法】

传送门:ZOJ 3772 Calculate the Function You are given a list of numbers A1 A2 … AN and M queries. For the i-th query: The query has two parameters Li and Ri. The query will define a function Fi(x) on...

Waiting For You 335

Python实战:用Py2neo轻松玩转Neo4j图数据库(附完整CRUD示例)

本文通过构建武侠知识图谱的实战案例,详细介绍了如何使用Python的Py2neo库对Neo4j图数据库进行CRUD操作。内容涵盖环境搭建、节点与关系创建、Cypher查询、数据更新删除及事务管理,帮助开发者直观高效地处理复杂关联数据,实现从入门到进阶的完整交互流程。

weixin_29034963的博客 185

ZOJ 3772 Calculate the Function (好题,线段树) ZOJ 1671

我想说,这个题真的很好很好。ganx

老李2009 1214

PDF.js实现分片加载问题

PDF.js实现分片加载问题。

qq_32822693的博客 4978

python发送邮件的时候出现 error (535, b‘5.7.3 Authentication unsuccessful‘) 解决方法

出现该Bug的原因主要是 账号密码无法登录,但原先使用该代码测试qq或者163的时候是可以通过的!问题在于各个公司邮件所处理的代码方式不一样

码农研究僧的博客 3503

Calculate the Function ZOJ - 3772(线段树维护矩阵乘法)

题目链接: Calculate the Function ZOJ - 3772 题意: 给你一个区间 [L, R] ,再给你一个递推关系 f(L) = A[L] ; f(L+1) = A[L+1] ; f(x) = f(x - 1) + f(x - 2) * A[x] (x > 2) ,然后让你求 f(R)的值。 题解: 看到有递推式,首先想到矩阵快速幂,那么递推矩阵是什么呢?...

ltrbless的博客 522

基于Matlab使用雷达资源管理有效跟踪多个机动目标仿真(附源码)

多功能雷达可以搜索目标,确认新轨道,并重新访问轨道以更新状态。为了执行这些功能,多功能雷达通常由资源管理器管理,该资源管理器创建用于搜索、确认和跟踪的雷达任务。这些任务是根据优先级和时间安排的,因此,在每个时间步长中,多功能雷达都可以将其波束指向所需的方向。在此示例中,对于用于跟踪机动目标的雷达,有两个相互冲突的要求:目标的数量及其初始位置通常事先不知道。因此,雷达必须不断搜索感兴趣的区域才能找到目标。此外,雷达需要在进入雷达覆盖区域后立即检测并建立对每个目标的跟踪。目标机动的时间段事先是未知的。

珞瑜的博客 3146

zoj 3772 Calculate the Function(矩阵+线段树)

开始以为是数学递推找规律,尝试了以后发现这条路走不通。 考虑到既有加又有乘,可能就是我们熟悉的矩阵。然后想试着用逆矩阵的形式求解,发现会出现a[x] 为分母的情况。所以最后使用线段树来求解区间的矩阵乘积。 根据题目可以知道:Fx = a[x],F(x+1) = a[x+1] 这两个是直接有的,不需要矩阵,从第三个开始,其实就是在前两个的基础上乘上了一个矩阵: F(x+2) = F(x+1)

Gavin的专栏 806

某智能物流无人值守系统 ExportReport SQL注入漏洞复现

某智能物流无人值守系统 ExportReport存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用 SQL 注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。

0xSec 818

Android16 RK3576修改亮度调节为线性调节

文章摘要: 本文分析了Android系统中亮度调节的非线性问题,并提供了线性化改造方案。首先通过追踪Settings和SystemUI代码,发现亮度调节使用了BrightnessUtils类中的非线性Gamma空间转换算法。然后重点修改了BrightnessUtils类,将原有的Hybrid Log Gamma(HLG)算法替换为简单的线性映射公式。最后在自定义工具窗口中实现了基于系统标准接口的亮度调节功能,通过SeekBar的0-100%百分比值线性映射到1-255的系统亮度值。改造后的亮度调节更加直观,

tzj1058756809的博客 76

Calculate the Function ZOJ - 3772

点击打开链接 通过题目给的递推公式 可以的出其矩阵形式 然后就是求某一区间的矩阵乘积 线段树或者rmq都可以解 也可以只维护一个前缀积 然后求矩阵的逆 #include &lt;bits/stdc++.h&gt; using namespace std; #define ll long long #define M 1000000007 struct node { int l; ...

sunyutian1998的博客 235

Linux V3H 平台开发系列讲解(摄像头)2.3.1 MAX96912 MAX96717 GMSL1 CSI 2lane配置

​ 单路摄像头,数据流类型YUV422, mipi接口,经过MAX96717 串行器,gmsl1链路 到解串器MAX96712,最后mipi csi 2lane(lane0 lane1)输出到 renesa v3h soc开发板; ​

xian18809311584的博客 580

zoj 3772 Calculate the Function(矩阵乘法)

题意:

绝望的乐园 969

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Number Puzzle (ZOJ - 2836 ,容斥原理)

一.题目链接: ZOJ-2836 二.题目大意: 第一行给出 n, m 第二行有 n 个数 求在不大于 M 的非负整数中,有多少个数可以被这 n 个数中的任意一个整除. 三.分析: 容斥原理模板题存一下(偷笑.jpg) 四.代码实现: #include <set> #include <map> #include <ctime> #incl...

The___Flash的博客 862

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

最大子矩阵(HDU - 1559,前缀和)

一.题目链接: HDU-1559 二.题目大意: 给出一个 m × n 的矩阵,和一个大小为 x × y 的子矩阵,求子矩阵的最大值为多少? 三.分析: 利用前缀和求出 顶点 到 每个点 矩阵的和,然后枚举子矩阵顶点的位置即可. 如图: 四.代码实现: #include <set> #include <map> #include <ctime&g...

The___Flash的博客 608

假人有限元模型

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

Plants vs. Zombies (ZOJ - 4062,二分答案 + 细节)

一.题目链接: ZOJ-4062 二.题目大意: n 个植物排成一排. 水壶只能移动 m 步. 水壶一步移动一个单位长度,所到达的位置,该植物的防御值会相应增加. 求浇水之后,所有植物防御值中最小值最大可以为多少. 三.分析: 二分答案即可. 不过要加限制条件,在 check(mid) 函数中 cnt 可能会暴 long long. 这是因为,假设n == 1e5,mid =...

The___Flash的博客 606

例题 3-4 猜数字游戏的提示(Master-Mind Hints,UVA 340)

一. 题目链接 : Master-Mind Hints UVA-340 二. 题目大意 : 多组数据,每组数据中有一个标准数字序列,之后多组数字序列,输出 A 和 B. A : 在每组数字序列中,与标准数字序列中数字且位置相同的数字个数. B :在每组数字序列中,有多少个数字在两组数字序列里都出现过,但位置不同. 三.分析 : A : A很好求,直接同时遍历 标准数字序列 和 ...

The___Flash的博客 493

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

Books (ZOJ - 4067,思维 + 理解题意)

一.题目链接: ZOJ-4067 二.题目大意: DreamGrid 去买书,有 n 本书排成一行,价格记为 a[0],a[1] .... a[n - 1]. 若DreamGrid 所带的钱不少于 第 i 本书的价格,则买这本书. 最后DreamGrid 共买了 m 本书. if 不可能买了 m 本书,则输出Imp...

The___Flash的博客 462

Matrix (POJ - 3685,二分答案 + 二分)

一.题目链接: POJ-3685 二.题目大意: 给 n 和 m. 表示有一个 n × n 的矩阵,求第 m 小的元素的值. 矩阵元素的计算公式: 三.分析: 易得矩阵的元素在同一列上单增. 第一层二分答案. 因为是求第 m 小的数,所以必有 m 个数 ≤答案(数有重复). check(mid) 函数里先枚举列,对于每一列再二分有多少个数 ≤ mid即可. ps: 控制边界...

The___Flash的博客 450

Fairy tale(BFS + 大模拟)

一.题目链接: Fairy tale 二.题目大意: 给你一个N × N 的地图,图上的每个点有四种方向(E W S N),代表着移动方向. 在 t = 0 时,saya 在 (1, 1),treasure 在 (n, n). 在每个单位时间内,分为 3 步. ①saya 先按照地图移动一个单位. ② saya 可以向四个方向移动一个单位,saya 会移动到距离 treasure ...

The___Flash的博客 445

Fliptile (POJ - 3279, 思维 + 二进制枚举)

一.题目链接: POJ-3279 二.题目大意: 给你一个图,只有 0 和 1. 0 表示白色,1 表示黑色. 每敲击一块砖,这块砖以及它周围四个方向的砖都会转变颜色. 问是否能够将砖块都变为白色 如果可以,输出在最小步数情况下,操作的最小字典序. 否则,输出 "IMPOSSIBLE" 三.分析: 二进制枚举对第一行的操作. 再又第 1 行的状态,确定第 2 行的操作 比如 ...

The___Flash的博客 439

习题 3-5 谜题(Puzzle, ACM/ICPC World Finals 1993, UVA227)

一. 题目链接: Puzzle UVA-227 二.题目大意: 有一个 5 × 5 的字母矩阵,其中有一个是空格。 共有 4 中指令,分别为 A, B, L, R. A:将空格上的相邻字母移到空格中. B:将空格下的相邻字母移到空格中. L:将空格左的相邻字母移到空格中. R:将空格右的相邻字母移到空格中. 输入指令后 若有非法指令输出“This puzzle has no fi...

The___Flash的博客 430

Pearls in a Row( CodeForces - 620C,贪心)

一.题目链接: CodeForces-620C 二.题目大意: 给出一个数字序列,若有数字重复出现则称这一段序列为 “好”,求这个序列中最多有多少个 “好” 序列. 三.分析: 把序列中的元素放入 set 里,并进行查找,若找到,则 ans++,set 清空,记录首尾位置. 详见代码. 四.代码实现: #include <set> #include <map&g...

The___Flash的博客 422
上一篇: Count the Colors (ZOJ - 1610,离散化 + 线段树)
下一篇: Binary Land(ZOJ - 3478,BFS + 模拟)
The___Flash
博客等级 码龄8年 79粉丝 223原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值