#include #include #include

日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

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


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


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)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产中文字幕一区 | av福利网 | 欧美日韩亚洲一区二区三区 | 一区二区三区免费观看 | 成人在线高清 | 在线精品一区二区 | av在线播放网站 | 成人免费视频播放 | 国产精品福利片 | 国产黄大片在线观看 | 黄色毛片一级视频 | 国产成人综合一区 | 正在播放国产一区 | 精品国产乱码一区二区三区 | 黄色片一级免费 | 91精品国产日韩91久久久久久 | 成人在线一区二区三区 | 精品欧美一区二区三区 | 成人精品国产免费网站 | 国产精品1区| 精品日韩在线观看 | 二区影院| 午夜毛片 | 久久黄视频 | 亚洲欧洲精品一区二区 | 国产精品美女久久久免费 | 三级www| 操伊人| 国产精品久久久久久久免费软件 | 欧美日韩精品一区二区三区四区 | 在线成人www免费观看视频 | 成人高清 | 日韩一区不卡 | 欧美精品一区在线发布 | 成人爽视频 | 在线不卡一区二区 | 国产一区二区三区视频播放 | 麻豆最新网址 | av在线电影免费观看 | 午夜美女视频 | 日韩一区二区免费看 |