设为首页收藏本站

晓东CAD家园-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 64|回复: 6

[研讨] 合并区间

[复制链接]

已领礼包: 1614个

财富等级: 堆金积玉

发表于 2020-2-10 17:26:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 aimisiyou 于 2020-2-10 17:27 编辑

题目如图,可理解为已知y=f(x),求对于任一k值,求x的连续最大区间,使得对于区间内的任意x有f(x)>=k。区间可以有多个。
Screenshot_20200210_141112_com.tencent.mobileqq.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1614个

财富等级: 堆金积玉

 楼主| 发表于 2020-2-10 21:50:59 | 显示全部楼层
(setq lst '(1 3 3 5 5 7 7 4 4 3 3 3 1 1 2 2 2 4 4 4 2 0 1 0 1 0 1 0 1) n (length lst) num_max (apply 'max lst))
(defun fnlst (nn)
  (setq ii nn nn_lst nil)
  (while (> ii 0)
      (setq ii (- ii 1))
      (setq nn_lst (cons ii nn_lst))
   )
)
(setq vlst (mapcar 'list (fnlst n) lst))
(mapcar '(lambda (x)
             (entmake
                             (list
                                  '(0 . "LWPOLYLINE")                        
                                  '(100 . "AcDbEntity")
                                  '(100 . "AcDbPolyline")
                                  '(90 . 4)                                 
                                  '(70 . 1)                                 
                                  (cons 10 (list (car x) 0))
                                  (cons 10 (list (+ (car x) 1) 0))
                                  (cons 10 (list (+ (car x) 1) (cadr x)))
                                  (cons 10  x)            
                                  (cons 210 '(0 0 1))   
                               )                     
                      )
                         )
                         vlst
)


(setq i 1 zzlst nil)
(while (< i n)
  (setq valst (apply 'append (vl-remove nil (mapcar '(lambda (x) (if (>= (car x) i) (list (cadr x) (+ 1 (cadr x))) nil))    (mapcar 'reverse vlst)))) nn (length valst))
  (setq vblst (vl-remove nil (mapcar '(lambda (x) (if (= (car x) 1) x nil)) (mapcar '(lambda (y) (list (- nn (length    (vl-remove y valst))) y))  (vl-sort valst '<)))))
  (repeat (/ (length vblst) 2)
    (setq zzlst (cons (list (cadr (car vblst)) (cadr (cadr vblst)) (+ i num_max)) zzlst))
    (setq vblst (cdr (cdr vblst)))
   )
   (setq i (+ 1 i))
)
(mapcar '(lambda (x)
             (entmake
                             (list
                                  '(0 . "LWPOLYLINE")                        
                                  '(100 . "AcDbEntity")
                                  '(100 . "AcDbPolyline")
                                  '(90 . 4)                                 
                                  '(70 . 1)                                 
                                  (cons 10 (list (car x) (- (caddr x) 1)))
                                  (cons 10 (list (cadr x) (- (caddr x) 1)))
                                  (cons 10 (list (cadr x) (caddr x)))
                                  (cons 10  (list (car x) (caddr x)))            
                                  (cons 210 '(0 0 1))   
                               )                     
                      )
                         )
                        zzlst
)

4639ae7afdef97c8.png
-64c8824006cbdd8b.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 857个

财富等级: 财运亨通

发表于 2020-2-11 11:06:40 | 显示全部楼层
楼主好厉害啊,问一下,这是解决什么问题

点评

别人问的一个数据分析上的问题,刚好与图形有关,就顺便用lisp实现输入数据自动出图。  详情 回复 发表于 2020-2-11 12:36
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1614个

财富等级: 堆金积玉

 楼主| 发表于 2020-2-11 12:36:08 | 显示全部楼层
zhystar 发表于 2020-2-11 11:06
楼主好厉害啊,问一下,这是解决什么问题

别人问的一个数据分析上的问题,刚好与图形有关,就顺便用lisp实现输入数据自动出图。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1614个

财富等级: 堆金积玉

 楼主| 发表于 2020-2-11 13:09:07 | 显示全部楼层
本帖最后由 aimisiyou 于 2020-2-11 13:25 编辑

核心问题就是区间合并算法,如果用(i  j)表示[i,j)
左闭右开区间,如何合并?如lst=((1  2)(2  4)(5  7)(7 9)(10   13))合并的结果是((1  4)(5  9)(10  13))。当然,这是各小区间没有重叠的情况,如果有重叠处理就复杂些。对于没有重叠的情况很好处理,将lst合并得到lst'=(1 2 2 4 5 7 7 9 10 13),然后统计每个数出现的次数,用(ai,ni)表示,即lst"=((1 1)(2 2)(4  1)(5   1)(7   2)(9  1)(10  1)(13  1)),仅找次数ni为1的项,从左到右,两个一配对(ai  aj),记即得((1  4)(5   9)(10   13))。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 4009个

财富等级: 富可敌国

发表于 2020-2-11 21:02:13 | 显示全部楼层
高手如云呀。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1289个

财富等级: 财源广进

发表于 7 天前 | 显示全部楼层
做个对论坛有益的人。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )  

GMT+8, 2020-2-19 10:20 , Processed in 0.090927 second(s), 55 queries , Gzip On, WinCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表