为什么这样的代码会出现RUNTIME ERROR?
void create(int l,int r,int rt)
{
num[rt][0]=0;
if(l==r) return;
int mid=(l+r)>>1;
int ll=l,rr=mid+1;
int isame=mid-l+1;
int same=0;
int i;
for(i=l;i<=r;i++)
{
if(i==1) num[rt][i]=0;
else num[rt][i]=num[rt][i-1];
if(val[rt][i]
{
same++;
num[rt][i]++;
val[rt+1][ll++]=val[rt][i];
}
else if(val[rt][i]>sorted[mid]) val[rt+1][rr++]=val[rt][i];
else
{
if(same
else val[rt+1][rr++]=val[rt][i];
}
}
create(l,mid,rt+1);
create(mid+1,r,rt+1);
}
这是划分树的建树代码,isame是为了确定如果出现好几个值与sorted[mid]相同的时候,是归到左子树还是右子树。我觉得这样的处理方式没有错,但是交到OJ上却出现了RE。但是如果改成这样就没有错。
void create(int l,int r,int rt)
{
num[rt][0]=0;
if(l==r) return;
int mid=(l+r)>>1;
int ll=l,rr=mid+1;
int same=mid-l+1;
int i;
for(i=l;i<=r;i++) if(val[rt][i]
for(i=l;i<=r;i++)
{
if(i==1) num[rt][i]=0;
else num[rt][i]=num[rt][i-1];
if(val[rt][i]
{
num[rt][i]++;
val[rt+1][ll++]=val[rt][i];
}
else if(val[rt][i]>sorted[mid]) val[rt+1][rr++]=val[rt][i];
else
{
if(same) {same--;num[rt][i]++;val[rt+1][ll++]=val[rt][i];}
else val[rt+1][rr++]=val[rt][i];
}
}
create(l,mid,rt+1);
create(mid+1,r,rt+1);
}
相关阅读:
工程定位后崩溃到main.m中,如何确定崩溃原因?求指教!~
初学web前端 做响应式网站 推荐用框架吗
php 微信支付处理
html页面上展示的不知道是什么元素
如何获取图片的颜色值?
java中*/*怎么使用?地址栏如何访问
软件自动升级框架设计
win10出现"REFERENCE_BY_POINTER"这种问题怎么解决?
ubuntu下apt-get方式安装的PHP安装文件在哪?
爬虫在运行一段时间后开始不断获得504的StatusCode,是否是对方站点的反爬虫策略导致?有何回避策略?
html页面打开pdf
Java的StringPool是存放在方法区中,是所有类共享的吗?
安卓后台如何接收安卓客户端发送到php写的后台的数据 get post
iOS开发 在模拟器视图看到一个View 有方法快速能在代码中找到在哪里定义的吗?
mybatis 批量更新数据 成功返回值为-1,不是更新的行数
AngularJS如何给在JS中添加的DOM元素绑定事件
C++中的catch(...)中如何重新抛出异常
怎样手动触发 HTML5 form的错误提示
Python 二维数组赋值
今日话题数量如何实现