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

SDIO_WiFi驱动学习之安卓WLAN架构介绍及调用流程分析 一、引言 上一篇博客大概介绍了MMC子系统和SDIO相关知识及架构,这一篇博客则大致分析安卓的WLAN架构及上层如何调用WLAN驱动的流程。 虽然我工作的开发环境是安卓系统,但由于我不是专业的安卓应用/框架开发工程师,所以对安卓层的一些代码并不是特别熟悉,只能大致梳理流程,不专业的地方请谅解。 本文部分内容摘抄自网络,若有侵权,请联系删除。 二、安卓WLAN架构 1、应用框架(Application framework) 在应用程序框架级别是应用程序代码,它使用各种android.net.. 阅读详情

一.题目链接:

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;
}

 

从0到1:用Claude 3.7十日拿下教育部课题申报书(附可修改LaTeX模板) 🟣"作为教育部人文社科项目评审专家,请根据近三年立项数据分析,为[您的学科方向]领域推荐5个具有创新性且符合'十四五'规划的重点选题,要求选题体现交叉学科特征,并标注潜在理论突破点"🟣"根据前期研究基础,创建包含4个研究模块、12个关键节点的三维技术路线图,要求体现实验仿真-实证研究-理论建模的螺旋递进关系,并标注每个节点的预期成果形态"🟣"现在切换至教育部学科评审组组长模式,从选题价值、创新程度、研究可行性三个维度对本申报书进行盲审,生成包含9个扣分风险点的诊断报告及修改优先级排序" 阅读详情

相关推荐

Lumerical官方案例、FDTD时域有限差分法仿真学习(十八)——Y分支粒子群算法优化

组件优化是任何致力于开发高性能光子器件的设计过程的关键步骤。 此绝缘体上硅 Y 分支示例演示了适用于任意优化例程的通用组件形状参数化方法。 此示例中的算法是 Lumerical 的内置粒子群优化 (PSO),可通过用户界面轻松设置。 此外,建议的优化过程展示了如何将 varFDTD 与全 3D FDTD 求解器相结合,以显着减少优化时间,同时保持高精度。

weixin_45719141的博客 1万+

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

【rk3566/3568】Android 11移植gms

【rk3566/3568】Android 11移植gms 1、前言 测试功能时,想去Google play store去下个应用测试,发现通过网页搜索总是下载不到正确的谷歌服务框架;于是就不得不去搞一个内置的gms。 2、移植 1、需要下载Android 11对应的gms的包 opengapps 2、看下文件目录 直接移植core里面的文件,GAPPs Optional按需添加 3、在vendor下创建google目录 ...

lin_ff的博客 7646

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

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

老李2009 1214

G2O (General Graph Optimization)入门及简单使用

g2o全称是General Graph Optimization,也就是图优化,我们在做SLAM后端或者更加常见的任何优化问题(曲线拟合)都可以使用G2O进行处理。

晓晨的博客 1万+

如何利用Arcgis进行地统计学分析(三):空间插值方法选择与优化

本文深入探讨了在Arcgis中进行地统计学分析时,如何根据探索性数据分析(EDA)结果科学选择与优化空间插值方法。文章对比了IDW、RBF、克里金等主流方法的适用场景与核心参数,并通过实战案例详解了从数据诊断到模型调优的完整流程,强调结合半变异函数与趋势分析进行“对症下药”,以提升插值结果的精度与可靠性。

weixin_29281915的博客 120

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

实战指南:基于ELK与Grafana构建天融信防火墙日志可视化看板

本文详细介绍了如何基于ELK与Grafana构建天融信防火墙日志可视化看板,包括环境准备、日志收集与解析配置、Elasticsearch存储优化、Grafana看板设计等关键步骤。通过实战案例和优化技巧,帮助用户高效处理天融信防火墙日志,实现安全态势的可视化监控与分析。

weixin_34246529的博客 226

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

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

Gavin的专栏 806

【unity游戏开发入门到精通——UGUI】UI控件 —— Toggle开关切换控件

【unity游戏开发入门到精通——UGUI】UI控件 —— Toggle开关切换控件

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1845

1.2 Spring AI V1.1.2版本 架构全景:模块拆解与设计哲学

Override// 检查请求的 Token 数量throw new TokenLimitExceededException("请求超出 Token 限制");@Override// 记录实际消耗的 Token@Override// 最先执行// 接口// 不同实现// 使用方无需改变定义抽象,保证可移植性提供 Fluent API,提升开发体验Advisor 机制提供扩展点,支持灵活定制模块化设计让你只引入需要的依赖自动配置。

小林夕程的博客 220

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

【企业智能体开发】优化模型成本、延迟与失败降级

小林的培训快开始时,服务台花很久“思考最优回答”,体验并不会更好。反过来,为了省钱而始终选最轻的模型,若连房间、连接方式和任务状态都识别不稳,后续错误检索和重复建单会造成更大代价。企业 Agent 的优化对象不是单次模型调用价格,而是任务在可接受时间内、安全地推进到正确结果的总成本。

Mr数据杨 893

zoj 3772 Calculate the Function(矩阵乘法)

题意:

绝望的乐园 969

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

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

The___Flash的博客 862

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

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

The___Flash的博客 608

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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、付费专栏及课程。

余额充值