tourist的turorial
给n(n<=5e4,n为偶数)个点,每次删掉两个点,删的时候
以两个点构成的正方体[min(x1,x2),max(x1,x2)][min(y1,y2),max(y1,y2)][min(z1,z2),max(z1,z2)]内,
不能有其他点(含边界),题目保证点两两不同,要求输出一组删点顺序
考虑先删x和y相同时z不同的,这样最后x和y相同时z不同的最多只剩一个
删完再删x相同时y不同的,同理,最多剩一个
再删x不同的
tourist神仙代码
iota(t.begin(),t.end(),0);//从0起 连续赋值0 1 2... 头文件numeric
#include
#include
#include
#include
#include
快到1点的时候想出了思路然后没写完,我tm是来搞笑的吧,不说了都是泪
ST部分可以用单调栈搞搞
#include
using namespace std;
const int N=3e5+10;
int dp[N][20];
int n,a[N],ans[N],mn,mx,now,pos;
void ST(int tot)
{
for(int i=1;i<=tot;++i)
dp[i][0]=i;//�������Сֵ���±�
for(int len=1;(1<=1;--i)
{
if(a[i]>a[i+1])
{
int l=i,r=pos-1;
while(l<=r)
{
int mid=(l+r)/2;
if(a[RMQ(i,mid)]*2
一棵n(n<=1e6)个节点的二叉搜索树,求满足以下三个条件的树形数
①树是等节点合法二叉搜索树中最矮的
②对于每个节点i,左子树lson填的数和i奇偶性不同,右子树rson填的数和i奇偶性相同
③树的每个点的键值由1到n共n个数,不重复
注意到n这个key一定在右子树里,与其父,父的父,…,rt奇偶性相同,
rt与n奇偶性相同,即rt的右子树个数必为偶数,
归纳法构造这棵树,
深度为0时,1合法;深度为1时,2合法
深度为2时,4和5合法;深度x只能由两个深度x-1的子树构造(不然层数不等)
深度3时,9和10合法
由于递归构造,显然树形固定,值也就只有一种填法了
因此,如果n出现在该序列中,则答案为1,否则为0
#include
#include
#include
#include
#include