time limit: 3 sec memory limit: 128 mb submit: 1532 solved: 657 [submit][status][discuss]
xlk覺得《上帝造題的七分鐘》不太過癮,於是有了第二部。 "第一分鐘,x說,要有數列,於是便給定了乙個正整數數列。 第二分鐘,l說,要能修改,於是便有了對一段數中每個數都開平方(下取整)的操作。 第三分鐘,k說,要能查詢,於是便有了求一段數的和的操作。 第四分鐘,彩虹喵說,要是noip難度,於是便有了資料範圍。 第五分鐘,詩人說,要有韻律,於是便有了時間限制和記憶體限制。 第六分鐘,和雪說,要省點事,於是便有了保證運算過程中及最終結果均不超過64位有符號整數型別的表示範圍的限制。 第七分鐘,這道題終於造完了,然而,造題的神牛們再也不想寫這道題的程式了。" ——《上帝造題的七分鐘·第二部》 所以這個神聖的任務就交給你了。
第一行乙個整數n,代表數列中數的個數。 第二行n個正整數,表示初始狀態下數列中的數。 第三行乙個整數m,表示有m次操作。 接下來m行每行三個整數k,l,r,k=0表示給[l,r]中的每個數開平方(下取整),k=1表示詢問[l,r]中各個數的和。
對於詢問操作,每行輸出乙個回答。
101 2 3 4 5 6 7 8 9 10
50 1 10
1 1 10
1 1 5
0 5 8
1 4 8197
61:對於100%的資料,1<=n<=100000,1<=l<=r<=n,數列中的數大於0,且不超過1e12。
2:資料不保證l<=r 若l>r,請自行交換l,r,謝謝!
考慮到開方數字下降得非常快,並且除了開方沒有其它修改,那麼每次開方暴力開就行了,維護乙個max和sum,當然區間最大值等於$1$了就沒必要往下走了,那麼詢問是$o(log(n))$的,修改是均攤$o(1)$的(聽說還能用並查集做??)
#include #include#include
#include
using
namespace
std;
typedef
long
long
ll;char buf[10000000], *ptr = buf - 1
;inline ll readll()
returnn;}
inline
intreadint()
return
n;
}const
int maxn = 100000 + 10
;#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1ll max[maxn
<< 2], sum[maxn << 2
];void inline pushup(int
rt)void build(int l, int r, int
rt)}
intql, qr;
void update(int l, int r, int
rt)
else
}ll query(
int l, int r, int
rt)}
intmain()
return0;
}
bzoj 3038 上帝造題的七分鐘2
time limit 3 sec memory limit 128 mb submit 923 solved 413 submit status discuss xlk覺得 上帝造題的七分鐘 不太過癮,於是有了第二部。第一分鐘,x說,要有數列,於是便給定了乙個正整數數列。第二分鐘,l說,要能修改,於...
BZOJ 3038 上帝造題的七分鐘2
description xlk覺得 上帝造題的七分鐘 不太過癮,於是有了第二部。第一分鐘,x說,要有數列,於是便給定了乙個正整數數列。第二分鐘,l說,要能修改,於是便有了對一段數中每個數都開平方 下取整 的操作。第三分鐘,k說,要能查詢,於是便有了求一段數的和的操作。第四分鐘,彩虹喵說,要是noip...
bzoj3038 上帝造題的七分鐘2
description xlk覺得 上帝造題的七分鐘 不太過癮,於是有了第二部。第一分鐘,x說,要有數列,於是便給定了乙個正整數數列。第二分鐘,l說,要能修改,於是便有了對一段數中每個數都開平方 下取整 的操作。第三分鐘,k說,要能查詢,於是便有了求一段數的和的操作。第四分鐘,彩虹喵說,要是noip...