題目大意
給出序列$ a_1,...,a_n $ ( $ n\leq10^5,a\leq 10^5 $ ),有\(m\) ( \(m\leq 10^5\))個以下三類詢問:
(1)給出\(l,r,k\)(\(k\leq 10^5\)),問是否存在\(x,y\)使\(x\in[l,r],y\in[l,r],a_x-a_y=k\)
(2)給出\(l,r,k\)(\(k\leq 10^5\)),問是否存在\(x,y\)使\(x\in[l,r],y\in[l,r],a_x+a_y=k\)
(3)給出\(l,r,k\)(\(k\leq 10^5\)),問是否存在\(x,y\)使\(x\in[l,r],y\in[l,r],a_x\times a_y=k\)
題解
rep i 1 to m
移動左右端點;
判斷根號k個約數;
所以判斷約數的 \(\sqrt k\)和莫隊的\(\sqrt n\)是相加的關係。
**
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define rep(i,x,y) for(register int i=(x);i<=(y);++i)
#define dwn(i,x,y) for(register int i=(x);i>=(y);--i)
#define view(u,k) for(int k=fir[u];k!=-1;k=nxt[k])
#define maxn 100007
#define maxk 100000
#define ll long long
using namespace std;
int read()
void write(int x)
int f=0;char ch[20];
if(x<0)putchar('-'),x=-x;
while(x)ch[++f]=x%10+'0',x/=10;
while(f)putchar(ch[f--]);
putchar('\n');
return;
}bitset<100001>now,pnow;
int a[maxn],n,m,num[maxn],ans[maxn],blo=300;
struct questq[maxn];
bool cmp(quest x,quest y)
while(nowl>q[i].l)
while(nowr>(maxk-q[i].x))&now).any())ans[q[i].id]=1;}
else
}} rep(i,1,m)puts(ans[i]?"hana":"bi");
return 0;
}
一些感想
之前輕視bitset的人被bitset教做人了
bitset常用操作:
#include//bitset的標頭檔案
bitset<6342>a; //開乙個下標從0~6341的bitset
a[63]=1,a[42]=0,a.set(63,1),a.set(42,0),a.reset(42);//賦值
a.set(),a.reset();//全變成1或全變成0
((a<<634)|(a>>23)).any();//bitset可以直接進行位運算,any()返回是否存在一位是1
a.none(),a.all(),a.test(5);//是否任意一位都為0;是否任意一位都為1;是否第5位為1
a.flip(32),a[32].flip();//翻轉第32位
a.flip();//翻轉全部
a.count(),a.size();//返回一共有幾位是1;返回一共有幾位
a.to_string(),a.to_ulong(),a.to_ullong();//把bitset變成string;unsigned long;unsigned long long
並不對勁的P5589
題目大意 有 n n leq 10 9 個數 1,2,n 每次操作是隨機取乙個沒被刪除的數 x 並刪去 x,x 2,x 3,求期望幾次刪完所有數。題解可以把問題轉換成 有 n 個數,每次操作隨機取乙個數 x 若 x 未被標記則標記 x,x 2,x 3,並刪去 x 反之則刪去 x 求期望刪多少個未被標...
並不對勁的splay
splay和不加任何旋轉一定會被卡的二叉搜尋樹的唯一區別就是每次操作把當前節點旋轉到根。旋轉有各種zig zag的組合方式,感覺很麻煩,並不對勁的人並不想講。其實可以找出一些共性將它們合併。設ls a 點a是其父親的左兒子 son a 0 a的左兒子,son a 1 a的右兒子,fa a a的父親。...
並不對勁的費用流
最小費用最大流肯定要保證最大流,所以它和最大流有一些類似的性質。如果把費用看成邊,就可以每次走最短路 保證費用最小 走到不能走為止 保證最大流 費用流版的ek就是這樣。需要注意的是,反向弧的邊權為它對應的正向弧的費用的相反數,所以最短路要用spfa來求。費用流版的dinic,又叫zkw費用流,還是多...