<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      CF719E. Sasha and Array [線段樹維護(hù)矩陣]

      CF719E. Sasha and Array

      題意:

      對(duì)長(zhǎng)度為 n 的數(shù)列進(jìn)行 m 次操作, 操作為:

      1. a[l..r] 每一項(xiàng)都加一個(gè)常數(shù) C, 其中 0 ≤ C ≤ 10^9
      2. 求 F[a[l]]+F[a[l+1]]+...F[a[r]] mod 1e9+7 的余數(shù)

      矩陣快速冪求斐波那契

      矩陣滿足乘法分配律和結(jié)合律!

      所以可以每個(gè)節(jié)點(diǎn)維護(hù)矩陣/矩陣和,區(qū)間加相當(dāng)于區(qū)間乘矩陣

      注意:不要把快速冪寫在里面,復(fù)雜度平添一個(gè)log。把\(B^C\)算出來之后傳進(jìn)去就好了

      #include <iostream>
      #include <cstdio>
      #include <algorithm>
      #include <cstring>
      using namespace std;
      typedef long long ll;
      #define lc x<<1
      #define rc x<<1|1
      #define mid ((l+r)>>1)
      #define lson lc, l, mid
      #define rson rc, mid+1, r
      const int N = 1e5+5, P = 1e9+7;
      
      int n, m;
      struct Matrix {
      	ll a[2][2];
      	ll* operator [](int x) {return a[x];}
      	Matrix(int p=0) {
      		if(!p) a[0][0] = a[0][1] = a[1][0] = a[1][1] = 0;
      		else a[0][0] = a[1][1] = 1, a[0][1] = a[1][0] = 0;
      	}
      } B;
      
      Matrix operator + (Matrix a, Matrix b) {
      	Matrix c;
      	for(int i=0; i<2; i++)
      		for(int j=0; j<2; j++)
      			c[i][j] = (a[i][j] + b[i][j]) %P;
      	return c;
      }
      
      Matrix operator * (Matrix a, Matrix b) {
      	Matrix c;
      	for(int i=0; i<2; i++)
      		for(int j=0; j<2; j++) {
      			ll &x = c[i][j];
      			for(int k=0; k<2; k++) 
      				x = (x + a[i][k] * b[k][j] %P) %P;
      		}
      	return c;
      }
      
      Matrix operator ^ (Matrix a, int b) {
      	Matrix ans(1); 
      	ans[0][0] = ans[1][1] = 1;
      	for(; b; b>>=1, a=a*a)
      		if(b & 1) ans = ans*a;
      	return ans;
      }
      
      struct meow {
      	Matrix f;
      	Matrix v;
      	int c;
      	meow() {f[0][0] = 1; v[0][0] = v[1][1] = 1;}
      } t[N<<2];
      
      void paint(int x, int l, int r, int d, Matrix &v) {
      	t[x].c += d;
      	t[x].v = v * t[x].v;
      	t[x].f = v * t[x].f;
      }
      void push_down(int x, int l, int r) {
      	if(t[x].c) {
      		paint(lson, t[x].c, t[x].v);
      		paint(rson, t[x].c, t[x].v);
      		t[x].c = 0;
      		t[x].v = Matrix(1);
      	}
      }
      void merge(int x) {
      	t[x].f = t[lc].f + t[rc].f;
      }
      
      void build(int x, int l, int r) {
      	if(l == r) {
      		cin >> t[x].c;
      		if(t[x].c > 1) t[x].f = (B ^ (t[x].c - 1)) * t[x].f;
      	} else {
      		build(lson);
      		build(rson);
      		merge(x);
      	}
      }
      
      void Add(int x, int l, int r, int ql, int qr, int d, Matrix &v) {
      	if(ql <= l && r <= qr) paint(x, l, r, d, v);
      	else {
      		push_down(x, l, r);
      		if(ql <= mid) Add(lson, ql, qr, d, v);
      		if(mid < qr)  Add(rson, ql, qr, d,v );
      		merge(x);
      	}
      }
      
      ll Que(int x, int l, int r, int ql, int qr) {
      	if(ql <= l && r <= qr) return t[x].f[0][0];
      	else {
      		push_down(x, l, r);
      		ll ans = 0;
      		if(ql <= mid) ans = (ans + Que(lson, ql, qr)) %P;
      		if(mid < qr)  ans = (ans + Que(rson, ql, qr)) %P;
      		return ans;
      	}
      }
      
      int main() {
      	//freopen("in", "r", stdin);
      	ios::sync_with_stdio(false); cin.tie(); cout.tie();
      
      	B[0][0] = B[0][1] = B[1][0] = 1;
      	cin >> n >> m;
      	build(1, 1, n);
      
      
      	for(int i=1; i<=m; i++) {
      		int tp, l, r, x;
      		cin >> tp >> l >> r;
      		if(tp == 1) {
      			cin >> x;
      			Matrix t = B^x;
      			Add(1, 1, n, l, r, x, t);
      		} else cout << Que(1, 1, n, l, r) << '\n';
      	}
      
      
      posted @ 2018-07-16 20:16  Candy?  閱讀(407)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 精品在免费线中文字幕久久| 欧美成人一卡二卡三卡四卡| 亚洲一区二区三区在线激情| 国产高清视频在线播放www色| 九九久久精品国产| 国产精品成人午夜福利| 黑人强伦姧人妻久久| 国内偷自第一区二区三区| 亚洲成在人线AV品善网好看| 丰满岳乱妇一区二区三区| 欧美肥老太牲交大战| 伦伦影院午夜理论片| 小伙无套内射老熟女精品| 亚洲成A人片在线观看的电影| 99久久久无码国产精品免费| 西西444www高清大胆| 日本三级香港三级人妇99| 中文字幕乱码一区二区免费| 日韩少妇内射免费播放 | 越南毛茸茸的少妇| 极品无码国模国产在线观看| 成人免费无遮挡在线播放| 国产精品va在线观看无码| аⅴ天堂中文在线网| 亚洲中少妇久久中文字幕| 国内精品久久久久影院蜜芽| 久久久亚洲精品无码| 亚洲18禁一区二区三区| 一区二区三区四区黄色网| 亚洲永久视频| 国产国产午夜福利视频| 精品久久久久中文字幕日本| 中文字幕在线无码一区二区三区| 国内熟女中文字幕第一页| 少妇太爽了在线观看免费视频| 2018天天拍拍天天爽视频| 波多野结衣久久一区二区| 国产性色的免费视频网站| 中文字幕无码免费久久9一区9| 精品亚洲国产成人av| 国产农村乱人伦精品视频|