CodeVS2492 上帝造題的七分鐘2

2022-03-25 20:28:40 字數 2011 閱讀 5709

題目描述 description

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的數字,那麼sqrt並下取整後每個數字不變,所以可以維護乙個flag標記表示當前區間是否需要修改。

將乙個數字sqrt到1似乎是log級別的吧。。。不太清楚。。。

#include #include #include #include #include #include using namespace std;

const int n = 100010 << 2;

typedef long long ll;

int n, m;

bool flag[n];

ll sum[n];

void build(int id, int l, int r)

build(id << 1, l, m);

build(id << 1 | 1, m + 1, r);

sum[id] = sum[id << 1] + sum[id << 1 | 1];

flag[id] = flag[id << 1] && flag[id << 1 | 1];

}void modify(int id, int l, int r, int l = 1, int r = n)

modify(id << 1, l, r, l, m);

modify(id << 1 | 1, l, r, m + 1, r);

sum[id] = sum[id << 1] + sum[id << 1 | 1];

flag[id] = flag[id << 1] && flag[id << 1 | 1];

}ll ask(int id, int l, int r, int l = 1, int r = n)

return ask(id << 1, l, r, l, m) + ask(id << 1 | 1, l, r, m + 1, r);

}int main()

if(k == 0) else

}}

codevs2492上帝造題的七分鐘 2(線段樹)

區間修改 區間查詢 可以用線段樹搞 但是一般的標記下放對這個題好像不合適 只能改葉子 然後更新父親 雖然跑的有點慢 小優化 如果某個點是1 就不用再開方了 所以搞乙個f i 標記 i 這個點還需不需要處理下去 注意用longlong 還有就是陣列開大 include include include ...

2492 上帝造題的七分鐘 2

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

藍橋杯 上帝造題5分鐘

問題描述 第一分鐘,上帝說 要有題。於是就有了l,y,m,c 第二分鐘,lyc說 要有向量。於是就有了長度為n寫滿隨機整數的向量 第三分鐘,yuhch說 要有查詢。於是就有了q個查詢,查詢向量的一段區間內元素的最小值 第四分鐘,mzc說 要有限。於是就有了資料範圍 第五分鐘,cs說 要有做題的。說完...