時間限制: 1 s
空間限制: 64000 kb
題目等級 : 大師 master
題解xlk覺得《上帝造題的七分鐘》不太過癮,於是有了第二部。
"第一分鐘,x說,要有數列,於是便給定了乙個正整數數列。
第二分鐘,l說,要能修改,於是便有了對一段數中每個數都開平方(下取整)的操作。
第三分鐘,k說,要能查詢,於是便有了求一段數的和的操作。
第四分鐘,彩虹喵說,要是noip難度,於是便有了資料範圍。
第五分鐘,詩人說,要有韻律,於是便有了時間限制和記憶體限制。
第六分鐘,和雪說,要省點事,於是便有了保證運算過程中及最終結果均不超過64位有符號整數型別的表示範圍的限制。
第七分鐘,這道題終於造完了,然而,造題的神牛們再也不想寫這道題的程式了。"
——《上帝造題的七分鐘·第二部》
所以這個神聖的任務就交給你了。
輸入描述 input description
第一行乙個整數n,代表數列中數的個數。
第二行n個正整數,表示初始狀態下數列中的數。
第三行乙個整數m,表示有m次操作。
接下來m行每行三個整數k,l,r,k=0表示給[l,r]中的每個數開平方(下取整),k=1表示詢問[l,r]中各個數的和。
upd:注意資料中有可能l>r,所以遇到這種情況請交換l和r。
輸出描述 output description
對於詢問操作,每行輸出乙個回答。
樣例輸入 sample input
101 2 3 4 5 6 7 8 9 10
50 1 10
1 1 10
1 1 5
0 5 8
1 4 8
樣例輸出 sample output197
6資料範圍及提示 data size & hint
對於30%的資料,1<=n,m<=1000,數列中的數不超過32767。
對於100%的資料,1<=n,m<=100000,1<=l,r<=n,數列中的數大於0,且不超過1e12。
注意l有可能大於r,遇到這種情況請交換l,r。
樹狀陣列+路徑壓縮
1 #include2 #include3 #include4 #include5 #include6 #include7#define lli long long int
8using
namespace
std;
9const lli maxn=1000001
;10 inline void read(lli &n)
1114
while(c>='
0'&&c<='9')
15 flag==1?n=-x:n=x;16}
17lli tree[maxn];
18lli a[maxn];
19lli f[maxn];
20lli n,m,tmp;
21 lli lb(lli &x)
2225
void
add_tree(lli pos,lli v)
2632}33
lli interval_sum(lli pos)
3441
return
ans;42}
43lli find(lli x)
4449
intmain()
5059
read(m);
60for(lli i=1;i<=m;i++)
6177}78
else
//詢問
79 printf("
%lld\n
",interval_sum(r)-interval_sum(l-1
));80}81
return0;
82 }
CodeVS2492 上帝造題的七分鐘2
題目描述 description xlk覺得 上帝造題的七分鐘 不太過癮,於是有了第二部。第一分鐘,x說,要有數列,於是便給定了乙個正整數數列。第二分鐘,l說,要能修改,於是便有了對一段數中每個數都開平方 下取整 的操作。第三分鐘,k說,要能查詢,於是便有了求一段數的和的操作。第四分鐘,彩虹喵說,要...
上帝造題的七分鐘2
xlk覺得 上帝造題的七分鐘 不太過癮,於是有了第二部。第一分鐘,x說,要有數列,於是便給定了乙個正整數數列。第二分鐘,l說,要能修改,於是便有了對一段數中每個數都開平方 下取整 的操作。第三分鐘,k說,要能查詢,於是便有了求一段數的和的操作。第四分鐘,彩虹喵說,要是noip難度,於是便有了資料範圍...
codevs2492上帝造題的七分鐘 2(線段樹)
區間修改 區間查詢 可以用線段樹搞 但是一般的標記下放對這個題好像不合適 只能改葉子 然後更新父親 雖然跑的有點慢 小優化 如果某個點是1 就不用再開方了 所以搞乙個f i 標記 i 這個點還需不需要處理下去 注意用longlong 還有就是陣列開大 include include include ...