上帝造題的七分鐘2

2022-02-03 11:43:49 字數 2238 閱讀 6774

xlk覺得《上帝造題的七分鐘》不太過癮,於是有了第二部。

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

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

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

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

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

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

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

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

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

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

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

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

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

對於詢問操作,每行輸出乙個回答。

10

1 2 3 4 5 6 7 8 9 10

50 1 10

1 1 10

1 1 5

0 5 8

1 4 8

1976

1:對於100%的資料,1<=n<=100000,1<=l<=r<=n,數列中的數大於0,且不超過1e12。

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

題解

看到這個題就喚起了對某些叫「相逢是問候」的題的回憶~雖然那個題的定理沒有搞懂,不過總之是「操作到某種境界就不用再改了」。畢竟開方資料小得很快,手模了一下樣例,這麼兩行操作已經大部分是1了,這暗示也夠明顯的。然後就果斷線段樹,但是這時候做了個愚蠢的決定:用bool型標記每乙個值是否已經是1。後來回來調,看著一堆bool很不順眼,決定換成鍊錶,心裡還有點疑慮鍊錶會不會出問題。事實證明鍊錶倒是沒出問題,但是既然是單點修改並不會比bool優太多。只要把這個傻標記放到線段樹裡面,對於標記整個覆蓋的區間直接停止修改就行了。這道題主要給了我乙個教訓:是區間修改的就盡量區間做,拆成單點就算有特殊規律也會慢到tle。

#include#include

#include

#include

using

namespace

std;

const

int sj=1000010

;int

n,m;

long

long

a[sj];

struct

xdst[sj*4

];void bte(int x,int z,int

y)

int mid=(z+y)>>1

; bte(x

<<1

,z,mid);

bte((x

<<1)+1,mid+1

,y);

t[x].num=t[x<<1].num+t[(x<<1)+1

].num;

if(t[x<<1].ma&&t[(x<<1)+1

].ma)

t[x].ma=1;}

long

long query(int x,int z,int

y)void update(int x,int l,int

r)

int mid=(t[x].le+t[x].ri)>>1

;

if(r<=mid) update(x<<1

,l,r);

if(l>mid) update((x<<1)+1

,l,r);

if(l<=mid&&r>mid)

t[x].num=t[x<<1].num+t[(x<<1)+1

].num;

if(t[(x<<1)+1].ma&&t[x<<1

].ma)

t[x].ma=1;}

intmain()

if(op)

printf(

"%lld\n

",query(1

,a1,a2));

if(!op)

update(

1,a1,a2);

}return0;

}

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是在具體詢...

bzoj 3038 上帝造題的七分鐘2

time limit 3 sec memory limit 128 mb submit 923 solved 413 submit status discuss xlk覺得 上帝造題的七分鐘 不太過癮,於是有了第二部。第一分鐘,x說,要有數列,於是便給定了乙個正整數數列。第二分鐘,l說,要能修改,於...