懷疑以前學了假的strling數,看了乙個很相似的題bzoj2159的題解,終於理解了本題的solution
*/#include
#include
#include
#define maxn 200010
#define mod 998244353
using
namespace
std;
intn,m,k,num,head[maxn],du[maxn];
int f[maxn][510],strl[510][510
];struct
nodee[maxn];
void insert(int
from,int
to)queue
q;intmain()
q.push(1);
f[1][0]=1
;
while(!q.empty())
}strl[
0][0]=1
;
for(int i=1;i<=k;i++)
for(int j=1;j<=i;j++)
strl[i][j]=(1ll*strl[i-1][j-1]+1ll*strl[i-1][j]*j)%mod;
for(int i=1;i<=n;i++)
return0;
}100分 strling數
}40分 暴力
/*100分 樹狀陣列套線段樹人生第一篇樹套樹
*/#include
#include
#include
#define maxn 100010
using
namespace
std;
int num,head[maxn],dc=0
;int fa[maxn][20
],idl[maxn],idr[maxn];
intn,q,type,col[maxn],croot[maxn];
struct node_e[maxn*2
];void insert(int
from,int to)
void dfs(int
now)
idr[now]=dc;
}struct
segment_tree
int query(int now,int l,int r,int l,int
r)}t;
struct
b_i_t
}int sum(int r,int x,int
y)
return
res;
}}bit;
void modify(int now,int c,int
v) bit.add(c,idl[down],v);
if(now!=1)bit.add(c,idl[fa[now][0]],-v);
}int
main()
dfs(1);
for(int i=1;i<=n;i++)modify(i,col[i],1
);
int lastans=0
;
while(q--)
else
}return0;
}
雅禮培訓 Problem A 線段樹
維護一段區間,支援求區間最大值,區間且,區間或 n,q 2 10 5 我們用線段樹維護區間最大值 對於and和or運算,and實質就是強行把一些位改為0 or實質就是強行把一些位改為1 那麼由線段樹區間標記的思想,如果某個操作對整個區間的影響是相同的,並且能很快維護出當前節點資訊,我們就可以通過打標...
雅禮國慶集訓
灑落君臣契,飛騰戰伐名。杜甫 公安縣懷古 noip 前的乙個月。這浸滿熱血的虔信,真的會化作墓碑嗎?或許明日我們不再是戰友,但人生終將有無數個此時。define f z,u,v for int z u des z v z des z z struct bnd struct tup template ...
2018雅禮 折射
雅禮題好難啊。這個dp題思路好強。這個東西首先一眼就知道按y排的dp怎麼寫,大概就是設 f i,j,k 表示考慮到y座標從大到小排名為i的點,這線上一次轉是j,上上次轉是k的數量,直接二維限制轉移就行了。考慮這東西怎麼優化。字首和能搞時間,woc空間也被卡了?打出來表看一看?這個dp陣列有好多都是空...