description
老師交給小可可乙個維護數列的任務,現在小可可希望你來幫他完成。 有長為n的數列,不妨設為a1,a2,…,an 。有如下三種操作形式: (1)把數列中的一段數全部乘乙個值; (2)把數列中的一段數全部加乙個值; (3)詢問數列中的一段數的和,由於答案可能很大,你只需輸出這個數模p的值。
input
第一行兩個整數n和p(1≤p≤1000000000)。第二行含有n個非負整數,從左到右依次為a1,a2,…,an, (0≤ai≤1000000000,1≤i≤n)。第三行有乙個整數m,表示操作總數。從第四行開始每行描述乙個操作,輸入的操作有以下三種形式: 操作1:「1 t g c」(不含雙引號)。表示把所有滿足t≤i≤g的ai改為ai×c (1≤t≤g≤n,0≤c≤1000000000)。 操作2:「2 t g c」(不含雙引號)。表示把所有滿足t≤i≤g的ai改為ai+c (1≤t≤g≤n,0≤c≤1000000000)。 操作3:「3 t g」(不含雙引號)。詢問所有滿足t≤i≤g的ai的和模p的值 (1≤t≤g≤n)。 同一行相鄰兩數之間用乙個空格隔開,每行開頭和末尾沒有多餘空格。
output
對每個操作3,按照它在輸入中出現的順序,依次輸出一行乙個整數表示詢問結果。
sample input
7 431 2 3 4 5 6 7
51 2 5 5
3 2 4
2 3 7 9
3 1 3
3 4 7
sample output
2358
hint
【樣例說明】
初始時數列為(1,2,3,4,5,6,7)。
經過第1次操作後,數列為(1,10,15,20,25,6,7)。
對第2次操作,和為10+15+20=45,模43的結果是2。
經過第3次操作後,數列為(1,10,24,29,34,15,16}
對第4次操作,和為1+10+24=35,模43的結果是35。
對第5次操作,和為29+34+15+16=94,模43的結果是8。
測試資料規模如下表所示
資料編號 1 2 3 4 5 6 7 8 9 10
n= 10 1000 1000 10000 60000 70000 80000 90000 100000 100000
m= 10 1000 1000 10000 60000 70000 80000 90000 100000 100000
題解:區間問題,三個操作。1:把區間內的數乘上c,2:把區間內的數加上c,3:求區間和。
上篇我們寫過2,3操作的題,這次加了乙個操作,方法跟上題相同,再加乙個標記,加法:add。乘法:mul
注意標記下傳時。具體解釋看**部分。
**:#include #include #include #include #include #include #define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 100010
using namespace std;
ll sum[maxn<<2];
ll add[maxn<<2];
ll mul[maxn<<2];
ll mod;
void pushup(int rt)//向上更新
void pushdown(int rt,int m)//向下更新
void build(int l, int r, int rt)
int m = (l + r) >> 1;
build(lson);
build(rson);
pushup(rt);
}void update(int l, int r,int c,int cc, int l, int r, int rt)
int m=(r+l)>>1;
if(l<=m)
update(l,r,c,cc,lson);
if(r>m)
update(l,r,c,cc,rson);
pushup(rt);
}ll query(int l, int r, int l, int r, int rt)
int main()
{ int n,m,d;
scanf("%d%d",&n,&mod);
build(1, n, 1);
scanf("%d",&m);
for(int i=0; i
多標記處理(2)UVA 11402
題面下不出來 如果有想做的vj查 uva 11402 吧。給出題意 對乙個01區間進行4種操作。1 區間值都置為1.2 區間值都置為0.3 區間值01互換。4求出區間和。題解 第乙個操作可以等效成區間值 0 1.第二個操作可以等效成區間值 0.第三個操作可以等效成區間值 1 1。第四個操作就是線段樹...
MPLS 多協議標記交換
mpls multi propocol label switching 即多協議標記交換。mpls是一種在開放的通訊網上利用標籤引導資料高速 高效傳輸的新技術。它的價值在於能夠在乙個無連線的網路中引入連線模式的特性 其主要優點是減少了網路複雜性,相容現有各種主流網路技術,能降低50 網路成本,在提供...
批處理刪除SVN標記
簡單的說,批處理就是一些dos命令的組合。今天小試牛刀,寫了第乙個批處理程式,順便也了解了一下常用的dos命令。以前總覺得dos的東西有些過時,一直沒有好好的學過,初次嘗試了一下其便利性,也算多了一點知識。程式 如下 echo off start 啟動過程,切換目錄 set pwd cd cd 1 ...