BZOJ3038 上帝造題的七分鐘2

2022-05-02 15:18:08 字數 2677 閱讀 7674

time limit: 3 sec  memory limit: 128 mb

submit: 1715  solved: 728

[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,謝謝!

對於求根號,直接暴力到線段樹葉子即可,可以證明最多根號loglogn次就能減到1

正當我以為自己寫的有瑕疵打算對拍,而且即將打完時,突然想起

「資料不保證l<=r 若l>r,請自行交換l,r,謝謝! 」

mdzz

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9

#define min(a, b) ((a) < (b) ? (a) : (b))

10#define max(a, b) ((a) > (b) ? (a) : (b))

11#define abs(a) ((a) < 0 ? (-1 * (a)) : (a))

12 inline void swap(long

long &a, long

long &b)

1316 inline void read(long

long &x)

1723

24const

long

long inf = 0x3f3f3f3f;25

const

long

long maxn = 100000 + 10;26

27long

long

n, num[maxn], m;

2829

struct

node

3033 node()

34 }node[maxn << 2

];35

36 node merge(node &a, node &b)

3744

45void build(long

long o = 1, long

long l = 1, long

long r =n)

4653

long

long mid = (l + r) >> 1

;54 build(o << 1

, l, mid);

55 build(o << 1 | 1, mid + 1

, r);

56 node[o] = merge(node[o << 1], node[o << 1 | 1

]);57

return;58

}5960 node ask(long

long ll, long

long rr, long

long o = 1)61

7172

void modify(long

long ll, long

long rr, long

long o = 1)73

79if(node[o].ma <= 1) return;80

long

long mid = (node[o].l + node[o].r) >> 1;81

if(mid >= ll) modify(ll, rr, o << 1

);82

if(mid < rr) modify(ll, rr, o << 1 | 1

);83 node[o] = merge(node[o << 1], node[o << 1 | 1

]);84

return;85

}8687int

main()

88103

else

modify(tmp2, t***);

104}

105return0;

106 }

bzoj3038

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...