Poetize4 上帝造題的七分鐘2

2022-05-12 02:23:10 字數 1931 閱讀 5303

描述 description

"第一分鐘,x說,要有數列,於是便給定了乙個正整數數列。

第二分鐘,l說,要能修改,於是便有了對一段數中每個數都開平方(下取整)的操作。

第三分鐘,k說,要能查詢,於是便有了求一段數的和的操作。

第四分鐘,彩虹喵說,要是noip難度,於是便有了資料範圍。

第五分鐘,詩人說,要有韻律,於是便有了時間限制和記憶體限制。

第六分鐘,和雪說,要省點事,於是便有了保證運算過程中及最終結果均不超過64位有符號整數型別的表示範圍的限制。

第七分鐘,這道題終於造完了,然而,造題的神牛們再也不想寫這道題的程式了。"

——《上帝造題的七分鐘·第二部》

所以這個神聖的任務就交給你了。

輸入格式 inputformat

第一行乙個整數n,代表數列中數的個數。

第二行n個正整數,表示初始狀態下數列中的數。

第三行乙個整數m,表示有m次操作。

接下來m行每行三個整數k,l,r,k=0表示給[l,r]中的每個數開平方(下取整),k=1表示詢問[l,r]中各個數的和。

upd:注意資料中有可能l>r,所以遇到這種情況請交換l和r。

題解:以前就做過,因為每乙個數至多被開log2log2 x 次就變成1了,所以之前我們可以暴力開方,然後成了1之後就不用管他,直接把跳過它去開放沒有變成1的

這一步可以用並查集來搞

**:

1 #include2

3 #include4

5 #include6

7 #include8

9 #include10

11 #include12

13 #include14

15 #include16

17 #include

1819 #include20

21 #include

2223

#define inf 1000000000

2425

#define maxn 110000

2627

#define maxm 500+100

2829

#define eps 1e-10

3031

#define ll long long

3233

#define pa pair34

35#define for0(i,n) for(int i=0;i<=(n);i++)

3637

#define for1(i,n) for(int i=1;i<=(n);i++)

3839

#define for2(i,x,y) for(int i=(x);i<=(y);i++)

4041

#define for3(i,x,y) for(int i=(x);i>=(y);i--)

4243

#define mod 1000000007

4445

using

namespace

std;

4647

inline ll read()

4849

5455

while(ch>='

0'&&ch<='9')

5657

return x*f;

5859}60

intn,m,fa[maxn];

61ll s[maxn],a[maxn];

62 inline void add(int

x,ll y)

6366 inline ll sum(int

x)67

72 inline int find(int x)

7374

intmain()

757699}

100}

101102

return0;

103104 }

view code

上帝造題的七分鐘2

xlk覺得 上帝造題的七分鐘 不太過癮,於是有了第二部。第一分鐘,x說,要有數列,於是便給定了乙個正整數數列。第二分鐘,l說,要能修改,於是便有了對一段數中每個數都開平方 下取整 的操作。第三分鐘,k說,要能查詢,於是便有了求一段數的和的操作。第四分鐘,彩虹喵說,要是noip難度,於是便有了資料範圍...

2492 上帝造題的七分鐘 2

時間限制 1 s 空間限制 64000 kb 題目等級 大師 master 題解xlk覺得 上帝造題的七分鐘 不太過癮,於是有了第二部。第一分鐘,x說,要有數列,於是便給定了乙個正整數數列。第二分鐘,l說,要能修改,於是便有了對一段數中每個數都開平方 下取整 的操作。第三分鐘,k說,要能查詢,於是便...

bzoj 3132 上帝造題七分鐘

bit區間增加區間求和,只不過是二維的.比一維麻煩多了。這種題還是得自己推啊,強記果斷會暈掉。公式大概是 dij x i 1 y j 1 其中dij表示在 i,j 點上累計的增量,展開後得到 dij x 1 y 1 dij i y 1 dij j x 1 dij i j 然後x 1和y 1是在具體詢...