佬友们好,i人一枚,毕业这几年,除了同学、同事、以及他们的延伸圈子,几乎没有再认识过纯粹的"新朋友"了。 日常被工作填了一半,另一半花在兴趣爱好上,圈子越来越固化。 想问问大家: 你们现在的社交状态也是这样吗? 有没有什么破圈扩列的高效路径或者有趣经历?(比如参与同城户外局、报班学习?) 4 个帖子 - 4 位参与者 阅读完整话题
力扣 LeetCode 3161. 物块放置查询 - 力扣(LeetCode) 3161. 物块放置查询 - 有一条无限长的数轴,原点在 0 处,沿着 x 轴 正 方向无限延伸。 给你一个二维数组 queries ,它包含两种操作: 1. 操作类型 1 :queries[i] = [1, x] 。在距离原点 x 处建一个障碍物。数据保证当操作执行的时候,位置 x 处 没有 任何障碍物。 2. 操作类型 2 :queries[i] = [2, x, sz] 。判断在数轴范围 [0, x] 内是否可以放置一个长度为 sz 的物块,这个物块需要 完全 放置在范围 [0,... 力扣我真得控制你了,昨天给把糖,今天直接来一巴掌。这题挺有难度,看了题解才磨出来。 综合考察了二分查找和常见线段树(单点修改、区间查询)。 思路 1. 新增与查询 题目中主要是两个操作,新增一个障碍物,或者查询一个障碍物 左边最长的空闲段长度 是否 \ge sz 。 每次 [1, x] 在 x 位置 新增 障碍物,都会把一段空闲区间切分为两段。 而每次 [2, x, sz] 进行查询时,我们只在意 [0, x] 区间中 最大的空闲区间长度 是否至少为 sz 。 对于第 2 点,我们会进行多次的单点修改,且需要查询一个区间的最大值,因此可以用到常见的 单点修改、区间查询线段树 。 对于第 1 点,为了方便后续查询以及进一步的障碍物插入,我们每次插入肯定要知道 x 左边和右边的障碍物位置。这里就可以用 有序集合 来维护。 2. 线段树维护的内容 我们在查询的时候只在意某个位置 x 的 左边最大的空闲区间长度 ,也就是说查询时希望能查出 [0, x] 区间的最大值。但注意, 查询的这个 x 不一定是障碍物 。 题目中插入的是障碍物,为了方便起见,线段树中修改的点位也应该都是障碍物,没有经历过任何修改的点位值置为 0,说明此处没有障碍物。 查询已经知道了,线段树中单个节点其实表示的就应该是: 这个障碍物节点对应的区间内,所有以障碍物为结束端点的空闲段长度的最大值 。 叶子节点值就表示某个障碍物距离左边相邻障碍物的长度( 即某个障碍物位置左边相邻的空闲段长度 ),单点修改,其实修改的就是这个值。 如果值为 0,则表示这个位置没有障碍物。 3. 线段树的更新 每次插入新的障碍物 x 时,设其左边和右边相邻的障碍物位置为 prev 和 next , x 会把 [prev, next] 劈开成 [prev, x] 和 [x, next] 。 上面已经提到我们单点修改修改的是叶结点值,而叶节点值表示某个位置左侧相邻的空闲段长度,因此这里涉及 x 和 next 两个障碍物端点的修改。 显然修改后的值分别为 x-prev , next-x 。 修改完后上推更新树的非叶节点。 4. 查询 查询时题目给出 [2, x, sz] ,我们只需要找到 [0, x] 区间内最长的空闲段长度,看看是不是 \ge sz 即可。 但是要注意,这里不能直接用线段树,从上面第 2 节可以看到线段树是根据 障碍物位置 来更新的,查询的 x 位置不一定是障碍物。 因此我们要先找到 x 的左边相邻障碍物位置 prev ,在线段树中查询 [0, prev] ,然后再计算 x-prev 这个空闲段长度,最后再在二者中取最大值和 sz 比较。 显然 x 位置为障碍物时, x-prev=0 代码 class SegmentTree{ private: int n; vector<int> tree; // 为了方便,下标从 1 开始 public: SegmentTree(int n){ this->n=n; // 线段树预留 4N 空间,因为这里下标从 1 开始,所以 N=n+1,留 4*(n+1) // 初始全为 0,表示没有障碍物 tree.resize(n*4+4,0); } // 单点更新 // idx 为新加入的障碍物下标 // dist 为新障碍物 idx 距离其左边上一个障碍物 prev 的距离 // node 为树中结点下标,从 1 开始 // l, r 表示 node 结点对应的区间 void update(int idx,int dist,int node,int l, int r){ if(l==r){ // 单个点 tree[node]=dist; return; } int mid=l+((r-l)>>1); if(idx<=mid){ // 下标在区间左侧,进入左半边树 update(idx,dist,node<<1,l,mid); }else{ // 否则进入右半边树 update(idx,dist,(node<<1)+1,mid+1,r); } // 上推更新区间最大值 tree[node]=max(tree[node<<1],tree[(node<<1)+1]); } // 重载函数,作为更简便的入口 void update(int idx,int dist){ update(idx,dist,1,0,n); } // 查询区间 int query(int queryL,int queryR,int node,int l, int r){ if(queryL>queryR){ // 区间不合法 return 0; } if(queryL<=l&&r<=queryR){ // [l, r] 已经在 [queryL, queryR] 区间内,返回 [l, r] 区间最大值 return tree[node]; } int mid=l+((r-l)>>1); int res=0; // [queryL, queryR] 拆为两半处理 if(queryL<=mid){ res=max(res,query(queryL,queryR,node<<1,l,mid)); } if(queryR>mid){ res=max(res,query(queryL,queryR,(node<<1)+1,mid+1,r)); } // 取最大值作为查询结果 return res; } // 重载函数,作为更简便的入口 int query(int queryL,int queryR){ return query(queryL,queryR,1,0,n); } }; class Solution { public: vector<bool> getResults(vector<vector<int>>& queries) { // 肯定要用到线段树,应该是单点修改区间查询 // // 1. 每次新增障碍物,都会把一段空闲区间切成两段 // 对于插入操作 [1, x],需要知道插入 x 时 x 左边、右边最近的障碍物在哪 // // 2. 而查询 [2, x, sz] 时,我们只在意 [0, x] 区间**最大**的空闲长度是否至少为 sz // // 对于第 1 点可以用有序集合 // 第 2 点的话就要用线段树来维护**区间最大值**了 // // 线段树中叶子节点值表示**某个障碍物**左边相邻空闲区间的长度 // // 注意线段树维护的是障碍物为结束端点的区间最大值,但我们查询时的点并不一定是障碍物 // 因此查询 x 时需要: // 1. 找到距离 x 左边最近的障碍物 prev,线段树查询 [0, prev] 最大值 // 2. 计算 x-prev (因为查询的 x 并不一定是障碍物,不在线段树中,这段距离得补上) // 二者取最大值 int maxX=0; // 找到涉及的 x 最大值,用于开树 for(auto&q:queries){ maxX=max(maxX,q[1]); } // 用有序集合维护障碍物位置 set<int> obs; // 添加哨兵,0 和 maxX+1 这个位置都可以算障碍物,方便后面查询 prev 和 next obs.insert(0); obs.insert(maxX+1); maxX++; // 开树 SegmentTree tree(maxX); vector<bool> res; // 处理查询 for(auto& q:queries){ int x=q[1]; // 要查询 / 插入的 x if(q[0]==1){ // 插入障碍物 x,保证插入时这里没有障碍物 // 先利用 C++ 标准库的二分 upper_bound 算法找到 x 位置的下一个障碍物 auto nextIt=obs.upper_bound(x); // nextIt 的上一个位置就是 x 的上一个障碍物 auto prevIt=std::prev(nextIt); int next=*nextIt; int prev=*prevIt; // 把 x 插入有序集合(插入新障碍物) obs.insert(x); // 插入新障碍物后要上推更新线段树 // 插入 x 后,[prev, next] 被截为 [prev, x], [x, next] // 线段树维护的是某个障碍物左边的最大空闲区间长度,因此这里要更新 x 和 next 两个端点 tree.update(next,next-x); // next 端点,左边空闲区间长度变成 next-x tree.update(x,x-prev); // x 端点,左边空闲区间长度变成 x-prev }else{ // 查询 int sz=q[2]; // 注意线段树只维护障碍物 // 查询时 x 不一定是障碍物,因此要先找到 prev auto nextIt=obs.upper_bound(x); int prev=*(std::prev(nextIt)); // obs 存的是障碍物,所以 prev 肯定是障碍物,我们可以查询 [0, prev] int prevMaxLen=tree.query(0,prev); // x 相邻的还有一段 x-prev,如果 x 是障碍物,显然 x-prev=0 int adjMaxLen=x-prev; res.emplace_back(max(prevMaxLen,adjMaxLen)>=sz); } } return res; } }; [!WARNING] 这里最开始我还踩了个坑导致 TLE(时间超限),最开始我用的是 C++ <algorithm> 头中的 upper_bound 二分找上界方法。 但是其主要适用于能随机访问的容器,如 vector ,对于无法随机访问的 set ,其时间复杂度会退化到 O(n) 。 解决方式就是用 set 自己的成员函数 upper_bound 来实现红黑树结构上的近似二分查找。 TLE 版本代码 (点击了解更多详细信息) 2 个帖子 - 2 位参与者 阅读完整话题
关于 口粮精酿分享 - 搞七捻三 - LINUX DO 帖子的延伸 上班好累,来点解压小水,防止大家在解压的时候还踩雷,共建分享文档。 【腾讯文档】口粮精酿分享与评价 docs.qq.com 口粮精酿分享与评价 腾讯文档-在线表格 #适量解压 ,过量伤身 1 个帖子 - 1 位参与者 阅读完整话题
由 中转站投毒 的延伸讨论,基于NEWAPI的v1.0.0的版本进行二开,加入安全护栏板块,可针对请求侧和响应侧做安全审核,目前的方案是关键词护栏,命中关键词就拦截,并实现流式输出中的实时拦截。 效果如图,以“流年”作为拦截关键词,开启响应侧的安全护栏,输出中命中拦截词可以立刻截断输出并返回预置提示 希望作为一个抛砖引玉,想看看佬u对于安全护栏有什么好的策略。 初步想法是接入阿里云的qwen3guard的api做实时拦截,但是就可能天价水电单(后付费产品来的)可能会比小模型审核会更快 或者更便宜的方案是deepseek v4 flash(再次感谢梁圣)然后对于所有的请求都过一下ai审核,但是缺点是只能非流式或者假流式,对于用户体验会造成严重影响 1 个帖子 - 1 位参与者 阅读完整话题
512 号宇宙 512 号宇宙是一个无边际的平行宇宙,由一个前后左右无边际,向下无限延伸的平面,以及向上无限延伸的大气层组成,也可看做是一颗半径无穷大的球体。 物理构成 512 号宇宙表面的重力加速度为 9.80665 m/s^2,接近于地球北纬 45 度海平面的重力加速度。 512 号宇宙的表层密度较小,深层密度较大。 (注意,以下公式均采用国际单位制:s、m、kg) 由 g = \frac{GM}{R^2} , M = V\bar\rho = \frac{4 \pi R^3}{3}\bar\rho = \int_{0}^{R}4 \pi r^2 \rho(r) dr 可以得到 g = \frac{4 \pi G}{R^2} \int_{0}^{R} r^2 \rho(r) dr , g(x) = \frac{4 \pi G}{x^2} \int_{0}^{x} r^2 \rho(r) dr 。其中 \rho(r) 是以与底部(或球心)的距离为 r 处的密度。 在 512 号宇宙,重力 g 与球心距离 r 的关系是 g(r) = 9.80665 (1-e^{-r}) 。由于 G = 6.67430 \times 10^{-11} m^3 kg^{−1} s^{−2} , 4 \pi ≈ 12.56637061436 , 4 \pi G = 8.38717274 \times 10^{-10} m^3 kg^{−1} s^{−2} ,因此 \int_{0}^{r} r^2 \rho(r) dr = 1.169244 \times 10^{10} (1-e^{-r}) r^2 ,两边求导得到 r^2 \rho(r) = 1.169244 \times 10^{10} (e^{-r} r^2 + 2r (1-e^{-r})) ,最终可得 \rho(r) = 1.169244 \times 10^{10} (e^{-r} + \frac{2(1-e^{-r})}{r}) ,其导函数 \rho'(r) = 1.169244 \times 10^{10} (e^{-r} (\frac{2}{r} + \frac{2}{r^2} - 1) - \frac{2}{r^2}) 始终小于 0 表明从深层到表层,密度不断减小。最大密度为 \rho(0) = 3.507732 \times 10^{10} kg/m^3 ,表层密度无限趋近于零。 512 号宇宙的球体是不均匀的固体混合物,主要是由 Cerolite(零晶石,一种类似于冰晶石(Cryolite)的奇幻物质,莫氏硬度为 8,密度为零)和 Deepsidian(深曜石,一种类似于黑曜石(Obsidian)的奇幻物质,莫氏硬度为 9,密度为 3.507732 \times 10^{10} kg/m^3 )组成。表层以零晶石为主,深层以深曜石为主。 生物 512 号宇宙的所有生物都是正方体,尺寸不同,小到 10 纳米( 10^{-8} 米),大到 1,000,000 公里( 10^9 米)的都有。 卡布吉森(Cubgician)是 512 号宇宙唯一一种能使用魔法的生物,它们的地位与人类在地球的地位相当。卡布吉森有很多种外观,并且能够使用多种魔法(例如冻结湖面、让周围的物体浮空,等等)。 如果多只卡布吉森组成大长方体(包括正方体,下同),那么,整个大长方体的所有卡布吉森的魔法能力将被共享,并且会大幅增强。由于无论长方体的长、宽、高比例如何,只要试图用有限个大小互不相同的正方体去完美填满,都会遇到同样的无限递降矛盾,组成大长方体的过程,必须要有两只或多只大小相同的卡布吉森参与,这些大小相同的卡布吉森将会成为魔法核心(如果存在多组卡布吉森,每一组都有两只或多只大小相同的卡布吉森,以众数组为魔法核心,如果众数组有多组,以尺寸最大的众数组为魔法核心)。 这是我最近想出来的原创设定,你们觉得怎么样?还可以补充什么? 这里附上 GPT Image 2 做出来的图片 2 个帖子 - 2 位参与者 阅读完整话题
IT之家 4 月 30 日消息,SEMI(国际半导体产业协会)旗下硅制造商组织 (SMG) 主席矢田银次表示:“AI 数据中心相关的硅晶圆需求持续维持强劲,范畴包括先进逻辑与内存应用, 并且已延伸至电源管理组件 。” IT之家注意到,电源 / 功率半导体领域的 需求旺盛已反映在多家供应商的价格调整上 ,MLCC 等被动元器件、PCB 与相关基材也正从这波 AI 浪潮中获益。 矢田银次同时也是硅晶圆制造巨头 SUMCO(盛高)的业务与营销事业部执行副总经理,其补充到: 尽管硅晶圆需求已出现改善,但复苏态势并不均衡。许多组件公司观察到 工业半导体领域需求回温 ,随着晶圆库存去化,带动了更广泛的市场复苏。然而,今年第一季智能手机与 PC 出货表现较弱,可能反映出部分产能转向优先支持 AI HBM,使一般内存供应相对吃紧,进而影响智能手机与 PC 出货表现。 ▲ 图源:SEMI SEMI SMG 在当地时间 29 日公布的硅晶圆产业单季分析报告中指出,2026Q1 全球硅晶圆出货面积达 3275 百万平方英寸 (IT之家注:大致相当于 2896 万片 12 英寸晶圆) , 同比增幅为 13.1% 、 环比则因季节性因素下滑 4.7% 。 参考 SEMI Reports Worldwide Silicon Wafer Shipments Increase 13% Year-on-Year in Q1 2026
骑小电驴和坐在驾驶位上开车都有一种小小的掌控感, 坐在副驾和后座就不是那么明显, 年轻的时候还没什么感觉, 现在快 30 了, 感觉身体确实不如以前有活力了, 把控方向盘只哪打哪的感觉真的舒畅, 这是不是就是驾驶的乐趣(堵车除外)
产业链延伸到哪里,金融服务便跟到哪里。随着境外业务需求持续增长,中资券商全球化布局正向纵深推进,海外扩表已成为战略发展共识。据记者不完全统计,2025年以来,共有11家券商加码境外业务,合计金额超过600亿元人民币。国泰海通、中信证券、华泰证券等头部券商注资先行,东吴证券、华安证券、东北证券等中小券商紧随其后,或增资存量香港主体、或新设境外全资子公司,券商出海资本扩容全面铺开。(上证报)
AI算力投资的传导链条已延伸至更上游的材料端。MLCC成为AI服务器物料清单中仅次于GPU和存储的第三大成本项,电子布从传统绝缘基材向功能性材料转变。Wind数据显示,截至昨日,MLCC指数、玻璃纤维指数今年以来均上涨逾100%,部分上游材料个股涨幅超过200%。在这场由AI驱动的材料涨价潮中,一批公募基金经理沿着产业链向上投资,提前布局电子布与MLCC概念板块。(中证报)