| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
求解为什么老runtime error!#include<stdio.h>
#define N 20050
#define L(x) (x<<1)
#define R(x) ((x<<1)+1)
#define Min(a, b) (a > b ? b : a)
#define Max(a, b) (a > b ? a : b)
typedef struct node
{
int l;
int r;
int color;
}Node;
Node value[N];
int map[N][2];
int number[N];
int kk;
void find(int count)
{
int i;
if (value[count].l == value[count].r)
{
for (i=0; i<kk; i++)
if (number[i] == value[count].color)
{
return ;
}
if (value[count].color)
{
number[kk++] = value[count].color;
}
return ;
}
for (i=0; i<kk; i++)
if (number[i] == value[count].color)
{
break ;
}
if (value[count].color)
{
if (i == kk)
{
number[kk++] = value[count].color;
}
return ;
}
find(L(count));
find(R(count));
return ;
}
void buildtree(int lift, int right)
{
Node stack[N];
int i = -1;
int mid;
int a, b, c;
value[1].l = lift;
value[1].r = right;
value[1].color = 0;
stack[++i].l = lift;
stack[i].r = right;
stack[i].color = 1;
while (i >= 0)
{
a = stack[i].l;
b = stack[i].r;
c = stack[i].color;
i--;
if (a != b)
{
mid = (a + b) >>1;
stack[++i].l = a;
stack[i].r = mid;
stack[i].color = L(c);
value[L(c)].l = a;
value[L(c)].r = mid;
value[L(c)].color = 0;
stack[++i].l = mid + 1;
stack[i].r = b;
stack[i].color = R(c);
value[R(c)].l = mid + 1;
value[R(c)].r = b;
value[R(c)].color = 0;
}
}
return ;
}
void insert(int color, int lift, int right, int count)
{
if (value[count].l==lift && value[count].r==right)
{
value[count].color = color;
return ;
}
if (value[count].color > 0)
{
value[L(count)].color = value[count].color;
value[R(count)].color = value[count].color;
value[count].color = 0;
}
if (value[R(count)].l <= lift)
{
insert(color, lift, right, R(count));
}
else if (value[L(count)].r >= right)
{
insert(color, lift, right, L(count));
}
else
{
insert(color, lift, value[L(count)].r, L(count));
insert(color, value[R(count)].l, right, R(count));
}
return ;
}
int main()
{
int num;
int i, n;
int mid, min, max;
fscanf(stdin, "%d", &num);
while (num--)
{
kk = 0;
min = 100000;
max = -1;
fscanf(stdin, "%d", &n);
for (i=0; i<n; i++)
{
fscanf(stdin, "%d %d", map[i]+0, map[i]+1);
mid = Min(map[i][0], map[i][1]);
if (mid < min)
{
min = mid;
}
mid = Max(map[i][0], map[i][1]);
if (mid > max)
{
max = mid;
}
}
buildtree(min, max);
for (i=0; i<n; i++)
{
insert(i+1, map[i][0], map[i][1], 1);
}
find(1);
printf("%d\n", kk);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator