#include #include #include

多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > BZOJ 1798 Ahoi 2009 維護(hù)序列seq

BZOJ 1798 Ahoi 2009 維護(hù)序列seq

來源:程序員人生   發(fā)布時間:2014-09-30 03:41:45 閱讀次數(shù):3517次

題目大意:維護(hù)一個序列,能夠區(qū)間加,區(qū)間乘,然后取區(qū)間和模一個數(shù)的值。


思路:線段樹維護(hù)一個有兩個域的標(biāo)記,一個表示加,一個表示乘。下傳的時候一起下傳,先乘后加。


CODE:


#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAX 100010 #define MO p #define LEFT (pos << 1) #define RIGHT (pos << 1|1) #define CNT (r - l + 1) using namespace std; long long p; struct Mark{ long long p_mark,m_mark; Mark() { m_mark = 1; p_mark = 0; } void operator +=(long long c) { p_mark = (p_mark + c) % MO; } void operator *=(long long c) { p_mark = (p_mark * c) % MO; m_mark = (m_mark * c) % MO; } void operator +=(const Mark &a) { m_mark = (m_mark * a.m_mark) % MO; p_mark = (p_mark * a.m_mark + a.p_mark) % MO; } }; struct Complex{ long long sum; Mark mark; }tree[MAX << 2]; int cnt,asks; long long src[MAX]; void BuildTree(int l,int r,int pos); void Mulitiply(int l,int r,int x,int y,int pos,long long c); void Plus(int l,int r,int x,int y,int pos,long long c); int Ask(int l,int r,int x,int y,int pos); inline void PushDown(int pos,int cnt); int main() { cin >> cnt >> p; for(int i = 1;i <= cnt; ++i) scanf("%lld",&src[i]); BuildTree(1,cnt,1); cin >> asks; for(int flag,i = 1;i <= asks; ++i) { scanf("%d",&flag); int x,y,z; switch(flag) { case 1: scanf("%d%d%d",&x,&y,&z); Mulitiply(1,cnt,x,y,1,z); break; case 2: scanf("%d%d%d",&x,&y,&z); Plus(1,cnt,x,y,1,z); break; case 3: scanf("%d%d",&x,&y); printf("%d ",(int)Ask(1,cnt,x,y,1)); break; } } return 0; } void BuildTree(int l,int r,int pos) { tree[pos].mark.p_mark = 0; tree[pos].mark.m_mark = 1; if(l == r) { tree[pos].sum = src[l] % MO; return ; } int mid = (l + r) >> 1; BuildTree(l,mid,LEFT); BuildTree(mid + 1,r,RIGHT); tree[pos].sum = (tree[LEFT].sum + tree[RIGHT].sum) % MO; } void Mulitiply(int l,int r,int x,int y,int pos,long long c) { if(l == x && y == r) { tree[pos].sum = (tree[pos].sum * c) % MO; tree[pos].mark *= c; return ; } PushDown(pos,CNT); int mid = (l + r) >> 1; if(y <= mid) Mulitiply(l,mid,x,y,LEFT,c); else if(x > mid) Mulitiply(mid + 1,r,x,y,RIGHT,c); else { Mulitiply(l,mid,x,mid,LEFT,c); Mulitiply(mid + 1,r,mid + 1,y,RIGHT,c); } tree[pos].sum = (tree[LEFT].sum + tree[RIGHT].sum) % MO; } void Plus(int l,int r,int x,int y,int pos,long long c) { if(l == x && y == r) { tree[pos].sum = (tree[pos].sum + (c * CNT) % MO) % MO; tree[pos].mark += c; return ; } PushDown(pos,CNT); int mid = (l + r) >> 1; if(y <= mid) Plus(l,mid,x,y,LEFT,c); else if(x > mid) Plus(mid + 1,r,x,y,RIGHT,c); else { Plus(l,mid,x,mid,LEFT,c); Plus(mid + 1,r,mid + 1,y,RIGHT,c); } tree[pos].sum = (tree[LEFT].sum + tree[RIGHT].sum) % MO; } int Ask(int l,int r,int x,int y,int pos) { if(l == x && y == r) return tree[pos].sum; PushDown(pos,CNT); int mid = (l + r) >> 1; if(y <= mid) return Ask(l,mid,x,y,LEFT); if(x > mid) return Ask(mid + 1,r,x,y,RIGHT); int left = Ask(l,mid,x,mid,LEFT); int right = Ask(mid + 1,r,mid + 1,y,RIGHT); return (left + right) % MO; } inline void PushDown(int pos,int cnt) { if(tree[pos].mark.m_mark == 1 && !tree[pos].mark.p_mark) return ; tree[LEFT].mark += tree[pos].mark; tree[RIGHT].mark += tree[pos].mark; if(tree[pos].mark.m_mark != 1) { tree[LEFT].sum = (tree[LEFT].sum * tree[pos].mark.m_mark) % MO; tree[RIGHT].sum = (tree[RIGHT].sum * tree[pos].mark.m_mark) % MO; tree[pos].mark.m_mark = 1; } if(tree[pos].mark.p_mark) { tree[LEFT].sum = (tree[LEFT].sum + ((cnt - (cnt >> 1)) * tree[pos].mark.p_mark) % MO) % MO; tree[RIGHT].sum = (tree[RIGHT].sum + ((cnt >> 1) * tree[pos].mark.p_mark) % MO) % MO; tree[pos].mark.p_mark = 0; } }

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 欧美成人精品一区二三区在线观看 | 国产精品 第二页 | 嫩草影院在线观看未满十八 | 日韩免费高清一级毛片在线 | 伊人久久中文字幕久久cm | 爱爱一级 | 欧美精品综合一区二区三区 | 欧美综合精品一区二区三区 | 亚洲精品国产福利在线观看 | 国产中的精品一区的 | 国产日韩精品欧美一区喷 | 亚洲精品福利 | 亚洲作爱视频 | 精品久久精品久久 | 精品一区二区三区高清免费不卡 | 久久久国产精品免费 | 国产精品久久久久久吹潮 | 日韩精品一区二区三区小说 | 午夜国产精品福利在线观看 | 久草成人| jizz免费一区二区三区 | 成人亲子乱子伦视频 | 国产亚洲精品热视频在线观看 | 久久久无码精品亚洲日韩按摩 | 久久天堂成人影院 | 国产精品一区二区三区高清在线 | 嗯啊羞羞视频在线观看动漫 | 爱就操 | 亚洲免费在线视频播放 | 可以看的毛片网站 | 伊人剧场 | 毛片999| 高清午夜线观看免费 | 午夜免费体验 | ppypp日本欧美一区二区 | 视频一区二区免费 | 日本卡1卡2卡4卡免费 | 欧美日韩在线观看一区 | 亚洲欧美综合在线观看 | 亚洲国产综合精品中文第一区 | 中文字幕第315页 |