给出一些数组a[i],每次询问为li,ri,定义f[li]=a[li],f[li+1]=a[li+1],对于其他不超过ri的位置,f[x]=f[x-1]+a[x]*f[x-2] 。

题目有着浓浓的矩阵气息。

f[x]=f[x-1]+a[x]*f[x-2]

f[x-1]=f[x-1]+0

根据上面两个我们就可以知道

f[x]=========|1,a[x]|         f[x-1]

f[x-1]=======|1 ,  0|         f[x-2]

这样我们就把矩阵构造出来了,相当于每次询问某一段区间的矩阵的乘积。

由于是连续的区间,线段树即可解决问题。

注意矩阵是放在左边,所以大的位置放在左边,线段树操作的时候也需要注意了。

召唤代码君:

#include <iostream>
#include <cstring>
#include <cstdio>
#define maxn 300300
#define mod 1000000007
typedef long long ll;
using namespace std; class Mat{
public:
ll f[][];
Mat() { f[][]=f[][]=f[][]=f[][]=; }
Mat(int f1,int f2,int f3,int f4){
f[][]=f1,f[][]=f2,f[][]=f3,f[][]=f4;
}
Mat operator * (Mat m1) const{
Mat m0;
for (int i=; i<; i++)
for (int j=; j<; j++)
for (int k=; k<; k++)
m0.f[i][j]=(m0.f[i][j]+f[i][k]*m1.f[k][j])%mod;
return m0;
}
void output(){
cout<<f[][]<<' '<<f[][]<<'\n'<<f[][]<<' '<<f[][]<<'\n';
}
}tree[maxn]; int n,m,T,a[maxn]; void build(int rt,int l,int r)
{
if (l==r){
tree[rt]=Mat(,a[l],,);
return;
}
int mid=(l+r)>>;
build(rt<<,l,mid);
build(rt<<|,mid+,r);
tree[rt]=tree[rt<<|]*tree[rt<<];
} Mat query(int rt,int l,int r,int L,int R)
{
if (L<=l && R>=r) return tree[rt];
int mid=(l+r)>>;
Mat tot(,,,);
if (R> mid) tot=query(rt<<|,mid+,r,L,R);
if (L<=mid) tot=tot*query(rt<<,l,mid,L,R);
return tot;
} int main()
{
int x,y;
scanf("%d",&T);
while (T--)
{
scanf("%d%d",&n,&m);
for (int i=; i<=n; i++) scanf("%d",&a[i]);
build(,,n);
while (m--)
{
scanf("%d%d",&x,&y);
if (y==x || y==x+){
if (y==x) printf("%d\n",a[x]);
else printf("%d\n",a[x+]);
continue;
}
Mat tmp=query(,,n,x+,y);
/*
cout<<" ans Mat is : \n";
tmp.output();
cout<<" ........... the end of Mat.";
*/
printf("%d\n",(int)((tmp.f[][]*a[x+]+tmp.f[][]*a[x])%mod));
}
}
return ;
}

ZOJ3772_Calculate the Function的更多相关文章

  1. 通过百度echarts实现数据图表展示功能

    现在我们在工作中,在开发中都会或多或少的用到图表统计数据显示给用户.通过图表可以很直观的,直接的将数据呈现出来.这里我就介绍说一下利用百度开源的echarts图表技术实现的具体功能. 1.对于不太理解 ...

  2. jsp中出现onclick函数提示Cannot return from outside a function or method

    在使用Myeclipse10部署完项目后,原先不出错的项目,会有红色的叉叉,JSP页面会提示onclick函数错误 Cannot return from outside a function or m ...

  3. JavaScript function函数种类

    本篇主要介绍普通函数.匿名函数.闭包函数 目录 1. 普通函数:介绍普通函数的特性:同名覆盖.arguments对象.默认返回值等. 2. 匿名函数:介绍匿名函数的特性:变量匿名函数.无名称匿名函数. ...

  4. 在ubuntu16.10 PHP测试连接MySQL中出现Call to undefined function: mysql_connect()

    1.问题: 测试php7.0 链接mysql数据库的时候发生错误: Fatal error: Uncaught Error: Call to undefined function mysqli_con ...

  5. jquery中的$(document).ready(function() {});

    当文档载入时执行function函数里的代码, 这部分代码主要声明,页面加载后 "监听事件" 的方法.例如: $(document).ready( $("a") ...

  6. Function.prototype.toString 的使用技巧

    Function.prototype.toString这个原型方法可以帮助你获得函数的源代码, 比如: function hello ( msg ){ console.log("hello& ...

  7. 转:ORA-15186: ASMLIB error function = [asm_open], error = [1], 2009-05-24 13:57:38

    转:ORA-15186: ASMLIB error function = [asm_open], error = [1], 2009-05-24 13:57:38http://space.itpub. ...

  8. [Xamarin] 透過Native Code呼叫 JavaScript function (转帖)

    今天我們來聊聊關於如何使用WebView 中的Javascript 來呼叫 Native Code 的部分 首先,你得先來看看這篇[Xamarin] 使用Webview 來做APP因為這篇文章至少講解 ...

  9. Oracle数据库自动备份SQL文本:Procedure存储过程,View视图,Function函数,Trigger触发器,Sequence序列号等

    功能:备份存储过程,视图,函数触发器,Sequence序列号等准备工作:--1.创建文件夹 :'E:/OracleBackUp/ProcBack';--文本存放的路径--2.执行:create or ...

随机推荐

  1. 极限编程之TDD

         测试驱动开发(Test-Driven Development,TDD)是通过测试定义所要开发的功能的接口,然后实现功能的开发过程. Test-Driven Development(TDD), ...

  2. BlockingQueue深入分析

    1.BlockingQueue定义的常用方法如下   抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offer(e,time,unit) 移除 remove() p ...

  3. python3爬虫 url管理器

    import urllib.request #python3中将urllib2拆分为了urllib.request.urllib.error.urllib.response等 import http. ...

  4. 【javascript基础】5、创建对象

    前言 今天从家里回到了学校,在家呆了十天,胖了几斤的重量,又折腾回学校了,春节回家真是艰辛的路途.随便扯扯我的往返行程:为了省钱我没有选择直飞到长春往返都是到北京转的,这样我和女朋友可以节省4000块 ...

  5. /etc/resolv.conf overwritten. Redhat/Centos

    Prevent /etc/resolv.conf from being blown away by RHEL/CentOS after customizing If you are using RHE ...

  6. javascript MVC(每天有学习一点篇)

    “写的不是代码,是你的思维”,经常觉得自己写的代码“皮粗肉糙”的,看到那些要么精致小巧,要么优雅大方,要么光明磊落的代码时,常常会黯然神伤外加垂涎欲滴. why?(为什么我的代码不能如此..) whe ...

  7. AIDL学习

    (转自)可以参见:http://www.2cto.com/kf/201406/312244.html 1.为什么要有AIDL? 无论学什么东西,最先得弄明白为什么要有这个东西,不要说存在即是合理,存在 ...

  8. PIC32MZ tutorial -- Blinky LED

    Today I finish the "Blinky LED" application on PIC32MZ starter kit. This application let L ...

  9. shell_基础知识

    参考: http://blog.csdn.net/kaizi318/article/details/9343551 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告 ...

  10. Java和C++中的static

    1.Java类中的static变量和static方法会在类装载的过程中就得到内存分配,然后就会进行初始化工作.最多可能会被初始化3次,静态代码块的执行在main方法之前. static变量不可以在构造 ...