time limit: 50 sec memory limit: 256 mb
[submit][status][discuss]
有乙個長度為n的序列,有三個操作1.i a b c表示將[a,b]這一段區間的元素集體增加c,2.r a b表示將[a,b]區間內所有元素變成相反數,3.q a b c表示詢問[a,b]這一段區間中選擇c個數相乘的所有方案的和mod 19940417的值。
第一行兩個數n,q表示序列長度和操作個數。
第二行n個非負整數,表示序列。
接下來q行每行輸入乙個操作i a b c或者 r a b或者q a b c意義如題目描述。
對於每個詢問,輸出選出c個數相乘的所有方案的和mod19940417的值。
5 51 2 3 4 5
i 2 3 1
q 2 4 2
r 1 5
i 1 3 -1
q 1 5 1
4019940397
樣例說明
做完第乙個操作序列變為1 3 4 4 5。
第一次詢問結果為3*4+3*4+4*4=40。
做完r操作變成-1 -3 -4 -4 -5。
做完i操作變為-2 -4 -5 -4 -5。
第二次詢問結果為-2-4-5-4-5=-20。
100%的資料n<=50000,q<=50000,初始序列的元素的絕對值<=109,i a b c中保證[a,b]是乙個合法區間,|c|<=109,r a b保證[a,b]是個合法的區間。q a b c中保證[a,b]是個合法的區間1<=c<=min(b-a+1,20)。
中國國家隊清華集訓 2012-2013 第三天
我寫的題解看這裡的t2
網上的參考題解
#include#include#include
using
namespace
std;
#define n 50001
const
int mod=19940417
;typedef
long
long
ll;int
n;int c[n][21
];int f[n<<2
];int siz[n<<2],mid[n<<2
];bool rev[n<<2
];struct node ans[n<<2
];void read(int &x)
while(isdigit(c))
x*=ff;
}int tot=0
;void mod(int &a,int
b)void pre(intn)}
void update(intk)}
void build(int k,int l,int
r) mid[k]=l+r>>1
; build(k
<<1,l,mid[k]); build(k<<1|1,mid[k]+1
,r);
update(k);
}void insert(int k,intw)}
void turn(int
k)void down(int
k)void add(int k,int l,int r,int opl,int opr,int
w) down(k);
if(opl<=mid[k]) add(k<<1
,l,mid[k],opl,opr,w);
if(opr>mid[k]) add(k<<1|1,mid[k]+1
,r,opl,opr,w);
update(k);
}void reverse(int k,int l,int r,int opl,int
opr)
down(k);
if(opl<=mid[k]) reverse(k<<1
,l,mid[k],opl,opr);
if(opr>mid[k]) reverse(k<<1|1,mid[k]+1
,r,opl,opr);
update(k);
}node query(
int k,int l,int r,int opl,int opr,int
w)
return
tmp;
}}int
main()
else
if(c[0]=='
r') reverse(1,1
,n,l,r);
else
}}
BZOJ2962 序列操作
題目大意 給定n個數,要求支援區間加,區間取相反數,區間查詢任意選c c 20 個數的所有方案中乘積的和 和維護k次方的和很像,想要維護選c個數,就要把選1 c個數的方案全部維護出來 這樣當合併兩個區間的時候 pushup 只需要列舉左右區間分別取了幾個數即可 現在考慮兩種修改操作 1.區間取相反數...
bzoj2962 序列操作
有乙個長度為n的序列,有三個操作1.i a b c表示將 a,b 這一段區間的元素集體增加c,2.r a b表示將 a,b 區間內所有元素變成相反數,3.q a b c表示詢問 a,b 這一段區間中選擇c個數相乘的所有方案的和mod 19940417的值。第一行兩個數n,q表示序列長度和操作個數。第...
BZOJ 2962 序列操作
有乙個長度為n的序列,有三個操作1.i a b c表示將 a,b 這一段區間的元素集體增加c,2.r a b表示將 a,b 區間內所有元素變成相反數,3.q a b c表示詢問 a,b 這一段區間中選擇c個數相乘的所有方案的和mod 19940417的值。第一行兩個數n,q表示序列長度和操作個數。第...