由乃在自己的農田邊散步,她突然發現田裡的一排玉公尺非常的不美。這排玉公尺一共有n株,它們的高度參差不齊。
由乃認為玉公尺田不美,所以她決定出個資料結構題
這個題是這樣的:
給你乙個序列a,長度為n,有m次操作,每次詢問乙個區間是否可以選出兩個數它們的差為x,或者詢問乙個區間是否可以選出兩個數它們的和為x,或者詢問乙個區間是否可以選出兩個數它們的乘積為x ,這三個操作分別為操作1,2,3選出的這兩個數可以是同乙個位置的數
第一行兩個數n,m
後面一行n個數表示ai
後面m行每行四個數opt l r x
opt表示這個是第幾種操作,l,r表示操作的區間,x表示這次操作的x
定義c為每次的x和ai中的最大值,ai >= 0,每次的x>=2n,m,c <= 100000
對於每個詢問,如果可以,輸出yuno,否則輸出yumi
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
yuno
yumi
yuno
yuno
yumi
正解:莫隊演算法+$bitset$。
這題坑點巨多,資料範圍都沒給全。。
我們考慮莫隊演算法,把詢問排個序就行了。如何統計答案?如果是兩個數相乘等於$x$的情況,我們直接暴力列舉因子就行了。如果是兩個數相減等於$x$的情況,我們把每個數壓到$bitset$上,直接看$a[i]$的那個$bitset$陣列右移$x$位以後再與一下原陣列,如果不為0那麼顯然是有解的。如果是加法的話,我們考慮用另乙個$bitset$來壓$b[i]$,其中$b[i]$表示$c-a[i]$,其中$c$為$a[i]$的最大值。那麼只要$a[i]=b[j]+x-c$,那就是有解的。於是我們把這個$bitset$陣列右移$c-x$位,再與$a$陣列的$bitset$陣列與一下就行了。
1//it is made by wfj_2048~
2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include
15#define inf (1<<30)
16#define n (1000010)
17#define il inline
18#define rg register
19#define ll long long
20#define file(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
2122
using
namespace
std;
2324
struct nodeq[n];
2526
intcnt[n],bl[n],ans[n],a[n],b[n],n,m,mc,block;
2728 bitset <100010>f,g,h;
2930 il int
gi()
3738 il int cmp(const node &a,const node &b)
4243 il void add(rg int
x)48
49 il void del(rg int
x)54
55 il int check(rg int opt,rg int
x)60
if (opt==2)64
if (opt==3)70
}71return0;
72}7374 il void
work()
89for (rg int i=1;i<=m;++i)
90 puts(ans[i] ? "
yuno
" : "
yumi");
91return;92
}9394int
main()
BZOJ4810 Ynoi2017 由乃的玉公尺田
對每個區間維護一下這個區間每個數有沒有,用bitset壓一下,這個用莫隊跑出來,然後就能判加減合不合法了 乘的話根號列舉一下就行了 include include include include include include include include include include incl...
BZOJ 2535 Plane 航空管制2
題意 n個飛機一次出航。第i個飛機在出航序列中的序號不大於ki。另外有一些限制,表示飛機a的出航序號小於飛機b。1 輸出乙個合法的出航序列 2 輸出每個飛機最早的出航序號。思路 參考這裡。第一問比較好搞定。對於給出的,我們不妨建立有向邊。那麼b的所有孩子的出航序號必然小於b的出航序號。按照這個拓撲排...
BZOJ 2199奶牛議會 2 SAT
傳送門 bzoj2199 許可權題?沒關係,你洛上也有 洛谷 usaco11jan 大陸議會the continental cowngress 一道2 sat簡單題。只需要用到2 sat連有向邊的操作,拓撲排序和縮點都不需要,直接暴力找 非常之暴力 include using namespace s...