- 序列判定
- 2012-09-09 20:42:05 @
#include
#include
#include
struct
{
long l,r,w,b;
} t[10000005];
int boo;
long n,m;
long i,j,l,r,mid,xl,xr;
long a[50005][5];
long b[1000005],c[1000005][2];
long max(long x,long y)
{
if (x>y) return x;
return y;
}
long min(long x,long y)
{
if (x=t[x].w)
{
t[x].w=num;
boo=1;
}
}
if (l==r) return;
mid=(t[x].l+t[x].r)/2;
if (l=mid+1)
{
change(2*x+1,l,r,num);
}
if (l=mid+1)
{
change(2*x,l,mid,num);
change(2*x+1,mid+1,r,num);
}
}
int find(long x,long l,long r,long num)
{
long mid;
if (t[x].l==l && t[x].r==r)
{
if (num==t[x].w)
{
return 1;
}
}
if (t[x].l==t[x].r)
{
if (t[x].w==num) return 1;
else return 0;
}
mid=(t[x].l+t[x].r)/2;
if (l=mid+1)
{
return find(2*x+1,l,r,num);
}
if (l=mid+1)
{
return (find(2*x,l,mid,num) | find(2*x+1,mid+1,r,num));
}
return 0;
}
int main()
{
freopen("main.in","r",stdin);
scanf("%ld%ld",&n,&m);
t[1].l=1;t[1].r=n;
maketree(1);
for (i=1;i