luogu P3674 小清新人渣的本願

2021-10-06 07:00:31 字數 2990 閱讀 6465

題目背景

本題時限3s,空間128mb

我感覺我要掛省選

人渣的本願是乙個有趣的番

可愛的花火喜歡從小和她談♂笑♂風♂生的歐♂尼♂醬鳴海,歐尼醬特別想當老師,然後劇本安排當了花火的班主任。

然而有個叫做皆川茜的奇怪的人搶走了歐尼醬!

花火就很失落呀,然後看到乙個叫做麥的人也很失落,原來麥喜歡茜老師。。。

花火和麥從此天天談笑風生,然後決定在一起,把對方當做自己喜歡的人的替代品

因為花火很可愛,所以有許多奇怪的人喜歡花火,比如乙個叫做繪鳩早苗的妹子

因為麥長的也不錯,所以有許多奇怪的人喜歡麥,比如乙個叫做最可的妹子

然後就開始愉快的生♂活了~

以上內容如果你沒有看過這個番可以無視掉

按照套路,現在歐尼醬會問花火乙個oi問題(一般是資料結構),然後花火肯定不會oi,所以會來請教您這位ioi au選手,然後您肯定會幫助她

但是 這個套路太無聊了,我們來換乙個(但是不會改變您是ioi au選手的事實)

花火有一天看了幾個有趣的番,叫做「在w??身上尋找**是否搞錯了什麼」,「從**開始的?x?」,「我家大佬不可能那麼可愛」,然後發現??h太厲害了,然後就穿越到了異世界,和???談笑風生

花火就和???做了乙個交♂易,花火幫???做一道題,然後???幫花火改寫地球online的程式,讓花火和歐尼醬在♂一♂起

???雖然非常厲害,但是不會資料結構題,他最近剛剛遇到一道有趣的資料結構題,於是他接受了交易

但是花火也不會資料結構題呀

所以又回到了這個老套路,就靠您這個ioi au選手來幫她了!

以上內容如果你沒有看過這個番還是可以無視掉

這裡用乙個經典的圖來解釋這個關係(其實沒那麼蛋疼的)

題目描述

這個題是這樣的:

給你乙個序列 aa,長度為 nn,有 mm 次操作,每次詢問乙個區間是否可以選出兩個數它們的差為 xx,或者詢問乙個區間是否可以選出兩個數它們的和為 xx,或者詢問乙個區間是否可以選出兩個數它們的乘積為 xx ,這三個操作分別為操作 1,2,31,2,3。

選出的這兩個數可以是同乙個位置的數。

輸入格式

第一行兩個數 n,mn,m。

後面一行 nn 個數表示 a_iai​

。後面 mm 行每行四個數 opt l r x。

optopt 表示這個是第幾種操作,l,rl,r 表示操作的區間,xx 表示這次操作的 xx。

輸出格式

對於每個詢問,如果可以,輸出 hana,否則輸出 bi。

輸入輸出樣例

輸入 #1複製

10 10

1 1 8 9 9 1 1 1 1 9

3 5 9 42

2 1 3 14

2 3 5 2

2 3 3 6

1 6 10 18

3 4 9 14

2 1 4 22

3 1 3 32

2 5 6 32

3 1 9 17

輸出 #1複製

bibi

bibi

bibi

bibi

bibi

輸入 #2複製

5 51 1 2 3 4

2 1 1 2

1 1 2 2

3 1 1 1

3 5 5 16

1 2 3 4

輸出 #2複製

hana

bihana

hana

bi說明/提示

定義 cc 為每次的 xx 和 a_iai​

中的最大值,a_i \geq 0ai​

≥0,每次的 x\geq 2x≥2。

對於 10%10% 的資料,n,m,c \leq 100n,m,c≤100。

對於另外 10%10% 的資料,n,m,c \leq 3\times 10^3n,m,c≤3×103。

對於另外 10%10% 的資料,只有 11 操作。

對於另外 10%10% 的資料,只有 22 操作。

對於另外 10%10% 的資料,只有 33 操作。

對於 100%100% 的資料,n,m,c \leq 10^5n,m,c≤105。

加減bitset維護,乘法列舉約數

用莫隊解決

#include

#define n 100000

#define m 20000005

using

namespace std;

struct queryq[n+5]

;int m,n,l,r,s;

int a[n+5]

,c[n+5]

,ans[n+5]

,rt[n+5]

;bitset5> now1,now2;

char dr[m+10]

,*p=dr;

inline

bool

operator

<

(query x,query y)

struct fastio

inline

intxchar()

inline

intread()

}io;

inline

void

init()

sort

(q+1

,q+m+1)

;l=1

;r=0;}

inline

void

add(

int x)

inline

void

del(

int x)

intmain()

else

if(k==2)

else}}

for(

int i=

1;i<=m;i++)if

(ans[i]

)puts

("hana");

else

puts

("bi");

return0;

}

題解 luogu p3674小清新人渣的本願

題目鏈結 演算法 bitset 莫隊 先把詢問都離線下來,用莫隊判斷每個詢問區間。並維護兩個bitset s 1,s 2 乙個判斷 a i 是否在當前區間內。若 a i 在bitset1中位上的值為true,那 n a i 在bitset2中那一位上也為true。關於操作一,其實就是詢問 是否有兩個...

luogu3674 小清新人渣的本願

目錄本題解法 給定長度為 n 數列 a m 組查詢,問 l,r 內是否有兩個數之和 差 積為 x n,m le 10 5,max le10 5 傳送門我們先來介紹一下 bitset 如果您熟悉bitset請跳至下一章 bitset十分神奇,你可以把它看作乙個支援整體操作的bool陣列。bitset的...

Luogu3674小清新人渣的本願

給你乙個序列a,長度為n,有m次操作,每次詢問乙個區間 bitset 的原理是將一大堆值為 0 1 的數壓成乙個數。通過 i x 等操作,我們可以快速訪問 i 陣列右移 x 位後的狀態 即只剩右數 n x 個值。bitset 陣列可以當作乙個數來看待並進行 等操作 詳見高斯消元總結 還有一些 stl...