网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月14日漏签0天
noip吧 关注:25,184贴子:642,058
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1回复贴,共1页
<<返回noip吧
>0< 加载中...

求助HDU3487一道有关splay的题

  • 只看楼主
  • 收藏

  • 回复
  • pkqs90
  • 提高一等
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
题目大意是给一串数 要支持两个操作,一是要把一个区间剪切到一个点后面,另一个是把这个区间的数反转。。
程序我写好了,可是悲剧的TLE了。。
然后我发现是在查找第x位的时候往标记下传了,改过后就ac了。。
我想问的是。。为什么不加标记下传会tle而不是wa。。?难道会进入死循环。。?
int Find(int X){
     int Temp = Root;
     Passdown(Temp);//之前没有这行
     while(1){
        if(X == T[T[Temp].left].size + 1) return Temp;
        if(X <= T[T[Temp].left].size)
           Temp = T[Temp].left;
        else
           X -= T[T[Temp].left].size+1, Temp = T[Temp].right
        Passdown(Temp);//和这行
     }
}
顺便发下我的标记下传是这么写的- -。。
void Passdown(int X){
      if(T[X].rev){
         int LTemp = T[X].left;
         int Rtemp = T[X].right;
         T[X].right = LTemp;
         T[X].left = Rtemp;
         T[T[X].left].rev ^= T[X].rev;
         T[T[X].right].rev ^= T[X].rev;
         T[X].rev = 0;
      }
}
纠结了。。。


  • pkqs90
  • 提高一等
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
求助阿求助


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1回复贴,共1页
<<返回noip吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示