[{"content":"laekov has made the decision to get rid of the .cn suffix.\n在自己网页上使用 laekov.com.cn 的朋友请 kindly 更新链接. 谢谢.\n","permalink":"/technical/domain-change/","summary":"laekov has made the decision to get rid of the .cn suffix.\n在自己网页上使用 laekov.com.cn 的朋友请 kindly 更新链接. 谢谢.","title":"Goodbye, laekov.com.cn"},{"content":"11 年前, 17 岁的 laekov 选择了在中华人民共和国境内搭建自己的个人主页, 并通过阿里云代备系统完成了工信部的 ICP 备案, 方使得网站成功上线.\n这个网站至今已持续运行了 11 年. 它换过若干个标题, 换过若干种实现方式. 它记录了一个高中 OIer 到 Ph.D. in Performance 的成长, 既有智力与技术的展示, 也有一个活生生的人的点点滴滴.\n对于掌管着整个国家信息化建设的工信部, 备案, 是为了合规. 备案, 是为了监管. 但备案, 也赋予了一些违背互联网自由精神的生杀夺予的权力.\n11 年后, 一位邮箱是 wc01146239@alibaba-inc.com 的审查员以格式不符合心意为由, 关停了这个 ICP 备案的接入.\n谨此文纪念. 这个备案号将不再被使用.\n11 年前, 当小小的 laekov 为了备案折腾种种手续的时候, 一颗小小的种子早已萌芽. 11 年后, 坐在太平洋岸边的 laekov 已经将这颗种子变成了坚实的树苗. 它会继续茁壮成长的. 谁说工信部 ICP 备案不是一件很好的推动世界进步的养料呢?\n","permalink":"/random/to-ali-beian-review/","summary":"11 年前, 17 岁的 laekov 选择了在中华人民共和国境内搭建自己的个人主页, 并通过阿里云代备系统完成了工信部的 ICP 备案, 方使得网站成功上线.\n这个网站至今已持续运行了 11 年. 它换过若干个标题, 换过若干种实现方式. 它记录了一个高中 OIer 到 Ph.D. in Performance 的成长, 既有智力与技术的展示, 也有一个活生生的人的点点滴滴.\n对于掌管着整个国家信息化建设的工信部, 备案, 是为了合规. 备案, 是为了监管. 但备案, 也赋予了一些违背互联网自由精神的生杀夺予的权力.\n11 年后, 一位邮箱是 wc01146239@alibaba-inc.com 的审查员以格式不符合心意为由, 关停了这个 ICP 备案的接入.\n谨此文纪念. 这个备案号将不再被使用.\n11 年前, 当小小的 laekov 为了备案折腾种种手续的时候, 一颗小小的种子早已萌芽. 11 年后, 坐在太平洋岸边的 laekov 已经将这颗种子变成了坚实的树苗. 它会继续茁壮成长的. 谁说工信部 ICP 备案不是一件很好的推动世界进步的养料呢?","title":"再见, 蜀ICP备15008072号"},{"content":"序 物理迁移到 SF Bay Area 之后, 是时候开一个升级版的北京爬坡列表了.\n这篇文章将会长期维护湾区想去的 \u0026amp; 去过的自行车 / 越野跑路线.\nTODO List Road Bike Diablo Tamalpais Alba Big Basin Hwy \u0026amp; South Hwy 9 Boulder Creek Rd Pescadero Creek Rd Skyline 从 La Honda 再往北 New La Honda 下到市区 Clayton Rd Quimby Rd Kings Mountain Road \u0026amp; Tunitas Creek Road Grizzly Peak Gravel East Alpine Rd 土路下坡 Old Fremont Loop Montebello 山顶那块的土路 Skyline Trail Umunhum Trail Trail Run Umunhum Trail Windy Hill Open Space Preserve Purisima Creek Redwoods Preserve Madera Creek Sanborn \u0026amp; John Nicholas Trail Black Mtn 到 Rancho 的连接线 Alum Rock Park Casttle Rock Logs \u0026laquo;湾区四大名山\u0026raquo; Hamilton 西边爬过了, 东边还没, 或许下次开车到山顶 4+2.\n西边路真好 (除了那段下坡), 山顶真壮观, 有点小晒, 坡不陡.\nUmunhum Hicks 是真的陡, 后面那六公里 10% 也挺实在的. 最后那个坡还行, 不是很难, 我以为是老望京水平, 其实也就新民路吧 (大雾). 下坡挺爽的, 公园部分路又平又陡, 视线也好, 能跑很快. Hicks 段路面沥青有点粗糙, 而且有 shadow patch, 需要小心点 (但也能跑巨快).\ntrial 的上半部分坡度甚至比公路缓(?), 跑步能拉挺快, 路况也好, 期待下次骑瓜车来.\nDiablo 听说有南北两条线, 看起来坡度不大但是有点晒.\nTamalpais 在金门大桥北边, 好像路过过底下部分, 树挺高的, 不晒, 听说也不陡, 但是还没研究明白路线.\n倒是被带去跑了 Steep Ravine - Dipsea 的 loop, 风景挺不错的, 路面状况也好, 能跑起来.\nSkyline 北段公路 主要包含 35 号路到 9 号路路口以北的山脉.\nSkyline 主路 起起伏伏.\nKing\u0026rsquo;s Mtn OLH 的升级版 (?), 路平但窄, 多数时候在山谷里, 回头弯不少, 整体坡度比较均匀, 且有树荫.\nOld La Honda 经典路线. 没啥汽车. 骑车圣地. 坡度适宜, 长度合理, 大树参天, 也有 view.\nPagemill 湾区高崖口, 比较秃, 放坡 view 极佳.\n中间有两段 2km 左右坡度略陡, 其余部分起起伏伏.\nMontebello 酒庄路, 8km, 陡缓陡, 尽头是防火道, 离市区近, 适合晨练, view 极佳, 略晒.\nCanyon Trail 从 pagemill 下来, 先是树林里的 trail, 甚至需要扛车过小溪, 然后是缓坡.\n树荫超赞. 瓜车路段有点难度, 自行车路段没有难度.\nRedwood Gulch 从 Canyon Rd 支出来 2km 陡坡, 干上去就到 hwy 9 了, 有点窄, 但是它快啊.\nOld La Honda Rd 西段 有点陡, 树林可能导致积水. 没爬过, 放坡还行.\nNew La Honda Rd 西边 路面也挺好, 不陡, 放坡很快\nWest Alpine Rd 8km, 好坡, 先在树林里然后在山脊上.\nEast Alpine Trail 听说是很棒的瓜路, 确实是, 如果是 xc 车会获得更多的快乐. 下坡不是很陡, 但中间有一段比较窄. 有很多天然形成的(?) table top, 还有一些弯墙. 下坡的时候能遇到一些人在爬. 整体感觉像是中门寺的加强版.\n下半部分是不太陡的无中线柏油公路, 因为是断头路所以爬坡的自行车也很多.\n公园 Old Fremont 土路, 自行车友好 (陡).\nRancho San Antonio 只能跑步, 人多, 但是近.\nStevens Creek Reservior 野餐区很多, 水库边路线非常休闲.\nMadera Creek 看 strava 热图上被走成筛子了, 但还没去过\nSanborn \u0026amp; John Nicholas Trail 心心念念的湖和红木林, JNT 山顶有一处红木林, 下山坡度只有一处比较陡, 其余较缓.\nSanborn 路要窄一些, 石头也多, 不能骑车只能跑步.\nBlack Mtn 到 Rancho 的连接线 在开阔处能瞅到一点山顶的采矿作业平面. 爬起来没啥特别的, 就是得绕很远.\nSanta Cruz 方向的山脉 以 Hwy 9 为界.\nCastle Rock 州立公园, 里面有很多石头可以攀岩, 非常有意思. 还有一个小溪在悬崖边有一个瀑布. 整体风格比较陡峭, 有一些在悬崖边的惊险路段, 跑步的时候石块也比较多. 坡度倒是不太陡, 而且有很多 view 很好的观景台, 可以看到云海或者太平洋.\nSkyline Trail 石块挺多的, 路面状况没那么好, 坡度倒是挺平的.\nHwy 9 主线北段 (到路口) 不陡, 路面状况良好, 高速弯多, 树荫很棒, 下坡无敌, 上坡需要和跑山汽车和摩托 battle.\nPescadero Creek Rd 开车经过过, 爬 West Alpine 之前左拐, 好像不高, 有空去溜一圈.\nAlba 传说级 10% 6km, 从 Jasmine 下坡赛段号称 \u0026ldquo;有生命危险\u0026rdquo;, 这不得去试试.\nBig Basin Hwy \u0026amp; Hwy 9 南段 Hwy 9 放坡应该不错, Big Basin 正好绕回来.\nBoulder Creek Rd 开车跑山还不错, 骑车可能也有点陡, 正好沿 Hwy 9 绕圈回 Skyline.\nBlack Rd 从 Los Gatos 水库边爬回 Skyline, 中间有些部分有点陡, 前半部分有点小晒.\nBear Creek Rd 比 Black Rd 更陡一点, 好像很窄, 或许可以怎么绕圈.\n35 号路南段 过了 Black Rd 路口之后就变成 单! 车! 道! 了. 不影响骑自行车就是了, 上上下下的, 一路可以放一个无名坡到 Los Gatos 水库边上.\n东边秃秃山脉 Alum Rock Park 貌似也有些开阔型 Trail 可以上到 Sierra 山顶.\nMission Peak 听说是湾区经典.\n从 Stanford Rd 上去停车很难抢, 防火道倒是宽又不是太陡, 从另外一边牧场里下来的路窄一些, 可以遇到牛, 有趣.\n山顶有些石头路段比较滑.\n从大学上去的路还没走过.\nYosemite 好像很著名但还没开始研究.\nTahole 好像也有很多不错的路可以跑.\n","permalink":"/random/sfba-outdoor-logs/","summary":"序 物理迁移到 SF Bay Area 之后, 是时候开一个升级版的北京爬坡列表了.\n这篇文章将会长期维护湾区想去的 \u0026amp; 去过的自行车 / 越野跑路线.\nTODO List Road Bike Diablo Tamalpais Alba Big Basin Hwy \u0026amp; South Hwy 9 Boulder Creek Rd Pescadero Creek Rd Skyline 从 La Honda 再往北 New La Honda 下到市区 Clayton Rd Quimby Rd Kings Mountain Road \u0026amp; Tunitas Creek Road Grizzly Peak Gravel East Alpine Rd 土路下坡 Old Fremont Loop Montebello 山顶那块的土路 Skyline Trail Umunhum Trail Trail Run Umunhum Trail Windy Hill Open Space Preserve Purisima Creek Redwoods Preserve Madera Creek Sanborn \u0026amp; John Nicholas Trail Black Mtn 到 Rancho 的连接线 Alum Rock Park Casttle Rock Logs \u0026laquo;湾区四大名山\u0026raquo; Hamilton 西边爬过了, 东边还没, 或许下次开车到山顶 4+2.","title":"湾区户外 Ledger"},{"content":"Introduction 离毕业已经过去9个月了，终于得以端坐在大洋彼岸计划中的公寓的书桌前开始写这篇拖欠已久的文章。\n人生每过一个阶段，就写下些什么，是 laekov 形成已久的惯例。 而读博这一篇章在结束时曾经尤为令 laekov 感到激动而想要进行一番记录。\n在 laekov 并不长的一生中，在一个校园里度过四年之后，再选择继续待五年甚至可能是更长的时间，并不是一件容易的决定。 Dr 这短短两个字母的前缀，是曾经崇高的追求，也带来迷惘和痛苦。 它让 laekov 晚了一些年真正地进入社会，或许少了一些经历，也或许多了一些成长。 当这一切结束于一场并不那么隆重的毕业典礼时，当匆匆离去的脚步在不经意间拉开了更精彩世界的帷幕之后，曾经的平静、单纯显得多么珍贵。 而曾经的痛苦、愤怒、迷茫终将化为浅浅一笑。\n这一切建立了一个人类对于这个社会最初始的认知。 它改变或者说塑造了这个人的愿望、行为。 老师总是说，PhD 最重要的是培养一个人做研究的能力。 一个人自己的一段经历以及自身的脱变何尝不是一个重要的研究对象呢？\nMotivation: 这一切是怎么开始的 五年前 laekov 对读 phd 这个决定的产生进行了详细的描述。\n一言以蔽之，就是对科研产生了憧憬并决定花五年的时间来更进一步。\n曾经的 laekov 认为科研是一件崇高的事业，因为科研是在扩展人类的知识边界，这听起来是多么伟大而有意义的事呀！ 因为 laekov 认为人的生命是没有意义的，因为宇宙是没有意义的。宇宙从诞生到消失，无可改变，甚至一切也许就是写好的剧本。 在这样的背景下，努力奋斗或许本身就是一个伪命题。 而在这无聊的世界中，或许唯一有意义的事，不就是“扩展认知”这一件吗？ 来到这个大千世界，在人生有限的几万天内，去做一些无人做过的事，发现一些无人发现的角落，用一篇篇 paper 构筑一个属于自己的世界。 或许这些研究并没有作用，或许只是一个无聊的小 trick，但当说起它们的时候哪怕有一点点的令人兴奋也是一件好事情呀。\nlaekov 选择了并行计算这个方向，原因或许也不那复杂，只是因为从 2017 年开始 laekov 就开始了，到 2019 年的时候已经是一个有一些些经验的“熟练工”了。 相比起彼时方兴未艾的热门方向“机器学习”，laekov 认为做出一个实际可用的 system 并且在成千上万的计算资源上高效运转起来是最能带来成就感的事情。 laekov 曾经的爽点就在于看着 scc 集群上每台机器的一百多个 cpu 核在 htop 里一片绿的场景，甚至是使用特殊的绑核策略绑出一些神奇的花纹。 相比起来，性能优化的工作是确定的，被完好定义的，有上限的。这件事激活了 laekov 从中学开始的竞赛基因。 另一方面，或许 laekov 对科研和工程这两件事的看法是两者是需要结合的。相比于纯粹的理论上的贡献，laekov 更想看到在有生之年科研成果能够被用于真实的世界，产生真正的价值。 因此，虽然哪怕 system 这个方向更强调 engineering 与 fancy idea 的结合，而并非一个那么有理论深度，那么数学公式满天飞的领域，但 laekov 依然选择了这个方向。\n当然了，至于在哪里读 PhD 这件事，laekov 其实是被命运的齿轮转动着引导到了意想不到的地方，以一种神奇的姿势站在了时代的浪潮之巅。 在 2020 年，laekov 原计划是前往大洋这边的阳光下的 LA 来进行 PhD 的旅程，但因为 COVID 和川总的 travel ban，不幸滞留在了北京。 当时 laekov 手里甚至有或许能用的签证，只需前往第三国中转两周，便可踏上新的土地去完成自己的梦想。 然而或许是冥冥中的指引（或许是不想扛着自行车去中转），laekov 选择了在原地先打工过度，然后又在绝望的打工过程中收到了来自本科母校的召唤，于是回到了 PACMAN，并且最终在这里又度过了五年。\nMethodology: 我好像在做科研 贵系对于 PhD 的获取条件是明码标价的：至少一项被“顶会”（基本赞同于 CCF A 类会）发表的一作工作。 尽管在本科时接受了一些基础的训练，但 laekov 对“科研”这件事的理解是在逐步形成的。 laekov 最开始认为科研就是找到一个问题，提出一个解决方案并且写一些代码来证明这个方案，把方案写清楚，就称得上是一个成功的科研项目了。 在本科时的 Prague 这篇文章写作的时候，laekov 就直接地践行着这个理念。然而，彼时的 laekov 并未意识到背后还有更复杂的来龙去脉。\n直到昨天 laekov 才恍然意识到，“创新”是学术界所 appreciate 的核心价值，但 laekov enjoy 的或许只是“创造”这个过程罢了。 用一个纸箱搓一个柜子，或者是写出什么粗糙但可以满足某种需求的网页，显然并不足以发一篇 paper，但对于 laekov 来说，这和写系统发论文带来的成就感是并无太大差异的。 这也许是 laekov 在读博前混淆所以产生了一些虚假期望的原因。不过没有关系，这不妨碍以下罗列的这些经历成为 laekov 宝贵的回忆和人生经历。\nStarting From FastMoE laekov 的第一篇论文开始地异常的顺利。 在博一上半学期快要结束的时候，2020 年末，laekov 被派去和算法组的同学合作解决一些他们发现的模型训练效率问题，这就是 FastMoE 这个故事开始的地方。 彼时 Bert 和 GPT 才刚刚在业内为众人所知。谷歌已经开始研究如何扩增 LLM 的参数量来获取更好的性能，同时又想要节省计算量。“稀疏”戳中了 laekov 本想研究 GNN 的神经。 在支持算法同学研究 MoE 模型的路上，laekov 把自己的系统命名为 FastMoE，代表着这是一个快速（写得快）的实现，旨在赶紧支持合作的算法同学的科研需求。 这个系统的初版甚至被用于“并行计算”这门课的期末作业。laekov 为了实现迅速，舍弃了 torch 里推荐使用的 NCCL，而是在 MPI 的基础上搓出了第零个版本。 为了使用那个版本的系统，用户不能使用 pip 安装 torch，而是需要在装好 openmpi 开发环境的系统里编译 pytorch。 后来的故事是 laekov 寒假选择了不回家留在北京，在智源的清华科技园二楼的办公室里写完了 NCCL 版本的开源的 FastMoE 的初版，甚至还“不小心”联系了公关能力远超 PACMAN 水平的智源团队来 PR 这个系统。\n然而 FastMoE 这个项目只解决了从“没有开源系统可用”到“有办法训”的路径。相比于 paper 所需要的 novelty 还相去甚远。 彼时 laekov 已经规划好了一些可能的方案，而 FastMoE 这个系统的开源和 arxiv 只是为了给自己提供一个可比较的 baseline。 回忆起来会觉得 laekov 当时的设计能力强得可怕，哪怕手里的只是一个非常基本的，没有一点创新的，只是解决工程问题的项目。\n无独有偶，在 FastMoE 的 arxiv 论文公开后仅仅三天之后，facebook 就公布了他们的同样基于 pytorch 的开源的 fairseq。 尽管在对 capacity 的理解等方面 fairseq 和 FastMoE 不尽一致，但就是这争分夺秒而来的 3 天的优势，堪堪让 FastMoE 坐稳了“全世界首个基于 PyTorch 的开源 xx”这个虽然定语有点长但实实在在是世界首个的位置。 对于 laekov 来说，哪怕 paper 还没有发布在某个 CCF A 类会议接收，但这样毫离之间的小小成功也是令人振奋的。 也或许当今 AI 模型之间激烈的竞争从那时起就埋下了小小的种子？\n八卦炉：Is scalability everything? FastMoE 是带着更多的目的诞生的。八卦炉也是其中之一。\n那是 2021 年的春节前，laekov 跟着老师加入了一个神奇的四方会谈，目标是冲击一个“世界最大”规模的 LLM 预训练，具体一点，是要去冲击戈登-贝尔奖（GB）。 这个奖每个颁发给在 HPC 领域干出“最大”事情的团队。从前的 GB 通常颁发给大气海洋模拟这样的“科学”应用，当然也有如 2018 年这样把 Exascale ML 应用到气象模拟的工作。 而此次的 LLM 应用（甚至是多模态的 LLM）更像是一场 CS 界自己的狂欢。而这个模型甚至并不需要被真正训出来吐字。只要有模型方作为“科学”的一方进行背书即可。\n实际上，在 2021 年初这个节点，要在短短两个月之内完成这样一个项目，其难度是巨大的。 因为这台机器并非基于 NVIDIA 生态，而是用了一套真正自主研发的众核向量指令架构，从算子到 pytorch 都还是一片平地。在些基础上搭起 LLM 训练框架的高楼，是一项艰巨的工程挑战。 幸运的是 PACMAN 派出了十多人的可以“自动驾驶”的研究生团队（指可以在导师不在的情况下自主组织起来合作进行工作），以及靠谱的合作方，堪堪在 DDL 之前点燃了这个巨大的十万卡量级的“丹炉”，并完成了工作。\n这个工作所达成的规模在现在来看依然是惊人的。时至今日，产品级的 LLM 总参数规模还徘徊在 ?00B 规模，而彼时八卦炉所炼化的最小的模型也是 1.75T 量级。1?T 的模型也达到了相当可观的 MFU。 而最大的 1??T 的模型甚至把 EP 的规模推到了十万卡超大 EP 这个水平。哪怕是在五年后，这个数字也是极为惊人的。\n虽然在工程上 laekov 所在的团队达成了巨大的成功，但这个模型除了 loss 可以降以外，并没有收获到任何“模型能力”上的效果，也没有所谓的“学术创新”。GB 奖项的冲刺失败了，而合作团队也在投稿后各奔天涯了。 今天很难再去追究当时为什么甚至没有获得一个 GB Candidate。或许是同期的其它工作更加亮眼，也或许是“LLM”这件事并不符合当时 SC 评委老登们的 taste。 但从 2026 年的视角来看，没有继续在那样一个平台上去实验，去探索如何让 LLM 训练变得更稳定，能力变得更强，是一件更加令人唏嘘的事情。 也许是没有在正确的地方加上 grad norm，也许是训练数据质量过低，也许是没有人有拍板去坚持训练这样一个模型。\n历史无从假设。不过，聚是一团火，散是满天星。千问和豆包、DeepSeek 和 GLM，背后都站着当时那个团队里某些成员。也算是“那一把火”持续地烧穿了这个时代吧。\n左脚踩右脚上天的 FasterMoE 从四月的青岛回到北京，laekov 就要开始为自己毕业路上的第一个里程碑：一篇顶会论文开始奋斗了。虽然彼时 laekov 还在读博的第一年。\nFastMoE 的 arxiv 论文和 GitHub 开源版本获得了不错的关注，八卦炉也用上了 FastMoE 作为 EP 的基础，这为 laekov 的这篇论文进行了充分的铺垫。 目标是 PPoPP 这个注重“并行”的会议，所以 laekov 瞄准了 EP 的性能优化，并第一次完整地自己总结出了三个创新：负载均衡、计算通信重叠、通信量优化。 这一切对比的基准则是几个月前开源挂 arxiv 的 FastMoE 和靠 FSDP 训 MoE 的 DeepSpeed。\n或许成功的论文各不相同，但 PACMAN 投文章的结构千篇一律：一个问题，三个挑战，三个创新点，总结成一句话，加上 solid 且 visible 的 speedup。 令 laekov 印象深刻的或许是和葡萄牙兄弟 Tiago 的跨时区激情合作，或许是被封在学校不准出去但是把夜熬穿在广州超算集群上占 64x V100 做实验，或许是一边在实验室投影看东京奥运会一边改论文。 奇迹般的，laekov 在那个晚 8 点 DDL 前的最后两小时跑出了一条还算好看的 loss 曲线并贴进了论文里。而在等曲线的时候感觉论文已经改无可改，于是打开了 GTA 还被老师抓了现行。\n暑假过去，投稿完成。十月，出分，还不错，rebuttal。十一月，在生日前后的某天，收到了开头为 Congratulations 的邮件。Artifact Evaluation, Camera Ready。 做科研仿佛是一件很顺利的事情，唯一的缺憾是 2022 年疫情原因没能去韩国线下参加 PPoPP，亲自现场讲自己的论文。 然而或许 laekov 仍未明白为什么这篇文章会如此顺利。\nlaekov 在做完 FasterMoE 之后发现 MoE 尚未被大规模应用。EP 也并非必需品。于是在投完 FasterMoE 后的2022 年，laekov 将注意力转向了 LLM 以外的方向。 从 2026 年的视角，这一决定无非是与时代的浪潮背道而驰。然而 2022 年的 laekov 甚至不愿意说自己是搞 AI 的，而希望做更“有意思”的负载，更“科学”的应用。 这里也无论对错，只是总结规律，当时代的潮水还停留在海面之下暗流涌动的时候，或许弄潮儿还没能感知大浪即将到来，于是选择了胡乱划水罢了。\nDLRM 的折戟沉沙与屡败屡战 书接上回，在 2021 年秋天，在 FasterMoE 投稿工作告一段落之后，laekov 被同时分配到了两份实习工作（横向项目），分别是某大模型公司（实验室）的想搞自动（？）并行，另一边则是某短视频公司想搞 DLRM 训练加速。 在迅速地意识到前者需要的可能只是一套 DTensor （当时还没有这个玩意）并且自动并行早在本科搞 Garlic 的时候就已经被 laekov 认为是一个并不好玩的方向。 而 DLRM（基于 Deep Learning 的 Recommendation Model）这件事和 laekov 事先定下的“稀疏”的主线不谋而合，甚至有一些优化思路还可以从 MoE 中借鉴过来。 于是 laekov 把更大的热情投在了 DLRM 这件事情上。 然而，由于一些原因（比如老师坚持要以学术项目为主导以及某司工作环境实在比较难以为继），laekov 并没有真正拿到业界的真实系统和数据，而是在 NVIDIA 开源的 HugeCTR 上展开了探索（修修补补）。\n这里要引入 laekov 后来总结的一个关于论文的做菜理论：投论文就像是厨艺大赛，要做菜给评委吃。它研究的问题是原料，而研究方法和写作手法则是烹饪的工序和手法。 新鲜的食材仅需要简单的处理即可散发出诱人的美味，而陈腐的食材尽管经过了重油重盐的大力处理，依然难以掩盖其平庸的内在。 很遗憾，laekov 第一次无意踩中了 MoE 这个极为鲜美的甚至彼时还未被人开发的处子领域，而在 DLRM 这个方面则不幸命中了一个已经弥漫着并不新鲜的味道的话题。 工业界在 DLRM 方面的研究至少领先公开可查的论文 5 年，而他们显然不会将自己公司的核心竞争力通过论文公之于众。 然而，当来自工业界的审稿人看到投稿还在讨论他们早已解决的问题的时候，得到低分是难以避免的。\n当 laekov 开始在 HugeCTR 上进行优化的时候，已经是 2022 年初了。在这一年发生了什么无需多言。而 laekov 开发的过于复杂的优化所遇到的代码正确性 bug 隐藏得很深。 在时间凝固的 2022 年，处于工作效率谷底的 laekov 几乎花费了大半年的时间来解决这些 bug，并堪堪在一些开源的显著有别于真实数据的 case 上获得了性能收益。\n12 月，由于 covid 感染和封城而倒在宿舍里的 laekov 一拍脑门，拉上室友 Harry，决定出手这篇文章，投一个 ATC。 彼时由于还有师弟在 MoE 方向的续作 SmartMoE 需要 laekov 参与，故 laekov 选择了 ATC 给出的一个神奇的 Short Paper 选项，仅需写正常 paper 的一半长度。 经过一番努力包装，这篇 paper 最终喜提 early reject。（而同时投稿的 SmartMoE 则一次中稿。 /* 是师弟似乎也继承了 laekov 的诅咒，后续投稿至今未能投中。让我们在这里祝他早日 accept，脱离苦海 */）\n于是 laekov 转战当年的 sc，把文章扩展成了十多页的长文，故事变成了 scaling up sparse training，然后毫无意外地继续吃 reject。 后来投 PPoPP'24 的“稀疏通信”给了一个 poster（reject 之后的安慰奖），然后又被 ASPLOS 继续按在地上拒了一次。laekov 彻底绝望了。\n直到 24 年底毕业前夕，laekov 决定投一个 ICDE，然而因为没搞清楚单盲投稿要写名字所以 desk reject 了，于是当场转到 ATC'25 陪跑自己的另一篇文章。 没想到收到分数的时候发现，这篇已经放弃治疗的文章，竟然比当时认真写的那篇分数还要高！有一个 reviewer 认为这是 solid system 并给出了 4 分的神奇意见。 laekov 会记得那个四月的 SG 的晚上，laekov 从地铁里走出来回宾馆的时候，收到了这篇文章的 congrats 邮件。 当时的 laekov 站在 Stamford 酒店半空中的露台上凝视着 SG 的夜景对这一切感到如此地不真实但又是某种意义上历时两年半的压力的释放。 这篇文章经历了六次投稿，终于在毕业前中了。\n所以 laekov 的料理大赛理论还需要加上一条：“投”即投其所好。然而对于现代双盲评审的会议，从技术上讲并无可能真正对审稿人进行偏好攻击。 因此，laekov 更愿意将这一过程比喻为“投壶”：对于这种差劲边缘的工作，机缘（以及背后一些不能放到表面来研究的过程）或许也是十分重要的一个部分。\nFastDecode: Good idea 毁于拖延 在 23 年初的时候，LLM 的火爆已经初现端倪。老师和 laekov 都敏锐地意识到 LLM 的推理成本或许将会比训练成本更加关键。 彼时 vllm 的论文还没有发表，LLM 推理的领域还是一片蓝海。在课题组 23 年初的年会上，laekov 提出要好好研究流水并行和异构硬件对于 decoding 成本的帮助。 然后那年 laekov 就去折腾其它的事情了。直到 11 月才想起来还有这么个 idea 要做。然而当时不仅有 vllm，甚至 PD 分离都已经快要出来了。 然而 laekov 当时也有别的事在搞，于是胡乱做了些 CPU / GPU 分离 PP 的实验，完全 focus 在 throughput 上，并且达成了超级高的 throughput。 于是 laekov 就以赶 arxiv 版本的心态又投了一年的 ATC，然后不出意外地被 ATC 审稿人各种挑刺并拒掉了，不过 laekov 的目标真的只是赶紧挂个 arxiv 完事。 这篇文章也经历了一年多的重新包装 \u0026amp; polish，乃至于在 2025 年初又投 ATC 的时候已经完全看不出之前的模样了。 虽然直到 laekov 毕业它还是没中，但是它也贡献了一份专利+一份 workshop paper，在下一章讲到的故事里发挥了一些有趣的作用。\n现在复盘如果这个 idea 做出来得再早一点，把分离 serving 的概念再提得明确一些，或许也是一篇不错的工作。 Serving 在 2023 年初的时候确实是一个新鲜的“食材”，可惜这个时代一个 idea 放六个月可能就已经不新鲜了，被别人做烂了。 这也是在 DLRM 基础上的一个新的 lesson: 越是大的浪潮，它流动的速度也越快，在此中做学术或技术，更要有紧迫感，注重时效性。\nImplementation: 开个公司试试？ 有了 FastMoE 这个“著名”开源项目，有了八卦炉在国产硬件和大规模上的积累，2023 年中的时候，一个创业的念头摆在了 laekov 和导师面前。 最初版本的故事是，如果能用上那些国产算力，那或许可以以极低的成本达成 LLM 的训练。\n于是 laekov 开始研究如何作为一个博士生开一家公司。然后在和老师一起逐步了解和搭建这个框架的时候，又引入了更多的合伙人乃至是新的 CEO 和 COO，laekov 最终的形态是一个联创。 在 2023 年的后半部分，“见投资人”和“改 BP PPT”就成为了 laekov 工作的重要部分。BP 的 PPT 是继 22 年杰青 PPT 之后 laekov 和 PhD 伙伴们最倒背如流的 PPT 之一了。\n这个 startup 的故事最终落在了“国产硬件”这件事情上，但八卦炉的故事事实上已经过时了。在 AI Infra 这个赛道，硬件厂商和模型厂商都有更复杂、更具体的需求。 在获得了天使轮的融资之后，2024 年 laekov 的主要目标是“做成一个项目”。于是和不同的厂商谈了合作。而厂商似乎对 FastDecode 这个事情比较感兴趣，而无巧不成书，FastDecode 往不同加速器平台移植的成本也是极低的。 于是以 FastDecode 为主要内容之一的项目甚至比八卦炉在训练上落地这个事情推进得更加顺利一些。 在这个过程中 laekov 也认识了很多不同的人，接触了商业逻辑的方方面面。比起以创新为核心的学术圈，商业利益驱动的世界更在乎一件事物短期内能产生的实际价值。\n或许这一切可以被指责为冰冷无情，但换个方面想，这些事情也简单了许多。 可复制的产品是获取利润的核心工具。 而作为创业公司，抓住时代的浪潮固然重要，敢于 all in 的勇气也是成功的必要条件。\n这段经历让 laekov 对世界产生了更新的认识。从前的 laekov 或许一心只想当个 AP，但在这一次大胆行动之后，laekov 对于技术是如何产生价值的、对于商业是如何运行的有了初步的认识。 虽然这次经历并没有让 laekov 从此走上人生巅峰实现财富自由，但 laekov 认为这是老师在 laekov 的 PhD 培养过程中给出的十分重要的最后一课。 这在 laekov 选择自己的人生路径的时候产生的影响也是终身的。\nEvaluation 和五年前的记录进行一个逐行对比。\nlaekov 本科期间换了 4 个新手机, 0 个新电脑.\nlaekov 研究生期间换了 1 个新手机，自费买了 2 台电脑，领用了至少 6 台办公用电脑。\nlaekov 本科期间去过 4 次美国, 2 次德国. 两次去德国都在 Frankfurt.\nlaekov 研究生期间去了 2 趟美国，1 趟英国。\nlaekov 一共参加了 7 场超算比赛, 其中 5 场是正式队员, 4 场由 laekov 主要负责被面试.\nlaekov 研究生期间去超算比赛看本科小朋友们玩过。\nlaekov 本科期间一共发表了 2 篇论文.\nlaekov 研究生期间共发表了 9 篇论文，其中一作 CCF-A 类 2 篇。总引用量 600+。\n(根据学校统计) laekov 一共吃过学校的 15 个不同食堂中的 14 个.\nlaekov 研究生期间学校新开了双清食堂，并吃上了。对本科时没刷上卡的荷园食堂进行了补档。但由于各种原因没再去吃过北园南园融园。\nlaekov 本科期间拥有过 13 辆自行车, 其中包括 6 辆公路车 (小绿, 大彩, 小灰, 蓝车, 大紫, 大橙), 6 辆通勤车 (黑色卧凤, 大绿, 成都死飞, 大蓝, 大白, 大粉), 1 辆山地车 (大黄).\nlaekov 研究生期间购买了 4 辆自行车，其中包括 1 台公路车（老六），1 台软尾山地车（大大紫），2 台通勤车（大青、大黑）。\nlaekov 在 4 个国外城市和 7 个国内城市骑过自行车 (不少于 40km).\nlaekov 研究生期间没在国外骑过车，国内除了北京外只在两到三个城市骑过车。\n根据 laekov 的 strava 记录, 从 2017 年到 2020 年 6 月 24 日, laekov 一共骑行了 12884.9 千米, 海拔爬升 133472 米. (相当于从海平面爬了15 次珠峰?)\nstrava 数据有点难统计了，但 laekov 每年都还在骑公路车 3000 km 以上（除了 2024 年没达到 3kkm），总爬升应该比本科多吧。\nlaekov 本科期间完成了 4 场铁人三项比赛, 2 场半程马拉松比赛, 1 场越野跑比赛. 参加了 3 次自行车比赛, 其中有一次因为下雨太冷退赛了, 另有一次因为摔断了手而 DNS.\nlaekov 研究生期间没有完成过铁人三项比赛（DNS 一场），蹭了一场半马，参加了 1 场越野跑，4 次自行车比赛并且都完赛了。\n除此之外，laekov 在研究生期间开辟了赛车的新方向。 代表学校在卡丁车比赛夺冠一次，在模拟器比赛获得亚军一次，在 hipole 平台共参赛 98 场，11 次登上领奖台，但从来没有拿过冠军。\nlaekov 在研究生期间先后在 6 家单位办过实习。\n","permalink":"/random/phd-thesis/","summary":"Introduction 离毕业已经过去9个月了，终于得以端坐在大洋彼岸计划中的公寓的书桌前开始写这篇拖欠已久的文章。\n人生每过一个阶段，就写下些什么，是 laekov 形成已久的惯例。 而读博这一篇章在结束时曾经尤为令 laekov 感到激动而想要进行一番记录。\n在 laekov 并不长的一生中，在一个校园里度过四年之后，再选择继续待五年甚至可能是更长的时间，并不是一件容易的决定。 Dr 这短短两个字母的前缀，是曾经崇高的追求，也带来迷惘和痛苦。 它让 laekov 晚了一些年真正地进入社会，或许少了一些经历，也或许多了一些成长。 当这一切结束于一场并不那么隆重的毕业典礼时，当匆匆离去的脚步在不经意间拉开了更精彩世界的帷幕之后，曾经的平静、单纯显得多么珍贵。 而曾经的痛苦、愤怒、迷茫终将化为浅浅一笑。\n这一切建立了一个人类对于这个社会最初始的认知。 它改变或者说塑造了这个人的愿望、行为。 老师总是说，PhD 最重要的是培养一个人做研究的能力。 一个人自己的一段经历以及自身的脱变何尝不是一个重要的研究对象呢？\nMotivation: 这一切是怎么开始的 五年前 laekov 对读 phd 这个决定的产生进行了详细的描述。\n一言以蔽之，就是对科研产生了憧憬并决定花五年的时间来更进一步。\n曾经的 laekov 认为科研是一件崇高的事业，因为科研是在扩展人类的知识边界，这听起来是多么伟大而有意义的事呀！ 因为 laekov 认为人的生命是没有意义的，因为宇宙是没有意义的。宇宙从诞生到消失，无可改变，甚至一切也许就是写好的剧本。 在这样的背景下，努力奋斗或许本身就是一个伪命题。 而在这无聊的世界中，或许唯一有意义的事，不就是“扩展认知”这一件吗？ 来到这个大千世界，在人生有限的几万天内，去做一些无人做过的事，发现一些无人发现的角落，用一篇篇 paper 构筑一个属于自己的世界。 或许这些研究并没有作用，或许只是一个无聊的小 trick，但当说起它们的时候哪怕有一点点的令人兴奋也是一件好事情呀。\nlaekov 选择了并行计算这个方向，原因或许也不那复杂，只是因为从 2017 年开始 laekov 就开始了，到 2019 年的时候已经是一个有一些些经验的“熟练工”了。 相比起彼时方兴未艾的热门方向“机器学习”，laekov 认为做出一个实际可用的 system 并且在成千上万的计算资源上高效运转起来是最能带来成就感的事情。 laekov 曾经的爽点就在于看着 scc 集群上每台机器的一百多个 cpu 核在 htop 里一片绿的场景，甚至是使用特殊的绑核策略绑出一些神奇的花纹。 相比起来，性能优化的工作是确定的，被完好定义的，有上限的。这件事激活了 laekov 从中学开始的竞赛基因。 另一方面，或许 laekov 对科研和工程这两件事的看法是两者是需要结合的。相比于纯粹的理论上的贡献，laekov 更想看到在有生之年科研成果能够被用于真实的世界，产生真正的价值。 因此，虽然哪怕 system 这个方向更强调 engineering 与 fancy idea 的结合，而并非一个那么有理论深度，那么数学公式满天飞的领域，但 laekov 依然选择了这个方向。","title":"读博五年的流水账和胡思乱想"},{"content":" 人生总是充满了绝望。咀嚼绝望，享受绝望，踩着绝望前行。\nlaekov 的最后一次 oi 比赛是 noip 2015. 十年之后，受蔺老邀请，为刚从 noip 2025 战场上结束了战斗的小朋友们写些什么。\n很难再去想象十年前的 laekov 以怎样的心情写下了这个玩意。 大抵亦是充满了绝望的，用失落的心情去面对着沉重的高三的文化课，面对着学不会的高考科目，不知道生活会走向哪里。\n事实上，绝望是贯穿了 laekov 的整个 oi 生涯，乃至退役后至今的人生。\n2011 年 laekov 的绝望是 noip 普及组没考好。愤然在机房摔键盘。// 后来在 2012 年拿了普及提高双一等。\n2013 年 laekov 的绝望是 noip 提高组没考好。在机房的电脑上愤怒地敲出 while true; do echo fxxk noip; done。// 后来把 wc, ctsc 的一等奖都领走了，甚至 ak 了一把 apio。\n2015 年 laekov 的绝望是 noi 考场上那一道哈夫曼树。望着考场倒计时却想不起那个正确的贪心策略。集训队仿佛未能赶上的火车，贴脸疾驰而去，留下 laekov 一人在原地。// 后来 acm 区域赛金牌、世界大学生xx竞赛冠军倒也没少拿。\n2019 年 laekov 的绝望是申请季只能用不忍直视 gre、gpa 收获几近全拒的结果。// 后来还是读上了 phd。\n2023 年 laekov 的绝望是一次次收到 we are sorry to inform you that your work does not qualify for our conference. // 最终在毕业前 2 个月的一个夜晚收到了录用邮件。\n2025 年 laekov 的绝望是无尽的等待。。。\n回过头去，2015 年写下那些文字的 laekov 也不曾能够想到 2025 年的 laekov 还坐在电脑前写下这些文字，再回看曾经的那些绝望，脸上却会莫名地浮现出笑容。\nlaekov 总是对当下的逆境充满绝望，这无可厚非。 然而当那个关卡过去，当这一切都过去，当下一个阶段到来，无论结果如何，只要生命不止，人终将会前进。 没有什么事情是需要懊悔的，因为一切都是命运最好的安排。 人活在世上，没有什么一定要达成的目标，因为没有任何不可接受的后果。 沮丧、伤心、气馁，都是没有得到时正常的情绪。 然而也总要知道，当时间的指针移动到下一段，当一切绝望的经历被抛在脑后，它们会且仅会成为忆往昔峥嵘岁月的谈资而已。\n人生的意义是由人自己定义的，而人生的过程更像是一场修行，在沉浮中努力保持一颗稳定的心，在绝望的黑暗中沉稳地去寻找和期待着希望，并变得更强大。\n","permalink":"/random/on-frustrated/","summary":"人生总是充满了绝望。咀嚼绝望，享受绝望，踩着绝望前行。\nlaekov 的最后一次 oi 比赛是 noip 2015. 十年之后，受蔺老邀请，为刚从 noip 2025 战场上结束了战斗的小朋友们写些什么。\n很难再去想象十年前的 laekov 以怎样的心情写下了这个玩意。 大抵亦是充满了绝望的，用失落的心情去面对着沉重的高三的文化课，面对着学不会的高考科目，不知道生活会走向哪里。\n事实上，绝望是贯穿了 laekov 的整个 oi 生涯，乃至退役后至今的人生。\n2011 年 laekov 的绝望是 noip 普及组没考好。愤然在机房摔键盘。// 后来在 2012 年拿了普及提高双一等。\n2013 年 laekov 的绝望是 noip 提高组没考好。在机房的电脑上愤怒地敲出 while true; do echo fxxk noip; done。// 后来把 wc, ctsc 的一等奖都领走了，甚至 ak 了一把 apio。\n2015 年 laekov 的绝望是 noi 考场上那一道哈夫曼树。望着考场倒计时却想不起那个正确的贪心策略。集训队仿佛未能赶上的火车，贴脸疾驰而去，留下 laekov 一人在原地。// 后来 acm 区域赛金牌、世界大学生xx竞赛冠军倒也没少拿。\n2019 年 laekov 的绝望是申请季只能用不忍直视 gre、gpa 收获几近全拒的结果。// 后来还是读上了 phd。\n2023 年 laekov 的绝望是一次次收到 we are sorry to inform you that your work does not qualify for our conference.","title":"关于绝望的当下"},{"content":"闲话 - 前 这是一篇 ATC'25 论文 的中文简要版本.\n然而这篇文章在学术创新上实在乏善可陈，正好多说一点闲话了。这也是为什么没有在文章发表前就把博客写出来，不然万一被撤稿了可就搞笑了。\n写这篇博客是 laekov 一直以来坚持要把自己发表的每篇文章都翻译成中文，因为曾经的 laekov 觉得凭什么论文都要用英文写呀，而且八股文读起来好麻烦呀，用中文简洁明了地把文章讲清楚不是更好吗。\n然后天真的 laekov 读博五年一共也就中了两篇文章。这是第二篇，中稿时间是毕业前三个月。\nHypeReca 这个名字是 Hybridly Partitioned Embeddings for Recommendation Model Training Acceleration 的各种胡乱拼凑里找了个听起来好听一点的。\n背景 基于深度学习的推荐模型是现在主流的推荐算法，它分为学习元素特征的稀疏部分和学习元素间关系的稠密部分。 稀疏部分主要是非常稀疏的嵌入表 embedding tables，它们可能会有 TB 级别甚至更大，所以得要很好地分布式地存下来，并且支持高吞吐地读取和更新。 稠密部分通常由传统的 DNN 构成，属于计算密集型任务（比如 CNN / MLP），所以得用 GPU 来加速。\n在做分布式训练的时候，这两部分由于特性不同所以采用了不同的并行方式：稀疏部分用模型并行（切分存储），稠密部分用数据并行（小模型，大 batch size）。 这两部分之间通过 all-to-all 集合通信来传输所需的数据和用于更新的梯度。 然后就会发现在 scale up 的时候两部分之间的通信是瓶颈，可能会占到迭代时间的 90% 以上。\n解决方案 这篇文章的核心想法其实很直白：embedding data 有冷有热。 把频繁访问的热数据找出来，也用数据并行的方法来存，重复地放到所有 GPU 上。\n接下来要解决两个问题：\n首先，挑多少热数据比较合适？ 热数据越多，可以省掉的 all-to-all 通信就越多，但同步热数据所需的 all-reduce 量就越大。 这里正好是一个在单峰函数上找最优的 trade-off。结合实际数据建模观察一下即可。\n然后，对于一个 batch，怎么高效地查出每条所需的数据在哪？ 于是搞了一些分布式哈希表，为了减少锁开销搞了一些分片+流水线的机制，从而使得在 CPU 上查找位置+插入数据的吞吐量足够高，可以 match 到 GPU 的速度。\n具体的系统实现就是把 huge embedding table 包装成一个 kv store 的形式来用，在 kv store （或者说数据库）内部自己用二部并行策略来维护不同的数据。\n实验评估 没有闭源数据集，也没有大规模 GPU 集群。\n在最大的开源数据集 Criteo Terabytes 上跑，最多用了 32 块 A100 或 V100，最快比 NVIDIA 的 HugeCTR 快了几倍，因为原版的 all-to-all 着实是慢。\n闲话 - 后 用中文写出来之后发现这篇文章真的是太简单太直白了。能中真的是个奇迹。\n这个工作最初是2021年底被派去和某公司进行校企合作，获得了一个场景。但公司内部代码仓库很复杂，难以使用，而 laekov 的导师则建议在开源数据集和软件栈上进行科研。 于是在最初这个简单的想法上进行了反复的折腾和开发，历时一年（消失的2022年）终于写出了一个能跑且性能能打过 HugeCTR 的版本，于是在那个所有人轮流 covid 的 12 月里决定总结一下创新点开始投稿。 然后就有了在之后前前后后两年多的时间一共投了六次才中的经历。\nATC'23 初投，因为时间紧所以写了 5 页短文，胡乱讲了讲，被 early reject。 SC'23 第一次扩成正经长文，讲了一个 scalability 的故事，但是实际只有 32 卡，缺乏说服力，文章写得也废话太多。 PPoPP'24 继续投 SC 版本，着重讲性能模型，没中但幸运地获得了一个 poster。 ASPLOS'24 秋季接着投，故事改成了 sparse communication，因为和相关工作没讲清楚而被拒。考虑到 ppopp 有了一个 poster，以及后来开始做其它工作了，所以这时候几乎就弃疗了。 ICDE‘25 在还有半年多毕业的时候想着怎么也得投出去吧，于是找了一个当时正好 DDL 的隔壁领域的会，把故事改成了 database，但因为没注意到他们的会是单盲要在 pdf 上写名字而被 desk reject。 ATC'25 其实是给另一篇文章陪跑，顺便就把 ICDE desk rejected 的版本改了改模板交上去了。唯一修改是为了符合数据库的故事而把 lookup 提到了前面，two-part parallel 推到了后面。没想到竟然有审稿人觉得这个文章讲得又清晰又 solid，于是很幸运地中了。(又或许我仍未知道真正的中稿原因) 总结起来这篇文章的投稿周期里，每次都是对故事小修小改，实验自从2022年写完之后，就没有再进行过大的更新。 大家常用的卡已经从 V100 变成了 A100 再到 H100，期间还出现了如 SOSP 的 BagPipe 等一系列相关文章，把 laekov 这篇文章按在地上摩擦。\nlaekov 一度已经很绝望了，不再想碰这篇文章。 不难想象，工业界早就掌握了比这更高超的将 embedding vectors 分开并行处理的方式，并很好地解决了训练中的 communication bottleneck。 学术界如果没有和工业界合作，并不会有兴趣训练这样的纯 profit-making 的模型，更不要谈它的优化过程了。 来自学术界的审稿人只会觉得这篇文章无聊，而来自工业界的审稿人会发现这些事他们早就玩烂了，只不过没有发文章而已，因而这篇投稿实在是缺乏新意。 实在难以想象它是在何种场景下受到了赏识。\n更令人唏嘘的是同场投稿的另一篇 laekov 认为不论是问题还是解决方案都更具创新性甚至引领性的文章在同一次审稿中被拒了。 事实上那篇文章的 arxiv 版本的引用量已经是这篇文章 (ppopp poster) 的十倍有余，足以见得这两者的高下了，但是为什么明明是倍受尊敬的 peer review 审稿过程却无法保序地判断两者的高下呢？\nlaekov 只能说自己虽然博士毕业了，但其实并没有完全学会学术罢。\n","permalink":"/technical/hypereca/","summary":"闲话 - 前 这是一篇 ATC'25 论文 的中文简要版本.\n然而这篇文章在学术创新上实在乏善可陈，正好多说一点闲话了。这也是为什么没有在文章发表前就把博客写出来，不然万一被撤稿了可就搞笑了。\n写这篇博客是 laekov 一直以来坚持要把自己发表的每篇文章都翻译成中文，因为曾经的 laekov 觉得凭什么论文都要用英文写呀，而且八股文读起来好麻烦呀，用中文简洁明了地把文章讲清楚不是更好吗。\n然后天真的 laekov 读博五年一共也就中了两篇文章。这是第二篇，中稿时间是毕业前三个月。\nHypeReca 这个名字是 Hybridly Partitioned Embeddings for Recommendation Model Training Acceleration 的各种胡乱拼凑里找了个听起来好听一点的。\n背景 基于深度学习的推荐模型是现在主流的推荐算法，它分为学习元素特征的稀疏部分和学习元素间关系的稠密部分。 稀疏部分主要是非常稀疏的嵌入表 embedding tables，它们可能会有 TB 级别甚至更大，所以得要很好地分布式地存下来，并且支持高吞吐地读取和更新。 稠密部分通常由传统的 DNN 构成，属于计算密集型任务（比如 CNN / MLP），所以得用 GPU 来加速。\n在做分布式训练的时候，这两部分由于特性不同所以采用了不同的并行方式：稀疏部分用模型并行（切分存储），稠密部分用数据并行（小模型，大 batch size）。 这两部分之间通过 all-to-all 集合通信来传输所需的数据和用于更新的梯度。 然后就会发现在 scale up 的时候两部分之间的通信是瓶颈，可能会占到迭代时间的 90% 以上。\n解决方案 这篇文章的核心想法其实很直白：embedding data 有冷有热。 把频繁访问的热数据找出来，也用数据并行的方法来存，重复地放到所有 GPU 上。\n接下来要解决两个问题：\n首先，挑多少热数据比较合适？ 热数据越多，可以省掉的 all-to-all 通信就越多，但同步热数据所需的 all-reduce 量就越大。 这里正好是一个在单峰函数上找最优的 trade-off。结合实际数据建模观察一下即可。","title":"HypeReca: 面向推荐模型训练的分布式嵌入向量数据库"},{"content":"在最近第二次突然意识到，那场 noi 已经过去十年了\nlaekov 曾经是一个 oier，也不止是一个 oier\nlaekov 曾经是一个上进的，努力的人\nlaekov 曾经或许有自己的梦想\n直到那一天，在那个体育馆里，在那台显示器前面，一切都改变了，结束了\nlaekov 记得那个暑假的某一天，他在床上躺了一整天没有起\n或许之后的十年都只是那个夏日的白日梦而已\n得过且过成为了人生的主旨\n或许随时终结这一切都无球所谓\n或许兴致来了可以创造些美好的东西\n再或许随手一巴掌拍过去毁灭它\n又能怎么样呢\n有什么是不能失去的呢\n这个世界上也许冈崎朋也永远不会遇到古河渚\n即使遇见了，就获得了真正的美好吗\n十年之前，我不认识你，你不属于我\n十年之后，不再是朋友，不可以问候\n\u0026mdash;- 来自十年之后的没有逻辑没有思想胡乱骂街的 laekov\nlaekov 或许早已不是 laekov 了\n这只是一具掌管着 laekov 账号的空空的躯壳罢了\n没想到这是 2025 年第一次写博客\nlaekov 还欠着两篇 blog\nHypeReca 的中文版 What does it take laekov to get the PhD degree 或许最近补完这两篇文章之后\n就该是 laekov.com.cn 永远停止更新的时候了\n","permalink":"/random/20250818/","summary":"在最近第二次突然意识到，那场 noi 已经过去十年了\nlaekov 曾经是一个 oier，也不止是一个 oier\nlaekov 曾经是一个上进的，努力的人\nlaekov 曾经或许有自己的梦想\n直到那一天，在那个体育馆里，在那台显示器前面，一切都改变了，结束了\nlaekov 记得那个暑假的某一天，他在床上躺了一整天没有起\n或许之后的十年都只是那个夏日的白日梦而已\n得过且过成为了人生的主旨\n或许随时终结这一切都无球所谓\n或许兴致来了可以创造些美好的东西\n再或许随手一巴掌拍过去毁灭它\n又能怎么样呢\n有什么是不能失去的呢\n这个世界上也许冈崎朋也永远不会遇到古河渚\n即使遇见了，就获得了真正的美好吗\n十年之前，我不认识你，你不属于我\n十年之后，不再是朋友，不可以问候\n\u0026mdash;- 来自十年之后的没有逻辑没有思想胡乱骂街的 laekov\nlaekov 或许早已不是 laekov 了\n这只是一具掌管着 laekov 账号的空空的躯壳罢了\n没想到这是 2025 年第一次写博客\nlaekov 还欠着两篇 blog\nHypeReca 的中文版 What does it take laekov to get the PhD degree 或许最近补完这两篇文章之后\n就该是 laekov.com.cn 永远停止更新的时候了","title":"20250818那个夏天的十年之后"},{"content":"经典老文 orca Continuous batching: 把 prefill 和 decode 里的每个 token 打散重新做 batching.\nvllm 用 page attention 来管理 kv cache 来应对碎片化, 以及利用 cpu memory 来 offload (这部分好像不是重点)。\nOSDI'24 一个会有一个 session 一篇文章讲同一个事，可怕。\nTaming Throughput-Latency Tradeoff in LLM Inference with Sarathi-Serve 背景是现有 llm serving 系统（TRT-LLM, vLLM）要么等 decode 完了再 prefill, 要么有 prefill 就先做完整个 prefill, 导致 latency to first token 或者 decoding latency 不稳定。一个额外的坏处是这个事情影响 pp，因为 pp 里面有多个任务，每个任务时长不一样，就会有比较多的 bubble。\n这文章把 prefill 任务 chunk 掉，这样调度的时候可以更好地复合 prefill 和 decode，控制 pp 里每个任务的 latency，从而对 decode 的 latency 也有保障了 (stall-free batching）。\n实验最多用了 tp4 x pp2 路 a100，测试了 serving capacity (最大吞吐量）,给了 capacity 和 p99 latency 的关系曲线（7b 模型从0.1 到 0.5s）。\nServerlessLLM: Low-Latency Serverless Inference for Large Language Models 在 Serverless 场下做快速模型加载和推理任务迁移。\nInfiniGen: Efficient Generative Inference of Large Language Models with Dynamic KV Cache Management KVCache 只加载必要的部分（改算法），从而减小 kvcache 访问量，据称模型精度还增加了。\nLlumnix: Dynamic Scheduling for Large Language Model Serving 通过在多个模型推理服务实例之间迁移任务来获得更好的负载均衡。 主要要解决几个问题。\n性能隔离 内存碎片化 优先级 (考虑离线任务，比如 evaluation [51], scoring [36], or data wrangling [43]) 解决方案是尽量减小迁移开销，然后通过 scheduling 手段去做一些操作, 最后效果还蛮好的\nDistServe: Disaggregating Prefill and Decoding for Goodput-optimized Large Language Model Serving TTFT (prefill latency) 和 TOPT (decoding latency) 要分开优化。所以拆到不同的 worker 上做。\n然后各种手段优化一下两边的并行策略，通过不同的策略来做不同的阶段, 优化 prefill 产生的 kv-cache 的传输。\n","permalink":"/technical/llm-serving-papers/","summary":"经典老文 orca Continuous batching: 把 prefill 和 decode 里的每个 token 打散重新做 batching.\nvllm 用 page attention 来管理 kv cache 来应对碎片化, 以及利用 cpu memory 来 offload (这部分好像不是重点)。\nOSDI'24 一个会有一个 session 一篇文章讲同一个事，可怕。\nTaming Throughput-Latency Tradeoff in LLM Inference with Sarathi-Serve 背景是现有 llm serving 系统（TRT-LLM, vLLM）要么等 decode 完了再 prefill, 要么有 prefill 就先做完整个 prefill, 导致 latency to first token 或者 decoding latency 不稳定。一个额外的坏处是这个事情影响 pp，因为 pp 里面有多个任务，每个任务时长不一样，就会有比较多的 bubble。\n这文章把 prefill 任务 chunk 掉，这样调度的时候可以更好地复合 prefill 和 decode，控制 pp 里每个任务的 latency，从而对 decode 的 latency 也有保障了 (stall-free batching）。","title":"LLM Serving 文章阅读笔记"},{"content":"FastMoE 是世界上首个开源的在 PyTorch 上支持 MoE 模型分布式训练的框架. 经过持续不断的更新与优化, 其在性能上相比各类竞品持续保持了一定的优势. 从 2021 年 3 月开源至今, 已经历了若干个发行版本, 亦有一些相关学术工作发表在各大会议和平台上. 此处对官方提供的公开资料进行汇总整理.\nFastMoE 代码仓库 FastMoE 框架的开源版本开源在 GitHub 上. 链接 该开源版本支持 cuda 平台.\n开源版本中也包含来自社区贡献的对 rocm 平台的支持, 但对新版本 FastMoE 的支持可能并不完善.\n此外, 对于申威和一些其它国产加速平台, FastMoE 也有相应的私有版本. 如有兴趣, 请联系清程极智.\nFastMoE 使用方式 FastMoE 作为 PyTorch 的插件存在, 推荐的使用方式是和 Megatron-LM 框架一起使用. 开源版本代码仓库中提供了修改不同版本 Megatron-LM 并与 FastMoE 一起使用的教程和参考补丁.\n在FastMoE 官网(暂停维护)和代码仓库的中有更多文档可供参考.\nFastMoE 及系列学术文章 FastMoE 支持专家并行的工作原理在一篇 arxiv 文章中进行了讲解.\narxiv原文 中文博客版本. FasterMoE 是一个发表在 PPoPP 学术会议上的工作. 其对于专家并行中负载均衡和通信计算重叠进行了研究. 该论文中所述的优化均已集成到 FastMoE v1.0.0 以后的版本中.\n论文原文 中文博客版本 SmartMoE 是基于 FastMoE 的寻找 MoE 模型最优混合并行策略的文章. (Fast(er)MoE 聚焦于专家并行这一种并行方式) 该论文发表在 ATC 学术会议上. 该论文中所使用的所有混合并行方式均已在 FastMoE 的开源版本中支持, 并有专门的文档进行说明. 而其寻找最优混合并行策略的部分与 FastMoE 框架本身并不耦合. 其代码目前尚未公开.\n论文原文 中译版本(机器之心) FastMoE 混合并行文档 ","permalink":"/technical/fastmoe/","summary":"FastMoE 是世界上首个开源的在 PyTorch 上支持 MoE 模型分布式训练的框架. 经过持续不断的更新与优化, 其在性能上相比各类竞品持续保持了一定的优势. 从 2021 年 3 月开源至今, 已经历了若干个发行版本, 亦有一些相关学术工作发表在各大会议和平台上. 此处对官方提供的公开资料进行汇总整理.\nFastMoE 代码仓库 FastMoE 框架的开源版本开源在 GitHub 上. 链接 该开源版本支持 cuda 平台.\n开源版本中也包含来自社区贡献的对 rocm 平台的支持, 但对新版本 FastMoE 的支持可能并不完善.\n此外, 对于申威和一些其它国产加速平台, FastMoE 也有相应的私有版本. 如有兴趣, 请联系清程极智.\nFastMoE 使用方式 FastMoE 作为 PyTorch 的插件存在, 推荐的使用方式是和 Megatron-LM 框架一起使用. 开源版本代码仓库中提供了修改不同版本 Megatron-LM 并与 FastMoE 一起使用的教程和参考补丁.\n在FastMoE 官网(暂停维护)和代码仓库的中有更多文档可供参考.\nFastMoE 及系列学术文章 FastMoE 支持专家并行的工作原理在一篇 arxiv 文章中进行了讲解.\narxiv原文 中文博客版本. FasterMoE 是一个发表在 PPoPP 学术会议上的工作. 其对于专家并行中负载均衡和通信计算重叠进行了研究. 该论文中所述的优化均已集成到 FastMoE v1.0.0 以后的版本中.","title":"FastMoE 系统指南"},{"content":"laekov 遇到的问题是希望使用 mpi 进行一些 cpu 的通信, 以及用 nccl 来进行一些 gpu 间的通信. // 没错, 说的就是让 FastDecode 支持模型并行.\n众所周知, pytorch 和 mpi 的关系不太好的亚子. 然而 mpi 其实是最方便, 也是最适合大规模使用的. 虽然新版的 pytorch 试图引入 ucc backend 来支持 cpu 和 gpu 的混合通信, 但在较老的版本或一些特定环境里还无法顺畅地使用 ucc.\n事实上 pytorch 支持创建不同 backend 的不同 ProcessGroup. 然而如果写如下一段代码, 就会发现并跑不起来.\ndist.init_process_group(backend=\u0026#39;mpi\u0026#39;) ... g = dist.new_group(list(range(world_size)), backend=\u0026#39;nccl\u0026#39;) x = torch.ones(16, device=\u0026#39;cuda\u0026#39;) * (rank + 1) xs = [torch.empty_like(x) for _ in range(world_size)] dist.all_gather(xs, x, group=g) 甚至会获得一些在 ucx 里的错误栈, 再往上找会发现报错在 c10d::PrefixStore::set 这个函数里. 可以理解的是对于非 mpi 的后端, pytorch 使用了 Store (基于 tcp 或共享文件系统) 来进行建链前的通信. 那么对于 mpi backend, pytorch 到底使用了什么 store, 成为了这个问题的关键.\n阅读了 torch/distributed/distributed_c10d.py 里相应的代码之后, laekov 惊奇地发现, 对于 mpi backend, store 竟然是 None. 这就不难解释上面这个错误是怎么来的了.\n那有没有什么办法补救呢?\npytorch 会把 store 放到 distributed_c10d 的一个全局 map 里, 所以可以自建一个 tcp store, 然后覆盖到这个 map 里.\n所以下面这段代码就是 laekov 发明的核心科技了:\nrdv = torch.distributed.rendezvous(\u0026#34;env://\u0026#34;, rank, world_size) store, _1, _2 = next(rdv) torch.distributed.distributed_c10d._pg_map[torch.distributed.distributed_c10d._get_default_group()] = (\u0026#39;mpi\u0026#39;, store) 果然, 把这段代码插到 new_group 前面, 事情就变得科学了起来. 耶!\n","permalink":"/technical/pytorch-distributed-hybrid-mpi-backend/","summary":"laekov 遇到的问题是希望使用 mpi 进行一些 cpu 的通信, 以及用 nccl 来进行一些 gpu 间的通信. // 没错, 说的就是让 FastDecode 支持模型并行.\n众所周知, pytorch 和 mpi 的关系不太好的亚子. 然而 mpi 其实是最方便, 也是最适合大规模使用的. 虽然新版的 pytorch 试图引入 ucc backend 来支持 cpu 和 gpu 的混合通信, 但在较老的版本或一些特定环境里还无法顺畅地使用 ucc.\n事实上 pytorch 支持创建不同 backend 的不同 ProcessGroup. 然而如果写如下一段代码, 就会发现并跑不起来.\ndist.init_process_group(backend=\u0026#39;mpi\u0026#39;) ... g = dist.new_group(list(range(world_size)), backend=\u0026#39;nccl\u0026#39;) x = torch.ones(16, device=\u0026#39;cuda\u0026#39;) * (rank + 1) xs = [torch.empty_like(x) for _ in range(world_size)] dist.all_gather(xs, x, group=g) 甚至会获得一些在 ucx 里的错误栈, 再往上找会发现报错在 c10d::PrefixStore::set 这个函数里.","title":"在 PyTorch Distributed 中混合使用 mpi 和其它 backend"},{"content":" 这是一篇 arxiv 文章 的中文简要版本.\n摘要 这篇文章主要介绍了一种大语言模型的推理系统. 在自回归生成过程中, 序列中的元素 (token) 被挨个生成, 因此模型推理的序列长度 (sequence length) 为 1. 因此, 增大 batch size 对于 GPU 利用率的提升十分重要. 然而 KV-Cache 体积很大, 且与 batch size 成正比. 其大小阻止了 batch size 和 GPU 利用率的提升.\n相比 vLLM 提出的 page attention 技术, FastDecode 对于 CPU 的利用进行了更加大胆的尝试. 其不仅利用了 CPU 的内存容量, 还利用了其计算能力和多机扩展能力, 从而达到了提升 batch size, 提升 GPU 利用率的目的, 并实现了端到端的推理吞吐量提升.\n背景 在自回归生成过程中做 attention 时, 一个 token i 的特征向量 (feature vector) 会线性映射拆成 Qi, Ki, Vi 三个特征向量. 其中, Qi 用于与序列中之前所有的 Kj, Vj 向量做 attention, 从而得出输出特征向量 Oi. 而 Ki, Vi 则会被留存下来, 以便之后的 token 在做 attention 时不再重复计算. 用于留存序列中 Ki, Vi 的存储空间 (或者是这个张量) 被称为 KV-Cache.\n众所周知, GPU 的利用率取决于 batch size 的大小. 因此, 在自回归生成时, 如果能有成百上千的序列一起生成, 那么 GPU 才能被利用得比较好. 然而对于一个 7b 的模型来说, 一个长度为 1024 的序列的 KV-Cache 就有 0.4GB. 200 个序列就是 80GB. 这对于 GPU 显存来说是不友好的.\n如果使用 vLLM 提出的 page attention 技术, 将 KV-Cache 分页卸载 (offload) 到主存, 由于 KV-Cache 需要在生成每个 token 的时候都被使用到, 那么这 80GB 的数据会反复在 CPU 和 GPU 之间腾挪. 这对于并不富余的 PCIe 带宽来说无疑是一个沉重的负担.\n译注: PPoPP'24 会上 Nir Shavit 的 keynote 演讲中 background 部分和这里完全一样. 但是他接下来就开始讲如何在 attention 上做稀疏化的算法来解决这一问题. 而这篇文章提出的解决方案更为直接, 在不修改任何模型和算法的前提下优化这件事情.\nFastDecode 设计方案 拆分 Attention 注意到, 生成了 Qi, Ki, Vi 之后到获得 Oi 之前这段计算是不需要任何模型参数参与计算的. 而这里也包含了占用了海量内存的 KV-Cache. 另外值得注意的是, 当 batch size 增大的时候, KV-Cache 的计算效率并不会随之提升, 因为对于每个序列来说, 它们的 KV-Cache 是互相独立的. 因此, 扩大 batch size 对于 KV-Cache 来说只是将原来的一份工作量变成了多份工作量, 而其本质上还是对于 KV-Cache 的一次内存遍历, 是一个内存密集型任务. 我们把这一段计算称作 R-Part.\n相对应的, Transformer 模型里的其它部分的计算基本都是参数矩阵和特征向量之间的矩阵-向量乘法. 大扩大 batch size 之后就变成了被大量优化过的矩阵-矩阵乘法 (GeMM). 我们把这部分称作 S-Part.\n把 R-Part 的计算和内存一起挪到 CPU R-Part 的计算吞吐量本质上是和访存吞吐量基本相同的. (注: share KV 会导致这里有一些不同, 但不改变其访存密集的本质) 因此, 把 R-Part 的计算也放到 CPU 上做, 并不会对其效率产生太大影响. 额外地, 把 KV-Cache 从主存倒腾到 GPU 显存的带宽也一定不大于主存的带宽, 所以这种做法是严格比把 KV-Cache 给 offload 更优的.\n而传递 Qi, Ki, Vi, Oi 的通信量相比于 KV-Cache 的大小是 2/S (S 表示序列长度). 所以这种做法额外产生的通信开销也是相对较小的.\n一个新的问题是主存带宽相比昂贵的 GPU HBM 还是慢的. 这个问题的解决方案是: 主存的带宽和容量是好扩展的! 相比焊死在 GPU 上的 HBM 颗粒, 不论是往机箱里插更多的内存条, 还是直接使用更多的 CPU 节点, 都可以很好的扩充主存的聚合带宽和容量, 从而提升 R-Part 的计算性能.\n这样一来, 就得到了如下的 FastDecode 系统.\n相比于一个纯使用 GPU 推理的系统, FastDecode 劫持了 R-Part 的计算, 使用多个远程的 CPU 节点来存储不同序列所对应的 KV-Cache, 并利用它们来计算相应的 R-Part. 最终返回一个和在 GPU 上计算相同的结果 Oi.\n异构流水线及其调度 现在 GPU 和 CPU 轮流工作, 所以必然要用一个二级流水同时处理两个小 batch, 从而使得两个硬件都被充分利用. 如下图所示.\n一个新的挑战在于: 这种流水线要求 S-Part 和 R-Part 的工作时间尽量相等, 否则效率会变低. 然而 S-Part 的延迟只和 batch size 相关, R-Part 的延迟却是和所有序列的总长度正相关. 如果处理同一个 batch, 这就会导致 R-Part 的时间从短逐步变长, 从而导致一些时间的浪费.\n如上图所示, 我们要想办法让 R-Part 延迟超出 S-Part 的部分填到 R-Part 比较快的部分里. 这就引入了一种新的调度方法.\n简单来讲, 每隔一段时间向流水线里加入一个小 batch, 这样就可以使得正在处理的序列总是有长有短, 而它们的总长度保持相对稳定.\n在匹配 GPU 和 CPU 数量的时候, 使用这个相对稳定的延迟作为参考, 就可以让流水线尽量被填满了.\n系统实现及实验结果 FastDecode 基于 PyTorch 实现. 对于模型并行, 量化等都具备天生的兼容性.\n文章中使用一到两块 A10 GPU 和 4 台双路 AMD Epyc CPU 服务器进行了实验, 机器之间使用 Infiniband 连接. 在使用相同的 GPU 时, FastDecode 比 TensorRT-LLM, vLLM 等系统获得了 1.88 - 8.7 倍的吞吐量提升.\n虽然提升的 batch size 对延迟有一定影响, 但也在可接受范围内. 相比于 vLLM, 其提供的服务延迟更加稳定, 没有 swap 所带来的极高的长尾延迟.\n(具体实验数据详见原文)\n总结和讨论 笔者愿称此文为一种 \u0026ldquo;大胆\u0026rdquo; 的尝试. 在神经网络训练/推理领域, 使用主存来进行 offload 的工作并不少见. 但使用 CPU 的计算能力来替代一部分 GPU 上的运算, 初听起来实属天方夜谭. 而 FastDecode 挖掘并解耦出了 Transformer 模型自回归生成任务中最适合 CPU 的部分, 并利用 CPU 服务器的易得性和可扩展性来实现与 GPU 相当的吞吐量, 从而将 GPU 从繁重的内存密集型任务中解放出来, 使其能更专注且高效地完成它擅长的 GeMM, 最终实现了端到端的推理吞吐量提升.\n现实中, 目前 GPU 是十分紧俏的资源, 而 CPU 作为一种传统且大量部署的硬件, 其易得性无疑是更好的. 虽然本文对于成本的计算并不那么精准, 但笔者相信这个系统能在一些场景中找到存在的意义, 并发挥它的价值.\n另外, 文章也提到, 其实 CPU 并非计算 R-Part 的终极解决方案. 如能力较弱的 GPU, FPGA, 甚至是专用加速器, 使用 CXL 连接的内存池, 都有用作 R-Worker 的潜力. 而文中提出的分布式设计和在异构硬件上实现流水线的技术在这些场景中是通用的.\n","permalink":"/technical/fastdecode/","summary":"这是一篇 arxiv 文章 的中文简要版本.\n摘要 这篇文章主要介绍了一种大语言模型的推理系统. 在自回归生成过程中, 序列中的元素 (token) 被挨个生成, 因此模型推理的序列长度 (sequence length) 为 1. 因此, 增大 batch size 对于 GPU 利用率的提升十分重要. 然而 KV-Cache 体积很大, 且与 batch size 成正比. 其大小阻止了 batch size 和 GPU 利用率的提升.\n相比 vLLM 提出的 page attention 技术, FastDecode 对于 CPU 的利用进行了更加大胆的尝试. 其不仅利用了 CPU 的内存容量, 还利用了其计算能力和多机扩展能力, 从而达到了提升 batch size, 提升 GPU 利用率的目的, 并实现了端到端的推理吞吐量提升.\n背景 在自回归生成过程中做 attention 时, 一个 token i 的特征向量 (feature vector) 会线性映射拆成 Qi, Ki, Vi 三个特征向量.","title":"FastDecode: 一种很大胆的分布式 LLM 推理系统架构"},{"content":" 本检查单适用于在 PACMAN 实验室 安装新的服务器. 对于其它使用场景, 可视情况进行参考.\n购买前 根据使用需求确定型号 PCIe 的连接方式是否符合预期 内存通道是否充足 在机房寻找一个合适的位置来放置机器, 需考虑如下因素 机柜的空位与承重能力 电源是否充足 网络 (如需使用 IB 网, 与需要的交换机是否足够近) 根据 CPU arch 确定是否接入某个 slurm 进行管理 现有的 slurm clusters: ja (AMD Epyc), nico (Intel Skylake) 注意: 除非这台机器永远只有一个人使用, 否则强烈建议接入 slurm 进行管理 起一个合适的 Hostname 向网络管理员申请一个合适的固定 ip 机器上架与硬件配置 (机房内) 检查机器完好 正确安装导轨 对机器的整体外观, 序列号进行拍照 插入系统盘和必要的存储, PCIE 设备 注意: 插入额外的 GPU 资产也需要事先对序列号和整体进行拍照 根据分配的固定 IP 配置 BMC 机器基础配置 (可远程) 在 NetBox 上更新相应信息, 包括但不限于序列号, 资产号, GPU 在 BIOS 中配置 CPU Sub-numa Clustering 以确保访存性能正确 Intel 简称 SNC, AMD 简称 NPS 可能在 ACPI 或 North Bridge 选项中 (视型号不同) PXE 引导安装 OS 机器软件配置 安装必要的基础软件 htop iotop iftop vim-common numactl rsync psutils ipmitool g++ 根据 Harry 的教程 配置 LDAP Client 安装 libnss-ldapd 和 libpam-ldapd 配置正确的服务器地址, base dn 和 LDAP 数据项 安装 nfs 客户端 安装 nfs-client nfs-common 挂载对应的 /home 配置 slurm 客户端 安装 libmunge-dev libmunge2 munge slurmd slurm-wlm libpam-slurm-adopt libpam-slurm libpmix-dev libpmi2-0 libpmi0-dev libpmi0 将主节点的 munge key 同步到新机器 /etc/munge/munge.key 在 /etc/pam.d/sshd 中加入 pam-slurm-adopt 的条目. 可以这样白名单一些用户 account sufficient pam_listfile.so item=user sense=allow file=/etc/ssh/allowed_users onerr=fail 在主节点上更新 slurm 配置文件并进行分发 安装 nvidia 驱动, mellanox 驱动等 ","permalink":"/technical/pacman-machine-setup/","summary":"本检查单适用于在 PACMAN 实验室 安装新的服务器. 对于其它使用场景, 可视情况进行参考.\n购买前 根据使用需求确定型号 PCIe 的连接方式是否符合预期 内存通道是否充足 在机房寻找一个合适的位置来放置机器, 需考虑如下因素 机柜的空位与承重能力 电源是否充足 网络 (如需使用 IB 网, 与需要的交换机是否足够近) 根据 CPU arch 确定是否接入某个 slurm 进行管理 现有的 slurm clusters: ja (AMD Epyc), nico (Intel Skylake) 注意: 除非这台机器永远只有一个人使用, 否则强烈建议接入 slurm 进行管理 起一个合适的 Hostname 向网络管理员申请一个合适的固定 ip 机器上架与硬件配置 (机房内) 检查机器完好 正确安装导轨 对机器的整体外观, 序列号进行拍照 插入系统盘和必要的存储, PCIE 设备 注意: 插入额外的 GPU 资产也需要事先对序列号和整体进行拍照 根据分配的固定 IP 配置 BMC 机器基础配置 (可远程) 在 NetBox 上更新相应信息, 包括但不限于序列号, 资产号, GPU 在 BIOS 中配置 CPU Sub-numa Clustering 以确保访存性能正确 Intel 简称 SNC, AMD 简称 NPS 可能在 ACPI 或 North Bridge 选项中 (视型号不同) PXE 引导安装 OS 机器软件配置 安装必要的基础软件 htop iotop iftop vim-common numactl rsync psutils ipmitool g++ 根据 Harry 的教程 配置 LDAP Client 安装 libnss-ldapd 和 libpam-ldapd 配置正确的服务器地址, base dn 和 LDAP 数据项 安装 nfs 客户端 安装 nfs-client nfs-common 挂载对应的 /home 配置 slurm 客户端 安装 libmunge-dev libmunge2 munge slurmd slurm-wlm libpam-slurm-adopt libpam-slurm libpmix-dev libpmi2-0 libpmi0-dev libpmi0 将主节点的 munge key 同步到新机器 /etc/munge/munge.","title":"实验室新机器安装步骤检查单"},{"content":"由于升级系统升挂了(说来话长\u0026hellip;) 原本跑在青岛阿里云 ecs 上的 shiruku 无了.\n于是决定迁移到 Hugo. 目前姑且能用了, 且保留了之前的大部分内容. 之后还会继续修缮. 顺便开个坑记录一下这次的经历.\n升级然后挂了 在 12 月 5 号这一天, laekov 看到自己的青岛阿里云服务器还跑着 ubuntu 18.04 (i686), 于是决定对它进行一个 dist-upgrade. (好像也没啥原因)\n没想到 do-release-upgrade 说没有新的版本, 于是 laekov 直接在 sources.list 里把 bionic 换成了 jammy, 然后愉快地 apt update / upgrade 了一顿.\n然后疑似 kernel 还是 4.19, laekov 感到疑惑, 但是没多想就重启了机器.\n没想到重启之后服务器 ping 不通了, 还好 aliyun 提供了 vnc, 连过去一看 kernel panic, 读不出镜像.\n还好重启之后发现有一个旧的 kernel 可以启动, 于是和 harry 一拍脑门, 决定跑一遍 initramfs, 然后这下好了, 新的旧的都启不动了.\n事后发现 ubuntu 从 20.04 开始已经不支持 32 位系统, 所以源里面只有一些兼容性的包, 这里面就包括了新的 initramfs, 于是它写了一个新格式的 kernel 镜像, 然后旧 kernel 读不出来. 机器卒.\n还好阿里云可以把系统盘卸载后作为数据盘挂载到别的机器上. 于是得以把数据救了出来. 然后重新购买了一台服务器来 host 这个网站 (以及历史上的所有东西).\n重建博客 laekov 懒得配 shiruku 了 (因为要用 mysql 和一些奇怪的 apache2 配置文件), 于是决定迁移到 hugo.\n由于 shiruku 使用了 markdown + json 来存储博文, 而 hugo 也使用 markdown, 因此转换的过程十分愉快, 仅需要很少的脚本就完成了.\n然而不同于以往想要什么功能就自己搓, 新时代的程序员需要学会使用轮子. 然而懒惰的 laekov 还没有工夫学习如何使用轮子. 因此这个网站的访问计数 / 评论功能暂时无法使用. 待日后有空再搞吧.\n目前来讲, 要评论的话, 可以来这里 提 issue 呀 hhhh\n","permalink":"/post/2023-server-failure-recovery/","summary":"由于升级系统升挂了(说来话长\u0026hellip;) 原本跑在青岛阿里云 ecs 上的 shiruku 无了.\n于是决定迁移到 Hugo. 目前姑且能用了, 且保留了之前的大部分内容. 之后还会继续修缮. 顺便开个坑记录一下这次的经历.\n升级然后挂了 在 12 月 5 号这一天, laekov 看到自己的青岛阿里云服务器还跑着 ubuntu 18.04 (i686), 于是决定对它进行一个 dist-upgrade. (好像也没啥原因)\n没想到 do-release-upgrade 说没有新的版本, 于是 laekov 直接在 sources.list 里把 bionic 换成了 jammy, 然后愉快地 apt update / upgrade 了一顿.\n然后疑似 kernel 还是 4.19, laekov 感到疑惑, 但是没多想就重启了机器.\n没想到重启之后服务器 ping 不通了, 还好 aliyun 提供了 vnc, 连过去一看 kernel panic, 读不出镜像.\n还好重启之后发现有一个旧的 kernel 可以启动, 于是和 harry 一拍脑门, 决定跑一遍 initramfs, 然后这下好了, 新的旧的都启不动了.","title":"本网站的崩溃与重建"},{"content":"最近在实验室遇到一些情况必需搞一台 centos 的服务器, 但是还是想给它配置我们常用的一些东西, 于是踩了一些坑, 作一个记录.\nsshd 在别的端口 我们用这个来提供外网的仅公钥的访问, 然而 cent 里面配了 sshd_config 里的 port 之后竟然没法从别的机器访问到这个 port. 关掉 selinux 也没用, 最后发现需要 disable firewalld. (什么企业级安全)\nsssd ldap 无法 auth 相比 debian 底下使用 libnss-ldapd 和 libpam-ldapd, cent 下面用的是一个叫 sssd 的玩意. 然后使用 authconfig 来进行配置. 然而配好了之后可以 id 一个用户 , 却不能 getent. 发现需要在 sssd 配置文件里加上这个.\nenumerate = true 然而还是无法用 ldap 用户密码登录, 一通查发现是因为\nSSSD always uses an encrypted channel for authentication, which ensures that passwords are never sent over the network unencrypted. With ldap_id_use_start_tls = true, identity lookups (such as commands based on the id or getent utilities) are also encrypted.\n解决方案是在配置文件里加一行\nldap_auth_disable_tls_never_use_in_production=true 总结 cent 才是真灵车\n","permalink":"/technical/88ab8d/","summary":"最近在实验室遇到一些情况必需搞一台 centos 的服务器, 但是还是想给它配置我们常用的一些东西, 于是踩了一些坑, 作一个记录.\nsshd 在别的端口 我们用这个来提供外网的仅公钥的访问, 然而 cent 里面配了 sshd_config 里的 port 之后竟然没法从别的机器访问到这个 port. 关掉 selinux 也没用, 最后发现需要 disable firewalld. (什么企业级安全)\nsssd ldap 无法 auth 相比 debian 底下使用 libnss-ldapd 和 libpam-ldapd, cent 下面用的是一个叫 sssd 的玩意. 然后使用 authconfig 来进行配置. 然而配好了之后可以 id 一个用户 , 却不能 getent. 发现需要在 sssd 配置文件里加上这个.\nenumerate = true 然而还是无法用 ldap 用户密码登录, 一通查发现是因为\nSSSD always uses an encrypted channel for authentication, which ensures that passwords are never sent over the network unencrypted.","title":"CentOS 的防火墙和 ldap login"},{"content":"最近在一些奇怪的地方使用 pytorch. 那里的 python 十分的鬼畜, 以至于 python-debug 用不了. c 的栈打出来大概是这样的.\n#110 0x00004ffff061c03c in _PyEval_EvalFrameDefault (f=\u0026lt;optimized out\u0026gt;, throwflag=\u0026lt;optimized out\u0026gt;) at ../Python-3.6.8/Python/ceval.c:3351 #111 0x00004ffff061865c in PyEval_EvalFrameEx (f=0x6, throwflag=8387296) at ../Python-3.6.8/Python/ceval.c:754 #112 0x00004ffff06192fc in _PyEval_EvalCodeWithName (_co=0x58000044c980, globals=\u0026lt;optimized out\u0026gt;, locals=\u0026lt;optimized out\u0026gt;, args=\u0026lt;optimized out\u0026gt;, argcount=0, kwnames=\u0026lt;optimized out\u0026gt;, kwargs=0x58000d8621b8, kwcount=2, kwstep=1, defs=0x580000449340, defcount=2, kwdefs=0x0, closure=0x0, name=0x5800003431c0, qualname=0x5800003431c0) at ../Python-3.6.8/Python/ceval.c:4166 #113 0x00004ffff0619768 in fast_function (kwnames=\u0026lt;optimized out\u0026gt;, nargs=0, stack=0x58000d8621b8, func=0x58000296f6b8) at ../Python-3.6.8/Python/ceval.c:4992 #114 call_function (pp_stack=0x500000804400, oparg=\u0026lt;optimized out\u0026gt;, kwnames=\u0026lt;optimized out\u0026gt;) at ../Python-3.6.8/Python/ceval.c:4872 众所周知, python-gdb 用了 _PyEval_EvalFrameDefault 里的 f 变量来查当前 frame, 如果 optimized out 了的话就用它上一层的 f. 然而这里上一层的 f 指针莫名其妙地变成了 0x6, 于是自然读不出来, 于是就没法知道执行到哪里了.\n然后 laekov 就灵机一动发现 _PyEval_EvalCodeWithName 里面的 _co 是不是可以用啊. 然后看了一通代码发现 _co 是一个 PyCodeObject, 里面确实有文件名和行号之类的信息, 于是可以用来进行一些 back trace, 只是缺了关键的 \u0026ldquo;哪一行在调用\u0026rdquo; 的信息 qwq. 仔细观察了一通代码之后发现 f_lineno 是在 EvalFrameDefault 里面动的, 所以没有 f对象的位置的话, 就找不到它了捏, 呜呜呜.\n但总之一通乱改之后它能打出一个能进行观察的栈了. 代码被放到了 github\n总结一下这个事情其实是在逆向别人不知道怎么过的一个 cpython interpreter 呢 \u0026gt;_\u0026gt; 还不如把源码给窝呢草\n","permalink":"/technical/5845d0/","summary":"最近在一些奇怪的地方使用 pytorch. 那里的 python 十分的鬼畜, 以至于 python-debug 用不了. c 的栈打出来大概是这样的.\n#110 0x00004ffff061c03c in _PyEval_EvalFrameDefault (f=\u0026lt;optimized out\u0026gt;, throwflag=\u0026lt;optimized out\u0026gt;) at ../Python-3.6.8/Python/ceval.c:3351 #111 0x00004ffff061865c in PyEval_EvalFrameEx (f=0x6, throwflag=8387296) at ../Python-3.6.8/Python/ceval.c:754 #112 0x00004ffff06192fc in _PyEval_EvalCodeWithName (_co=0x58000044c980, globals=\u0026lt;optimized out\u0026gt;, locals=\u0026lt;optimized out\u0026gt;, args=\u0026lt;optimized out\u0026gt;, argcount=0, kwnames=\u0026lt;optimized out\u0026gt;, kwargs=0x58000d8621b8, kwcount=2, kwstep=1, defs=0x580000449340, defcount=2, kwdefs=0x0, closure=0x0, name=0x5800003431c0, qualname=0x5800003431c0) at ../Python-3.6.8/Python/ceval.c:4166 #113 0x00004ffff0619768 in fast_function (kwnames=\u0026lt;optimized out\u0026gt;, nargs=0, stack=0x58000d8621b8, func=0x58000296f6b8) at ../Python-3.6.8/Python/ceval.c:4992 #114 call_function (pp_stack=0x500000804400, oparg=\u0026lt;optimized out\u0026gt;, kwnames=\u0026lt;optimized out\u0026gt;) at .","title":"魔改 python-dbg"},{"content":"用 gdb 的 py-bt 来看一个 python 程序的调用栈是一个非常有用的工具.\n然而今天在集群上尝试使用这个功能的时候发现了一些问题. 使用 debian 12 自带的 python3.11 时可以正常工作, 而使用 spack 安装的 python3.10 的时候就无法工作了. 最初怀疑 configure python 的时候没有带 --withdebug, 于是重新装了一个 python 还是不管用. 然后在仔细观察输出的时候发现 gdb autoload 竟然还有 safe path 一说, 故需要在 .gdbinit 中加入\nadd-auto-load-safe-path /home/spack/* 才能安全工作. (具体见这篇文档 )\n","permalink":"/technical/b9d832/","summary":"用 gdb 的 py-bt 来看一个 python 程序的调用栈是一个非常有用的工具.\n然而今天在集群上尝试使用这个功能的时候发现了一些问题. 使用 debian 12 自带的 python3.11 时可以正常工作, 而使用 spack 安装的 python3.10 的时候就无法工作了. 最初怀疑 configure python 的时候没有带 --withdebug, 于是重新装了一个 python 还是不管用. 然后在仔细观察输出的时候发现 gdb autoload 竟然还有 safe path 一说, 故需要在 .gdbinit 中加入\nadd-auto-load-safe-path /home/spack/* 才能安全工作. (具体见这篇文档 )","title":"python-dbg 使用中遇到的 auto-load-safe 问题"},{"content":"那一夜我喝了酒带着醉而回\n然后发现你还在那公司 深夜加班\n我仿佛看到我的未来 默默踌躇起来\n然后躺在地上思考人生 为何存在\n刹那间我突然了解这样生活就是理所应该\n什么时候该给你挚爱 什么时候我又应该走开\n哦\n哦\n","permalink":"/random/803d83/","summary":"那一夜我喝了酒带着醉而回\n然后发现你还在那公司 深夜加班\n我仿佛看到我的未来 默默踌躇起来\n然后躺在地上思考人生 为何存在\n刹那间我突然了解这样生活就是理所应该\n什么时候该给你挚爱 什么时候我又应该走开\n哦\n哦","title":"那一夜你喝了酒 改编版"},{"content":"代码地址\n这事情好像原理挺简单的.\n让 srun 在完成的时候给自己发个邮件, 用个脚本一直 tail 邮件, 并喂到 tg 的 bot 里, 根据 chat id 来发消息.\n","permalink":"/technical/b8bb98/","summary":"代码地址\n这事情好像原理挺简单的.\n让 srun 在完成的时候给自己发个邮件, 用个脚本一直 tail 邮件, 并喂到 tg 的 bot 里, 根据 chat id 来发消息.","title":"在 slurm 任务完成时通过 IM 软件向自己发送通知"},{"content":"上午\n跑了没有数据的 gpt 175b (一半长), 使用了八张 v100 32g pcie.\nmp 的 latency 是 14636ms, 而 pp 是 57313ms. 考虑到 pp 其实只利用了一个卡, 所以 pp 其实还挺棒的 (?)\n下午\n摸鱼摸了挺久. 还去宿舍安全学习了.\n读了 gpt forward 的代码, 感觉 pipeline 优化已经做了. 只要 batch size 大, 应该打得挺满, 但是没有做 orca 那个工作里的 sequence 上的优化, 可能会导致 pipeline 不那么满?\n用 nsys 跑了一把小一点的模型, mp 和 pp 的时间大概是 9:16.\nnsys 结果是 pp 里面 send/recv 占了大概 13.5% 的时间. 而 80% 以上的时间在矩阵乘. 感觉打得挺满的, 有点令人疑惑. 可能需要一个有效一点的方式来刻画一下 pp 的 bubble 的情况.\nmp 里面 nccl allreduce kernel 时间明显很长, 占到了 57.7%, 而 gemm 只有 17.4.\n结论是首先 pp 的通信量是减少了, 但由于不知道什么问题导致它的吞吐量没有上去. 明天可以花一些时间来研究这个问题. 另外需要准备一下周四 reading group 的内容?\n","permalink":"/diary/711485/","summary":"上午\n跑了没有数据的 gpt 175b (一半长), 使用了八张 v100 32g pcie.\nmp 的 latency 是 14636ms, 而 pp 是 57313ms. 考虑到 pp 其实只利用了一个卡, 所以 pp 其实还挺棒的 (?)\n下午\n摸鱼摸了挺久. 还去宿舍安全学习了.\n读了 gpt forward 的代码, 感觉 pipeline 优化已经做了. 只要 batch size 大, 应该打得挺满, 但是没有做 orca 那个工作里的 sequence 上的优化, 可能会导致 pipeline 不那么满?\n用 nsys 跑了一把小一点的模型, mp 和 pp 的时间大概是 9:16.\nnsys 结果是 pp 里面 send/recv 占了大概 13.5% 的时间. 而 80% 以上的时间在矩阵乘. 感觉打得挺满的, 有点令人疑惑. 可能需要一个有效一点的方式来刻画一下 pp 的 bubble 的情况.","title":"20230314"},{"content":"2022.12, 中国人民防疫三年，最后每人发烧三天。\n大防疫运动，其去势甚至猛于其来势。半月之内，北京一城，阴阳掺半矣。15日，我终于显著感到不适，预知自己将感染也。起意攒此文，以供未来之考。\nDay0: 2022.12.15 昨夜跑了 F4 模拟赛车联赛，得第三，大喜，饮啤酒一罐，无不适。半夜，喉咙巨疼，疼醒，喝水后略有好转。早上起床之后喉咙继续疼，精神不振，收到消息称昨日白天同处一屋某君阳矣。\n上午测了抗原，阴，工作于宿舍，午饭后前往实验室，继续工作，处理数据集一个。后开组会，开始上背部酸疼，嗓子疼加重，精神萎靡，遂大点外卖一顿，趁还有食欲饱餐以储能，然后收拾好工作所需之电器，回宿舍躺平，始作此文，静待下一步之变数。\n拖延三年，余与新冠病毒终有一战。既阳之，则战之。古语有云，生死有命，富贵在天。炎黄子孙宁病夫乎？\nDay1: 2022.12.16 昨晚睡觉前做了一次抗原, 等了两分钟没阳, 直接睡了, 今早起床发现昨夜的抗原有弱弱的阳性线, 再测一次, 真阳了. 所以确实是 day1, 昨天的感觉完全没错.\n睡得不太好, 翻来覆去, 持续在冷和热之间徘徊, 身上也比较酸痛, 嗓子也疼. 嗓子里有痰的感觉, 但是我知道那其实是我肿胀的扁桃, 试图咳痰只会让情况变得更糟, 于是忍着了.\n早上起床之后喉咙疼痛感有所减弱, 但是略有发烧的畏寒和皮肤触痛. 感觉是在低烧, 但是因为没有体温计所以无法确认. 脊柱附近的肌肉比较酸疼, 坐在沙发上姿势并不太舒服. 早上开了一个线上会, 不太能集中注意力(倒是和平时差不多). 开完就继续躺了. 中午戴好口罩下楼买饭, 晒太阳和呼吸新鲜空气感觉有所好转, 遂决定在中厅晒会儿太阳.\n// 阳了其实是小小地逃避工作的好机会.\n下午外卖买到了体温计, 起初体温比较正常, 太阳将近落山的时候开始发烧, 一度烧到 38 度. 练了会儿车, 练不动, 听说室友也阳了, 诚邀他回来和我一起开 covid party (躺平).\n前半夜体温很高, 不太睡得着, 在被子里抱着热水袋捂汗. 鼻子里有不对的味道, 怀疑是过敏性鼻炎导致鼻窦炎了. 过了一会体温下降, 开始头疼, 很像是鼻窦肿大压迫神经. 但是也管不了那么多了, 先睡. 嗓子还是一如既往地疼.\nDay2: 2022.12.17 七点过胃疼疼醒, 吃了蛋糕, 抱着热水袋继续睡.\n十点过起床冲洗了鼻子, 暂时没有鼻窦炎的危险了.\n体温从 37.3 下降到 36.8, 还是有一些些发烧之感觉. 腰背酸疼.\n中午买饭可能冻着了? 下午体温又回升到了 38 度附近稳定. 比较无力. 躺下就头疼.\n晚上睡觉的时候以为自己不烧了但其实还是 38 度, 似乎是已经适应了 38 度的体温?\nDay3: 2022.12.18 早上起来体温又回到了 36.9. 难道真的是早上不烧下午晚上烧? 不知道还得烧几天 qaq.\n开始了新一轮的嗓子疼, 和之前不同, 呼吸不疼, 但是吞咽或者大幅度动嘴都会疼. 说明不是表皮干疼而是真的肿了. 管它呢该吃还是得吃.\n咳嗽, 鼻涕流得像开了水闸泻洪一样, 洗鼻子的时候尝试用略浓的生理盐水浸泡嗓子, 发现不是很敢, 没啥效果.\n下午三点左右，体温逐渐上升到37度5。又要烧起来了 ovo 于是赶紧去床上躺着睡了一会会，好像又没烧起来。但是鼻子是真的爆炸。\n晚上体温也没有起来, 于是开了 acc 的比赛, 然后第二个弯就被雷到墙上了, 心态爆炸也是一种症状吗?\n整个晚上鼻子堵到无法说话.\n睡觉的时候发现 37.3 度. 刷牙的时候经历了神奇的味觉失灵. 牙膏本来是薄荷味的, 但是意外地没有感受到薄荷味, 反而是一股淡淡的中药味, 然后嘴里一直苦苦的.\n这一觉睡得比之前略安稳一些.\nDay4: 2022.12.19 周一了, 但是显然还不能继续上班. 起床开始疯狂打喷嚏和咳嗽. 感觉现在才是病毒传染力最强的一段. 然而室友早就阳了也没别的人可以传染了. 这是要让所有症状都轮番上阵来一遍啊?\n白天症状有所缓解. 嘴里偶尔有一点苦, 但是并没有失去味觉.\n晚上睡觉的时候发现自己对热不太敏感. 被子盖多了但并没有发现, 直到出汗浸湿了被子才反应过来, 于是起来换体恤, 往复两次.\nDay5: 2022.12.20 早上起来突然觉得 \u0026ldquo;我好了\u0026rdquo;. 虽然还是有鼻涕和咳嗽.\n测了抗原, 阴了.\n本文完结撒花.\n","permalink":"/random/43d45a/","summary":"2022.12, 中国人民防疫三年，最后每人发烧三天。\n大防疫运动，其去势甚至猛于其来势。半月之内，北京一城，阴阳掺半矣。15日，我终于显著感到不适，预知自己将感染也。起意攒此文，以供未来之考。\nDay0: 2022.12.15 昨夜跑了 F4 模拟赛车联赛，得第三，大喜，饮啤酒一罐，无不适。半夜，喉咙巨疼，疼醒，喝水后略有好转。早上起床之后喉咙继续疼，精神不振，收到消息称昨日白天同处一屋某君阳矣。\n上午测了抗原，阴，工作于宿舍，午饭后前往实验室，继续工作，处理数据集一个。后开组会，开始上背部酸疼，嗓子疼加重，精神萎靡，遂大点外卖一顿，趁还有食欲饱餐以储能，然后收拾好工作所需之电器，回宿舍躺平，始作此文，静待下一步之变数。\n拖延三年，余与新冠病毒终有一战。既阳之，则战之。古语有云，生死有命，富贵在天。炎黄子孙宁病夫乎？\nDay1: 2022.12.16 昨晚睡觉前做了一次抗原, 等了两分钟没阳, 直接睡了, 今早起床发现昨夜的抗原有弱弱的阳性线, 再测一次, 真阳了. 所以确实是 day1, 昨天的感觉完全没错.\n睡得不太好, 翻来覆去, 持续在冷和热之间徘徊, 身上也比较酸痛, 嗓子也疼. 嗓子里有痰的感觉, 但是我知道那其实是我肿胀的扁桃, 试图咳痰只会让情况变得更糟, 于是忍着了.\n早上起床之后喉咙疼痛感有所减弱, 但是略有发烧的畏寒和皮肤触痛. 感觉是在低烧, 但是因为没有体温计所以无法确认. 脊柱附近的肌肉比较酸疼, 坐在沙发上姿势并不太舒服. 早上开了一个线上会, 不太能集中注意力(倒是和平时差不多). 开完就继续躺了. 中午戴好口罩下楼买饭, 晒太阳和呼吸新鲜空气感觉有所好转, 遂决定在中厅晒会儿太阳.\n// 阳了其实是小小地逃避工作的好机会.\n下午外卖买到了体温计, 起初体温比较正常, 太阳将近落山的时候开始发烧, 一度烧到 38 度. 练了会儿车, 练不动, 听说室友也阳了, 诚邀他回来和我一起开 covid party (躺平).\n前半夜体温很高, 不太睡得着, 在被子里抱着热水袋捂汗. 鼻子里有不对的味道, 怀疑是过敏性鼻炎导致鼻窦炎了. 过了一会体温下降, 开始头疼, 很像是鼻窦肿大压迫神经. 但是也管不了那么多了, 先睡. 嗓子还是一如既往地疼.\nDay2: 2022.12.17 七点过胃疼疼醒, 吃了蛋糕, 抱着热水袋继续睡.","title":"2019-nCOV Infection Log at Dec 2022"},{"content":"最近写了一些 mpi 程序, 但是有 bug, 且只有在多机上能够复现. 然而因为工程太大, 编译一次需要时间比较长, 所以反复 print 也并不方便解决问题. 而且集群上也没有图形界面, ssh -X xterm 的方法不太好使. 所以需要一些新的解决思路.\nlaekov 将目光瞄准了 tmux. 用 tmux new-session command 就可以在目标机器上新开一个进程, 跑 gdb. 然而 tmux 并不能继承环境, 所以需要再包一层脚本来重新加载环境 (这倒是和多机跑 mpi 程序差不多). 此外, 为了不需要手工一个一个进程地去 gdb 里开始, 可以用 gdb -ex 'r' --args command args 来让它自动开跑. ex 还可以用来批处理设断点之类的, 非常方便.\n另一个问题是 laekov 用的集群配置了 slurm, 是用 srun 来启程序的. 但是 tmux 命令会立即退出, 进程是跑在该用户的另一个进程里的, 而且这俩还没有父子关系, 无法用 wait 来等. 但是 srun 的进程退出之后 slurm 就认为这个进程跑完了, 甚至会清理 worker 上该用户的所有进程. 这就不太科学了. 解决方案是在主脚本里轮询 tmux has-session, 这样结束 gdb 的时候要么直接 ctrl+c 掐程序, 要么在 tmux 里面把 pane 关掉就可以了.\n一个完整的 tanmux.sh 长成如下这个样子.\n#!/bin/bash tmux new-session -d ./wrapper.sh $@ hostname while true do if tmux has-session then echo $(hostname) alive at $(date) sleep 10s else break fi done 有时候这样启进程会提示找不到 tmux 的 tmp 文件. 目前解决方案是手工 ssh 上去 tmux 一下. 可能是什么魔法问题, 之后可以再改进一下.\n搞定这些事情之后, 就可以切到一个干净的 workspace, 然后开一堆 terminal 去 ssh -t tmux a 看 gdb 们跑了. 各个进程分别被显示在不同的 terminal 里面, 比糊在同一个 terminal 里清晰了不少, debug 的进度也有所增加.\n","permalink":"/technical/70b9a2/","summary":"最近写了一些 mpi 程序, 但是有 bug, 且只有在多机上能够复现. 然而因为工程太大, 编译一次需要时间比较长, 所以反复 print 也并不方便解决问题. 而且集群上也没有图形界面, ssh -X xterm 的方法不太好使. 所以需要一些新的解决思路.\nlaekov 将目光瞄准了 tmux. 用 tmux new-session command 就可以在目标机器上新开一个进程, 跑 gdb. 然而 tmux 并不能继承环境, 所以需要再包一层脚本来重新加载环境 (这倒是和多机跑 mpi 程序差不多). 此外, 为了不需要手工一个一个进程地去 gdb 里开始, 可以用 gdb -ex 'r' --args command args 来让它自动开跑. ex 还可以用来批处理设断点之类的, 非常方便.\n另一个问题是 laekov 用的集群配置了 slurm, 是用 srun 来启程序的. 但是 tmux 命令会立即退出, 进程是跑在该用户的另一个进程里的, 而且这俩还没有父子关系, 无法用 wait 来等. 但是 srun 的进程退出之后 slurm 就认为这个进程跑完了, 甚至会清理 worker 上该用户的所有进程.","title":"使用 gdb 调试多机程序的方法"},{"content":"众所周知, laekov 在办公室有一台 nuc 装了 linux 主要用于工作, 另有一台笔记本用于其它工作. 作为一个锁屏强迫症, 每次 laekov 站起来去干啥的时候都会把两台电脑锁屏, 回来之后再分别解锁. 笔记本可以用指纹或者 iwndows hello, 而 nuc 就只能敲密码了. 不巧的是它还直接暴露在公网上, 于是密码设得比较长. 所以 laekov 希望用 windows 上的指纹来解 kde 的锁屏.\n然后发现直接使用命令 loginctl (un)lock-session \u0026lt;id\u0026gt; 就可以实现(解)锁 kde. 配合 ssh 和 autohotkey 就可以实现一键开关锁.\n但是这还是需要再额外按一次键. 然后发现 windows 有一个叫 task scheduler 的东西, 可以在锁屏和解锁的时候触发一些命令, 于是愉快地接入了 ssh 之后就可以方便地一次性解锁两台电脑辣!\n","permalink":"/technical/e59478/","summary":"众所周知, laekov 在办公室有一台 nuc 装了 linux 主要用于工作, 另有一台笔记本用于其它工作. 作为一个锁屏强迫症, 每次 laekov 站起来去干啥的时候都会把两台电脑锁屏, 回来之后再分别解锁. 笔记本可以用指纹或者 iwndows hello, 而 nuc 就只能敲密码了. 不巧的是它还直接暴露在公网上, 于是密码设得比较长. 所以 laekov 希望用 windows 上的指纹来解 kde 的锁屏.\n然后发现直接使用命令 loginctl (un)lock-session \u0026lt;id\u0026gt; 就可以实现(解)锁 kde. 配合 ssh 和 autohotkey 就可以实现一键开关锁.\n但是这还是需要再额外按一次键. 然后发现 windows 有一个叫 task scheduler 的东西, 可以在锁屏和解锁的时候触发一些命令, 于是愉快地接入了 ssh 之后就可以方便地一次性解锁两台电脑辣!","title":"如何使用 windows 笔记本的指纹解锁 linux"},{"content":" 博士生涯在硕士宿舍住满两年后, 搬宿舍来到了 w 楼老破并不小的双人间. 该楼由于年久失修, 室内状况较差. 墙面, 门, 和卫生间都有一些十分恶心的情况. 本着既来之则安之的思路, 自强不息的精神, 进行一些尽力而为的改造和优化, 并记录在这里以供他人 (大概不会有了吧) 参考.\n室内布局 下图是一个并不等比例的示意图.\nw 楼类似于本科生紫荆公寓的布局, 相邻两间宿舍共用一个中厅, 但每个宿舍有独卫. 卫生间有马桶, 水池和淋浴. 但是空间较小, 干湿并不分离.\n家具方面, 相比本科和硕士宿舍, 床从上铺变成了地面上的床, 虽然宽度没有变化. 桌子也更宽一些. 中间是标准的键盘抽屉, 左右两边各有一个较窄的抽屉. 但是桌上层有两层置物架, 其中下层的高度较低, 导致比较大的显示器无法推到最前. 此外, 中厅也有一个比较大的公用桌子, 并另配了四把椅子. (故平均每人竟然拥有两把椅子)\n绿色床位可以获得一个比较深的窗台. 窗台上可以置物或作他用. 中厅和窗台都有可以晾衣服的铁杆. 中厅的窗台也很深.\n强弱电方面, 每个床位配有百兆有线网. 桌子附近有一个电线插头. 红字床头另有一个插头.\nLayout transformation for bike placement 红色桌子被旋转了 90 度, 然后在和中厅的窗户之间 (红桌的右手边是一个通向中厅的窗户) 空出了约 80 公分的间隙, 把大紫立在了间隙里, 正好可以卡在窗户边沿. 还可以另放下一个气筒和停车架. 大大紫则被插到了中厅窗台 v 字形的尖上, 前轮在窗台上, 而后轮在地上. 正好可以用脚踏抵住暖气片, 从而稳稳立住.\n此外, 在竖过来的红桌子外侧立了一根顶天立地柱来提供额外的晾衣和挂东西的空间.\n与墙面 / 墙皮的斗争 由于年久失修, w 楼室内墙面状况十分糟糕. 很多地方存在墙皮脱落, 如下图所示.\n每天都可以在地上看到新鲜的脱落的墙皮. 此问题暂时还没有解决. 目前的计划是使用一些墙纸和墙胶来把它们糊住.\n此外, 发现床的周围墙面都已经明显发黄, 应该是潮湿 + 之前睡在这里的学长们的汗水所致. 好在事前定制了一些自粘的海报, 正好绕墙一周贴住, 这样至少可以没有心理障碍地在睡觉的时候接触墙面了.\n在家园网进行了一个报修. 第二天早上正准备出门遇到一个师傅正要进来修. 师傅对此宿舍的墙面情况表示震惊. 一番沟通之后师傅让把东西全部遮起来, 然后进行了大量的粉刷. 因为要刷三层, 所以可能两三天不太能住. 而且把刚展开的东西再收回去也非常痛苦. 如果能够在还没展开行李的时候就想到报修, 先修再展开, 可能会好一些.\n朽烂的厕所门 还没解决. 报修了. 希望可以换一个新的.\n后来听说全 w 楼有一百七十多张换厕所门的工单，感到大事不妙，于是决定自己动手，把门拆掉，姑且先挂个帘子。\n拆门的合页的时候遇到了很大的问题，螺丝都锈得不行，而且上面的合页竟然用的是反人类的一字螺丝，还上过漆，很难拆。先用螺丝刀旋出来一些之后，就无法继续往外拧了，此时需要用钳子继续把螺丝边拧边拔出来。即使用上了这样的方法，最后一个螺丝还是完全旋不动。于是直接大力拧了门，把螺丝给破拆了下来。拆下来之后，满脑子都是那句 他带上门，出去了 (其实是把门姑且扔到中厅了）\n正好室友购买的窗帘多了一个撑杆，于是购买了一个帘子作为厕所门。虽然门框还是很恶心，但是至少坐在马桶上的时候不至于想吐了。\n卫生间金属除锈 正好多了一管自行车用的除锈剂，于是在一些看起来比较恶心的表面（比如水龙头、马桶冲水按钮）进行了除锈操作。\n卫生间墙面 使用了一种墙面清洁剂, 而后卫生间墙面发黄的情况有了较大改观.\n(暂时完结)\n","permalink":"/random/3397e8/","summary":"博士生涯在硕士宿舍住满两年后, 搬宿舍来到了 w 楼老破并不小的双人间. 该楼由于年久失修, 室内状况较差. 墙面, 门, 和卫生间都有一些十分恶心的情况. 本着既来之则安之的思路, 自强不息的精神, 进行一些尽力而为的改造和优化, 并记录在这里以供他人 (大概不会有了吧) 参考.\n室内布局 下图是一个并不等比例的示意图.\nw 楼类似于本科生紫荆公寓的布局, 相邻两间宿舍共用一个中厅, 但每个宿舍有独卫. 卫生间有马桶, 水池和淋浴. 但是空间较小, 干湿并不分离.\n家具方面, 相比本科和硕士宿舍, 床从上铺变成了地面上的床, 虽然宽度没有变化. 桌子也更宽一些. 中间是标准的键盘抽屉, 左右两边各有一个较窄的抽屉. 但是桌上层有两层置物架, 其中下层的高度较低, 导致比较大的显示器无法推到最前. 此外, 中厅也有一个比较大的公用桌子, 并另配了四把椅子. (故平均每人竟然拥有两把椅子)\n绿色床位可以获得一个比较深的窗台. 窗台上可以置物或作他用. 中厅和窗台都有可以晾衣服的铁杆. 中厅的窗台也很深.\n强弱电方面, 每个床位配有百兆有线网. 桌子附近有一个电线插头. 红字床头另有一个插头.\nLayout transformation for bike placement 红色桌子被旋转了 90 度, 然后在和中厅的窗户之间 (红桌的右手边是一个通向中厅的窗户) 空出了约 80 公分的间隙, 把大紫立在了间隙里, 正好可以卡在窗户边沿. 还可以另放下一个气筒和停车架. 大大紫则被插到了中厅窗台 v 字形的尖上, 前轮在窗台上, 而后轮在地上. 正好可以用脚踏抵住暖气片, 从而稳稳立住.","title":"W 楼宿舍优化手记"},{"content":"自行车的五通中轴牙盘一部分零件规格比较复杂, 折腾起来比较费力. 简中互联网上鲜见把这个事情理明白了的文章. 所以 aoao 按照自己的理解把各部分分开说明一下, 试图理明白这个逻辑.\n下面是一个示意图.\n五通 五通是车架的一部分, 简而言之就是一个圆柱形的洞. 五通的重要参数是这个洞的直径和高度(宽度), 外加 是否有螺纹.\n有螺纹的五通, 在公路车上只有两三类: 经典的有英规 (BSA) 和 意规 (ITA). 前者常见于低端车和闪电 SL7 及一些新车. 另外有 trek 新开始推的 T47. 这三种标准的宽度和直径都是确定的.\n另外一种是压入五通, 即没有螺纹, 而是一个光滑的洞, 中轴直接被敲进去. 这种五通有 BB30, BB86, BBRight 等一系列规格, 对应了不同品牌不同时期的车架. 宽度和直径各有不同, 需要按照品牌或者标准名称购买相应零件.\n中轴 中轴就是一个轴承. 它的外壳固定在五通处, 而内面与轴心 (即一根铁棒) 相连, 从而使轴心可以自由转动. 因此, 中轴的规格仅由五通规格和轴心规格两者决定. (材质和特殊的工艺等学问不在本文讨论范围)\n轴心 轴心是一根铁棍 (碳棍? 铝棍?), 两边连着曲柄, 在高端零件中通常与其中一边的曲柄为一体. 与五通相同, 轴心的关键参数也是直径和长度.\n轴心常见三种直径: 30, 24, GXP. 其中 GXP 是驱动侧 24, 非驱动侧 22, 通常可以直接使用一个塑料套子转换为 24 的轴心. 需要注意的是 30 的轴心较粗, 而 BSA 的孔较细, 这样给中轴留下的空间就不太多了, 所以有 BSA-30 这样比较畸形的中轴, 不仅难买, 而且 据说异响问题严重, 因此不推荐这样的搭配.\n轴心的长度需要比五通更长, 否则装不上曲柄. 如果太长则需要加装一些垫片来稳固.\n曲柄 曲柄通常固定在轴心上, 主要考究是曲柄长度与 fitting 参数之间的关系, 不在本文探讨范围内.\n盘爪 盘爪固定在轴心和曲柄形成的一体零件上, 连接盘片. 由于是一个连接件, 所以盘爪的规格主要由曲柄和盘片的规格而定.\n例如速联的旧一代 GXP 三钉曲柄和新一代 DUB 八钉曲柄就需要不同的盘爪来进行适配. 而 Shimano 的牙盘和 SRAM 的 Apex 级别牙盘直接将盘爪和曲柄做成了一体, 无需担心此问题.\n盘片与盘抓的固定方式是通过四或五颗螺丝. 将在下面介绍.\n盘片 盘片是很多人心目中的牙盘. 其主要规格是与盘爪的连接方式, 以及齿数.\n盘片通常分为四钉和五钉, 而又根据直径常见为 110 和 130. 其中五爪的规格名称为 110bcd / 130bcd, 而四爪通常在后面加一个 r 来区分 (或单独标注). 在场地自行车和山地车等领域也有 144bcd, 96bcd 等其它直径.\n需要注意的是 130bcd 的盘爪最小兼容 39T 的小盘. 需要根据盘片的规格来决定购买什么样的盘爪, 否则可能会浪费钱或者浪费腿.\n此外, 单盘与双盘所需要的盘钉长度是不同的, 如使用单盘, 在选购盘钉时需要特别注意购买短一些的盘钉, 否则无法牢固地固定盘片.\nHistorical Comments miyuanbo at 2022-10-11T20:08:15 膜！\n","permalink":"/random/680f7d/","summary":"自行车的五通中轴牙盘一部分零件规格比较复杂, 折腾起来比较费力. 简中互联网上鲜见把这个事情理明白了的文章. 所以 aoao 按照自己的理解把各部分分开说明一下, 试图理明白这个逻辑.\n下面是一个示意图.\n五通 五通是车架的一部分, 简而言之就是一个圆柱形的洞. 五通的重要参数是这个洞的直径和高度(宽度), 外加 是否有螺纹.\n有螺纹的五通, 在公路车上只有两三类: 经典的有英规 (BSA) 和 意规 (ITA). 前者常见于低端车和闪电 SL7 及一些新车. 另外有 trek 新开始推的 T47. 这三种标准的宽度和直径都是确定的.\n另外一种是压入五通, 即没有螺纹, 而是一个光滑的洞, 中轴直接被敲进去. 这种五通有 BB30, BB86, BBRight 等一系列规格, 对应了不同品牌不同时期的车架. 宽度和直径各有不同, 需要按照品牌或者标准名称购买相应零件.\n中轴 中轴就是一个轴承. 它的外壳固定在五通处, 而内面与轴心 (即一根铁棒) 相连, 从而使轴心可以自由转动. 因此, 中轴的规格仅由五通规格和轴心规格两者决定. (材质和特殊的工艺等学问不在本文讨论范围)\n轴心 轴心是一根铁棍 (碳棍? 铝棍?), 两边连着曲柄, 在高端零件中通常与其中一边的曲柄为一体. 与五通相同, 轴心的关键参数也是直径和长度.\n轴心常见三种直径: 30, 24, GXP. 其中 GXP 是驱动侧 24, 非驱动侧 22, 通常可以直接使用一个塑料套子转换为 24 的轴心.","title":"搞明白自行车五通中轴牙盘规格"},{"content":"一个没有什么意义的记录. youtube 上的视频同样车也就快了个几十秒吧.\nLifeinvader 环道 桑托劳 2:39 义塔利GTB: 2:36 Cutting Corners GP Sports Sugoi 1:15.830 ZR350 1:15.910 (w\\o turbo), 1:12.583 (w. turbo) Calico 1:11.107 Itali GTO 1:08.051 GB200 1:09.081 幽鬼本尼版 1:07.433 撞击 GT 1:11.239 (原厂素车）1:06.860 （满改） 718 （嚎叫者） 1:12.810 (原厂素车） 1:07.639 (fully upgraded) new supra (jester RR) 1:14.245 (unmodified) 1:07.344 (满改) RCA (Vectre) 1:12.706 (unmodified) 1:08.206 (fully upgraded) BMW M4 1:12.816 (原厂） 1:09.636 (fully upgraded) 思国一又推又甩, 加速就打滑非常 gg.\n350 没加涡轮, 加速明显不如卡利科, 但是转向极限很高, 弯速可以再推快一些. 加涡轮之后滑了起来，不知道是不是赛道轮的影响。\nGTO 加速太猛了, Calico 在这种大一些的赛道里面也不是特别有优势, 反而过弯推头的问题比较严重.\nGB200 是台送的车，是福特之前的拉力车。虽然加速不快，但是极为贴地，就像轨道车一样\n本尼幽鬼可以改得外观很 GT 风，但是加速实在是慢, 尤其是用本尼的金闪闪轮胎的时候简直有毒\n撞击 GT 原厂挺稳的，满改之后变漂了，也变快了，可能是轮子选得不太对。\n作为 718 粉，看到打折立即入手了，原厂嚎叫者看起来很猛啊。有点滑，但是操控很灵敏。\nsupra 感觉比 718 还要滑一些，很灵活但是不太开得快。满改之后反而不是太滑了, 但是感觉刹车不太好用的样子, 不太敢晚刹车.\nRCA 明显是一台不太一样的车，比 718 和 supra 笨重一些，但速度快，在高速弯里很稳，减震效果也比 718 好太多了。所以最后圈速也有所体现。\nSuper Itali GTB 1:10.840 (w\\o turbo) Itali GTB 1:06.559 Zontoro 1:10.069 FMJ 1:05.678 美德 1:03.339 桑托劳的四驱在出弯的时候还挺稳的. 但是给人感觉还是 GTB 加速更快, 进弯刹车走线更流畅. 这俩车都打不过 GTO 还挺汗颜的. (应该是我车技不行)\nHistorical Comments laekov at 2022-05-10T19:38:57 Update: 把 GTB 刷到了 1:07, 然后换成 GTO 立马变成了 1:05. 果然底级超跑还不如顶流跑车\nlaekov at 2022-06-07T11:01:38 Update 2: GTB 1:06.0xx 了\nlaekov at 2022-11-25T19:50:08 趁打折买的 LM87 勒芒原型车 1:02.557 虽然离世界最快差五秒但这车真爽\n","permalink":"/random/120e0f/","summary":"一个没有什么意义的记录. youtube 上的视频同样车也就快了个几十秒吧.\nLifeinvader 环道 桑托劳 2:39 义塔利GTB: 2:36 Cutting Corners GP Sports Sugoi 1:15.830 ZR350 1:15.910 (w\\o turbo), 1:12.583 (w. turbo) Calico 1:11.107 Itali GTO 1:08.051 GB200 1:09.081 幽鬼本尼版 1:07.433 撞击 GT 1:11.239 (原厂素车）1:06.860 （满改） 718 （嚎叫者） 1:12.810 (原厂素车） 1:07.639 (fully upgraded) new supra (jester RR) 1:14.245 (unmodified) 1:07.344 (满改) RCA (Vectre) 1:12.706 (unmodified) 1:08.206 (fully upgraded) BMW M4 1:12.816 (原厂） 1:09.636 (fully upgraded) 思国一又推又甩, 加速就打滑非常 gg.\n350 没加涡轮, 加速明显不如卡利科, 但是转向极限很高, 弯速可以再推快一些.","title":"GTA Online 跑车圈速记录"},{"content":"封校无聊，何以解忧？开个新坑，骑骑山地。\n这个网站将校园内的山地技术点总结在地图上，以便从入门到进阶的不同水平爱好者进行交流，各自找到好玩的地点。\n在地图上单击鼠标右键即可记录一个你发现的地点。在管理员审核后，它将被分享给所有人。\n本站还在建设中，如果你对本项目有兴趣，欢迎来 GitHub Repo 进行开发方面的交流与讨论。\n目前计划中的功能还有：难度和描述的评论、添加图片、在线约骑、实时位置分享等等。\n本站始建于 2022 年劳动节假期封校之时。未来也考虑拓展地图范围。\nGo back to the map\n","permalink":"/random/f1faf5/","summary":"封校无聊，何以解忧？开个新坑，骑骑山地。\n这个网站将校园内的山地技术点总结在地图上，以便从入门到进阶的不同水平爱好者进行交流，各自找到好玩的地点。\n在地图上单击鼠标右键即可记录一个你发现的地点。在管理员审核后，它将被分享给所有人。\n本站还在建设中，如果你对本项目有兴趣，欢迎来 GitHub Repo 进行开发方面的交流与讨论。\n目前计划中的功能还有：难度和描述的评论、添加图片、在线约骑、实时位置分享等等。\n本站始建于 2022 年劳动节假期封校之时。未来也考虑拓展地图范围。\nGo back to the map","title":"Project T: 清华园山地车技术点大全"},{"content":"2023 EVStore: Storage and Caching Capabilities for Scaling Embedding Tables in Deep Recommendation Systems ASPLOS'23 GRACE: A Scalable Graph-Based Approach To Accelerating Recommendation Model Inference ASPLOS'23 AdaEmbed: Adaptive Embedding for Large-Scale Recommendation Models OSDI'23 FlexShard: Flexible Sharding for Industry-Scale Sequence Recommendation Models arxiv 2022 RecD: Deduplication for End-to-End Deep Learning Recommendation Model Training Infrastructure arxiv Ekko: A Large-Scale Deep Learning Recommender System with Low-Latency Model Update OSDI'22 PICASSO: Unleashing the Potential of GPU-centric Training for Wide-and-deep Recommender Systems arxiv HET: Scaling out Huge Embedding Model Training via Cache-enabled Distributed Framework VLDB'22 HET-GMP: a graph-based system approach to scaling large embedding model training SIGMOD'22 Fleche: an efficient GPU embedding cache for personalized recommendations EuroSys'22 RecShard: statistical feature-based memory optimization for industry-scale neural recommendation ASPLOS'22 BagPipe: Accelerating Deep Recommendation Model Training arxiv 2021 Accelerating recommendation system training by leveraging popular choices VLDB'21 SPACE: Locality-Aware Processing in Heterogeneous Memory for Personalized Recommendations ISCA'21 Software-Hardware Co-design for Fast and Scalable Training of Deep Learning Recommendation Models arxiv ISCA'22 RecPipe: Co-designing Models and Hardware to Jointly Optimize Recommendation Quality and Performance MICRO'21 2020 Kraken: Memory-Efficient Continual Learning for Large-Scale Real-Time Recommendations SC'20 Distributed Hierarchical GPU Parameter Server for Massive Scale Deep Learning Ads Systems MLSys'20 DeepRecSys: A System for Optimizing End-To-End At-Scale Neural Recommendation Inference ISCA'20 ","permalink":"/technical/a78ed7/","summary":"2023 EVStore: Storage and Caching Capabilities for Scaling Embedding Tables in Deep Recommendation Systems ASPLOS'23 GRACE: A Scalable Graph-Based Approach To Accelerating Recommendation Model Inference ASPLOS'23 AdaEmbed: Adaptive Embedding for Large-Scale Recommendation Models OSDI'23 FlexShard: Flexible Sharding for Industry-Scale Sequence Recommendation Models arxiv 2022 RecD: Deduplication for End-to-End Deep Learning Recommendation Model Training Infrastructure arxiv Ekko: A Large-Scale Deep Learning Recommender System with Low-Latency Model Update OSDI'22 PICASSO: Unleashing the Potential of GPU-centric Training for Wide-and-deep Recommender Systems arxiv HET: Scaling out Huge Embedding Model Training via Cache-enabled Distributed Framework VLDB'22 HET-GMP: a graph-based system approach to scaling large embedding model training SIGMOD'22 Fleche: an efficient GPU embedding cache for personalized recommendations EuroSys'22 RecShard: statistical feature-based memory optimization for industry-scale neural recommendation ASPLOS'22 BagPipe: Accelerating Deep Recommendation Model Training arxiv 2021 Accelerating recommendation system training by leveraging popular choices VLDB'21 SPACE: Locality-Aware Processing in Heterogeneous Memory for Personalized Recommendations ISCA'21 Software-Hardware Co-design for Fast and Scalable Training of Deep Learning Recommendation Models arxiv ISCA'22 RecPipe: Co-designing Models and Hardware to Jointly Optimize Recommendation Quality and Performance MICRO'21 2020 Kraken: Memory-Efficient Continual Learning for Large-Scale Real-Time Recommendations SC'20 Distributed Hierarchical GPU Parameter Server for Massive Scale Deep Learning Ads Systems MLSys'20 DeepRecSys: A System for Optimizing End-To-End At-Scale Neural Recommendation Inference ISCA'20 ","title":"Recent Papers of Recommendation Systems"},{"content":"laekov 搞了一个在 overleaf 里写 pandoc 的东西叫 panleaf, 并用它做一些愉快的 beamer slides.\n但是 laekov 在做一个作者有七个人的 slides 的时候发现如果把七个人塞在正文的每页的底下, 就会巨长无比, overflow. latex 提供了 short author 功能, 在 beamer 里面正文的页脚只显示 short, 而 titlepage 显示全文. 但左右看了一圈发现 pandoc 的 author 字段并没有这样的支持. 而且即使不填 author 字段, 生成的 tex 文件里面还是会蹦出一个 \\author{}, 且在自定义 latex template 的后面, 所以无法在 template 里面插 author 来解决.\nlaekov 于是找来了 pandoc 的 beamer writer (default.beamer, 也可能是 default.latex), 在里面找 author, 果然找到这么一段.\n\\author{$for(author)$ $author$ $sep$ \\and $endfor$} 这么暴力怎么行, 于是加上一个 if 变成酱紫.\n$if(shortauthor)$ \\author[$shortauthor$]{\\small $for(author)$ $author$ $sep$ \\and $endfor$} $else$ \\author{$for(author)$ $author$ $sep$ \\and $endfor$} $endif$ 然后发现把它回存到 /usr/share/pandoc/default 并不管用. 还是原样. 一番胡猜认为是 default template 其实是被塞进了 pandoc 的 binary, 但是又看了看文档可以自定义 template file. 于是把改过的 default.beamer 改成了 laekov.beamer, 然后在配置 yaml 里面加一个 template: laekov.beamer, 终于解决了问题. 现在在 meta data 里面只要写 shortauthor 字段就可以拥有漂亮的页脚了.\n","permalink":"/technical/f86b57/","summary":"laekov 搞了一个在 overleaf 里写 pandoc 的东西叫 panleaf, 并用它做一些愉快的 beamer slides.\n但是 laekov 在做一个作者有七个人的 slides 的时候发现如果把七个人塞在正文的每页的底下, 就会巨长无比, overflow. latex 提供了 short author 功能, 在 beamer 里面正文的页脚只显示 short, 而 titlepage 显示全文. 但左右看了一圈发现 pandoc 的 author 字段并没有这样的支持. 而且即使不填 author 字段, 生成的 tex 文件里面还是会蹦出一个 \\author{}, 且在自定义 latex template 的后面, 所以无法在 template 里面插 author 来解决.\nlaekov 于是找来了 pandoc 的 beamer writer (default.beamer, 也可能是 default.latex), 在里面找 author, 果然找到这么一段.\n\\author{$for(author)$ $author$ $sep$ \\and $endfor$} 这么暴力怎么行, 于是加上一个 if 变成酱紫.","title":"Pandoc 的 short author 字段缺失 fix"},{"content":"本文及图片版权归 laekov 所有, 谢绝转载\n前言, 符号及约定 本文总结了 aoao 骑过的北京周边的骑行路线, 以爬山为主. 对于坡度的描述可参考如下列表.\n超缓: 坡度不超过 3%. 缓坡: 3-5% 普通: 不太缓也不太陡, 没有给 aoao 留下深刻印象. 陡: 7% 及以上. 对于坡度, 难度和风景好坏的评价较为主观, 且受到当时季节, 天气, 状态等影响. aoao 本人偏好不缓的爬坡, 不喜缓上缓下和平路. 喜欢壮丽的高山大川景象, 对人文风光 (比如寺庙) 没有兴趣.\n故请谨慎参考本文的内容. 欢迎在评论区讨论批评指正.\n本文配图使用的脚本开源在 GitHub, 主要使用 Matplotlib. 有能力的看官可以自行使用脚本绘制自己的轨迹.\n西边和北边群山, 以及市区 国道, 省道的坡度多半不会超过 10%, 多数在 5% 左右. 路面通常为柏油路, 可以放心前往. 但乡道, 防火道等的坡度和路况就很难有保障了.\n(0) 清华大学新民路大坡 搞笑的\n西边系列 以 108, 109 两条国道为主线展开. 国道本身较平, 向西缓上. 其间有众多支线, 包含了很多大小爬坡.\n(1) 灵山 北京公路爬坡最高峰 (指绝对海拔), 长度约 20km, 最高海拔快到 2k. 坡度普通, 风光壮丽, 前段爬坡为树林和峡谷崖壁, 后段行进在高山草甸之间.\n(2) 241 省道爬坡 灵山爬坡绕圈路线的第二个坡, 在河北境内. 长约 5km, 风景坡度普通, 但可以体验河北道路与北京不同之风格.\n(3) 109 国道-省界坡 灵山爬坡绕圈的第三个坡, 可回到灵山爬坡起点. 自西向东爬坡比放坡短一些. 风景忘了.\n(4) 109 到野三坡的坡 可由此从 109 穿越到 108 国道, 从而完成 809 绕圈. 坡本身只有三五公里, 坡度较缓. 自北向南下坡是缓下, 很长.\n(5) 百花山 109 侧爬坡 前缓后陡, 陡段长约 5km. 风景普通. 山顶是景区大门.\n(6) 108 省界爬坡 (到蒲洼) 自西向东爬坡长达十多公里, 中间会过一些有意思的桥. 接近坡顶的路段视野开阔. 下坡风景普通, 但会经过某红色博物馆.\n(7) 蒲洼乡道 先缓后陡, 总长度约 20km, 爬升约 1k. 后段在山崖上绕行, 风景尤美且壮阔. 坡顶即 108 国道.\n(8) 红井路 南坡有秀丽的连续发卡弯, 是网红打卡圣地. 长度不长, 坡度普通, 除了发卡弯以外较为普通, 也就是山顶的烤红薯比较香了.\n(9) 六石路 连接十渡与 108 的另一条山路, 可与红井或蒲洼组成绕圈. 自南向北爬坡长约 20km, 爬升约 1k. 下山较短.\n(10) 幽州峡谷 在河北境内, 有网红壁挂公路, 路况极烂, 公路车需要一定技术与胆量来通行, 但很有越野乐趣. 自北向南缓下.\n(11) 沿河城南边的爬坡 一个平平无奇的几公里小坡.\n(12) 大安山 先缓后陡, 陡段坡度也不陡, 几公里长. 半路上有一个变形金刚巨型模型以及汽车运动公园. 可以在寺上公交站处往更高的山上爬, 有坡度超 10% 的一大段陡坡.\n(13) 横岭 从河北宫厅水库向南进入北京的一条山路. 北段坡度普通, 长度大概 10km, 颇有塞上之感, 风景与北京境内的爬坡风格甚为不同. 向南放坡为缓下, 会路过一个叫镇边城的小村子.\n(14) 南石洋大峡谷 从北向南缓下, 有神奇的峡谷风光. 路况差, 但比幽州峡谷好一点.\n(15) 大村 北京经典爬坡绕圈东大高的一部分, 自南向北七八公里, 坡度略缓. 春天会开花.\n(16) 白羊沟 自东向西十多公里, 爬升八百多, 坡度普通偏陡, 有一小段很险的连续发卡弯. 自西向东是缓上, 无聊.\n(17) 高崖口 自东向西长约 20km, 爬升接近一千, 山顶 3km 处山势变险, 可以远眺昌平.\n(18) 菩萨鹿 \u0026ldquo;山\u0026rdquo; 字形的三个坡, 爬升大几百, 坡度很缓, 无聊.\n(19) 车神殿 菩萨鹿上的一个小支路, 去往一个庙, 先下后上各 2km, 路烂且陡.\n(20) 东方红隧道 入门好坡, 3km 坡度在 3-9% 之间变化. (主要是离市区比较近)\n(21) 千军台 超长超缓坡, 终点是一处废弃煤矿, 但不让进. 终点前有一小段陡坡. 没什么风景.\n(22) 松树岭(隧道) 108 国道上和戒台寺类似的小坡, 西向东比东向西更长一点, 大概 4km.\n(23) 禅房 从东方红坡底右拐上山, 先是好几公里漂亮的柏油路, 然后是好几公里很窄的乡渞, 且坡度变陡. 山顶部分是起伏路, 在悬崖上, 可眺望群山, 适合拍照.\n(24) 妙峰山 北京最经典的爬坡, 前 7km 缓坡, 后 13km 较陡. 在 60 分钟内登顶是业余选手爬坡实力的象征. 但其实风景一般. 中间有弯道咖啡可以休息, 夏天可以在水站接山泉水. 涧沟村可以吃饭. (过于熟悉不做更多介绍了)\n(25) 阳台山 (这是 aoao 在西边最喜欢的山) 从涧沟村玫瑰谷大门处右转上山, 长约 7km, 爬升比妙更多, 坡度一度很陡, 但中间有一段下坡. 爬坡后段转变为高山草甸, 在一些回头弯处有观景台, 可以眺望海淀北部区域, 甚至能看到首都机场. 需要注意在一些季节的一些时段需要买门票进入, 花费 20 元. 在妙峰山坡顶前的大拐弯处也有一条废弃的盘山路可达山顶, 但该路已毁于塌方, 部分路段被土石覆盖.\n(26) 潭王路 \u0026ldquo;小老鼠\u0026rdquo; 路线所经过的另一经典爬坡, 连接 108 和 109 国道. 两侧均长度约 10km, 坡度普通, 某些季节风景不错. 弯道较少, 可以放坡放很快.\n(27) 定都阁 从潭王路旧线往前可上, 有一段非常陡的防火道. 向东下山是土路, 不建议公路车尝试.\n(28) 戒台寺 非常入门的缓坡, 赛段从石门营环岛开始, 长约 5km.\n(63) 双大路 一条新路, 目前车比较少, 东西两边都可以爬坡, 坡顶是两个隧道和中间的一段起伏路. 其中东侧先是三公里缓上, 然后是约十公里均匀不陡的坡, 在山崖上架了很多很高的桥, 非常壮观, 非常基建狂魔.\n(64) 珠窝/碣石村 从西北向东南是一段五公里多的烂路爬坡, 水泥路面风化严重, 有很多碎石, 对公路车比较极限, 但坡度不太陡. 东南坡路况稍微好一点, 上面一段也是水泥路,下面是沥青路.\n北边系列 向北通常沿 g6 京藏高速出城. (如果开车建议走 g7 京新, 路宽车少) 去东边也可以沿安四路出城\n(29) 水关长城 从北往南似乎有时候会封路, 只有自行车能骑. 几公里坡度适中的坡, 爬起来比较舒适. 放坡会放到八达岭爬坡半路上, 会路过长城.\n(30) 八达岭 沿 g6 一路爬, 十多公里, 坡度较缓, 除了中途可以看到长城以外没什么风景. 坡顶要么过一个巨长的隧道, 要么走景区里穿过去.\n(31) 京银路 (110国道) 也是 g7 出城方向的一部分. 大概 10km, 比较缓, 没什么风景, 有时候大车略多.\n(32) 大科庄 从铁炉村向西爬坡, 先缓后陡, 陡的部分大概不到十公里. 接近山顶的部分有一个广场, 视野还算开阔. 放坡不长, 会放到京银路上.\n(33) 双龙山 一段 2km 平均 10% 的坡, 在山谷里, 车比较少, 是一个挑战 8848 的好地方. 半路有一个口, 可以上一个巨陡的小道, 有几公里, 在上面的回头弯可以眺望到市区.\n(34) 铁炉村 从南边到铁炉村的一段烂路, 坡陡超过 10% 有大概 2km. 会经过一个小城门楼子. 然后树荫会挡住路, 别有风情.\n(35) 大梁西 烂路陡坡, 大概四五公里, 然后会在山里穿行到铁炉西边, 下坡路也超烂. 从解字石爬坡半道拐进去.\n(36) 解字石 京北常见爬坡, 从南到北爬坡是几公里起伏路加 7km 较陡的坡. 下坡分成两截. 陡段可以从上往下看, 还不错. 山顶有一个适合合影的台子.\n(37) 永宁南边的坡 无名坡, 从南到北先缓后陡, 有快十公里. 北边放坡也差不多长. 每次骑到这都很累了, 无心看风景.\n(38) 台自沟村爬坡 在上一个坡坡顶新修的一条水泥村道, 比较陡, 弯多且急, 有趣.\n(39) 燕山天池 从南往北前身白河堡水库, 大概 5km 普通陡的坡, 坡顶有个亭子可以俯览水库.\n(40) 刘干路 无名坡, 几公里, 不陡, 南往北上坡没风景, 下坡比较缓.\n(41) 百里画廊 经典骑游路线, 几十公里大平路, 西向东缓下, 很多人都觉得风景不错.\n(42) 仓米古道 百里画廊半路下车的坡, 三四公里长, 北往南坡略陡, 弯急, 路很好看. 放坡之后是一段很要命的长缓上 (南往北就是缓下了).\n(43) 永四 永宁到四海的路, 和百里画廊平行, 可绕圈. 大概 20km 的西向东缓上, 似乎很经典.\n(44) 四海南边的坡 (安四路) 南向北先缓后陡, 陡的大概有 5km 急弯, 北坡比较短. 南边山角有一家网红骑行咖啡馆, 贵. 跑山的汽车和摩托有时候比较多.\n(45) 分水岭村 连接解字石山谷和九渡河山谷的一条路, 从东向西 先是两公里坡, 然后快进村的地方有一段几百米超过 10% 的陡坡, 非常考验毅力, 经常有人推车. 但由于疫情封村, 目前只能从南边一条小路绕, 失去了原来的乐趣.\n(46) 黑山寨 南向北四公里先缓后陡的坡, 最陡差不多有 10%. 进山必经之路之一, 山顶有个观景台, 下山会经过火车路线.\n(47) 十三陵水库绕圈 入门经典起伏路, 一圈十多公里, 是玄铁(铁人三项)比赛自行车路线.\n(48) 蟒山 前往景区的断头路, 七公里三百米爬升, 是一些比赛路线. 水泥路路面比较烂. 山顶有个池子 (天池), 不过目前不让进了.\n(49) 慈悲峪 安四路北上路线, 南往北快十公里坡, 巨缓, 无聊. 北坡只有三公里, 坡度适中.\n(50) 大杨山 (百合村) 南向北也是大缓坡, 到百合村后折向西南到慈悲峪半路上, 稍陡一些.\n(51) 东北口关 京北的神. 西向东先一段缓坡, 然后 4km 在 10% 左右的坡. 不管是上还是下, 都不会有精力看风景. 东侧略缓, 视野开阔.\n(52) 范崎路 南向北有两段 10km 左右中等坡, 中间是 2km 小下坡, 有一个神奇的 270 度转弯. 第一段爬坡路边有很多农家乐, 第二段是普通的山. 再往北是缓下, 到 234 国道.\n(53) 神堂峪 和范崎路同起点, 去景区的一段无聊小坡.\n(54) 白河峡谷 234 国道的一段, 从 111 国道到密云水库, 爬升也是山字型三个坡, 类似菩萨鹿. 一些地方视野巨好, 可以看到几百米山下的河. 但也有一些比较长的没灯的隧道, 建议带前灯.\n(55) 环密云水库 起伏路, 100km 爬升 1k, 有一些好看的景区, 如不老屯大锅盖, 水库大坝拍日落也不错.\n市区 (56) 昆玉河 晨练专用线路 (因为离五道口近), 往返 12km 无红绿灯, 有一些上下隧道起伏.\n(57) 长安街 经典路线. 赛段是从复兴门到建国门 (或反向, 或往返). 问题是有红绿灯.\n(58) 奥园 夜骑团练绕圈路线, 6km 一圈. 西北东三面无红绿灯, 北侧两个角有两处起伏.\n(59) 温榆河绿道 沿河的休闲路线, 路况较差, 车多, 但没有红绿灯.\n(60) 凤凰岭 车协迎新经典路线, 终点处有一个几百米的小坡.\n(61) 七王坟 田间小坡, 长约 2km, 最后一小段坡度超 10%, 有很多减速带, 很要命.\n(62) 大觉寺后山 防火道, 一些路段较陡, 通往一些山地路线.\n没有在图上画出来 / 没骑过的已知路线 草原天路 太远了 慕田峪 四海南边坡的支路, 三公里普通坡, 开后援车去过一次后没有再去一次的想法. 园博园绕圈 市西的团练路线, 太远了. 金海湖铁三绕圈 退赛了, 没骑. 百花山108侧 更新 2022 因为懒得更新图所以就打字了.\n北边的山 海陀山/松山 一个十多公里的大坡, 坡度适中, 从一个水库底下一路爬到北京河北交界处, 俯看官厅水库(但是有点远), 会从京礼高速底下经过. 山顶附近风景绝赞. 另有一条岔路可爬到雪游龙山顶, 据说比较陡, 但平时不开放. 玉渡山 一个不到十公里的坡, 就在松山旁边, 坡度略陡于松山, 山路有点窄, 上山游客车多. 山顶是景区, 不让自行车进. 从这边远望官厅水库角度更佳. 平谷四座楼 可以从西边爬, 也可以从南边爬, 西边十公里左右适中的坡, 南边好像更陡一些, 下坡弯急, 适合练习切弯. 山顶四座楼景区关闭, 只有大铁门可看. 平谷十八弯 在四座楼东边, 坡度稍陡, 不长. 东指壶 从十八弯北侧下坡到一半的地方往东爬, 可以到河北省界, 但是去不了河北. 5km 9% 的坡, 类似于十八盘加长变缓版, 有一些非常神奇的之字型弯.但山顶风景一般. 古北水镇后山 一段不长的部分很陡的柏油路, 爬上去才能住上便宜的民宿. 马大路 从塔沟到新城子的一个坡, 后段两公里比较陡, 但是很少有人骑, 可抢 kom. 往东下坡路比较烂, 很有趣. 去古北水镇玩可以顺便爬一爬. 崇礼山地车公园 太舞 比较出名, 服务比较好, 山底有闪电的店. 离崇礼城区有半小时车程, 但是高铁直达. 车道分绿蓝黑粉, 绿线很平适合入门, 蓝线有小飞跳, 黑线较陡, 技术性强, 粉线要命, 已关闭. 整体维护不太行, 路面比较颠. 云顶 有国家级服务, 但是只有一条中高级道, 有很多大的飞跳. 路线较长, 比较有趣, 但是非常颠, 因为去的人很少. 富龙 2022 年新修的路线, 有绿蓝黑和 ALine 四条路. 绿线平, 蓝线有很多弯墙, aline 非常有意思, 有很多包, 黑线巨难. 刚修好所以路面很平. 服务态度不太好, 但是离城区很近, 比较方便. 香山专题 群山往往需要一整天甚至更多的时间来骑, 而香山由于离五道口近, 所以只需要半天甚至更少的时间 (比如两小时). 这就好比零食甜点与正餐的区别. 而香山道路其实也很复杂且有趣, 故将其单列.\n需要注意的是香山的一些地方有一些单向通行的关卡, 例如植物园大门只出不进, 黑陈路顶白房处有人禁止进入西山公园前往鬼笑石. 另一些防火道的坡由于巨陡而不适合爬或者下. 因此路线的组合规划需要多加注意.\n(101) 太舟坞 经典爬坡, 先是 3km 陡坡, 坡度不均匀, 一些回头弯处坡度高达 20%, 且水泥路面破损露出了鹅卵石. 因此下坡较为危险. 在四棵树路口 (四叉路口) 向右后转弯, 是几公里的稍缓的坡, 到达植物园下路口 (一个三叉路口) 为赛段终点. 风景普通.\n(102) (新)十八盘 (aoao 香山最爱) 3km 比较均匀的 10%+ 的坡, 十分险要, 山路很好看. 水泥路面路况比太舟坞好. 接一段缓下, 然后有神奇的五连拐, 继续爬两三公里到达憋死猫路口, 即植物园下路口往上 100m 处.\n(103) 东山贡梨园 山凹里的一个村, 没有公路上山, 但有徒步路线.\n(104) 三家店(新望京) 从憋死猫路口下山, 挺长的一个坡, 比较陡, 弯多. 下山后左转爬黑陈路, 右转爬妙.\n(105) 黑陈路 香山唯一的社会公路, 北京唯一晚上有路灯的坡, 分陡侧和缓侧, 陡侧三公里, 平均坡度 9%.\n(106) 模式口 黑陈路山顶向南下山的防火道, 不陡.\n(107) 西山公园 黑陈路山顶向东下山进城的路线, 是景区里的路, 行人很多, 现已封闭不让人走.\n(108) 新马道 防火道, 从挂甲塔下山的路线, 又直又陡, 只能出不能进.\n(108.5) 老马道 从挂甲塔后面城门楼子下山的路, 与新马道平行, 弯比较多, 整体坡度差不多.\n(109) 植物园 从植物园下路口下山的路, 坡度比太舟坞更陡一些. 一些回头弯比较难下. 半山有一处小直道视野十分开阔, 在此处可以稍事休息以冷却刹车. 到山脚后会从北京植物园中间穿过, 理论上要求下车推行穿过园区.\n(110) 老望京 从憋死猫路口上到山顶的路, 300米 连续 20% 的坡, 对分钟级腿力的巨大考验. 骑公路车爬上去可以吹一年. 天气好的时候山顶可以眺望北京城北. 如果没有腿力, 岔口东侧的路往前也有一段可以看到市区, 绕过山顶后两条路合并.\n(111) 鬼笑石 著名景点, 可眺望北京城, 看日出. 从黑陈路顶爬上去有几百米很陡的坡 (现已被禁).\n(112) 南马场水库 山地 (徒步) 路线, 也有一些防火道, 待探路.\n(113) 金山陵园 香山东坡北侧的路, 从前可以溜进西山公园, 但是岔路很多, 容易迷路. 现已被封.\nHistorical Comments zms_ at 2022-04-15T20:46:42 居然没人儿评论？！\nlaekov at 2022-04-16T16:13:53 我博客没人评论不是常态吗\n","permalink":"/random/caf0b0/","summary":"本文及图片版权归 laekov 所有, 谢绝转载\n前言, 符号及约定 本文总结了 aoao 骑过的北京周边的骑行路线, 以爬山为主. 对于坡度的描述可参考如下列表.\n超缓: 坡度不超过 3%. 缓坡: 3-5% 普通: 不太缓也不太陡, 没有给 aoao 留下深刻印象. 陡: 7% 及以上. 对于坡度, 难度和风景好坏的评价较为主观, 且受到当时季节, 天气, 状态等影响. aoao 本人偏好不缓的爬坡, 不喜缓上缓下和平路. 喜欢壮丽的高山大川景象, 对人文风光 (比如寺庙) 没有兴趣.\n故请谨慎参考本文的内容. 欢迎在评论区讨论批评指正.\n本文配图使用的脚本开源在 GitHub, 主要使用 Matplotlib. 有能力的看官可以自行使用脚本绘制自己的轨迹.\n西边和北边群山, 以及市区 国道, 省道的坡度多半不会超过 10%, 多数在 5% 左右. 路面通常为柏油路, 可以放心前往. 但乡道, 防火道等的坡度和路况就很难有保障了.\n(0) 清华大学新民路大坡 搞笑的\n西边系列 以 108, 109 两条国道为主线展开. 国道本身较平, 向西缓上. 其间有众多支线, 包含了很多大小爬坡.\n(1) 灵山 北京公路爬坡最高峰 (指绝对海拔), 长度约 20km, 最高海拔快到 2k.","title":"北京骑行路线及爬坡大赏"},{"content":"元旦假期花一个下午补了 Island 这部番, 时间线烧脑程度颇有云图的感觉, 再进一步就要信条了. 虽然有各种弹幕解说, 但还是看得很茫然, 而且网上的解析也比较少, 没有把 laekov 讲明白. 于是 laekov 决定自己整理一下时间线.\nlaekov 倾向于认为人类只造出了睡眠仓, 而没有造出能逆转时间的机器. 所以人类文明以 20000 年为周期不断从石器时代到高度文明再退回, 这和 Island 上的科技退化也很吻合. 动画的故事发生在其中一个 夏1 - 冬1 - 夏2 周期中.\n为了简便称三家的女主为白毛, 黄毛和炸毛.\n实际上进行了时间旅行的只有男主和老小两白毛. 在夏篇见光死的是骨科切纳和他爹. (这俩人家产全被没有血缘的人吞了好惨) 在冬篇见光死的是黄毛, 炸毛未知.\n一些疑问 男主在 夏1 的梦为啥和 冬1 不一样? 男主在夏 1 的时候做的梦来源于 冬0, 其中 大版炸毛被火烧掉 和 跟黄毛kiss(?) 的事件在 冬1 中也发生了, 只是剧情有所不同, 因为 冬0 中男主的记忆可能和 冬1 并不相同 (蝴蝶效应). 很可能在 冬0 中白毛的冷冻仓有 bug, 从而导致男主记忆缺失.\n骨科切那为啥变成了白骨? 切那和白发魔女的交易是什么? 骨科切那是把小白毛塞进机器之后独自在岛上生存的过程中饿/病死的. 和白发魔女交易 这个传说来源于老白毛造了时光机把男主送回来.\n夏1 的老白毛是谁? 是 冬0 的白毛.\n总共有几台冷冻仓? 从哪来? 恶魔岛上实验室遗迹里有一台. 从在 夏1 中 老白毛花了五年才在岛上找到冷冻仓可以推知她对此并不知情. 因此很可能是实验室在 夏0 和 冬0 之间制成的. 这个冷冻仓被用于小白毛的五年和送男主从 夏1 去 冬1.\n冬0 / 冬1 中白毛冷冻仓进行了仿制, 并用其将男主从 冬1 送去了 夏1. (冬0 剧情无法过多猜测)\n时间线 冬0 炸毛被烧死, 死前让男主拯救世界. 因为白毛冷冻仓 bug, 故男主只剩了一些记忆碎片.\n夏1 男主凭借记忆碎片和惊人的主角光环完成了对黄毛和炸毛的艰难救赎, 但是在救赎白毛的时候因为没有掌握正确的去往恶魔岛的方法, 在回来路上白毛为了救男主而死.\n这里有一个细节是老白毛在看男主和白毛出门的时候先是姨母笑, 然后突然吡了牙. 这里吡牙应该是针对男主行为没有达到预期.\n最终老白毛把男主送上了去往未来的冷冻仓.\n冬1 男主起初还是没有太完整的记忆, 但是在跟这个时代的黄毛和炸毛一起帮助黑户 blabla 中逐渐获得了记忆, 并玩死了炸毛和黄毛, 最后白毛用完成体冷冻仓把男主送到了 夏2, 然后又造了一台把自己送了过去, 但是早送了 20 年.\n夏2 有了记忆的男主凭借记忆迅速救赎了黄毛炸毛, 然而在炸毛的相册里看到了老白毛手上的戒指和自己的一样 (在 夏1 里面并没有戒指, 所以推测 冬0 没做戒指. 难道戒指才是保全记忆的关键?) 于是最终发现自己攻略了半天的小白毛是自己女儿, 老白毛才是自己老婆, 于是一家三口过上了幸福快乐的生活全剧终.\n一个细节是老白毛在自己房间里又造了一台冷冻仓, 不知道是打算去哪. 老白毛是真的已经经历了太多.\n","permalink":"/random/aafa1e/","summary":"元旦假期花一个下午补了 Island 这部番, 时间线烧脑程度颇有云图的感觉, 再进一步就要信条了. 虽然有各种弹幕解说, 但还是看得很茫然, 而且网上的解析也比较少, 没有把 laekov 讲明白. 于是 laekov 决定自己整理一下时间线.\nlaekov 倾向于认为人类只造出了睡眠仓, 而没有造出能逆转时间的机器. 所以人类文明以 20000 年为周期不断从石器时代到高度文明再退回, 这和 Island 上的科技退化也很吻合. 动画的故事发生在其中一个 夏1 - 冬1 - 夏2 周期中.\n为了简便称三家的女主为白毛, 黄毛和炸毛.\n实际上进行了时间旅行的只有男主和老小两白毛. 在夏篇见光死的是骨科切纳和他爹. (这俩人家产全被没有血缘的人吞了好惨) 在冬篇见光死的是黄毛, 炸毛未知.\n一些疑问 男主在 夏1 的梦为啥和 冬1 不一样? 男主在夏 1 的时候做的梦来源于 冬0, 其中 大版炸毛被火烧掉 和 跟黄毛kiss(?) 的事件在 冬1 中也发生了, 只是剧情有所不同, 因为 冬0 中男主的记忆可能和 冬1 并不相同 (蝴蝶效应). 很可能在 冬0 中白毛的冷冻仓有 bug, 从而导致男主记忆缺失.\n骨科切那为啥变成了白骨? 切那和白发魔女的交易是什么? 骨科切那是把小白毛塞进机器之后独自在岛上生存的过程中饿/病死的. 和白发魔女交易 这个传说来源于老白毛造了时光机把男主送回来.","title":"Island 剧情解析"},{"content":"laekov 最近在玩 assetto corsa 并试图学习循迹刹车, 因此需要一个加速度轨迹显示插件. 在 GitHub 上发现了一个上古仓库 竟然还能用, 但是卖家秀是\n而 laekov 这里是\n为啥参考线只剩小半个了？？？\n由于 assetto corsa 的插件都是 python, 于是 laekov 愉快地看起了代码, 并发现了如下一段.\ndef drawCircumference(self, radius, center): ac.glBegin(1) nlines = max(4, int(100.*radius)) for i in range(nlines+1): x, y = self.gPlotter.plotG(center[\u0026#39;x\u0026#39;] + (sin(2*pi*i/nlines)*radius), center[\u0026#39;z\u0026#39;] + (cos(2*pi*i/nlines)*radius)) ac.glVertex2f(x, y) ac.glEnd() 大胆猜想是 python 或者 ac.gl 性能不足以支撑在一个渲染周期内画完整个圆. 于是想找一个 native 的 circle 的 api. 然而翻阅了一下上古的 python plugin document (竟然还是 google docs) 发现 ac 的 gl 只支持画点和多边形 (挠头).\n为了验证这个想法, 先把 max(4, int(100.*radius)) 套了一个 min(90, ...), 于是获得了下图.\n大圈被多画了几笔耶! 看来猜想是正确的.\n于是把 min(90 改成了 30, 然后成功地得到了整个圆. 而且正 30 边形画出来的圆惊人地并不方.\n这个故事告诉我们\nPython (似乎是 3.3 ?????) 性能真辣鸡 Assetto Corsa 的 python plugin 真鬼畜 番外: laekov 发现这个 repo 的唯一一个 issue 就是在讲这个 bug. 早知道就先看一眼了\u0026hellip;\n","permalink":"/technical/dadc0a/","summary":"laekov 最近在玩 assetto corsa 并试图学习循迹刹车, 因此需要一个加速度轨迹显示插件. 在 GitHub 上发现了一个上古仓库 竟然还能用, 但是卖家秀是\n而 laekov 这里是\n为啥参考线只剩小半个了？？？\n由于 assetto corsa 的插件都是 python, 于是 laekov 愉快地看起了代码, 并发现了如下一段.\ndef drawCircumference(self, radius, center): ac.glBegin(1) nlines = max(4, int(100.*radius)) for i in range(nlines+1): x, y = self.gPlotter.plotG(center[\u0026#39;x\u0026#39;] + (sin(2*pi*i/nlines)*radius), center[\u0026#39;z\u0026#39;] + (cos(2*pi*i/nlines)*radius)) ac.glVertex2f(x, y) ac.glEnd() 大胆猜想是 python 或者 ac.gl 性能不足以支撑在一个渲染周期内画完整个圆. 于是想找一个 native 的 circle 的 api. 然而翻阅了一下上古的 python plugin document (竟然还是 google docs) 发现 ac 的 gl 只支持画点和多边形 (挠头).","title":"Assetto Corsa G值球只有半个 bug 修复"},{"content":" 版权声明: 如需转载请先与 laekov 联系, 侵权必究. 序 Jiaao He 在 24 岁生日那一天收到邮件, 他在 ppopp 投稿的这篇文章被接收了. 这是他以一作身份投的第一篇 A 类会文章.\nlaekov 当时脑子一热, 开了一个坑, 决定把这篇文章的主要内容用中文写出来, somehow 地促进中文学术. (虽然多半并没有什么帮助)\n在过去的小半年里他又经历了 artifact evaluation, camera ready, 制作 presentation slides 和录制视频 (很遗憾因为疫情没法去韩国开会了) 等等一系列事情, 对这个项目也有了更多的理解. 在 4 月的第一天终于把写文章时候的 prototype 变成了看起来还不错的代码, 并准备合并进 FastMoE. 正好写完这篇文章, 也当作是在 FastMoE 里使用 FasterMoE 的中文版文档了.\n这篇文章的 pdf 正文在 ACM DL 上可以找到. (有 open access, 在任何地方都可以下载, 并用于非商业目的) 开会的时候用的 slides 和视频链接 在这里.\n背景和简介 我假设看这篇文章的人已经知道什么是 MoE 模型了, 大规模的 MoE 模型现在有多重要 (也可能并不). 专家并行模式 (即 gshard 模式) 是如何把 expert 们分布式地放在所有 worker 上, 并使用 all-to-all 通信方式把输入发送到 expert 上的.\n如果你不知道, 一言以蔽之, 负载如下图.\n这里面就有三个性能问题:\n负载不均衡. 不同的 expert 收到的输入数目不同, 因此处理时间不同. 处理得快的要花很长的时间等处理得慢的. 集合通信算子效率低: 要等整个 all-to-all 操作发完所有数据之后才能继续进行操作, 对于计算和通信的硬件资源都有比较大的浪费. 网络负载比较重: all-to-all 数据量不小. 针对这三个挑战, 我们 (laekov) 发明了三个优化方式, 并引入了一个 DDL-Roofline 模型来从理论上刻画这个负载的特点.\n优化点 影子专家 (Expert Shadowing) 针对负载不均衡的问题, 进一步观察真实模型中的专家选择情况, 可以发现一些专家显著地比另一些专家更热门, 但是其趋势也是每轮 / 每层都不一样的.\n影子专家技术的核心是将热门专家的参数进行广播. 对于需要该专家处理的输入, 不再发送到对应的 worker 上进行计算, 而是在本地使用广播出来的参数进行计算. 这样, 虽然广播引入了额外的通信开销, 但是可以摊热门专家带来的更严重的负载不均的问题, 从而给性能带来好处.\n具体来讲, 我们使用了一个性能预测器来帮助决定每一轮迭代中影子专家的选择. 将所有专家按照热度排序后, 从高到低依次判断将其设为影子专家是否会带来性能收益.\n细粒度调度 (Smart Scheduling) 前面提到 all-to-all 集合通信是一个粗粒度的算子, 阻碍了将计算和通信进行重叠. 因此, 需要将其打碎为若干小的操作, 然后再进行细粒度调度. 参考 pair-wise exchange 算法, 我们使用 group-wise exchange 算法来拆分 all-to-all, 然后再重排, 如下图. (其中 S 代表第一次 all-to-all 的一部分, C 代表对于对应的输入进行的计算, R 代表第二次 all-to-all 的一部分)\n通过这样的重排, 通信时间和计算时间就有效地减少了. 对于影子专家的计算和通信, 也可以很好地整合进这个调度里面.\n考虑网络拓扑的门网络 (Topology-aware Gate) 不同于上两个优化点, 这个优化点对算法进行了一些改变. 此外, 我们强调,针对不同的网络拓扑结构, 需要进行专门的设计. 此处我们的设计仅作为一个例子来展示这样的系统-模型联合设计的方法.\n考虑多台机器, 每台机器里有多个 GPU 的情况, 一机内的 GPU 之间网络带宽显著地比机器之间快. 但是如果对专家选择不加以限制, 那么显然更多的输入会被发送到不同机器上的 GPU 上, 那么机器之间的网络就拥塞了, 而机器内 GPU 之间的网络比较空闲.\n参考 GShard 和 BASE Layers 的做法, 我们也对专家的选择进行人为干预, 但更进一步, 我们考虑硬件连接的拓扑关系. 我们限制跨机器选择专家的输入数量. 不同于 GShard, 我们让多余的输入按照分数重新在本节点内选择一个喜欢的专家来进行处理. 这样, 我们不仅降低了通信开销, 还更充分地利用了训练数据 (GShard 扔掉了它们).\n如何在 FastMoE 中使用这些优化 Expert Shaodwing 为了方便 (因为 laekov 懒), 这个特性必需和 Smart Scheduling 一起使用. 每个专家必需结构完全相同.\n使用环境变量 FMOE_FASTER_SHADOW_ENABLE=1 或 ON 来使能这个特性.\n源代码 fmoe/fastermoe/shadow_policy.py 中定义了默认的影子专家选择算法, 它假设用户的专家是一个两层前馈网络 (MLP). 用户可以自定义这个算法, 记得在修改后需要重新安装一次 FastMoE.\n在默认的算法中, 可以使用以下一些环境变量来控制专家选择算法.\nFMOE_FASTER_GLBPLC_NETBW 是 GPU 之间的连接带宽, 以 GBps 为单位. FMOE_FASTER_GLBPLC_GPUTP 是 GPU 进行矩阵乘的吞吐量, 以 FLOPs 为单位. 例如 NVIDIA V100 的单精度浮点性能约为 13e12. FMOE_FASTER_GLBPLC_ALPHA 是每个 MLP 层的中间激活向量长度与输入或输入向量长度的比值. 在 Transformers 模型里通常是 2 或者 4. FMOE_FASTER_GLBPLC_DMODEL 是输入或输出特征向量的长度. FastMoE 可以自动从输入中判断这个值, 不必特别设置. Smart Scheduling 这个特性也有一些限制. num_expert必需设为1. (还是因为 laekov 懒. 期待来自开源社区的贡献能够把其它情况给支持了) 专家的输入和输出的向量长度必需等.\n用环境变量 FMOE_FASTER_SCHEDULE_ENABLE=ON 来开启这个特性. 用 FMOE_FASTER_GROUP_SIZE 这个环境变量可以调 Group-wise exchange 的 group 大小, 从而在流水任务太少导致气泡和粒度太细低效之间找一个平衡.\nTopology-aware Gate 这个模块在 FastMoE 里面被改名叫了 FasterGate, 和其它 gate 的使用方式一致. FMOE_TOPO_GPUS_PER_NODE 环境变量控制每节点内的 GPU 数. FMOE_TOPO_OUTGOING_FRACTION 表示允许被发到其它节点的输入条目的比例.\nDDL-Roofline 模型 DDL 的意思不是 Deadline, 而是 Distributed Deep Learning.\n这个 Roofline 和传统的 Roofline 不太一样. 画出来如下.\n其中横轴是计算时间与通信时间的比值 (传统 Roofline 的是访存量), 纵轴是每加速器的平均计算吞吐量.\n实线是理想线, 是真正的屋檐线. 但它的前提条件是通信能够完美地被计算所遮盖. 虚线是一条半理想线, 表示计算和通信完全不做重叠. 事实上, 在很多现在的 DL 框架里面, 这样的重叠都是需要特定条件或者手工进行的. 比如在原来的 FastMoE 里, 因为各种问题, 就没有做这样的重叠. 这种时候, 峰值性能就会被这条半理想线所限制.\n一个例子是数据并行的两个点. 蓝点表示的是不重叠的数据并行, 因为没有负载不均衡的问题, 所以它可以达到半理想的线. 而橙点表示数据并行的反向计算可以和梯度同步所重叠, 所以它在虚线上面. 但数据并行的问题是在 MoE 模型中, 参数量相对比较大, 而计算量因为被稀疏化过了, 所以相对比较小. 因此它在横轴上的位置很靠左, 优化再好性能也不会怎么好. 实验中我们的系统也确实暴打了使用 DeepSpeed 的 ZeRO Optimizer 来训 MoE 的 baseline. (而彼时 DeepSpeed 的专家并行模式还远未诞生)\n绿色是专家并行. 在 MoE 中, 专家并行的通信量是远小于数据并行的, 但它的问题是负载不均, 所以它虽然在右边, 但比较靠下. 我们的 Expert Shadowing 正好缓解了负载不均的问题, 因此计算延迟变小了, 但性能却变高了. 进一步的, Smart Scheduling 使得计算和通信可以重叠在一起, 于是我们超过了半理想线. 而 Topology-aware Gate 直接通过改变负载来减小了通信量, 从而性能更好.\n实验结果 略了. 见原文.\n题外话: PPoPP'22 的另一篇文章: 八卦炉 BaGuaLu ACM DL 链接 (同样有 open access)\n这是一篇 Jiaao He 作为二作的文章, 是一个巨大的工作 (其实是试图冲击 GB, 失败). 合作方有之江实验室, 清华的 KEG 实验室, 阿里达摩院, 北京智源研究院. 其主要贡献是在中国国产的神威超级大规模的计算机上训练了一个史无前例的 130 万亿的大模型. 其中 Jiaao 的主要贡献是在分布式方面, 包括开发和移植 FastMoE, 设计并行方案, 准备和跑大规模 (大几万个进程的那种) 实验. 因为和 FastMoE 相关, 故也在这里也将 Jiaao 贡献了的部分顺带一提.\n与 FasterMoE 不同, BaGuaLu 解决主要问题是在特定平台训练特定模型, 因此在分布式的设计上也更加特化.\n具体来讲, BaGuaLu 使用了数据并行和专家并行混合的方案, 并进行了 topology-aware 的设计.\n在数据并行的维度上使用了改进过的 ZeRO Optimizer 的思路, 来存储大模型.\n发明了 SWIPE 这样一个又快又能保证 完美负载均衡 的 Gate, 虽然它并不 topology-aware. 这个 Gate 也被用到了后来提出的 AIPerf-MoE 中.\n事实上, 这个工作更大的难度是在国产的完全不同的体系结构上构筑出一套完整的深度学习环境, 包括算子库, DL 库等等. 而这里面 Zixuan 和其他同学做出了更加艰巨且重要的贡献. 在文章里这一部分也有详细展开.\nHistorical Comments laekov at 2022-03-24T12:04:03 昨天刚录完英文版视频, 感觉自己已经不会说英文了\u0026hellip; 以及这个坑大概率要咕了.\n","permalink":"/technical/181401/","summary":"版权声明: 如需转载请先与 laekov 联系, 侵权必究. 序 Jiaao He 在 24 岁生日那一天收到邮件, 他在 ppopp 投稿的这篇文章被接收了. 这是他以一作身份投的第一篇 A 类会文章.\nlaekov 当时脑子一热, 开了一个坑, 决定把这篇文章的主要内容用中文写出来, somehow 地促进中文学术. (虽然多半并没有什么帮助)\n在过去的小半年里他又经历了 artifact evaluation, camera ready, 制作 presentation slides 和录制视频 (很遗憾因为疫情没法去韩国开会了) 等等一系列事情, 对这个项目也有了更多的理解. 在 4 月的第一天终于把写文章时候的 prototype 变成了看起来还不错的代码, 并准备合并进 FastMoE. 正好写完这篇文章, 也当作是在 FastMoE 里使用 FasterMoE 的中文版文档了.\n这篇文章的 pdf 正文在 ACM DL 上可以找到. (有 open access, 在任何地方都可以下载, 并用于非商业目的) 开会的时候用的 slides 和视频链接 在这里.\n背景和简介 我假设看这篇文章的人已经知道什么是 MoE 模型了, 大规模的 MoE 模型现在有多重要 (也可能并不).","title":"FasterMoE: 对大 MoE 模型训练的性能建模及优化"},{"content":"花了一晚上修的一个 bug. 记录一下. 先讲结论再讲故事.\nslurmdbd 在更新 account 配置的时候, 有可能出现更新成功了, dump 出来是对的, 但跑程序失败 (requested resources not available) 的情况. 其中一个可能原因是 mysql 并没有成功写入, 于是认证失败. 解决方案是修改 slurmdbd 的配置文件, 使得其以 root 用户身份执行.\n故事是实验室有同学要赶 PLDI, 需要独占某一些节点, 并防止懵懂的小朋友和他们抢占节点后不释放. laekov 给出的解决方案是在 slurm 中单独划分一个队列, 并仅对指定 account 开放. 这个操作 laekov 在另一个集群上已经熟练使用了. 但是 laekov 在用 sacctmgr 配置好 account 和 user 之后, 尝试 srun 任务, 发现提示 resources not available. 之前遇到过这种情况, 通过重启 slurmdbd 解决了问题. 但是这次重启任何 slurm 组件都没有解决问题.\nlaekov 查看了 /var/log/slurm-llnl/slurmctld, 发现提示 part_policy_valid_acct: job's account not known, so it can't use this partition. 疑惑的是在 srun 命令里面明明指定了 account, 为啥会找不到呢?\n继续仔细看 log, 发现在 sacctmgr create 的时候会报另一个错 error: Update Association request from non-super user uid=. 于是大胆猜想 db 根本没有被成功写入. 果然, 在删除的时候也报了 error: Can't find parent id 的错, 说明最初创建的 account 也没有插成功! 在一番 google 之后找到了这个 issue 的回复, 指明 slurmdbd 如果被 slurm 用户执行的话, 权限得对. 于是 laekov 索性把 slurmdbd 扔给了 root 并重新插入了 accounts 和 users. 果然就能跑了.\n这个问题最坑的地方在于虽然没有插入成功, 但是 sacctmgr 竟然能 show 和 dump 出失败的数据. 估计是因为迷之缓存. 这样让 laekov 茫然了很久, 查错也变得坑了起来. 这个集群的 slurm 版本比较早古 (2015). 据 harry 说在更新的版本中会直接报错了. 所以是时候换集群了(?\n","permalink":"/technical/5c630d/","summary":"花了一晚上修的一个 bug. 记录一下. 先讲结论再讲故事.\nslurmdbd 在更新 account 配置的时候, 有可能出现更新成功了, dump 出来是对的, 但跑程序失败 (requested resources not available) 的情况. 其中一个可能原因是 mysql 并没有成功写入, 于是认证失败. 解决方案是修改 slurmdbd 的配置文件, 使得其以 root 用户身份执行.\n故事是实验室有同学要赶 PLDI, 需要独占某一些节点, 并防止懵懂的小朋友和他们抢占节点后不释放. laekov 给出的解决方案是在 slurm 中单独划分一个队列, 并仅对指定 account 开放. 这个操作 laekov 在另一个集群上已经熟练使用了. 但是 laekov 在用 sacctmgr 配置好 account 和 user 之后, 尝试 srun 任务, 发现提示 resources not available. 之前遇到过这种情况, 通过重启 slurmdbd 解决了问题. 但是这次重启任何 slurm 组件都没有解决问题.\nlaekov 查看了 /var/log/slurm-llnl/slurmctld, 发现提示 part_policy_valid_acct: job's account not known, so it can't use this partition.","title":"slurmdbd 配置失败的坑"},{"content":"(背景是 laekov 因为迟迟没有等到黑色的 arm macbook 而转投了 x1c, 然后闲来无事升了个 win11\n然后发现想吐槽这个东西 怎么和 chromeos 如此 相似!\napp icon 放中间! chromeos!\n点开 电池 wifi 那个条, 跳出来的系统配置 panel! chromeos!\n然后四指左右划动切换 workspace 的动画直接是断的. 任务栏的一部分根本没有被渲染出来, 于是会在动画放完之后突然跳出来??????\nwindows 这个 ui 真是\u0026hellip; 明明是个 configurable 的东西, 非要搞得万众瞩目. 有毒吧.\nbtw 一个小细节, 升级完之后默认给我 enable 了 微软拼音. 我又不会打拼音啊喂. 而且在输入法 enabled 列表里面竟然没有这个选项? 解决方案是先加进去再删掉 ovo\n还是 kde 好.\nbtw, 吐槽一下 x1c 9gen 的键盘, g 键的键帽被我按掉下来了. 虽然可以按回去, 但只要敲这个键的左下部分就会又翘起来, 不爽ing.感觉是为了给小红点让位置而在键的机械强度上做了牺牲？回头有空再去联想保修一下 ovo\n","permalink":"/random/7af673/","summary":"(背景是 laekov 因为迟迟没有等到黑色的 arm macbook 而转投了 x1c, 然后闲来无事升了个 win11\n然后发现想吐槽这个东西 怎么和 chromeos 如此 相似!\napp icon 放中间! chromeos!\n点开 电池 wifi 那个条, 跳出来的系统配置 panel! chromeos!\n然后四指左右划动切换 workspace 的动画直接是断的. 任务栏的一部分根本没有被渲染出来, 于是会在动画放完之后突然跳出来??????\nwindows 这个 ui 真是\u0026hellip; 明明是个 configurable 的东西, 非要搞得万众瞩目. 有毒吧.\nbtw 一个小细节, 升级完之后默认给我 enable 了 微软拼音. 我又不会打拼音啊喂. 而且在输入法 enabled 列表里面竟然没有这个选项? 解决方案是先加进去再删掉 ovo\n还是 kde 好.\nbtw, 吐槽一下 x1c 9gen 的键盘, g 键的键帽被我按掉下来了. 虽然可以按回去, 但只要敲这个键的左下部分就会又翘起来, 不爽ing.感觉是为了给小红点让位置而在键的机械强度上做了牺牲？回头有空再去联想保修一下 ovo","title":"吐槽一下 windows 11"},{"content":" laekov 终于闲下来了并开了这么一篇一直都想写的文章. 之前摸鱼的时候在某乎, 某小破站上都有各种晒桌面的就蠢蠢欲动. 最近终于闲下来了可以用新买的 niz 打打不是正事的字了.\n实验室(办公室) laekov 很追求简洁的所以桌上除了俩显示器俩键盘以外没有什么大块的东西. 从左到右说. (laekov 在实验室有四台电脑.)\n最左边是夏天赖以生存的小风扇 (虽然从隔壁机房吹空调速冻效果其实更好).\n左边是 27 寸显示器, 连了一台从实验室各处捡垃圾凑出来的 windows 台式机在桌子底下. 机箱上面还堆了 gyc 赞助的 24 口千兆交换机给所有设备供网. 上面还有俩键盘盒子, 一个装了之前北大校赛赚来的黑轴键盘暂时没用了. 还有一个是空的.\n台式机的配置是奇怪的 i5-6500 + gtx 1080 ti.插了高二的时候 laekov 爹送 laekov 的生日礼物 ducky 混光青轴键盘. 虽然键盘挺老了甚至有些轴都开始咯吱响了但还是岗岗的好用. 因为这台电脑的主要用途是:\n挂微信 使用 M$ office 套件处理不得不用它们处理的东西 摸鱼(打游戏) 显示器后面有一个 hp 的 chromebook g1, 八百块从闲鱼收的, 介绍见这篇文章, 主要用途是组会的时候放 slides 和移动干活. 偶尔也用作掌托. 13.5mm 的厚度和 3k x 2k 的屏幕还是很香的.\n插线板后面有一个树莓派, 是某年的生日礼物. 上面放了一些神奇的东西, 可以用来调一些神奇的硬件, 比如折腾一下网络什么的, 不过最近用得不多.\n右边是个 11 代 nuc 连着一个 21:9 的 34 寸大屏. nuc 就在键盘左前方手机无线充电座下面. nuc 很小但是接口还插丰富的. nuc 上装了 debian 11 + kde 作为主要的工作环境. 比如写代码写论文写博客, 用 slack 处理工作消息用 tg 私人聊天. 总结一下 laekov 觉得 kde 才是真爱. 键盘是今年七夕礼物 niz 的 35 克静电容 . 因为前一阵用青轴打字太多手指疼所以从女朋友处敲诈了一把键盘哈哈. 这把白色键盘有巨丰富的 rgb 背光, 非常好看.\n鼠标就是随便买的便宜鼠标, 反正用得不多.\n34 寸显示器底下还能放一个 ipad 并用蓝牙键盘架起来了. ipad 的主要作用是听歌和写字板. 是 2019 年春节前买的初代支持 apple pencil 而且大碗便宜的 the ipad. 而且 air pods 还是和 apple 的设备配合起来更舒服.\n右边用 harry 的 tuna 贴纸贴了各种神奇的东西. 底下是 laekov 喜欢的一大片空白, 可以用来写写字上上螺丝啥的.\n最后一台电脑是作为某 a 公司实习生发的笔记本电脑, 塞在桌子底下了, 不过除了赶文章 ddl 的时候用来给组里公用放倒计时以外 laekov 平时并不会拿出来用 hhh.\n宿舍 宿舍比较小, 但因为有独占的公网 ip (动态) 所以还是放了一堆东西.\n左边中层是各种工具. bosch 的电动螺丝刀套装真香.\n底下是 laekov 高一的旧联想笔记本, 因为视频输出只支持到 1080p 所以被嫌弃了, 目前用作个人服务器, 跑着一些个人网络业务, 比如从外面连回学校的其中一个跳板, 目前 uptime 已高达 272 days.\n后面的一大坨线实在是没眼看, 但线太长了不会理 \u0026gt;_\u0026lt;\n屏幕是 aoc 的 27 寸 2k 屏, 接着 laekov 的 windows 游戏本.\nlaekov 用了十分猎奇的方法把笔记本放到了屏幕和屏幕支架之间的缝隙里面, 这样很省空间, 插 usb 设备也挺方便, 散热感觉也很好, 开外放的时候也不会一边耳朵爆炸. 唯一不方便的是要拿走的时候, 不过这种情况一年也发生不超过 10 次, 所以也还 ok. 键盘是随便买的 hp 茶轴, 它的背光是按键的时候才会亮的, 所以晚上睡觉的时候不用拔掉也不会影响大家睡觉, 非常科学. 但是声音还是挺响亮的.\n宿舍里用了一个小米的路由器来给两台电脑提供有线网. laekov 本来很开心千兆网口, 然后发现服务器和上行口都是百兆的. 千了个寂寞. 而且可能是校园网里有奇怪的东西, 这个路由器非常不稳定, 时不时会挂, 而且挂了之后需要手工重启.\n右边是喜闻乐见的小风扇和一大片空地. 以上.\n","permalink":"/random/7074ea/","summary":"laekov 终于闲下来了并开了这么一篇一直都想写的文章. 之前摸鱼的时候在某乎, 某小破站上都有各种晒桌面的就蠢蠢欲动. 最近终于闲下来了可以用新买的 niz 打打不是正事的字了.\n实验室(办公室) laekov 很追求简洁的所以桌上除了俩显示器俩键盘以外没有什么大块的东西. 从左到右说. (laekov 在实验室有四台电脑.)\n最左边是夏天赖以生存的小风扇 (虽然从隔壁机房吹空调速冻效果其实更好).\n左边是 27 寸显示器, 连了一台从实验室各处捡垃圾凑出来的 windows 台式机在桌子底下. 机箱上面还堆了 gyc 赞助的 24 口千兆交换机给所有设备供网. 上面还有俩键盘盒子, 一个装了之前北大校赛赚来的黑轴键盘暂时没用了. 还有一个是空的.\n台式机的配置是奇怪的 i5-6500 + gtx 1080 ti.插了高二的时候 laekov 爹送 laekov 的生日礼物 ducky 混光青轴键盘. 虽然键盘挺老了甚至有些轴都开始咯吱响了但还是岗岗的好用. 因为这台电脑的主要用途是:\n挂微信 使用 M$ office 套件处理不得不用它们处理的东西 摸鱼(打游戏) 显示器后面有一个 hp 的 chromebook g1, 八百块从闲鱼收的, 介绍见这篇文章, 主要用途是组会的时候放 slides 和移动干活. 偶尔也用作掌托. 13.5mm 的厚度和 3k x 2k 的屏幕还是很香的.\n插线板后面有一个树莓派, 是某年的生日礼物. 上面放了一些神奇的东西, 可以用来调一些神奇的硬件, 比如折腾一下网络什么的, 不过最近用得不多.","title":"laekov 的桌面环境配置"},{"content":" laekov 在 3月1号下午 3点1分 开源了 FastMoE 系统的代码。合作者是 KEG 实验室 的 xptree 和 sengxian。\n简单讲，MoE 模型就是把神经网络里的一层复制若干份，称它们为专家（experts）。在计算时，引入一个额外的门（gate）网络来对于每个输入决定它被哪个专家所计算。\n举个例子，一个 nlp 模型里的动词和名词可能会被不同的 expert 处理。这样可能会得到更精准的模型。模型部分 laekov 不太懂，不做更多讨论。\nFastMoE 这个名字是 laekov 起的，包含了 laekov 关注的两层问题：\n训练这样的模型怎么训得快（fast training）。 如何使得这个系统像吃快餐一样（fastfood-like）开箱即用。 训练性能 通常，expert 网络是一个 MLP，即多层全连接，即矩阵乘。一个值得注意的问题是，gate 会使得一个 batch 被打散。若简单地用 pytorch 来实现，则会导致 GeMM 运算降级为 GeMV 运算，这对 GPU 这样的现代并行计算设备来说是十分不友好的。测试发现朴素的实现在 V100 上仅能达到 500GFLOPs, 即峰值性能的 3% 左右。\n注意到 expert 的数量不会太多，故 batch size / expert，即平均每个 expert 处理的 batch 中的元素依然是一个较大的值。因此考虑对 batch 中的 samples 按照 expert 进行重排，每个 expert 依然以 batch 形式处理输入。这样会更充分地利用硬件资源。\n另外考虑到当 expert 数量足够大（如 64），则可以挖掘 expert 之间的并行性，即使用不同的 cuda stream 来执行这些矩阵乘，也能得到不错的加速效果。\n综合以上两点，laekov 在单 GPU 上实现了 reorder (在代码里被称为 scatter 和 gather）算子，并用 cublas 定制了并行的多个全连接层同时进行前向/反向计算的算子，从而达到了 mlp 层单轮迭代比 PyTorch 快至多 47x 的优化效果。\nlaekov 发现 scatter-expert-gather 模式也可以很容易地将多 GPU 之间的并行计算不同的 expert 的需求融合进来。即在本地 scatter 之后再进行一次全局的 scatter, gather 也类似。结合 nccl 最新推出的 p2p 和 all2all 通信支持，FastMoE 可以在多个 gpu 的显存里放不同的 expert，并让输入被任意 expert 计算。\n然而这里的 all2all 通信模式对于树状的 pcie 连接和网络拓朴十分不友好。目前 laekov 发现仅在 nvlink 的节点内部有较高的性能。其它情况下通信是主要瓶颈。\n系统设计 由于目前主流的框架是 pytorch, 故 FastMoE 的实现形式是 PyTorch 的一个 cuda 插件。又由于目前大家喜欢使用 Megatron 来训练自己的 transformer 模型，故 laekov 花了较多精力来支持 megatron. 目前可以做到在 megatron 代码中仅加入两行代码就能用上 fastmoe.\n具体来讲，FastMoE 的 python 部分分为三层。\n核心层是通用的 FMoE模块，它实现了 scatter-expert-gather 的计算模式。但是 expert 由用户定义，可以是任何神经网络模块，它的输入是目标为某个 expert 的整个 batch 的数据，输出是这个 batch 对应的输出。它也包含了可选+可定制的 Gate 网络。\n模型层是 FMoETransformerMLP 模块，它利用前文提到的优化过的线性层 FMoELinear 来实现了一个计算比较快的 Transformer 中的两层 MLP 模块，这里支持了自定义激活函数 activation ，也支持自定义中间隐层的大小，但是总的网络结构在这一层是固定的了。\n支持 Megatron 的应用层是 MegatronMLP 层和 fmoefy 函数。MegatronMLP 针对 Megatron 对于 mlp 层的接口进行了适配，而 fmoefy 函数实现了将 megatron 的 model 中的 mlp 层用 MegatronMLP 进行替换。此外，为了定制化同步参数，FastMoE 提供了一个额外的 DDP 模块来代替 Megatron 或 PyTorch 的 DDP，通过一些独特的 tag 来决定梯度同步的范围。\n对于 Megatron 模型的使用者，可以用应用层的接口，直接魔改 megatron. 对于其它 transformer 玩家，可以使用模型层的接口，接入自己的 transormer 代码。对于更 general 的 moe 网络玩家，可以使用核心层的接口将任何网络变成 MoE 网络。\n感想 \u0026amp; future work laekov 从 2020 年 12 月开始研究 moe, 并向 xptree 提供了一些基础的 idea 和 sample, 由 xptree 在 transformer-xl 的基础上开发了初版可以跑的 moe 模型及代码。laekov 在一月整理了 prototype 的代码，初步形成了 fastmoe 的框架，在二月开发了 fastmoe 的主体。 sengxian 贡献了单元测试。laekov 和 xptree 和 sengxian 一起在 megatron 上进行了辛苦的 loss curve 的验证与对齐。xptree 承担了与智源宣传组的对接工作。nina 小姐姐在开源前夜绘制了 fastmoe 的 logo. laekov 在此对所有支持了此项目的老师和同学表示感谢。\nlaekov maybe 会被 challenge 说为什么辛辛苦苦奋战几个月写出来的东西不先拿去投 paper 而是先搞开源，会不会开源后被友商抢走，会不会博士毕不了业qwq。laekov 认为 FastMoE 目前更像是某种基础设施（轮子）。要致富，先修路。laekov 认为把这样类似于道路的基础设施开源，可以减少做科研的众人重复的劳动，从而有动力创造更多有价值的东西。\nlaekov 将会继续研究分布式 moe 训练系统及性能优化的路径。\nHistorical Comments laekov at 2021-03-01T20:57:27 写完这个顺手修了一下自己博客的 github 第三方登录，看着自己 2015 年写的 php 代码，心情复杂。\nhefaming at 2021-03-02T09:37:55 赞\nhefaming at 2021-03-02T09:37:55 赞\nmmmqaq at 2021-03-05T14:36:15 orz\n","permalink":"/technical/6b400a/","summary":"laekov 在 3月1号下午 3点1分 开源了 FastMoE 系统的代码。合作者是 KEG 实验室 的 xptree 和 sengxian。\n简单讲，MoE 模型就是把神经网络里的一层复制若干份，称它们为专家（experts）。在计算时，引入一个额外的门（gate）网络来对于每个输入决定它被哪个专家所计算。\n举个例子，一个 nlp 模型里的动词和名词可能会被不同的 expert 处理。这样可能会得到更精准的模型。模型部分 laekov 不太懂，不做更多讨论。\nFastMoE 这个名字是 laekov 起的，包含了 laekov 关注的两层问题：\n训练这样的模型怎么训得快（fast training）。 如何使得这个系统像吃快餐一样（fastfood-like）开箱即用。 训练性能 通常，expert 网络是一个 MLP，即多层全连接，即矩阵乘。一个值得注意的问题是，gate 会使得一个 batch 被打散。若简单地用 pytorch 来实现，则会导致 GeMM 运算降级为 GeMV 运算，这对 GPU 这样的现代并行计算设备来说是十分不友好的。测试发现朴素的实现在 V100 上仅能达到 500GFLOPs, 即峰值性能的 3% 左右。\n注意到 expert 的数量不会太多，故 batch size / expert，即平均每个 expert 处理的 batch 中的元素依然是一个较大的值。因此考虑对 batch 中的 samples 按照 expert 进行重排，每个 expert 依然以 batch 形式处理输入。这样会更充分地利用硬件资源。","title":"FastMoE: 一个高效 MoE 模型训练系统 - 初版之路"},{"content":"由于众所不知的原因 laekov 在一处办公环境使用自己的 chromebook 进行办公.\n之前的博客提到 laekov 的 chromebook 具有一块 3200x1800 的高分(瞎眼)屏. 而 laekov 在办公室开心地借来了一块和实验室那块看起来一样的 34 寸的带鱼屏, 然而插上之后才发现它的分辨率竟然是 2560x1080, 完全被 13 寸的笔记本屏幕给包含了. 本着屏幕 dpi 不重要, 面积才是王道的思路, laekov 十分容易地 disable 了笔记本的屏幕, 单独使用一整块 34 寸屏幕来进行工作.\nlaekov 在经历了 chromeos 的 ro rootfs 各种无语之后, 终于决心使用 crouton 的 xfce 环境作为自己的主力工作环境, 并配上了 i3lock 锁屏和熟悉的 urxvt.\n然后问题来了: laekov 要抱着 chromebook 去开会! 当 laekov 拔掉 type-c dock, 看向 13 寸小屏幕的时候, 多年前在 laekov 的 (已经死掉的) mbp 上装 kde 之后出现的神奇一幕又出现了! 所有东西变得奇小无比, 需要配合放大镜才能分辨出屏幕上的字是 1 还是 l.\n经过查资料发现 xfce4 有一项配置在 appearance/fonts/dpi/custom dpi settings, 通过将它的值在 96 和 192 之间切换即可达到 GDK_SCALE 的效果. 而且 chrome 浏览器 (没错, chromeos 里 chroot 出来的 xfce4 里面跑着的 linux 版的 chrome 浏览器) 会实时根据这个值进行更新. (遗憾的是 urxvt 和 fcitx 等程序需要重启)\n于是经过学习 laekov 获得了以下脚本来一键调整 dpi.\nxfconf-query -c xsettings -p /Xft/DPI -s $1 然而新的问题又出现了: 某些时候内置屏幕会自动开启 (即使在合盖状态), 此时 34 寸屏幕的 screen range 会变成巨大的 3200x1800. laekov 需要手工开盖合盖来使它恢复正常.\nlaekov 发现可以在 xfce4 里禁用 displays/use display. 所以是否使用 xrandr 就可以解决问题呢? 答案是肯定的. laekov 摸了一下就摸出了一个脚本.\nxrandr -d :1 --output eDP-1 --off 至此似乎就可以一键进行 dpi 的切换了耶.\n","permalink":"/technical/2f6dcb/","summary":"由于众所不知的原因 laekov 在一处办公环境使用自己的 chromebook 进行办公.\n之前的博客提到 laekov 的 chromebook 具有一块 3200x1800 的高分(瞎眼)屏. 而 laekov 在办公室开心地借来了一块和实验室那块看起来一样的 34 寸的带鱼屏, 然而插上之后才发现它的分辨率竟然是 2560x1080, 完全被 13 寸的笔记本屏幕给包含了. 本着屏幕 dpi 不重要, 面积才是王道的思路, laekov 十分容易地 disable 了笔记本的屏幕, 单独使用一整块 34 寸屏幕来进行工作.\nlaekov 在经历了 chromeos 的 ro rootfs 各种无语之后, 终于决心使用 crouton 的 xfce 环境作为自己的主力工作环境, 并配上了 i3lock 锁屏和熟悉的 urxvt.\n然后问题来了: laekov 要抱着 chromebook 去开会! 当 laekov 拔掉 type-c dock, 看向 13 寸小屏幕的时候, 多年前在 laekov 的 (已经死掉的) mbp 上装 kde 之后出现的神奇一幕又出现了! 所有东西变得奇小无比, 需要配合放大镜才能分辨出屏幕上的字是 1 还是 l.","title":"HiDPI on XFCE4, Chromebook"},{"content":"不久之前听说可能要出去背锅, 然而自从 macbook 死亡之后就一直在用实验室的台式机/宿舍买的新的游戏本. 都不太适合背着去干活, 于是考虑买一台轻薄的工作笔记本.\n看了一些 ryzen 4 代的轻薄本, 比如 x13, 战x, 灵耀14, 什么的. 然而因为贵所以买不起没买. 后来某天逛闲鱼的时候发现了 chromebook 很便宜, 于是一番研究之后买了个二手 hp g1 chromebook, 1k 块不到.\n转身围观一下这台本子，深灰色金属壳还挺高端。最厚的地方只有 12mm，几乎满足了我对薄本的所有想象，但是拿在手里挺沉，可能是压扁了的重型本。 cpu 是六代 m5 skx, 四个物理核默认只开了两个，8 GB mem + 32 GB ssd, 多开几个 chrome 窗口应该都挺好的。最惊人的是居配了一块 3200x1800 的屏幕，观感很不错。 然而还是有一些问题的。屏幕边框宽到跑马车，毕竟是便宜本，键盘键程短到手指疼，只能轻轻打字。触摸板比较小，而且可能由于前任主人用得比较多，所以油油的，而且有点松。考虑之后买个触摸板膜。接口方面带了一个 usb a 两个 usb c包括充电，还有耳机口。考虑到现在 typec 的本子到处飞，转接头很普遍，这也还ok。这个 cpu 最高支持到 4k 屏幕，想要外接显示器也没有问题，赞。\n软件方面自然是 chrome os，费了一番力来搞开开发者模式用 crounton 装了一个 debian, 和搞上 play store. 比较无语的是 play store 并不用 chrome os 里面设置的 socks5 代理，于是只好临时搞了一个二层的有隧道的网关，才成功搞开了 play store, 然后立即在里面下了一个 android 版本的 ss, 然后用它就能给 android app 供应网络了。\n然后发现微信和腾讯会议都 not available in play store, 听说要开 native bridge, 于是开始研究咋用一个叫 aroc 的仓库来给 chrome os 带的 android 搞 root, 发现脚本有各种问题，会把整个 android 子系统都给搞坏，甚至还 chrome os recovery 了好几次。感到悲伤。 后来打开了小米商场，发现直接下 apk 就能安装？？？？？\n然而微信和腾讯会议对 x86 android 的支持真是垃圾，根本登不进去。腾讯会议加入会议死机，共享屏幕死机。强调一遍：腾讯公司是开源软件在中国发展的最大阻碍。\n然而 zoom 的国产版本瞩目用起来就毫无障碍，telegram 和 mendeley 也运行得很好。\n原生软件方面主要就是一个巨大的 chrome, 甚至在可以在 chrome 里使用一个还不错的 crosh 当 terminal emulator, 按一下全屏键之后就没有快捷键冲突问题了， ssh 到服务器上就像一个普通的本子一样，好评。 电池方面这个本子不太行。没有完整测过续航，系统的剩余估计在 2h-8h 之间波动，估计 os 上省电还是做了不少工作的，但是 m5 这个 cpu 对于 chromebook 的设计可能还是太强了一点。\n（未完待续）\n","permalink":"/random/90c0d3/","summary":"不久之前听说可能要出去背锅, 然而自从 macbook 死亡之后就一直在用实验室的台式机/宿舍买的新的游戏本. 都不太适合背着去干活, 于是考虑买一台轻薄的工作笔记本.\n看了一些 ryzen 4 代的轻薄本, 比如 x13, 战x, 灵耀14, 什么的. 然而因为贵所以买不起没买. 后来某天逛闲鱼的时候发现了 chromebook 很便宜, 于是一番研究之后买了个二手 hp g1 chromebook, 1k 块不到.\n转身围观一下这台本子，深灰色金属壳还挺高端。最厚的地方只有 12mm，几乎满足了我对薄本的所有想象，但是拿在手里挺沉，可能是压扁了的重型本。 cpu 是六代 m5 skx, 四个物理核默认只开了两个，8 GB mem + 32 GB ssd, 多开几个 chrome 窗口应该都挺好的。最惊人的是居配了一块 3200x1800 的屏幕，观感很不错。 然而还是有一些问题的。屏幕边框宽到跑马车，毕竟是便宜本，键盘键程短到手指疼，只能轻轻打字。触摸板比较小，而且可能由于前任主人用得比较多，所以油油的，而且有点松。考虑之后买个触摸板膜。接口方面带了一个 usb a 两个 usb c包括充电，还有耳机口。考虑到现在 typec 的本子到处飞，转接头很普遍，这也还ok。这个 cpu 最高支持到 4k 屏幕，想要外接显示器也没有问题，赞。\n软件方面自然是 chrome os，费了一番力来搞开开发者模式用 crounton 装了一个 debian, 和搞上 play store. 比较无语的是 play store 并不用 chrome os 里面设置的 socks5 代理，于是只好临时搞了一个二层的有隧道的网关，才成功搞开了 play store, 然后立即在里面下了一个 android 版本的 ss, 然后用它就能给 android app 供应网络了。","title":"Chrome book 初体验"},{"content":" 这个事情的 motivation 是被 harry 拉去上了一门叫 “高等计算机网络“ 的课, 而 harry 和 gyc 是本科生网络原理课的助教, 于是大作业的内容就是抱着 harry 的大腿给小朋友们做的硬件实验做一个测试平台. (harry: 你的老本行, 造 oj) 因为 laekov 的硬件水平四舍五入等于没有 (gg) 所以负责写前端.\nVUE + ChartJS = gg laekov 多年没写过前端了, 没想到 angular 都已经 gg 了. 在 \u0026ldquo;尽量轻量化, 以后烧进 flash\u0026rdquo; 的指导思想 (还有 harry 的 push) 下选择了 vue.\n功能里有一个重要的需求是画一张同学们的路由器带宽-帧大小的曲线. 要是有 matplotlib 就好了, 然而既然是在写 web 就只能搞 js 的轮子了.\n然而 chartjs 需要给它一个生的 canvas DOM object. 但是 vue 的制造者似乎就是非常不喜欢开发者拿生的 DOM, 甚至把 document 对象都给屏蔽了. (????)\n还好 vue 提供了 $ref 勉强能搞到生的 dom. 然后新的问题来了, 如何在 v-for 遇到 \u0026ldquo;折线图\u0026rdquo; 这种元素的时候去让 chartjs 画个图? 一个问题是 v-for 执行过程中 DOM 元素是不完整的. 这时候拿 chartjs 去画图会报错. 解决方案自然是, setTimeout 一会再画\u0026hellip;\n虽然 laekov 的前端水平是很山寨的, 不过总之参照 vtune 的 web 前端糊出了一个 tanlabs-speed-tester 的前端 like this.\n为啥 ping 包发不出去啊? 请您配 netns 临近期末报告, harry 终于把测速硬件造好了, laekov 一直以为自己写个 html 页面就完事了, 直到 harry 告诉 laekov 前面的配 rip, ping 也都是 laekov 的工作.\n于是菜 laekov 开始 xio 习如何给 linux 配 ip.(雾\n如题所示, laekov 发现的第一个问题是无法通过一根网线从一个端口 ping 另一个端口, harry 告诉 laekov 原因是 kernel 会觉得 laekov 在瞎搞, 并试图把包直接发到 lo.\n这个时候就需要 netns - network namespace. 这个功能可以把不同的 interface 关进不同的 namespace, 相当于拥有了若干个插着不同 interface 的机器.\n然而发现 gyc 配的 zynq petalinux kernel 并没有 netns 支持? 于是 harry 教 laekov 在 linux kernel 源码里 make menuconfig, 然后发现怎么 config 没生效??? gyc: 请使用 petalinux-config -c kernel. 星.\n有了 netns 之后就可以把不同的 interface 分隔开用了, 也可以 ping 通网线了.\n怎么发路由? 请您配鸟. 什么鸟东西? 同学的路由器需要支持 RIP 协议收发路由.\n虽然 laekov 本科的时候也造过 RIP, 但是时隔多年显然是无法使用的, 而且 laekov 显然没有好好读 RFC. (harry: pia) 在 harry 的指导下从 jiegec 那里抄来了一份 bird 的 RIP 配置. bird 是一个集成了很多 protocol 的网络工具, 可以通过配置的方式来发路由. 只要能编译出一个 arm 上的 bird, 问题似乎就解决了?\nbird 使用了 autoconf. 而 petalinux 的 build 工具也支持 autotools. 于是 laekov 开心地写了一个 bbfile, 然后开始 petalinux-build. 然后就发现, ???, 为啥 automake 挂了? 为啥你没有 AC_MSG_ERROR? 是不是缺了什么依赖包? (尝试在 host 上编译 bird 的时候仿佛 apt 了一大堆东西比如 ncurses). 折腾了一天的 bird 无果. 最后只好走了另一条路,\nCC=arm-linux-gnueabi-gcc-8 LDFLAGS=\u0026#39;-static -static-libgcc\u0026#39; ../configure --host=arm-linux-gnueabi --disable-client 虽然并不优美但是总之能编译出能在嵌入式 arm 系统里跑的 bird 和 birdcl 了. birdcl 是一个没有 ncurses 所以不能按上键和 tab 自动补全但是还算能用的 birdc (一个控制 bird 的类 shell). 开心地跑起来, 发现没有收到路由??? 检查配置文件是对的啊??? log 也打出来了啊? 为啥 tcpdump 不出来呢?\n因为怀疑是 bird2 和 jigec 的 bird1 配置文件不兼容 (虽然魔改了但是不知道魔改得对不对), 于是 laekov 果断 git checkout v1.6.3 重新编译然后直接用 jiegec 的配置文件, 果然 work 了! 赞.\n被鸟打爆了? 鸟被打爆了? 一边开发测试仪一边就有同学来测试测试仪了. 然而当 laekov 在 RIP 里面开心地打了一个 200 之后同学表示他们只收到了五条路由? 同学拿出了自己的测试脚本告诉 laekov, \u0026ldquo;你看, 我自己每发一条睡一会, 可以发出 2k 条路由!\u0026rdquo; laekov 表示慌张, 同学表示是不是 laekov 的鸟发路由发得太快了, 毕竟同学们是在自己造的 CPU 上跑 RIP, 同学的路由器上的 LED 还在疯狂闪烁(表示丢包了). 于是 twd2 发出指示: 请给鸟限速.\n然而某科学的喵喵鸟由于 rust 交叉编译的原因一直牌咕咕的状态. 所以 laekov 只能魔改普通鸟. laekov 在鸟发包的时候加了 usleep, 然后发现睡时间短了没用, 睡久了 birdcl 就无法通过 unix socket 控制鸟了. 十分完蛋.\n此时 twd2 和 gyc 发现 iproute2 里面有一个功能叫 tc, 全称叫 traffic control, 可以对 interface 进行限速! twd2 还很良心地向 laekov 提供了一段神秘 tc 代码, 据称可以将端口发送速率限制到 1.4Mbps.\n然而 gyc 的 petalinux 依然没有 tc 支持. gyc 向 laekov 发送了一段神秘的 linux kernel config, 并告诉 laekov 只要配上它们就可以了.\nlaekov 在配置 kernel 的时候不幸 menuconfig 卡死了, 杀掉之后发现所有 config 都没了, 只好从头再配.\nlaekov 发现经常有 menuconfig 选项并没有出现在列表里, 原因是它们的依赖没有被满足. 于是工具人 laekov 熟练掌握了递归配置 linux kernel config 依赖的 function.\n加上一堆 gyc 指定的一堆 tcp congestion control 的 kernel config 之后, tc 脚本的错误信息发生了一些变化: failed to talk to kernel???\n于是 laekov 从一个(已经找不到了)的 github kernel config commit 里把一些别的神秘的 =y 的 config 都给配上了, 然后 tc 就 work 了! 终于可以给鸟限速了.\n然后刚才那组同学回来测, 发现还是无法收到全部路由? laekov 尝试每次让鸟随机发一些路由, 而不是按顺序发, 虽然可以缓慢地收到了, 但是感觉不太对?\n几天之后, 同学 report: 他们 drop 了所有包含 16 条以上 RIP 记录的 RIP 包. 所以所有整个的 RIP 包 (25条) 都被 drop 了. 所以只剩 n mod 25 条记录可以被写入. laekov: ????????\njiegec 挂科了 由于喵喵鸟彻底咕了, 所以 laekov 被 twd2 push 从真实的路由表里拿路由, 而不是发一些乱七八糟的东西. 于是 laekov 从 twd 那里拿了一份路由表配置到自己的端口上, 并写了一个随机 ip 生成器来生成指定子网里的 ip 以供 ping 测试.\n然后当 laekov 接上 jiegec 的软路由参考实现来测试的时候, 神奇的事情发生了: 一条 /23 的记录下随机生成的某些 ip 无法被正确 ping 通!??? jiegec 的 router 打出 log: mask len: 24.\nlaekov 于是检查了 jiegec 的代码, 发现 jiegec 的 mask 竟然是 len = 32 - __builtin_clz(mask) ??? 而 mask 是 0x00feffff. 所以 jiegec 的 router 处理所有非 8 的整数倍的 mask 都是错的. (为此 debug 了一下午)\n后来听说 jiegec 用的所有测例都是 8 的整数倍 mask. \u0026gt;_\u0026gt;\nSummary 在造测试仪的过程中学习了 buildroot 之外的另一个嵌入式 linux 编译工具, petalinux, 虽然难用, 但是至少可以配置 kernel config.\n学习了如何使用 iproute 配 netns 和 tc.\n学习了交叉编译鸟的时候的一些骚操作, 比如 static abi.\n学习了新时代的前端框架 vue.\n涨姿势了.\n","permalink":"/technical/3b42dc/","summary":"这个事情的 motivation 是被 harry 拉去上了一门叫 “高等计算机网络“ 的课, 而 harry 和 gyc 是本科生网络原理课的助教, 于是大作业的内容就是抱着 harry 的大腿给小朋友们做的硬件实验做一个测试平台. (harry: 你的老本行, 造 oj) 因为 laekov 的硬件水平四舍五入等于没有 (gg) 所以负责写前端.\nVUE + ChartJS = gg laekov 多年没写过前端了, 没想到 angular 都已经 gg 了. 在 \u0026ldquo;尽量轻量化, 以后烧进 flash\u0026rdquo; 的指导思想 (还有 harry 的 push) 下选择了 vue.\n功能里有一个重要的需求是画一张同学们的路由器带宽-帧大小的曲线. 要是有 matplotlib 就好了, 然而既然是在写 web 就只能搞 js 的轮子了.\n然而 chartjs 需要给它一个生的 canvas DOM object. 但是 vue 的制造者似乎就是非常不喜欢开发者拿生的 DOM, 甚至把 document 对象都给屏蔽了. (?","title":"在 ThinRouter 上开发网络（原理课）硬件测试仪软件部分的记录和一些经验"},{"content":"最近在某个公用集群上手工编译了 htop 给小伙伴们用. 然后发现大家的用户名都是学号, htop 并不能把用户名显示全, 于是追责麻烦. 然而 htop 似乎并不支持改列宽, 于是就自己去看代码改列宽了.\n以下基于 htop 的 2.2.0 release 版本.\n表项的宽度在 Process.c 里的 474 行. 这玩意是 hard coded 的 sprintf 的位宽.\n表头在 linux/LinuxProcess.c 里的 205 行, 修改方法是在 title=\u0026quot;USER \u0026quot; 后面再加几个空格. (hard coding 真是让人崩溃啊)\n然后可能会编译的时候说 struct Process has no member isKernelThread. 修的方法是在这个 c 文件的 146 行加括号. 注意不能改 .h 文件, 因为 .h 是在 make 的时候从 c 代码里抽取出来生成的 (什么鬼玩意)\n","permalink":"/technical/b5a3f7/","summary":"最近在某个公用集群上手工编译了 htop 给小伙伴们用. 然后发现大家的用户名都是学号, htop 并不能把用户名显示全, 于是追责麻烦. 然而 htop 似乎并不支持改列宽, 于是就自己去看代码改列宽了.\n以下基于 htop 的 2.2.0 release 版本.\n表项的宽度在 Process.c 里的 474 行. 这玩意是 hard coded 的 sprintf 的位宽.\n表头在 linux/LinuxProcess.c 里的 205 行, 修改方法是在 title=\u0026quot;USER \u0026quot; 后面再加几个空格. (hard coding 真是让人崩溃啊)\n然后可能会编译的时候说 struct Process has no member isKernelThread. 修的方法是在这个 c 文件的 146 行加括号. 注意不能改 .h 文件, 因为 .h 是在 make 的时候从 c 代码里抽取出来生成的 (什么鬼玩意)","title":"如何修改 htop 中一列的宽度"},{"content":"这件事情的起因是双 11 的时候买了一箱 18 瓶不同口味的 rio. 然后一直觉得打乱这箱 rio 有点逼死强迫症. 直到今天终于决定开始喝它们.\n然后又想到每种口味只有一瓶, 喝完之后就并不能复现实验来 rewind 某一种口味到底怎么样. 于是灵机一动决定写篇 blog 把每种味道都记录一下.\n后来又购买了更多新的 rio, 于是持续更新中。\n无糖系列 拿到四种口味 (准确说这不属于那 18 瓶) 因为无糖所以都不好喝. 一股不快乐的阿斯巴甜味.\n白桃: 海星 葡萄: 比白桃难喝一点 柠檬: 酸 橙子: 酸 有糖普通系列 这个系列通常是纯色背景，度数在 3 度左右。\n白桃接骨木花: 虽然是赠品但是似乎还不错 是甜的\n玫瑰荔枝白兰地: 玫瑰香味+荔枝甜味 没啥酒味 挺好喝\n白桃白兰地: (组合数学???) 比较常见的口味. 桃子味浓, 甜!\n香槟: 有一点迷惑的水果甜味, 香槟味不是很浓. 但是甜啊!\n乐橘乌龙: 闻起来有点橘子的酸酸味, 喝起来倒是偏甜, 比较清爽. 还挺好喝.\n百香果伏特加: 果味纯正, 伏特加有一丢丢苦.\n菠萝伏特加：菠萝味！超好喝。甜甜的。\n芒果伏特加：闻/喝起来是那种没熟的青芒果的味。不太喜欢。\n白葡萄味：连酒名都不标了？真的是果味汽水，类似于水晶葡萄。\n白桃接骨木花：又一个没有酒名的汽水。花香味还挺好喝的。\n黄金奇异果味：汽水，弥猴桃味有点冲。\n香草冰淇淋风味：超好喝！！！ 香香甜甜的\n萌檬红茶鸡尾酒：冰红茶的茶味加强加酒版\n西柚伏特加：酒如其名。感觉有点酸。比较像酒。\n热红酒（冬季限定？）：一股二锅头味\n柠檬伏特加: 如其名, 柠檬水味, 偏甜, 伏特加味不浓.\n草莓乳酸菌：light 版的草莓伏特加，依然一股草味，但是要淡一些。所以草莓之所以叫草莓，是因为。。？？？\n强爽系列 一个酒精度数比较大的系列，后来又发现了新作，故单列为一个系列。\n强爽白桃伏特加: 强爽系列v1. 有点苦. 桃子味还是挺浓的. 强爽柠檬伏特加: 这个就完全不甜了, 又酸又苦, 洒劲也挺大的. 强爽葡萄伏特加: 酒味挺大的， 葡萄味也很大，甜中带点苦 清爽系列 一个新的系列。继续喝\n草莓伏特加：闻起来一股草莓味，喝起来一股草味 青苹果伏特加：苹果芬达味，好喝的！ 青橘伏特加：真的是青橘味 Historical Comments laekov at 2021-11-11T14:48:54 补充: 误买了两罐无糖白桃, 不甜, 不好喝. 发现 2:1 兑可乐后味道不错.\nlaekov at 2022-10-28T22:54:21 酸梅汤朗姆：妈耶，就是何其正酸梅汤的味道。你问我朗姆？那是什么？\n","permalink":"/random/118ba5/","summary":"这件事情的起因是双 11 的时候买了一箱 18 瓶不同口味的 rio. 然后一直觉得打乱这箱 rio 有点逼死强迫症. 直到今天终于决定开始喝它们.\n然后又想到每种口味只有一瓶, 喝完之后就并不能复现实验来 rewind 某一种口味到底怎么样. 于是灵机一动决定写篇 blog 把每种味道都记录一下.\n后来又购买了更多新的 rio, 于是持续更新中。\n无糖系列 拿到四种口味 (准确说这不属于那 18 瓶) 因为无糖所以都不好喝. 一股不快乐的阿斯巴甜味.\n白桃: 海星 葡萄: 比白桃难喝一点 柠檬: 酸 橙子: 酸 有糖普通系列 这个系列通常是纯色背景，度数在 3 度左右。\n白桃接骨木花: 虽然是赠品但是似乎还不错 是甜的\n玫瑰荔枝白兰地: 玫瑰香味+荔枝甜味 没啥酒味 挺好喝\n白桃白兰地: (组合数学???) 比较常见的口味. 桃子味浓, 甜!\n香槟: 有一点迷惑的水果甜味, 香槟味不是很浓. 但是甜啊!\n乐橘乌龙: 闻起来有点橘子的酸酸味, 喝起来倒是偏甜, 比较清爽. 还挺好喝.\n百香果伏特加: 果味纯正, 伏特加有一丢丢苦.\n菠萝伏特加：菠萝味！超好喝。甜甜的。\n芒果伏特加：闻/喝起来是那种没熟的青芒果的味。不太喜欢。\n白葡萄味：连酒名都不标了？真的是果味汽水，类似于水晶葡萄。\n白桃接骨木花：又一个没有酒名的汽水。花香味还挺好喝的。\n黄金奇异果味：汽水，弥猴桃味有点冲。\n香草冰淇淋风味：超好喝！！！ 香香甜甜的","title":"RIO 各种口味品尝 log"},{"content":"在宿舍买了一台新显示器, 2k.\n发现 3337u 和 6400m 都不支持 2k 输出, 于是愉快地买了个 windows 游戏本当前端用.\n因为有 rtx 2060 而且想打游戏, 所以只能用 windows 了, 最近又很不喜欢双系统 (因为要重启很麻烦)\n于是找到了解决方案: 在 3337u 上开个 vnc server, 在 windows 里连过去.\n虽然内网是千兆但是破笔记本迷之降速到了百兆, 于是网络也并不快. 要命的是 super 键会被 windows 吃掉从而无法使用 kde 里面炫酷的窗口搬移特技.\n想起了陈年老相好 dwm. 于是又在这台 ideapad 上用上了 dwm, 并愉快地自己修改代码配置了 colorscheme 和各种神奇的热键.\n然后用得好好的 fcitx 就跪了. ctrl + 空格打死也加载不出来输入法.\n尝试了各种重启重装 fcitx-configure 和删配置文件, 都没用. 一脸茫然.\n各种搜索尝试之后发现管用的是在 vnc 的 xstartup 里面加上\nexport GTK_IM_MODULE=\u0026#34;fcitx\u0026#34; export QT_IM_MODULE=\u0026#34;fcitx\u0026#34; export XMODIFIERS=\u0026#34;@im=fcitx\u0026#34; 然后就能解决问题了. very gg\u0026hellip;\n","permalink":"/technical/0fbb2f/","summary":"在宿舍买了一台新显示器, 2k.\n发现 3337u 和 6400m 都不支持 2k 输出, 于是愉快地买了个 windows 游戏本当前端用.\n因为有 rtx 2060 而且想打游戏, 所以只能用 windows 了, 最近又很不喜欢双系统 (因为要重启很麻烦)\n于是找到了解决方案: 在 3337u 上开个 vnc server, 在 windows 里连过去.\n虽然内网是千兆但是破笔记本迷之降速到了百兆, 于是网络也并不快. 要命的是 super 键会被 windows 吃掉从而无法使用 kde 里面炫酷的窗口搬移特技.\n想起了陈年老相好 dwm. 于是又在这台 ideapad 上用上了 dwm, 并愉快地自己修改代码配置了 colorscheme 和各种神奇的热键.\n然后用得好好的 fcitx 就跪了. ctrl + 空格打死也加载不出来输入法.\n尝试了各种重启重装 fcitx-configure 和删配置文件, 都没用. 一脸茫然.\n各种搜索尝试之后发现管用的是在 vnc 的 xstartup 里面加上\nexport GTK_IM_MODULE=\u0026#34;fcitx\u0026#34; export QT_IM_MODULE=\u0026#34;fcitx\u0026#34; export XMODIFIERS=\u0026#34;@im=fcitx\u0026#34; 然后就能解决问题了.","title":"时隔六年, 我怎么又在修 fcitx 了"},{"content":"% Pipedream - Generalized Pipeline Parallelism for DNN Training % Authors from MSR + CMU + Stanford; Presentation \u0026amp; Interpretation by laekov % July 14\nDNN Training 的三种并行模式 Data Parallel (DP) 沿 batch 维度进行切分 通信: 同步 weight Model Parallel (MP) 沿 weight 维度进行切分 通信: feature tensor 的求和或者拼装 Pipeline Parallel (PP) Inter-layer partition 通信: 切口处的 feature tensor 及它们的梯度 (在部分模型中通信更少) Overlap 通信和计算 (DP 的 lazy update 也算 pipeline 的一种) Inter-batch Parallelism 无并行的 pipeline 分摊 weight 所需显存 支持不同规格加速器混用 在 homogeneous 环境下毫无加速 GPipe 并行: 批处理模式 Pipedream 并行 多发射 forward 和 backwoard 交错进行 可填满流水线 计算通信 overlap 由 pytorch 框架实现. 自动 pipeline 划分 Workflow Profile: 对于一个模型, 单独跑每个 layer, 记录 latency. Optimize: 根据 profile 结果和网络带宽 (用户输入) 进行 partition. Runtime: 作为 pytorch / caffee 的插件, 使用 optimizer 的输出作为模型. (通信使用 gloo) Optimizer 的动态规划算法 假设 layers 是 sequential 的. 设 $A^k(i\\to j, m)$ 表示从 $i$ 到 $j$ 使用最高 $k$ 层的 $m$ 个 worker 的 pipeline 最小代价. 设 $T^k(i\\to j, m)$ 表示 (同上条件下) 使用 dp 的最小代价. $A$ 和 $T$ 使用区间动态规划互相转移. (具体式子见原文) 结果是 DP 和 PP 混合进行. Active batches 需要精确计算 active batches 的数量 $NOAM$ 需要保留 $NOAM$ 份 weight 来做 BP, 引入额外 memory overhead. 引入了 update staleness, 但在可以接受的范围内. 实现和实验 3000 行 python 代码, 作为 pytorch 上面的一层 (也可以使用 caffe 或者移植到别的框架上) 在 4x V100 PCIe / 8x V100 SMX 两种节点的集群上实验 在 CV 和 NLP 的不同模型上实验 和 LARS (允许更大 batch size), Asynchronized training 对比, 数值上更有效 和 Gpipe 和其它 MP 对比跑得更快. 分析 优势 可以减小 batch size 在部分模型上减少 communication 问题 staleness 及 memory overhead 使用起来有复杂性 切分方式局限, 只能切分近似 sequential 的模型 对 network bandwidth 的考虑较为简单 ","permalink":"/post/5554ae/","summary":"% Pipedream - Generalized Pipeline Parallelism for DNN Training % Authors from MSR + CMU + Stanford; Presentation \u0026amp; Interpretation by laekov % July 14\nDNN Training 的三种并行模式 Data Parallel (DP) 沿 batch 维度进行切分 通信: 同步 weight Model Parallel (MP) 沿 weight 维度进行切分 通信: feature tensor 的求和或者拼装 Pipeline Parallel (PP) Inter-layer partition 通信: 切口处的 feature tensor 及它们的梯度 (在部分模型中通信更少) Overlap 通信和计算 (DP 的 lazy update 也算 pipeline 的一种) Inter-batch Parallelism 无并行的 pipeline 分摊 weight 所需显存 支持不同规格加速器混用 在 homogeneous 环境下毫无加速 GPipe 并行: 批处理模式 Pipedream 并行 多发射 forward 和 backwoard 交错进行 可填满流水线 计算通信 overlap 由 pytorch 框架实现.","title":"Pipedream "},{"content":"% JAX: Autograd and XLA % Jiaao Ho % July 9, 2020\n功能和组成 Autograd: 自动求导, numpy 自动求导 JIT: 把 numpy 运算移植到 GPU 和 TPU 上 vmap: 自动 vectorize pmap: 自动 SPMD 自动求导和训练 使用 grad 函数实现 from jax import grad import jax.numpy as np def tanh(x): # Define a function y = np.exp(-2.0 * x) return (1.0 - y) / (1.0 + y) grad_tanh = grad(tanh) # Obtain its gradient function print(grad_tanh(1.0)) # Evaluate it at x = 1.0 # prints 0.4199743 使用 JIT 来使一个函数变快 直接作为函数使用 import jax.numpy as np from jax import jit def slow_f(x): # Element-wise ops see a large benefit from fusion return x * x + x * 2.0 x = np.ones((5000, 5000)) fast_f = jit(slow_f) %timeit -n10 -r3 fast_f(x) # ~ 4.5 ms / loop on Titan X %timeit -n10 -r3 slow_f(x) # ~ 14.5 ms / loop (also on GPU via JAX) 使用 python 的 @ 函数修饰 @jit def update(i, opt_state, batch): params = get_params(opt_state) return opt_update(i, grad(loss)(params, batch), opt_state) opt_state = opt_init(init_params) for i in range(num_steps): opt_state = update(i, opt_state, next(batches)) 自动向量化和 SPMD 向量化 -\u0026gt; 自动增加 batch 维度 from jax import vmap predictions = vmap(partial(predict, params))(input_batch) # or, alternatively predictions = vmap(predict, in_axes=(None, 0))(params, input_batch) 自动在多 GPU 上进行计算 (需要指定 axis). from jax import random, pmap import jax.numpy as np # Create 8 random 5000 x 6000 matrices, one per GPU keys = random.split(random.PRNGKey(0), 8) mats = pmap(lambda key: random.normal(key, (5000, 6000)))(keys) # Run a local matmul on each device in parallel (no data transfer) result = pmap(lambda x: np.dot(x, x.T))(mats) # result.shape is (8, 5000, 5000) # Compute the mean on each device in parallel and print the result print(pmap(np.mean)(result)) 自动使用集合通信 from functools import partial from jax import lax @partial(pmap, axis_name=\u0026#39;i\u0026#39;) def normalize(x): return x / lax.psum(x, \u0026#39;i\u0026#39;) print(normalize(np.arange(4.))) # prints [0. 0.16666667 0.33333334 0.5 ] What\u0026rsquo;s new against TensorFlow? 逻辑更简单, 都是直观的计算代码 强调 JIT 的使用, 保证运算效率 ","permalink":"/post/7990d5/","summary":"% JAX: Autograd and XLA % Jiaao Ho % July 9, 2020\n功能和组成 Autograd: 自动求导, numpy 自动求导 JIT: 把 numpy 运算移植到 GPU 和 TPU 上 vmap: 自动 vectorize pmap: 自动 SPMD 自动求导和训练 使用 grad 函数实现 from jax import grad import jax.numpy as np def tanh(x): # Define a function y = np.exp(-2.0 * x) return (1.0 - y) / (1.0 + y) grad_tanh = grad(tanh) # Obtain its gradient function print(grad_tanh(1.","title":"JAX Reading Log"},{"content":"laekov 在研究如何用手机远程开关家里的台灯的时候发现了 ios 里 shortcuts 这个神奇而好用(功能上) 的东西. 于是寻思着可以用 shortcut 解决手机/iPad 和 linux 桌面机之间文件和文字传输的问题, 于是进行了一些尝试.\n为什么要上 AirDrop 因为它香啊. 可以在不同设备之间快速地传输文件.\n比起开个微信传 / slack 传 / telegram 传这种还要让数据去地球另一端绕一圈的传数据方法, airdrop 它不用开聊天软件, 而且速度更快.\n但是 AirDrop 的局限在于只能在 apple 设备之间使用. 对于桌面工作环境, laekov 还是更喜欢 linux (debian) + KDE, 用起来更爽一些. 所以每次在 desktop 和手机之间传输消息就成了一件非常麻烦的事.\n如果是台式机, 不同的台式机, 台式机和笔记本, laekov 惯用 scp 进行文件传输. 但是 ios 下不存在一个好用没广告不收钱的 scp 软件. 但是 shotcuts 支持 run script over ssh, 就可以解决这个问题了.\nRun script over ssh Shortcuts 提供的非常好的一项功能叫 run script over ssh. 这理论上只要有一台能 sshd 的主机, 就能干任何事.\n当然一个问题是如果要和自己的 host p2p 地共享文件, 那就必需要知道 host 的 ip. 对于我自家的 wifi 热点, 直接改 dhcpd 的配置来获取不变的 ip 就可以了. 但是如果是在外面, 情况会变得比较麻烦. 如果电脑根本就没网咋办? 也许可以先拷到 cloud 上? 但是这样又违背了直接传输的初衷. 所以如果要买非苹果的笔记本移动起来用的话, 还是会比直接 airdrop 要麻烦一些.\n因为 shortcut 定位是自己用的小程序, 所以直接把 ip 和用户名密码固定写好就可以了.\n比较迷惑的是 \u0026ldquo;输入\u0026rdquo;. 其实这里的 \u0026ldquo;输入\u0026rdquo; 一项意思就是 stdin.\nmobile to host shortcut 可以作为一个分享选项出现在 ios 的分享列表里, 并把分享的东西作为输入文件. 这就非常好办了.\n先把输入文件的内容 base64 encode 起来.\n然后使用 run script over ssh, 把刚刚 encode 好的东西 base64 -di 写到想要的位置就可以了.\n对于 handsoff, 也就是共享剪贴板, 因为文字没有 \u0026ldquo;share\u0026rdquo; 这个选项, 只能 copy, 所以要手工再加一项 share clipboard, 和之前原理一样, 只是输入变成了剪贴板.\nhost to mobile 目前只实现了文字(链接)从剪贴板拷到手机. 使用的是 X11 的 xclip -o, 可以直接把剪贴板上的东西拷过来.\n传文件的麻烦之处在于还要选择在哪个应用里打开? laekov 思考了一下目前暂时没有把文件从电脑传到手机本地存储这样的需求, 所以就还没做. 做起来应该也不麻烦.\n性能 这种把 ssh 当 scp, 从局域网走一遍的做法当然是比 wifi direct 的 airdrop 要慢的. 而且 shortcut 使用的 ssh 客户端自带几秒的延迟, 并不是很快. 但是相比之前使用 im 软件传输的方法, 从理论和实践上都是更快的.\nSummary 使用 ios shortcut 里提供的 run script over ssh 可以实现局域网内的很多操作, 包括本来属于苹果独占生态的 airdrop 和 handsoff, 也可以部分地被替代. 非常令人开心.\n于是 laekov 觉得下一台随身笔记本电脑买个 ryzen 本也不错? 但是还是想等 arm 的 macbook. ovo.\nHistorical Comments laekov at 2021-08-26T10:18:28 这个 summary 是一个 flag. 一年多之后, laekov 依然既没有买 ryzen 的办公本, 也没有买 arm 的 macbook. ovo\n","permalink":"/technical/dc0e8e/","summary":"laekov 在研究如何用手机远程开关家里的台灯的时候发现了 ios 里 shortcuts 这个神奇而好用(功能上) 的东西. 于是寻思着可以用 shortcut 解决手机/iPad 和 linux 桌面机之间文件和文字传输的问题, 于是进行了一些尝试.\n为什么要上 AirDrop 因为它香啊. 可以在不同设备之间快速地传输文件.\n比起开个微信传 / slack 传 / telegram 传这种还要让数据去地球另一端绕一圈的传数据方法, airdrop 它不用开聊天软件, 而且速度更快.\n但是 AirDrop 的局限在于只能在 apple 设备之间使用. 对于桌面工作环境, laekov 还是更喜欢 linux (debian) + KDE, 用起来更爽一些. 所以每次在 desktop 和手机之间传输消息就成了一件非常麻烦的事.\n如果是台式机, 不同的台式机, 台式机和笔记本, laekov 惯用 scp 进行文件传输. 但是 ios 下不存在一个好用没广告不收钱的 scp 软件. 但是 shotcuts 支持 run script over ssh, 就可以解决这个问题了.\nRun script over ssh Shortcuts 提供的非常好的一项功能叫 run script over ssh.","title":"使用 Shortcuts 让 linux desktop 与 iOS 间获得 airdrop 般的体验"},{"content":"这是一篇关于 laekov 在贵系本科四年的碎片式回忆.\n关于学习 没学好的基础课 laekov 高三的时候文化课成绩似乎还可以, 但是上大学之后从线性代数A的线性空间部分开始崩溃, 到微积分B半期挂科伏地膜, 再到大雾B险些挂科. 大一大二的时候一方面选了很多课, 另一方面除了课程之外还找了很多事情干, 所以并没有好好地学习这些基础的课程. 显而易见地, 成绩也非常惨淡.\n事实证明线性代数这样的课程还是非常必要的. 例如在写 Prague 的论文的时候就遇到了一个线性代数的证明, 然而不会证, 这种情况就十分惨惨. 再比如大雾里的量子物理, 热学之类的东西, 虽然凭当时的直觉觉得没啥用, 但是真的做科研的时候发现量子计算这条路想走也会更艰辛一些, 然后就会想要是当时花了更多的时间把量子搞得更懂一些该多好.\n并不划算的抢先学 laekov 在年轻的时候天真地想空出一整学期没有课 (后来几乎就做到了), 所以一直在抢先选高年级的课, 并将这个战略一直贯彻到了大三. 然而事实证明这并不是一个非常合算的战略.\nlaekov 在大一下的时候就先上了 OS 课, 原因是时间不冲突 + 对 os 比较感兴趣. 然而当时对 CPU 什么的完全没有正确的了解, 虽然在上完 OS 之后反倒对 CPU 的功能有了一定的认知. 然后大二上的时候就造了 CPU, 大二下才上数字电路设计. 这相当于把贵系的 \u0026ldquo;数电 - CPU - OS\u0026rdquo; 这个知识链完全反过来上了.\n虽然 laekov 没有挂科, 但是中间有很多不懂的知识, 会错过很多深入探究的机会. 例如在造 CPU 的时候由于缺乏数设知识, 所以对电路的延迟和流水线设计都没有太多概念. 整个 CPU 造出来也是以 \u0026ldquo;造出来\u0026rdquo; 为目标的, 而且为了这个目标也花费了很多的心血, 而进一步的性能调优和适配更多的功能就完全无能为力了, 所以最后得分相对来说比较低. 虽然这样做使得 laekov 在大三及之后课业压力没有那么大, 但是当看到厉害如 harry 的 dalao 们在各种联合大实验中搞出厉害的项目的时候, 会比较后悔自己早早地艰难地糊完了这门课.\nlaekov 还有一学期选了四门贵系的限选课, 于是在期末的半个多月里获得了四份大作业并疯狂赶作业, 这也是一种不太好的选课策略.\n失败的辅修和成功的任选课 laekov 年轻的时候选了五金的创辅, 原因是觉得有经济学原理管理学原理这种 \u0026ldquo;听上去很有用\u0026rdquo; 的课. 然而上了一节经济学原理之后发现经济学原理好无聊, 上了一节会计学原理之后发现会计学原理也挺无聊. 于是只上了一节也退了, 最后留下管理学原理上完了. 当然其中一个原因是那个学期要造机. 然后觉得这种不写代码不算算术的课好无聊, 第二学期更是一节课也不想上了, 最后就把整个辅修退掉了.\nlaekov 一直有一个学俄语的梦想, 从大一开始几乎每学期选课的时候都会选俄语, 然后因为时间不合适而退掉. 大三某次补选上了一节课然后退了. 大三下的时候终于成功地上了何老师的俄语课, очень хороший класс. 算是我上过最开心的选修课了. 虽然背单词背得死去活来, 但是入门了一门新的自然语言, 而且能读出来了, 就很开心, 甚至还去 владивосток 旅游了一番. (虽然是抱着某位上过专业俄语课的学姐的大腿去的)\n说到最后有一种感觉是自己在贵系待了四年就没上过什么正经课. 怎么回事. \u0026gt;_\u0026lt;\n一份开源的大作业列表 laekov 不擅长集成, 所以大作业主要靠凭空写. 于是得分向来都不高.\n但是 laekov 乐于把大作业 push 到 github 上. 所以就有了这份列表.\nRCube 大一程序设计基础课的魔方. 按照 laekov 仅会的公式转的, 不是用的神奇的群论方法, 所以步数巨多. (队友: jay gao, 子薇姐姐). RBRRM Rule-Based Regular Routing Method , 姚海龙老师的 OOP 课的组队大作业. 我使用了网络流/费用流算法 + 神奇的 rule 来生成 routing. 因为 rule 设计得过于奇怪所以 route 总长度并不优, 但是很好看 (艺术品??). 本打算发篇小文章, 但是在做文献调研的时候发现别人做得更简单效果更好??? 于是原地放弃了, 然而强如 n+e dalao 就把文章给发出去了. (队友: lr, 孙yf). QtSudoku Qt 做的数独. 贵系编程小学期第一个作业. 主要是学习使用 Qt 做 GUI. QtCheckers Qt 的跳旗, 可联网对战. 贵系编程小学期第二个作业. 主要学习 Qt 的网络模块. Celebrities 贵系小学期第三个作业, wiki 名人条目搜索. 主要是学习爬虫+简单的web开发. laekov 使用了 js 异步爬取数据比 python 的同步模式快很多. zhxpu 造计算机. laekov \u0026ldquo;创新\u0026rdquo; 地设计了四段流水. (扔掉了 mem). 怎么想都觉得天真. (队友: zhx, bakser) llim 人工智能导论第一个大作业, 拼音输入法. MNist 人工智能导论第二个大作业, 训 lenet over mnist. 用的 pytorch. 然后我又加了个 googlenet? Canyon 图形学大作业, 只做了 openmp 并行的光线跟踪和球, 面, 贝塞尔旋转体. CaPiano 数设项目, 从 ov7670 摄像头捕捉图像, 然后识别手指, 然后用电脑播放对应的声音. (队友: bakser) DGEBC 分布式遗传算法 box2d 小车. 康总分布式系统小学期大作业. (队友: saffah, yjp 的室友) ChitaiNews 痴呆新闻. 安卓新闻客户端. 贵系 java 小学期作业. internet-lab 网原路由器. 大力感谢 harry chen 告诉我 socket 的坑. (队友 bakser, hzy) EMNLPxxx 人工神经网络课大作业, 抱 84 大腿的炼丹. (队友 bakser, hzy) PolarKV 存储课小作业, 键值存储系统. BJFar 北京市建筑密度预测. 城市模型概论大作业. 使用了 GCN 和 GAT 图神经网络. Taxiii 出租车拼车匹配. 数据库专题训练大作业. 使用高德前端. Minimon 最小监视器. 嵌入式系统大作业. 使用 build 自底身上构建最小系统, 并自行加入了 openVINO 支持, 从而可以使用 intel movidus 神经网络加速棒对 DNN 推理进行加速. 详见这篇博文 兼职和实习 CloudBeaver: Web 开发重新做人 laekov 高中的时候自学 php 写了 oj, 跟 jcpwfloi 学了 expressjs, 然后抄构架用 php 写了这个博客并用 jquery + clone 写出了奇妙的前端.\n上大学第一个学期发现程设课好无聊, 于是在 zhonghaoxi 的安利下找到了人生第一份兼职, 在某创业公司干活. laekov 入职的时候的选择是在用 scala 写数据分析算法和用 javascript 做前端之间. 然后因为 laekov 说了一句 \u0026ldquo;我会写 javascript\u0026rdquo; 所以就去做前端了.\n然后发现原来世界上还有 GruntJS 和 Bower 这么先进的东西, 原来填个名字就可以获得自动更新的轮子, 原来还可以自动 watch file 并重启 node. 原来还可以自动合并前端的 js 代码生成 dist. 虽然之前自己瞎搞的时候知道可以这么干但是没有见过就不知道具体咋干, 于是学习了很多 web 开发的知识.\n然后在 cloudbeaver 还学会了使用高德前端的 api, 学会了去看不同的轮子的文档然后把轮子撸到自己的工程里. 这些确实都是挺有用的技能.\n在 cloudbeaver 的生活也很有趣. 比如每天中午大家会一起去公司负一层的食堂吃饭, 而晚上则会公费叫外卖, 然后在会议室吃. 并想起了小川学长在七中演讲的时候说 sogo 创业初期为了吸引实习生来办公室干活而免费给实习生订盒饭的故事. 然后还发现同在公司兼职的同事是二字班 (比 laekov 大四届) 正好本科的时候也睡在 laekov 宿舍的学长. 学长还教育 laekov 如果半夜买外卖又不想去四单元拿, 可以在窗户外面的台子上拿个晾衣杆把外卖钓上来. 虽然 laekov 的宿舍氛围良好从没有人干过在宿舍熬夜到半夜还点外卖这种不健康的事情. (关于 laekov 的宿舍, 引用 lr 同学的这篇微信文章) 还有第一次在异乡过生日, 碰巧公司组织团建, 然后同事们竟然记得我的生日并给我买了蛋糕过生日, 很温暖.\n还记得 zhonghaoxi 有时候会早上十一点左右叫 laekov 一起去办公室, 然后两人先骑车到东南门外吃一顿西少爷, 原因是 zhonghaoxi 觉得公司食堂太难吃了. 然后 zhonghaoxi 会给 laekov 讲当年的西少爷还是个程序员干不下去了摆的地摊, 而现在已经是家完整的店了. 然后 laekov 还会研究一下西少爷那个只能用徽信不能用支付宝的收银系统的前端做得好像还挺好. 然后两个人再骑着车从沿着学院路去上班.\n然而到了大一第一学期末, 因为期末考试的压力渐渐显现, 加上 laekov 觉得在公司暂时没有什么新的事情可做, 而 zhonghaoxi 做的那一坨东西 laekov 又不是很搞得明白, 所以就辞职跑路回去好好学习了. 总之这是 laekov 在业界打的第一份工, 并学到了一些东西. 但也在最初的一学期就牵扯了 laekov 不少的精力. 换言之 laekov 从第一学期开始就没有好好学习.\nTUOJ at THUSAAC: 抓瞎的软件开发与运维实践 因为高中的时候写了 OJSeven, laekov 刚入学的时候就被 zhonghaoxi 安利去算协 THUSAAC 写一个新的 OJ 来代替之前的清橙和找不到维护的 UOJ 并认识了 yaoyao 等一帮人. 最初的 TUOJ 是为了应对 11 月份举行的第一届 CCSP 比赛而设计的. CCSP 比赛对 OJ 的要求与以往不同之处有二, 一是它要求支持不同的评测后端来评测不同的题目, 二是对于特定题目, 要使用标准分来给分, 然后再加部分, 即需要客制化的 Ranklist. 最初的版本由当时大二的几个学长主要操刀, 用了 jade 那一套跑在后端的前端渲染引擎, 比较混乱. 虽然 aoao 和 yaoyao 熬夜几天并 24+ 小时没有离开北京理工大学良乡校区图书馆五楼, 最终成功地撑下了一场比赛, 但是还是比较难以继续开发和维护. 学会了新的知识的 aoao 于是在大一寒假的时候花一周时间重构了当时的 TUOJ web 端的整个代码, 使用了更加现代化的框架 Angular + Bower + Grunt.\n然而当年的 laekov 对于软件测试并没有什么概念, 基本上是写一个功能之后手工测试一下就完事了, 所以其实 OJ 的撸棒性并不是太强. 压力测试也是就是拿考试当测试了. 现在想来真的挺灾难的. 比较好的是至少使用了 git 进行版本管理. 后来提前上学的小朋友加入 OJ 组之后也参与了开发, 还使用上了 branch. 大一下的时候 laekov 操着 TUOJ 承接了不少比赛, 比如算协办的 ACM 校赛, 贵系的保研机试上还因为分发 OS 失败而搞跪了大半个机房并被学长们大力吐槽了. 当时为了给不同的同学发密码条还掌握了一个无用(也许有用)的技能: word 邮件合并. 其实如果当时认识 harry 的话, 我就会发现, 直接做一个一键导出密码条的功能就好了啊.\n经过了又一个学期, 来到大二上, laekov 发现一场场地接比赛 + 写 bug 补功能变得越发无聊了起来, 而且那个学期第一次面临要请一个星期的假去国外的情况, 非常方张, 于是就并不顺畅地甩了锅, 退出了 oj 组, 专心准备造机和腾出时间去蓝桥杯了.\nSenseParrots: 从零开始的新生活 经过了学习菜鸡, 进组科研划水并每周组会都觉得 huangkz 看了好多论文, xl 和 prof zhai 争论得好激烈, rd 做的事情好 solid 的大二上之后, laekov 在大二下的时候去参加一个奇妙的 Tencent ACM xxx 活动, 并表示有意向实习, 于是在一番面试, 并被面试官问了奇怪的算法没答对正解之后获得了一个实习的 offer, 做推荐算法???\nlaekov 还记得那个下午正在照澜院忘了干嘛, 接到 tencent 的电话, 然后转手打给了 zhai 老师问这个事情咋样, 然后 zhai 老师表示别去 tencent 了, 去 sensetime 吧, 并在周末的时候暴风再递了一份简历并再次被面了一个试并被面试官觉得 \u0026ldquo;既然你搞过 ACM 就不问你算法题了\u0026rdquo; 之后获得了新的 offer 并在五月的时候入职了 SenseTime.\n不得不说作为一千多号实习生, SenseTime 的员工管理制度比创业公司完善很多. 例如刚入职的时候会有严肃的培训并可以在 mba, dell laptop 和台式机之间选择, 然后 laekov 当然选择了台式机并获得了一台装备了 i5 和 1060 的台式机, 这应该是 laekov 在那之前都没用过带有 nvidia 消费级显卡的台式机 (惨兮兮). laekov 拿自己当时正好在做的 MNIST 作业尝试了一下, 发现显卡炼丹果然快了很多很多, 哪怕它只是 1060. (在那之前 laekov 已经用过了超算队的 V100, 但当时对显卡还没有这么深刻的概念). 当然公司的 PC 是不能拿来打游戏的, 而且还装有奇怪的软件 (?). laekov 尝试让 Xorg 使用集显输出视频信号, 而仅使用独显跑一些实验性的 DL 任务, 然后就把 kernel 不知怎的搞跪了, 于是 IT 无奈地帮 laekov 换了一台同配置的主机.\nlaekov 在 SenseTime 的工作内容涉及商业问题不太能多讲, 虽然 laekov 已经不记得离职的时候签的保密协议是要保多长时间了. 大概 laekov 被分配到了一些写 Python 和 C 的任务. 然而当时的 laekov 擅长的是 nodejs, 在 python 这方面完全是萌新, 只会写 hello world 那种水平. laekov 一边看文档和 tutorial 一边在在同事 xuchi 等人的带领下迅速地入门了 python 并学会了 python 里各种神奇的操作并觉得 python 某些时候比 js 更好用. 总之这种脚本语言在各自的应用场景里都是非常方便的, 在不同的应用场景下选择合适的语言, 而不是拘泥于个人对语言的好恶, 在 laekov 看来才是正道, 譬如 laekov 在后来跑各种科研的实验的时候就写了无数的 bash.\nlaekov 在 SenseTime 兼职了大约一年时间, 中途有时候会因为期末考试或者准备某些别的事情而暂时翘班一段时间, 组长 xingcheng 非常通融地允许了 laekov 在这种时候跑路. 但是 laekov 在工作时间还是非常拼的, 可能因为 debug 效率比较高(?), 所以还获得了 \u0026ldquo;实习生之星\u0026rdquo; 和组里 PM 姐姐们的良好口碑.\nlaekov 在 SenseTime 见证了一个项目从 prototype 到和用户 (也是自己公司的人) 对接试用的过程, 学习到了更多的项目管理, 敏捷开发这样的知识, 比如要使用 Confluence 来记录开发计划和内部文档, 使用 Jira 来明确每个人的任务并被项目经理在组会上对着它催锅. 以及要使用 CI 和 Unit test 来尽可能地减少项目的 bug, 同时较好地解耦合不同的模块. 以及 laekov 对 lint 印象深刻, 以至于后来再写代码时, 对于行宽都有了条件反射.\nlaekov 对 SenseTime 的记忆很多. 最初在 C8 一个的角落里干活, 十分惬意. 周末有时候还跑到办公室做作业, 比如 laekov 的 java 小学期 android 新闻客户端就用到了办公室台式机上装的 android studio, 原因是 laekov 自己的电脑实在是太菜, 跑 IDE 太卡了. 作为 vim 选手的 laekov 写写 python 和 C++ 倒是没有什么问题, 但是对于 java 这种强依赖于 IDE 的编程语言 (对, 就是在吐槽 java 变量名方法名类名太长了) 就很捉鸡了.\nlaekov 还记得那个夏天翘了 xdf 的 GRE 课 (一把辛酸泪) 待在办公室干活, 和同事们去马路对面吃 hequan 家的川菜馆和大盘鸡并抹零, 有时候一个人就去楼下买三明治或者饭团或者沙拉. laekov 觉得工作餐其实确实吃个沙拉就够了. SenseTime 还有神奇的只要在办公室待到 8 点后就可以免费吃 25 块钱的签单晚餐, 于是大家总是要在楼下的几家餐厅之间作出选择. laekov 有时候还会和 xl 一起回学校吃饭, 第一次带 xl 去南园食堂的时候 xl 表示这是啥地方咋和学校里学生区的食堂差距那么大呢. 有时候还会走路回 EMB 的实验室开组会然后再走回来.\n总之在 SenseTime 干活的接近一年里虽然 laekov 确实花了不少时间待在公司, 也没有太认真学习, 但是还是学到了不少新的姿势, 并且对于领域里常用的基础的东西有了更深刻的理解. 所以 laekov 大学四年加起来在外面实习兼职的时间可能超过了 1/3 耶.\nOI/ACM 和超算比赛的二三事 OI: 从选手到退役选手再到讲师 plus 我是如何拿到区域赛金牌的 laekov 刚入学的时候就被 zhonghaoxi 拖去一起参加了 ACM, 从暑假和秋天的多校开始搞, 最后去了青岛的区域赛, 并留下了一篇博客. 大概就是区域赛本来可能有希望拿 rank 1, 然而遇到(被安排)了和 DDF (即 wjmzmbr, 杜教, jcvb) 同场竞技, 于是被辗轧了两题变成了 rank 2. zhonghaoxi 表示 wf 没希望了, 于是 FFF 队就地解散.\n同样还被 zhonghaoxi 拉去某培训学校讲课. 因为 laekov 比较菜, 所以一般讲比较简单的 NOIP 难度的课, 基本上每个寒假假国庆五一什么的都会去讲. 最开始说话也不太利索, 课件也准备得逻辑不是很清楚, 到后来讲得比较熟练之后就可以比较好地控制讲课的节奏并且把要讲的东西讲清楚了. 虽然很多时候学生的接收程度还是不高的, 但总之能够感受到自己的进步. laekov 觉得讲课还是一个很能培养自己综合能力的事情. 至少站在台上讲话并不会紧张, 甚至会感到某种熟悉. 然而 laekov 可能最后也没有改掉在台上走来走去摇来摇去的习惯.\nSCC 的冠军之路与覆灭 后来大二跟着 zhai 老师之后发现超算比赛似乎比较有意思, 于是就加入了超算队. 最初是 ASC'18 的时候跟着 xieleilei 和 rd 调 CNTK 上 MsMarco 问答数据集上的丹, laekov 搞了一个一般疑问句直接回答 Yes 然后精度 ++. 然后好像就没别的贡献了. 作为 backup 的 laekov 也没去江西现场, 后来听说江西特别有意思.\n然后 laekov 就作为炼丹题的酱油选手去了法兰克福的 ISC'18, 并目睹 beichen 带队夺冠 兴奋得跳了起来. 可惜 ISC'19 只有第二, ISC'20 只有第三, harry 难过. 四字班毕业之后的 SC'18, laekov 终于摆脱了 AI 题, 成为了一个 interview 选手, 负责了各种 interview 和 engagement 和评委尬聊, 再加上和 cggg 一直搞复现题写复现 report. 虽然遇到了 rd 签证 gg, saffah 跑 HPL 差点没交上, laekov 半夜跑程序跑一半跑断网线暴风叫 blink 来修锅等等各种事情, 但是最后竟然还是有惊无险地拿了冠军并被 CCTV News 采访, 并上了新闻联播, 并在学校新年的时候获得了 \u0026ldquo;年度人物\u0026rdquo; 并去和 qiu 校长握了个手.\n2018 年的超算比赛大概是 laekov 熟悉各种比赛的过程, 主要觉得贵校每次都能拿到 Xeon Platium 8xxx 系列的 CPU 去比赛, 所以比较强大. 给 laekov 留下印象比较深刻的就是 frankfurt 街头内三速的共享单车和 Dallas 街头的电动共享滑板. laekov 在 Dallas 还拉上 yaoyao 在比赛之后一起去自行车店租了 Trek Madone 2.1 公路车并在一个神秘的湖边绕了一圈.\n2019 年的时候因为 saffah 要去 ACM WF, 所以 laekov 不幸直接越级成为了队长 (即负责订车票宾馆带东西的同学). ASC'19 laekov 负责跑 HPL/HPCG, 然而那场比赛有 CESM 这种搞死 harry 的东西, 还有 WTDBG2 这种完全没法看还只能单机的程序, 难度和赛点都十分鬼畜. 组委会在大连安排的学校边上的廉价奇怪宾馆也很诡异, 而且 laekov 还和 BUAA 的同学拼了一间房, 以至于 laekov 一脸茫然不敢说话. 虽然赛前在指导老师 saffah 的床上趴着拍脑袋拍出了 7 鸡 12 卡的奇怪配置, 但是贵队在现场最后疯狂翻车, 比如什么 CESM crash 之后 revert 到上一个 ckpt 接着跑什么的. 本来以为要胸牌而归了, 没想到搞了奇怪操作的 SJTU 和 SYSU 都翻车了, 于是在 NTHU 后面拿了第二.\n于是还是拿到了 Inspur 的赞助去了法兰. laekov 又负责上了 AI, 那次是用奇怪的模型做一个台风识别, 类似于某种 CV. 然后 laekov 发现代码里有各种 bug, 比如什么 BN 的 eval 模式结果完全不对之类的, 然后最后虽然做了很多工作但还是跪了, 原因是组委会发下来的 test set 和事先发的 val set 是一个东西, 然后别的队好多都对着 val set 训过了. ggg. 然后 interview 什么的又被南非吊起来打, 于是最后又拿了第二. 于是 laekov 不开心地去租了一台公主车去爬了个坡, 差点断腿 gg.\nSC 的时候老师们表示压力很大, 要是一年一个冠军都不拿就很惨了. 然而 laekov 表示去年三个冠军啊, 一定得在某一个比赛里连续两年拿冠军, 这不太行吧. 总之 laekov 和 harry 一起负责了一个叫 SST 的很有趣的计算机体系结构模拟器. laekov 发现在小测例上这程序的可扩展性不咋的. 一发 vtune 下去发现有奇怪的算法问题, 然后改了改算法快了七倍. 最后这题目也很有意思, 是要用 SST 找出一个成本合适的性能最好的 PC. 然后作为 HPL 选手 laekov 还负责了机器和面试和一些锅, 比前一年熬夜熬得更多了. 但最后就比较稳当地拿了冠军, 成功退役. 开心.\n再到疫情无限延期的 ASC'20, laekov 就真的在划水了. ISC'20 的时候 laekov 帮忙看了 Gromacs 并帮助 leenldk 学弟拿了单题第一. 可惜 AI 题大翻车了, 于是被 USTC 拿走第一, 还负于老对手南非, 遗憾地拿了第三. Harry 表示退役得十分不开心. patpat.\n超算比赛, 英文名称是 Student Clustder Competition. 相比 ACM 这样正经的大赛, 谁去谁知道. 虽然被称为 \u0026ldquo;计算机界的 F1\u0026rdquo;, laekov 也十分认可这种说法, 但其实作为学界会议的附产物, SCC 更大的意义还是让 Students 对这个领域有初步的认识, 知道这些程序都在干什么, 做 HPC 的人拿到不同的程序会从什么角度思考它的性能和优化的空间. 也在于培养同学维护拆装硬件的能力, 团队合作的能力, presentation 和 engagement 的能力. 至于其竞技性, 比如在 3000W 功耗内跑出最高的 HPL 分数, 虽然也是十分有趣的, 但对于个人来说也不是那样重要了.\n总之在 SCC 里, laekov 既收获了不错的成绩, 也收获了不同的能力和见识, 是一段很棒的经历.\n科研, PhD 的决定与申请 科研的初步探索 laekov 大一结束的时候找到了 han 导并表示想进实验室跟着干活. 于是 han 导开心地带着 laekov 去学习类脑计算的一堆东西, 什么 V1, LGN, STDP Training 啥的. 然而 laekov 发现并读不懂类脑的代码, 也读不懂类脑的 paper. 于是一个暑假过去啥也没干. 然后因为学术新星计划加入了 zhai 老师的组会豪华午餐, 于是开始看 DNN Framework, 当时大家试图 read TensorFlow Code, 但是好像也没看明白, 或者说作为一个大二的没啥时间搞科研的苣蒻也没时间看. (很久之后 laekov 因为自己科研需要倒是看了一部分). 后来也探索了一些不同的 hybrid parallelism 的可能性, 但是也只是停留在探索和 yy 阶段. 后来和洞 pro 聊天的时候洞 pro 表示他计算过不同 parallelism configuration 的理论加速上限, 发现并没有太多可搞的. 事后来看 laekov 深以为然. 然而 laekov 现在还是跳进了 pipeline 的坑. 当然这都是后话了.\n后来 laekov 就加入了 Sensetime 并在那边开始真实地写框架, 而 huangkz 则去搞了 RDMA 并成为了 RDMA 大师. laekov 在 SC'18 的时候和 cggg 一起写了算是第一篇学术的文章并投给了次年的 PARCO 期刊. 人生第一篇 Publ.\n18 年末 19 年初, 大家还一起尝试写过一个叫 Garlic 的 DNN Training 框架. 但是这个项目在大家缺乏经验 + 联调失败等各种打击下最后并没有成功. 最好的结果是能在 GPU 上跑起 MLP. rd 试图在里面做一些 sub-graph transformation 之类的工作, 但是图处理的各种 pass 也并不是那么好写. 这个方向上到底有多少可做的空间, laekov 表示茫然.\n19 年的春天 laekov 在忙于比赛, 而整个组似乎在向 compiler 这个方向进行转变. 大家开始更多地讨论起 TVM. 再后来 laekov 因为在一个文素课上炼丹而接触到了 GNN, 又在和 zhai 老师开会的时候入了 GNN 的坑. laekov 当时觉得 GNN 和 sparse 也许是新的热点, 然后发现已经有一大堆 GNN 的文章了, 而 sparse 的运算在 GNN 里并不是那么新颖, 有很多传统的文章都在做 sparse. laekov 最终毕设选题也往人少的方向走了一步, 试图做 GPU 上的 Sparse 运算性能建模, 并试图进一步地整合进 TVM 一类的编译框架里. 但是因为疫情而低效地划了半年水, 工作被 xuewei 老师评价说工作没有意义. gg.\n关于未来做什么, laekov 暂时还十分迷茫. 但是总之还是会做一些有意思的事情吧.\n暑研奇妙体验 at USC 对于暑研 laekov 早就知道有这事, 但是因为拖延所以一直没有自己去 individually 地套 offer. 报了学校的 stanford 项目然后被刷了, 报了系里的 CMU 项目, 久久不出结果, 最后问辅导员才发现是只通知了上了的人. 于是惨惨的 laekov 赶紧抱紧学院 USC 项目的大腿, 并在 zhai 老师的介绍下成为了 qian 老师的临时小弟. 又被二次分配给了 qinyi 师姐当小弟. 一查发现师姐竟然也是贵校的毕业生, 还是很优秀的那种.\n然后事先被告知要做 decentralized training, 并赶紧读了一些 paper. 获得了 alchem lab 的 server account, 然后发现竟然 16 个节点只插了 1 块 GPU? 这咋做? 师姐表示没事大实验我们可以去 bigger cluster 上做. 噫.\n于是在办完签证什么的之后来到了美丽(?)的 LA. 充满热带气息的树和低矮的城市房屋欢迎了 laekov, 然后和 kezhao 一起住进了 USC Village 的四层.\n这是 laekov 第一次在国外生活超过一个月, 感到新奇和贫穷, 因为去超市发现所有东西折算成 RMB 之后都好贵. (除了汽油, 不过那是后话) USC 的校园比较小, 红红的更像是 PKU.\n然后神奇的事情发生了: prof qian 不在 LA, 而在中国. 所以为什么要大老远来 LA 呢. 思考. 所以 project 主要是 qinyi 在做, 然后 prof qian 会时不时 zoom 同步一下并进行一下方向性的指导, 而 laekov 在去实验室发现并没有可用的工位而且 qinyi 也日常居家科研之后决定待在 usc 舒适的宿舍里, 对着 laekov 13寸的 macbook pro 屏幕和自带的键盘和 touchpad 写代码滴八哥. 于是 laekov 就这样在宿舍里宅了五周. 每天早上起来在客厅里写 bug, 对, usc 的本科生宿舍是两人一间卧室, 两间卧室共享了一个客厅, 当然这是有 scholarship 的人住的豪华房. 普通一点的房间会有微波炉, 但不会有这么大的活动空间. 然后 laekov 中午做饭的时候 kezhao 就醒了, 于是两人一起做黑暗料理午餐, 然后下午在卧室里写 bug, 然后傍晚再烤个简易晚餐, 然后继续写 bug, 然后 laekov 睡觉, huangkz 去客厅熬夜写 bug (或者去实验室和师兄一起熬夜写 bug). laekov 现在尤其想念每一袋都非常实在的乐事薯片 (laekov 尤其喜欢 bbq 味的), 以及大号的冰箱里大桶的只要 0.99 刀的可乐.\n后来学校资助的项目结束了, 但是 laekov 的文章还没投出去, 然而 USC 附近因为学生开学于是并没有合适的 airbnb 或者短租, 于是 laekov 在沿着 metro expo line 到 santa monica 半路的 westwood 附近租到了一间 studio, 然后好盆友马丁开车把 laekov 载到了新家. 失去了 kezhao 之后 laekov 变得更宅了一些, 除了出门骑车/买食物和炸鸡以外都不太会出门. 最近的超市是 1km 外的 99cent, 但是 99cent 的食物仿佛都不太新鲜, 比如买来的速食鸡腿有浓浓的奇怪的墨西哥辣椒味, 大概是为了掩盖不新鲜, 毕竟便宜. 而且 laekov 也缺乏合适的运载工具把东西从 99cent 运回家. 后来 laekov 才发现差不多距离处还有一家 trader joe\u0026rsquo;s, 这才解决了食材的新鲜问题.\n于是 laekov 窝在那间小屋里完成了第一篇正经的学术 paper 的赶实验赶文章交稿过程, 并在交稿后开心地去庆祝了一下, 和马丁一起骑了个车. 然后骑到一半被老板的电话召回 gg.\n完成了 paper 之后接下来 laekov 的工作就是多认识一些在加州的人了. 于是 laekov 租了一辆汽车, 沿海自驾到了 santa barbara 并带着自行车爬了个山并去见了 ucsb 的一众老板. 然后 laekov 还坐半夜大巴去了湾区, 然后又租了一辆车去找在 berkeley 做春研(暑研)的室友 lr 帮他搬家 + debug 并发现他的代码真的有 bug. 然后在 berkeley 没有带车所以开车出去溜了一圈骑行路线并见了很厉害的 yang you 师兄, 然后坐着 amtrak 的沿海小火车一路看风景 + 吃薯片在半夜九点回到了 LA. 行走在加州的地表感觉也很好玩, 风光很独特, 是中国所没有的西海岸呢.\n在 LA 最后的时光是和 Martin 还有 Xi 大爷一起去喝咖啡, 并被两个美国人用中文安利国籍优势和找工作很爽. 见到了从 CMU 来 LA 开会的 yaoyao 和 yaoyao 的老板 Andy, Andy 还请 laekov 吃了冰淇淋, 然而 laekov 半路被 prof qian 叫回去吃 farewell dinner 于是和师兄师姐还有 y00 一起在满是中文的 LA 的中国城吃了 LA 的正宗中餐作为告别, 然后从师兄那里借了几刀零钱坐地铁回家.\n以上大概就是 laekov 在 LA 待的两个月的经历. 总之除了物价比较高以外, 在 LA 生活确实比较自由自在, 城市里的 diversity 会比在中国大很多, 会见到更多不同的很有个性的人. 作为一个 cyclist, 在 LA 骑车是一项更普遍更被大众所接受的运动. 虽然老板不在, 但是如果要宅家做 research, 也是可以在家里方便地获得一方安宁的, 而且速食食品更方便 hhh. 总之 laekov 对 LA 的印象很不错, 所以最终将会回到 USC 去读 PhD. 虽然由于疫情影响不知道啥时候能人肉回到 LA, 但是暑研的这两个月确实是一段美好而自由的经历.\n佛系的申请季 因为觉得 USC 还不错所以 laekov 申请季的时候就很佛系. 除了比较想去 UC Berkeley 以外没有别的特别想去的学校, 于是除了 Berkeley 的老师发邮件 + 开会的时候追着套了磁并失败了以外, 没有发什么套磁邮件, 只是在老板的推荐下去和一些老师 \u0026ldquo;认识\u0026rdquo; 了一下. laekov 比较坚定地想读 PhD, 所以也没有申什么保底的 master, 想着要是全聚德了不如去工作.\n所以 laekov 最后申了八所学校, 包括四大中的两所 (抽奖), 被老板推荐去认识过的老板们的学校, 还瞎投了 System/Arch 比较强的 UIUC 和 UT Austin.\n结果嘛, 就是只收到了 USC 的 offer.\n因为 GPA 比较低, GRE 也很低, 也并没有太亮眼的 paper 列表/人脉, 所以也并不是太意外获得这个结果.\n业余生活, 运动 从 Ingress 到 Bikegress 到 Cycling laekov 大学刚入学的时候是一个疯狂的 ingress 爱好者, 绿6.\n在成都的时候周边没有太多 portal, 而贵校校园里竟然甚至可以有床 po, 非常开心.\n刚入学的时候甚至经常会出门走路刷一圈 ingress, 也是因为 ingress 所以最初走遍了贵校校园的很多地方 (尤其是紫荆雕塑园一带).\n最神奇的是遇到过一次蓝军的起八活动(?), 然后跟着一路炸, 然后就被物理地抓住了, 并且发现对方是北大的. 233333.\n后来觉得走路刷 portal 实在是有点慢, 而且又有了阿甘摇手机这个项目, 于是就开始探索骑自行车玩 ingress, 并买了一个可以把手机架在自行车车把上的支架. 依稀记得那年冬天一个寒冷的夜晚 laekov 骑着车在大礼堂一带摸 po, 然后手机被冻没电了 23333.\nlaekov 的室友变态和智障也一度被 laekov 带入了 ingress, 可是他们俩实在太宅了, 不愿意出门跑, 然后就没有然后了.\n再后来春季学期就来了, laekov 看着被高中同学安利淘宝 600 块钱买来的死飞自行车, 又在算协的某 c 姓和某 z 姓学长聊天中知道了山地自行车和公路自行车, 于是就上网学习了一下公路自行车, 然后发现公路自行车似乎很好玩耶. 然后百团大战的时候发现竟然有 \u0026ldquo;自行车协会\u0026rdquo;, 而且入会只要 5 元钱! 于是在和一个人看摊的当时的会长 trx 聊了一会并被邀请掂了一下他的超轻的 trek emonda 并得知他的车竟然要几万块钱之后果断地花 5 块钱进了群, 然后找 zgg 借了头盔和他的公爵 600, 然后就踏上了车协的迎新骑.\n我可能经历了车协最有毒的迎新骑, 出发的时候咕咕咕到只有四个老人和三个萌新. 然后刚出门, 在北体门口, 全队最闪亮的一台黄色 sworks venge (当时还不认识) 就惨遭扎胎, 钉子甚至扎坏了碳圈, 心疼2333. 然后路上 mhc 把链条踩断了, 然后他竟然还神奇地带了截链器, 于是现场修链条. 全队唯一的一个萌新妹子借来的破山地车的后拨也不好使, 于是大家还修了一会后拨然而没有修好. 最后 35km 去凤凰岭的路愣是走到中午才到.\n再然后 laekov 经过一番研究和舍不得花钱, 跟车协去团购买了一台黄绿色 merida scultra 93. 虽然因为不太懂然后一起去的猫 pro 也没告诉我于是就买了最小码的车架不是太能骑然后 93 的螳螂须也有点丑但总之它是 laekov 的车了. laekov 还开心地骑到西门超越单车去装了个狗嘴. 然后跟着车协众人去了十三陵水库环, 东方红爬坡, 然后爬了香山, 然后就跟着晗队去了东大白 140km 骑得屁股疼并被教育要买骑行裤来穿不然屁股会gg.\n总之 laekov 就这么入坑了公路车, 然后就再没玩过 ingress, 还弃坑了网球. 因为对于 laekov, 骑车比起 ingress 好像有意思得多. 骑在公路车上, 动辄几十上百公里的长距离行动, 走得更远, 见得更多. 山林, 悬崖和河谷对于 laekov 更有吸引力.\n爱上重力: 骑车的初体验 laekov 写到\n2017 年春天的时候 laekov 获得了小绿车.\n2017 年春天 laekov 很喜欢午后去爬太舟坞.\n2017 年五一节假期 laekov 在成都被 tu 哥带着跑了若干家店, 最终买到了合脚的 lake 锁鞋.\n2017 年春季学期结束的时候, laekov 在一个大雨天被闲鱼的卖家咕了, 在火器营地铁站一个人淋雨淋了一个多小时, 于是很生气的 1000 块贱卖掉了小绿车, 然后回成都装了大彩.\n2017 年暑假 laekov 和爹妈一起开车载着大彩去西昌环了邛海. 第一次 4+2.\n2017 年夏天 laekov 刚带着大彩回北京骑车就悲惨地在奥园把自己没上紧的脚踏给踩掉了并摔了车并把刚买了几个月的锁鞋给刮破了.\n2017 年十一假期 laekov 和晗队等一大帮人去单日红井路, 260km 里程, 爬升 2600m. 出发时有 12 人, 晚上十一点回到学校的仅剩三人, 而当时还很萌新的 laekov 有幸是其中之一. 于是 laekov 给车协的公众号投了一篇稿记录这次骑行.\n2017 年冬天 laekov 被北京的寒风冻得够呛, 但是还是坚强地和假pro和张阿姨众人去爬了妙, 然后坐闪电的免费摆渡车下了山. 要不是有闪电的免费摆渡车, laekov 觉得冬天放妙大概会冻成冰棍吧.\n2017 年 laekov 还发现北苑闪电车店里有神奇的骑行台活动, 于是去骑了个奥园比赛还得了个体恤作为奖品.\n2017 年 laekov 还去参加了北京高校零度骑行的活动. 出发前早晨的时候晗队把自己的后拨玩断了, 于是小假临时从贴身副将升级成了主将. 然而第二副将 laekov 因为太菜所以全程没有见到主将. 零度骑完之后大家在碎石地上围着火炉吃冰沙.\n2017 年秋季学期期末之后, laekov 决定犒劳一下自己, 于是二手淘来了一个 130bcd 的 quarq red 盘爪功率计, 并郁闷地发现只能装 39t 的小盘, 于是又淘来了付标准盘片, 然后去装车发现没有盘钉, 盘钉很贵, 于是多花了很多钱才把功率计给装上. 因为天冷, laekov 就想去离学校最近的西山爬个坡看看功率计的效果, 然后就在西山公园里迷路了, 并没有找到去鬼笑石的路. 于是 laekov 掉头原路返回, 然后在快要下到平地的时候辗上了一片冰并摔了个车. 不过因为穿得多所以并没有摔出大问题.\n2018 年春节比较晚, 因为要去毛概实践, 所以 laekov 在学校留了比较长的时间. 舍友都回家之后一个人就可以晚上在宿舍把台子摸出来骑, 看着功率边骑边看飙速宅男. laekov 去贵州实践的时候发现贵州的城市里到处都是爬坡, 表示这里骑车一定很爽, 但是没带车.\n2018 年春天 laekov 报了 sbt 环密云水库, 于是前一周本着恢复一下的想法和小假等人去骑戒潭, 然而在北四环一个转弯下坡的匝道上因为车速比较快地面洒水结了暗冰, 所以 laekov 就侧滑摔车了并骨折了, 一个人断着手骑了几公里回学校特别惨. 接下来一个月都打了固定没有骑车, 并成功错过 sbt.\n2018 年五一, 骨折刚拆了支具没多久的 laekov 买了一对 bora one 35 碳刀庆祝一下, 并发现一万块钱的碳刀果然比三千块钱的碳刀骑起来有质的飞跃, 并和小假等人一起去骑了永四, 在每个坡都被小假拉爆.\n2018 年的夏天 laekov 发现可以早晨四点过起来去爬妙峰山, 并且由于很久之前前前会长说过 laekov 应该爬妙好好练练能进 60, 于是 laekov 日常去爬妙, 有时候要 69 分钟, 有时候可以到 62 分钟, 成绩十分摇摆. 并因此翘了一些 GRE 课 (雾). 最终在车协 dalao 户 pro 的带风下进了 60, 并觉得自己及格了. 以及清晨去骑妙, 风景和心情都还是不错的.\n2018 年的秋天 laekov 因为参加了 shenyang 办的山地入门活动, 突然对山地车也产生了兴趣, 并买了一辆黄色 merida challenger 800, 入坑了山地, 偶尔在学校里飞飞台子, 下下坡什么的.\n由一次起床失败引发的故事 夏天的时候北京天亮很早, 所以就有工作日早晨起来, 五六点钟在空旷的道路上骑个车再回去接着上班上学这种操作. 2018 年的夏天车协就有了一个早晨起来刷昆玉河的群.\n在 6 月 8 号这一天, laekov 早晨本来打算去参加一个五点的局, 但是当 laekov 没有听到闹钟终于自然醒来的时候已经四点五十了, 但是惊喜地发现群里有一个学姐也起晚了, 于是学姐来加了 laekov 的好友, 并表示要不一起去组个起晚局. 于是 laekov 快如风地化了个妆以比平时快几倍的速度出了门, 然后捡到了在丁香门口已经等了半天的学姐, 然后一起刷了个河. 然后 laekov 也没等学姐就自己回去了, 然后去荷清路绕了一圈, 然后又很巧地在清华路和学堂路的路口又遇到了学姐, 然后 laekov 为了刷学堂路的爬坡王 so 地就过去了.\n再后来 laekov 会在上班摸鱼的时候和学姐有一搓没一搓地聊天. 会和学姐约游泳然后骑着自行车带学姐去游泳池然后再去五道口约个饭. 再后来学姐被 laekov 刷完奥园带的一支玫瑰花给感动了于是成为了 laekov 的女朋友.\n所以骑车和吃饭是 laekov 和学姐的日常活动. 一起去铁三比赛也是学姐和 laekov 很 enjoy 的事情.\n为会长十月 在各种因素下 laekov 在 2018 年的暑假成为了贵校车协的会长, 并一直干到了 2019 年暑假前.\n所以 laekov 拥有管理 300 人社团的经验, 虽然事实上活跃的人数并不多.\n贵校车协更像是一个纯粹的兴趣组织, 只是为校内骑车的同学提供一个约车的大群而已. 附加的一些功能包括迎新和组织一些日常活动, 社团部的年审, 冬季夏季做两次队服, 还有就是临时学校安排的一些奇怪的活动以及大家有兴趣干什么就干什么了.\nlaekov 的原则是谁提议谁负责. 会长不是背锅侠. 然而做夏季衣服的时候学姐还是主动地承担了很多的职责.\n在 laekov 之前的几任会长都是光杆司令, 除了会长以外协会没有任何干部, 和隔壁层级分明的组织形成了鲜明对比. laekov 为了省事以各种原因任命了几位可爱的副会长, 大家有事的时候, 比如发衣服的时候, 会负载均衡一下.\n但是作为一个会长, 会接触到更多神奇的人. 协会内部的人有各种各样的需求, 而协会外部的人也会有各种各样对社团的想法.\n比如协会内部会有不同的 \u0026ldquo;骑车\u0026rdquo; 的需求. 有的人骑公路车, 为的是增加自己的功率, 锻炼强大的心肺能力, 其中一部分人更是希望在比赛中取得比较好的成绩. 有的人骑山地车, 为的是安全稳当地骑行, 又能够亲近大自然. 而另一部分人骑山地车则是为了追求在土路上飞跃的刺激. 有的人希望工作日早晚也能有和大家一起骑车的机会, 另一些人则希望在寒假暑假能有有组织的长途骑车. laekov 作为会长, 对骑车也有自己的理解和玩法. 例如让 laekov 去带一队山马寒假环海南, laekov 就是难以接受的. 所以 laekov 本自由约车的原则, 如果有人去就去, 如果只是有一个人提个想法没人响应, 那就算了. ovo\n社团外有自行车商希望车协能团购他们的自行车, 或者达成某种形式的赞助. 有专业的自行车教练, 希望车协能吸引更多的人骑车, 从而有更多的人参与比赛和科学训练. 有学校从事道路建设方面的老师, 希望车协能够为北京市自行车道路建设贡献力量. laekov 本着没有工资不干活的原则, 还是增长了很多社会阅历.\n后骑车时代: 思考与简化 laekov 的大学四年, 有三年半都是以自行车运动为主要的业余活动度过的. laekov 常常不是在工作, 就是在骑车, 或者是在准备骑车.\nlaekov 在 2019 年夏季去 LA 之前一个炎热的下午, 因为心情不好而低价卖掉了大彩. 后来又组装了 DIY 涂装的大紫. 相比大彩, 大紫不是竞技的碳架, 而是古老的钢架, 大紫没有功率计, 最开始甚至没有装码表. 大紫牙盘只有一个盘片, 最高可以踩踏的速度降低了不少. 虽然省去了很多的功能, 但是这是 laekov 骑车以来对自己骑车目的的思考与探索.\n竞赛的胜利固然快乐, 征服遥远的长途固然雄壮, 但是 laekov 更享受的, 只是骑行在路上, 在自由而快速地前进和上升这件事而已.\nMisc 一些统计数据 laekov 本科期间换了 4 个新手机, 0 个新电脑.\nlaekov 本科期间去过 4 次美国, 2 次德国. 两次去德国都在 Frankfurt.\nlaekov 一共参加了 7 场超算比赛, 其中 5 场是正式队员, 4 场由 laekov 主要负责被面试.\nlaekov 本科期间一共发表了 2 篇论文.\n(根据学校统计) laekov 一共吃过学校的 15 个不同食堂中的 14 个.\nlaekov 本科期间拥有过 13 辆自行车, 其中包括 6 辆公路车 (小绿, 大彩, 小灰, 蓝车, 大紫, 大橙), 6 辆通勤车 (黑色卧凤, 大绿, 成都死飞, 大蓝, 大白, 大粉), 1 辆山地车 (大黄).\nlaekov 在 4 个国外城市和 7 个国内城市骑过自行车 (不少于 40km).\n根据 laekov 的 strava 记录, 从 2017 年到 2020 年 6 月 24 日, laekov 一共骑行了 12884.9 千米, 海拔爬升 133472 米. (相当于从海平面爬了15 次珠峰?)\nlaekov 本科期间完成了 4 场铁人三项比赛, 2 场半程马拉松比赛, 1 场越野跑比赛. 参加了 3 次自行车比赛, 其中有一次因为下雨太冷退赛了, 另有一次因为摔断了手而 DNS.\nUpdate log 6.23: 发毕业照朋友圈的时候开了这个坑 6.24: 按照现在写文章的习惯列了一个提纲, 然后慢慢填. 填了大作业列表和一些数据. 写了学习的部分, 然后觉得自己没上过什么课. 6.25: 自行车 part 1. 6.30: 实习经历. ACM 和超算比赛. 7.11: 申请. 骑车的后半部分. Historical Comments laekov at 2020-07-11T23:04:44 终于码完了这篇文章. 撒花. 本科四年, 再见.\nconstroy at 2021-07-15T01:03:19 你居然也去了2016青岛？我们队那场第四，那是我最后一场区域赛。\nlaekov at 2021-07-19T19:28:24 是啊，那也是我的最后一场\nlaekov at 2021-08-03T01:19:42 突然想起当年acm区域赛我们的队名叫 我喜欢我旁边的主持人 啊真是青春啊\n","permalink":"/random/2897dc/","summary":"这是一篇关于 laekov 在贵系本科四年的碎片式回忆.\n关于学习 没学好的基础课 laekov 高三的时候文化课成绩似乎还可以, 但是上大学之后从线性代数A的线性空间部分开始崩溃, 到微积分B半期挂科伏地膜, 再到大雾B险些挂科. 大一大二的时候一方面选了很多课, 另一方面除了课程之外还找了很多事情干, 所以并没有好好地学习这些基础的课程. 显而易见地, 成绩也非常惨淡.\n事实证明线性代数这样的课程还是非常必要的. 例如在写 Prague 的论文的时候就遇到了一个线性代数的证明, 然而不会证, 这种情况就十分惨惨. 再比如大雾里的量子物理, 热学之类的东西, 虽然凭当时的直觉觉得没啥用, 但是真的做科研的时候发现量子计算这条路想走也会更艰辛一些, 然后就会想要是当时花了更多的时间把量子搞得更懂一些该多好.\n并不划算的抢先学 laekov 在年轻的时候天真地想空出一整学期没有课 (后来几乎就做到了), 所以一直在抢先选高年级的课, 并将这个战略一直贯彻到了大三. 然而事实证明这并不是一个非常合算的战略.\nlaekov 在大一下的时候就先上了 OS 课, 原因是时间不冲突 + 对 os 比较感兴趣. 然而当时对 CPU 什么的完全没有正确的了解, 虽然在上完 OS 之后反倒对 CPU 的功能有了一定的认知. 然后大二上的时候就造了 CPU, 大二下才上数字电路设计. 这相当于把贵系的 \u0026ldquo;数电 - CPU - OS\u0026rdquo; 这个知识链完全反过来上了.\n虽然 laekov 没有挂科, 但是中间有很多不懂的知识, 会错过很多深入探究的机会. 例如在造 CPU 的时候由于缺乏数设知识, 所以对电路的延迟和流水线设计都没有太多概念. 整个 CPU 造出来也是以 \u0026ldquo;造出来\u0026rdquo; 为目标的, 而且为了这个目标也花费了很多的心血, 而进一步的性能调优和适配更多的功能就完全无能为力了, 所以最后得分相对来说比较低.","title":"一篇理论上存在的本科毕业留念长文"},{"content":"突发奇想在 debian 上装了个 obs. linux 下 obs 可以直接 capture audio output 了, 于是可以在直播里放音乐了, 非常赞. 但是我的笔记本的这个 HD 6400 实在是支持不太了 obs 这种繁重的负载, 于是想到了利用实验室的台式机作为直播前端.\n首先要解决的问题是如何连上台式机并使用 gui. 正好发现 teamviewer 可以用命令行启动.\n$ sudo teamviewer daemon start $ sudo teamviewer info $ sudo teamviewer passwd \u0026lt;your passwd\u0026gt; 就这么就能获得远端的账号密码了, 就能用了, 非常开心. (虽然 daemon 获得号码可能要等一会儿, restart 若干次)\n然后发现 obs 没法 window capture, 所有 window title 都是 unknown. 经过一翻搜索发现原因是 obs 的 locale 不对. 于是设了一下 LC_ALL 就能看到了.\n然而 konsole 窗口是黑的一坨, 这和我手上的 debian 不太一样啊! 大胆猜测是 GPU 的问题, 但是也没搜到 GPU 怎么 disable. 所幸灵机一动打开了 xterm, 然后发现 xterm 能用! 于是就开心地用 xterm 开了个 tmux, 开了一堆 htop 什么的, 然后 window capture 之. (upd: 后来听说似乎是 xcomposite 和部分 qt 应用程序之间的兼容问题.\n使用 window capture 相比全屏的好处是即使锁屏视频输出也不变, 这样物理上更安全一些.\n于是就愉快地获得了一个通过 B 站直播远程监控实验室集群的系统. (雾)\n因为这篇文章也许还在, 但这个直播间可能已经没了, 所以截图留念.\n","permalink":"/technical/214397/","summary":"突发奇想在 debian 上装了个 obs. linux 下 obs 可以直接 capture audio output 了, 于是可以在直播里放音乐了, 非常赞. 但是我的笔记本的这个 HD 6400 实在是支持不太了 obs 这种繁重的负载, 于是想到了利用实验室的台式机作为直播前端.\n首先要解决的问题是如何连上台式机并使用 gui. 正好发现 teamviewer 可以用命令行启动.\n$ sudo teamviewer daemon start $ sudo teamviewer info $ sudo teamviewer passwd \u0026lt;your passwd\u0026gt; 就这么就能获得远端的账号密码了, 就能用了, 非常开心. (虽然 daemon 获得号码可能要等一会儿, restart 若干次)\n然后发现 obs 没法 window capture, 所有 window title 都是 unknown. 经过一翻搜索发现原因是 obs 的 locale 不对. 于是设了一下 LC_ALL 就能看到了.\n然而 konsole 窗口是黑的一坨, 这和我手上的 debian 不太一样啊!","title":"远程部署一个通过 B 站直播分发的实验室集群监控系统"},{"content":" 要毕业了额.\n虽然疫情让这个毕业季显得如此生涩. 但还是决定有仪式感一点\u0026hellip;? 地来个倒计时吧.\n虽然好像已经过了六天了. 前六天的一起补吧.\n6.9 DAY20-DAY14 答辩的前一天. slides ready. 剩下的工作就是改改文章然后交给 kezhao 了.\n于是决定把前些天没打的卡补上. 于是有了这篇文章.\n20 最喜欢的一张照片 (翻了翻硬盘)\n在学校里好像没啥印象特别深刻的照片.\n大紫车刚喷出来的样子, 嗯还挺好看.\n19 最喜欢/收获最大的一门课 俄语? hhh. 虽然只上了一学期并很累但是很开心.\n树莓派跑丹, 存储, 数据结构, 数据库专题, 编原, 网原, 造机, 面向对象什么的, 就内容讲都还挺有意思的, 也学到了很多东西.\n还有图形学写大作业 (虽然写得效果不咋的) 但写起来还是很有意思的.\n还有微积分, 线代, 大雾, 电子学这些基础课虽然好像日常听不懂最后也没太学明白, 但也是很重要的基础课吧.\n要说最, 好像还真最不出来.\n18 第一次跑 3000 米? 大一第一门体育课是 5000 米跑. 每节课一次. 第一次体育课 5k 跑了 24 分钟? 毕竟还是有点基础的.\n高一高二的时候偶尔晚上会去跑 1.5k 或者 3k, 在七中的操场上跑 10 圈.\n就还好? 甚至北京的海拔比较低所以没有在成都那么累. 虽然当时兔子有点坑, 说好的 5 分配速结果跑得飞快.\n好像第一次阿甘是个俩 zz 室友一起接力跑的. 23333.\n后来成为铁三选手之后基本上起脚 5k 了, 再然后就打死也不想跑步只想骑车了hhh.\n17 吃到最晚的一次聚餐 造机的时候在 308 熬夜, 大概三点的时候叫了串, 然后 84 下去拿的. 这算聚餐且最晚吗?\n蒜协主席团有一次深夜出去吃西门烤翅, 好像 11 点前回来了. P.S. 西门烤翅和水磨社区一起, 已经拆成废墟了.\n还有就是去黄山跑 703 的时候, 在过夜火车上和洞pro, 何pro, 小白一起给艺pro过生日喝酒吃蛋糕. 虽然也没有太晚, 但印象还挺深刻的.\n16 哭鼻子 啊? 记不得了.\n似乎没在学校哭过.\n倒是有心情不好的时候躺在床上发呆想哭哭不出来的经历.\n15 哪个食堂的哪道菜 桃李二层的辣鸡\n桃李一层的牛肉面和各种肉\n清芬一层的担担面\n清青快餐的辣堡\nC 楼底下的手抓饼\n(好的我是一个对美食比较冷淡的人, 除了脑子和肥肠)\n14 印象最深的电影 \u0026ldquo;无问西东\u0026rdquo; 吧. 还挺感动的\u0026hellip;? 记得当时在过年在老家看的. 感觉有一股热血在心中流动这样. 我就是还是有一种当英雄的梦想吧.\n好像也不是那么有闲去看太多电影 ovo\n6.10 今天下午毕业答辩, 然而好像有点多舛. 昨晚遭遇实验室断网, 论文 pdf 带了一大堆 simsun.ttc, 实验室服务器被攻击, 然后今早起来楼上开始装修了电钻突突突???\n感到 very gg. 祝我下午顺利\nUpdate: 还算顺利地讲完了 slides, 然后老师觉得我的题目非常难, 甚至是不可做的, 但我的做法__没有意义__. 我??? 内心: 我觉得确实没啥意义, 只是比现有方法快了几十倍而已, 但没人会用最慢的那种方法做吧\u0026hellip;\n于是就并没有什么实感地离毕业又近了一步.\n13 最难忘的出游经历 本科四年出去浪了不少次. 第一次去法兰克福印象比较深, 夏天天黑得特别晚亮得特别早, 在城里逛街挺有意思的. 从宾馆穿过一个隧道走到美茵河边然后试图扫共享自行车失败又走回来了. 然后第二年去的时候就去租了个 (没租到公路车) 公主车, 然后爬了个山 23333.\n黄山 703 那次印象也很深刻, 在南京吃完早饭开始下雨, 开车到黄山的时候已经是大暴雨了, 然后淋得浇湿地领了东西. 第二天早上去起点的时候发现有的车都被水泡了? 幸好我的车没被泡. 游泳的时候发现水里比地上还暖和, 而且水还很甜. 然后在雨里骑车, 跑步的时候雨停了但是膝盖不舒服, 拄着后面追上来的艺 pro 到了山顶 orz. 然后第二天早上醒来发现, 天晴了!!!???\n6.11 毕业答辩结束后的第一天. 楼下依然在电钻. 早上并没有成功起床, 于是去蟒山骑车+飞飞机了. 航拍了一个脑洞很大的躺地上照. 然后回来开组会+听楼下电钻+学习pipedream.\n12 最疯狂的考试周 几场考试连在一起好像是常规操作, 也并不是很疯狂?\n倒是大三下的时候选了四门专业限选课, 然后期末搞了四个大作业, 挺可怕的. 经常要在不同的作业之间线程切换hhh.\n6.12 于是在本科答辩完成的第二天开始了 phd 生活\u0026hellip;? (雾)\n给我一个暑假好像也不知道浪什么\u0026hellip; 毕竟是一个闲一小时就会不知道干啥的 boy.\n所以还是做做 project, try try 写 paper 吧\u0026hellip;\n11 点一首歌给自己的六字班生活 郑智化 水手\n\u0026ldquo;总是拿一点微不足道的成就来骗自己\n\u0026ldquo;总是靠着酒精的麻醉才能够睡去\n\u0026ldquo;总是莫名其妙感到一阵的空虚\n\u0026ldquo;风雨中这点痛算什么\n\u0026ldquo;擦干泪 不要怕 至少我们还有梦 (? 没有)\n6.13 在家里蹲的周六. 然后写完忘保存了?\n10 最喜欢清华的哪个地方 当然是我宿舍的床啦.\n还有其它一堆, 昨天写了\u0026hellip; 不记得写啥了\u0026hellip; 就算了.\n6.14 早上出去玩了并拍了视频.\n然后北京ggl所以可能回不去毕业典礼了.\n9 最有成就感的一件事 好像挺多.\n发 asplos? 超算比赛冠军(一大堆)? 爬妙爬进 60 分钟?\n为啥要最啊\u0026hellip; 最不来最不来\u0026hellip;\n6.15 返校申请正式被退回了\u0026hellip;\n继续家里蹲.\n8 最舍不得删记录的群聊 当然是又傻又搞笑的宿舍群.\n坐等 LR 同学的大作.\n6.16 2020.6.16, 一个值得纪念的日子, 从初二追到现在的辣鸡小说现在终于完结(草草烂尾)了.\n竟然在大学毕业前第七天结束. 感觉好神奇.\n7 最晚一次夜聊的话题 LR 同学的感情问题(?)\n6.17 昨天半夜给 harry debug 的时候听说学校发通知所有人原地掉头回家不准返校. 于是 dq 计划完美 gg 了.\n然后今早起床楼下居然还在装修. what???\n6 最喜欢点的外卖和喝的奶茶 外卖? 吃得很少 (除了组会). 吉野家? FFT? 深夜在成都的脑子! (emm 还有酒便利)\n奶茶的话当然是西门外顺如风旁边的那家奶茶. (虽然已经被某学姐喝没了)\n6.18 原定返校的日子.\n早晨去刷河顺便去西门看了一眼. 就当返校了?\n毕业典礼没了, 这个倒计时是不是也可以变成什么 50 年的倒计时.\n5 六字班最好的盆友们是怎么认识的? 变态智障和和学霸: 一群二货舍友.\n84: 隔壁舍友.\n耀耀: TUOJ 第一任产品经理! 还创下了 60 行代码写了 15 个 bug 的记录!\n蛤利: 最初好像我认识他他不认识我? 然后我去找他问网原实验里那个 socket 咋挂了来着. (拯救了一整个年级的网原实验的蛤利 tql!)\n黄大伯: 最开始去实验室开组会的时候发现有一个做科研很牛逼, 读了一万篇 paper 的同学.\n6.19 好像没啥特别的周五.\n4 自己身上最大的变化 变颓了. 嗯\u0026hellip; 只能想到这个\u0026hellip;\n6.20 周六. 去学校隔墙拍了个照.\n就这样要毕业了.\n3 有没有留下未完成的遗憾 没有推着大紫在校园里拍毕业照.\n没有看到六教北边的路修好拆围栏.gg\n6.21 周日. 去妙峰山拍了高质量毕业照.\n2 回到四年前对自己说啥? 好好学习? (说了也不会听大概)\n应该提醒自己别提前选太多奇怪的课 hhh.\n6.22 下午系里毕业典礼, 明天全校毕业典礼.\n上午在家摸鱼.\n1 要毕业了心情怎么样 平淡. 毫无实感的毕业季. 倒是有很多新的事情要干.\n本文完.\n","permalink":"/random/4ac2e6/","summary":"要毕业了额.\n虽然疫情让这个毕业季显得如此生涩. 但还是决定有仪式感一点\u0026hellip;? 地来个倒计时吧.\n虽然好像已经过了六天了. 前六天的一起补吧.\n6.9 DAY20-DAY14 答辩的前一天. slides ready. 剩下的工作就是改改文章然后交给 kezhao 了.\n于是决定把前些天没打的卡补上. 于是有了这篇文章.\n20 最喜欢的一张照片 (翻了翻硬盘)\n在学校里好像没啥印象特别深刻的照片.\n大紫车刚喷出来的样子, 嗯还挺好看.\n19 最喜欢/收获最大的一门课 俄语? hhh. 虽然只上了一学期并很累但是很开心.\n树莓派跑丹, 存储, 数据结构, 数据库专题, 编原, 网原, 造机, 面向对象什么的, 就内容讲都还挺有意思的, 也学到了很多东西.\n还有图形学写大作业 (虽然写得效果不咋的) 但写起来还是很有意思的.\n还有微积分, 线代, 大雾, 电子学这些基础课虽然好像日常听不懂最后也没太学明白, 但也是很重要的基础课吧.\n要说最, 好像还真最不出来.\n18 第一次跑 3000 米? 大一第一门体育课是 5000 米跑. 每节课一次. 第一次体育课 5k 跑了 24 分钟? 毕竟还是有点基础的.\n高一高二的时候偶尔晚上会去跑 1.5k 或者 3k, 在七中的操场上跑 10 圈.\n就还好? 甚至北京的海拔比较低所以没有在成都那么累.","title":"毕业倒计时和打卡"},{"content":" ","permalink":"/post/3d5d53/","summary":" ","title":"GIF Test"},{"content":"Base64 是一种常用的二进制到文本的编码方式, 应用非常广泛.\n考虑这么一种场景, 两人之间现只能发送文字信息, 但他们要发送一张 jpeg 格式的图片.\n如果尝试用文本编辑软件打开 jpeg, 将会发现是一大堆乱码. 原因是 jpeg 是二进制文件, 每个字节表示的东西几乎都不是给人看的字符, 自然没法解析出来.\n而如果想把这些东西强行复制出来, 那更是一种灾难. 里面会有各种各样神奇的比如换行符, 甚至是\\0 (文件结束符) 这种迷惑的东西. 自然是没法很好地以文本的方式传输的.\n于是就有了这么一种把任意二进制文件都转化成没有奇怪特殊字符的方法.\n首先把二进制文件或者任意字符串写成一串 01. 然后把相邻的 6 位合起来, 用 A-Za-z0-9+/ 一共 (64=2^6) 个字符来表示. 最后可能省下 2 个或者 4 个空位, 则用 0 补齐, 然后放一堆等号上去.\n这样就可以把任意的文件, 比如文字, 图片, 视频都转换成肉眼可见, 易于复制和通过 http 之类的协议以及 json 之类的格式来传输的数据了.\n下面是一些例子\nhello world =\u0026gt; aGVsbG8gd29ybGQ=\n我不知道 base64 是什么 =\u0026gt; 5oiR5LiN55+l6YGTIGJhc2U2NCDmmK/ku4DkuYg=\n宝宝在这里给宝宝藏了一张小纸条: 6KaB5LiN6KaB5Y6755yL55yL5a6d5a6d55qE572R5piT5LqR6Z+z5LmQ5q2M5Y2V6YeM5aSa5LqG5LuA5LmI6L+35oOR55qE5Lic6KW/Pw== я говорю по русский плохо =\u0026gt; 0Y8g0LPQvtCy0L7RgNGOINC/0L4g0YDRg9GB0YHQutC40Lkg0L/Qu9C+0YXQvg==\n=\u0026gt;\niVBORw0KGgoAAAANSUhEUgAAACAAAAAjCAIAAAB6jJ8NAAABA2lDQ1BJQ0MgcHJvZmlsZQAAGJVjYGC8wQAETAIMDLl5JUVB7k4KEZFRCgxIIDG5uIABN2BkYPh2DUQyMFzWxaMOF+BMSS1OBtIfgNikCGg50EgVIFskHcK2ALGTIGwfELsoJMgZyE4AsjXSkdhJSOzykoISILsDpD65oAjEngNk2+TmlCYj3M3Ak5oXGgykJYBYhsGdIR8I0xlyGFIZFBiCGbIZMhkSGZDCI4WPgcHoJFCrMkIsaz0Dwx4jBgZBFoSYhiSIz8BwkLkgsSgRLMQCCuS0NAaGT8sZGHgjGBiELzAwcEXBAgGhFxGWONyqgMWtngx5DMkMekCWEYMBgyGDGQA3Ez2Wa5ANhwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+QCDQwaDpckVjEAAAhESURBVEjHlVdpbFzVFf7OuXdm7LFnvDuJsziO42wOCSGkjXAbATENpEBFFxAtUgtFqH/4Q6X+KQhVlUD90UpVf7SpRFERgtKiUkooBJqkrAlZLDshi7d4idexx/bs8+a9e09/vBnbuLSiR1dvubrvLN8995zvUU3L17dtWpNIZu7r3PudB+5YvaY+VBYEEQEgEIgAAQAiEgFICBAQAED8G1BatCQEgRCInYLbdXlYjLn33gNtbetDIU1MDCImJvKXEhGR+HpAvnYiYhCKA1h6Ls0QCAIViLZGK8szefedf3WdPH5uV/umuobqpa+IiAjkK2RaJiXDny+LJlWouk1gGfK9+w70DU26jrt1W7M1VilmpYiB5d+gFNLnOM/FV1m0DCJSzW03KdDjDx/+7oOdP3r0G8Mjk/9488OpiZmG+uqqmihA/jYoYiZiEKMYEhNR0dhnsGFaNEsE0ulsvjIUnJtNhMvLwuHyhx48lMvnAQoGNEkJIizbzBK8PoD4DxERAEzkPyiqbMnmC/v2bD5+7JMPP+reubM1Eg0HtSLFK7UvQkRSQmBxLANwGZ5ExMYzIa2PvPTP106c372rNVJZXgSvuEwIFrCAEPkDy6DHCr3LrTITAH34K7uyOeexH94D2NtuvTmg1crIP/PKK7N9pSzOSDGCtauqD9564+tHP2heXStiVkbLJLKomvF/SBFb3Ts2U9NYd+PWDZWV4VAoBBHfZ/84xeOJN978OFoZ7rx9b7S6SkS+mPalZWomX9vV018fCR6+50CoPFhKt6L906c+feqZP57rHqguD95083Zr7X9BZoX2JQO6TKubd2y4/cAesdYaS0wAQQgE13GJYTw7HV9Yt6HxC7vvO2d9sHXL2rrHH7177YZVZz/uvu2uDt87pXhw4Povfvmn8z39WceLlAUCSllrv7jvCwupgYHxcLhMuXrdzFT8/vsPtm5tUVr5ZpnoyaePHD3encoWwCClL356bf/eLbV1Vf8ToqUMv3Ll2k9//sLrx85yVWVoc8tqhgSCavEczsbiwyOxYskRsEIu61y+PGStFTH+sSgNK+KVJm1yfm5mfMIaLzGXTGTysWRW19dEIyEdCulSdCQiE5Oz8bkUrBCBrH3iB4c6OnZf6LqaTqY8x6lprPdzmQnjg9dGB6+v37y+qWXjxfOXLpy/MjQ08dXOfSePd+VdlwT6xed+kplbsMaQQKgI4vWRydhsyjP+RvGRF9+5Zf92sm6kKsrsFxnJJ+d1MNh7offs6SubJuY7o9H3j50aml54+3TvX96/bI0k84XaaJVevaaOmuqX+pOQADNTs67nWstCloRi87mRocmZ2LwxBWI/lSmXzZ957d26plUu67PnrkbCgVNnrlREo9mc07GjuWlN7avvXZxdSGjAQkhosUKCILt2b15THxmJpfe1N0/Hk+PTC+e7ByWXzSaTVfW1IhC30Heh9+ylcefiWDqTO3aqL+0YQ6qiIkSe3dpc375ny9FT/ZaFyRoSQ9ZAjEjxGtIc0IFwgL92y4679m/RwODYzNR85pU/vBHQzCRTg8NcyFeEQy8f63r9w76UY85dHt24rqEqGtYBPTefjAb5+9/uuK9zF5Nn4Hkwhowha91MBk6hPFJmgO3r65/48bcefeTOEGN7a9MjDx86/clltoX4yPBI96VcLn9lZMYI8o7LjNlk7syno9l0Fkxvd41k0pnHHuh45qmHtBiPQNYYVpqYyHgcCIa1CjJta2uKT889+fTzLhAu05XlgZqK0PULl8qjEdc1b53s+ah7uODBihQ8m865qVzBAumsm3Vzz7/y/g3tm/760nvaOK5xXWtMKBwWgskXAkqnFtKJROZw557hq6PzCUes2b1l3ZbWpm/ecUN8In7qzx/UVVXURCpczziuC0AsCCgP6tm0ky24IAzFUr974d3n/nZGO9m89WwgGCjkHICcnJOKJ/sGJoKQ1rZ1zz77ct4zmxprbtq5kURFG2p/c+Sd/tlUPJHZuKERrIRciFghgXjG5BxXAAhGZtO///s5MOvJ0VgkWqEDbi5fiE3NXZ+c+9mvXr37zv2i9Ym3zk3MpY1BWZlOp/IcDE5en++fXrgaSwvxUM+IAEzESpGxBsgVTCqfXuz5AgFELSQjkfKyRDr/25dO/PrFE+9+0juddq6NzVaUBW/c0Xyhd2zb5rWTsfmD+9sV01jf6KFDX+7c2zo4OG7EHtjTVhFSHdubWzeuGhidkc80ApAQEfTb3cNHuwaNKyW+BxLMzGeUlf7h6bFY4obN62orK8bH45WRcOve9unYXO/wtOPZL7Vv6ukfS+acfe0tPX1jBFgRBon456pUsyvWHgJgrfiMSSAgKDCxNFSG5zNOU0PUM2bnlrVNjdVvnuwZnUkQcTCoRazfIFzPas0MKGIArmcIEPKbslDZmk6/wC0yHlYkIrCwxrJipRkgYSsWImBQdWX5QioHiKUiiytSViZrxTMGfmUQgKBJ/ALHEAiJEESEiIiFiMFsrGXFitgTy0xiZSGTtdYIESxZGGZiVgYixorflKTI/UREC5WYOBMTg1HEEVCKBCCw1ooJwYCyVqzAGmFNIsJEYMVFdilCgC3yMAKsgADd3ryKiZlJKWJiABbCxANjM1vXN4xMzTXWROqiYUUsgLXWChkRa8WK9WMnge+WsSKQImf1+b5Ap/KOMSYYCDARE0FgRPLGcEgPTM8r5kTOcY0JKB1QzCBDIJCIELG1QihCDIGvfTFXRQQgnc45WinPFgBiJggBIiAGWSYGrJVswWMyTNBK+yqIwMSy+ItDJGKZ2LOiiApiiUiBPJF/A6UGTlcOp0/eAAAAAElFTkSuQmCC 那么如何方便地编码与解码 base64 呢?\n在 linux / mac 的终端 (terminal) 里一般都带了 base64 的编码与解码程序.\n直接运行 `echo \u0026ldquo;abcde\u0026rdquo; | base64\u0026quot; 就可以对 abcde 这个串进行 base64 编码了.\n具体来讲, echo 命令将 abcde 这个字符输出到了标准输出, 而 | 的功能是将 echo 程序的标准输出和 base64 程序的标准输入接起来. 这样 abcde 就成为了 base64 程序的标准读入所读到的内容, 而 base64 程序会从标准输入中读入字符串, 将它 base64 编码的结果输出到标准输出中. 因为我们未对它的标准输出进行任何指定, 所以它的输出会被显示到屏幕上.\n相应地, 只需要给 base64 加上参数 -d, 如 echo \u0026quot;YWJjZGUK\u0026quot; | base64 -d, 则可进行 base64 解码. 例如将 YWJjZGUK 解码为 abcde.\n当然啦, 还有更简单的方法, 直接打开搜狗, 输入 base64 解码, 就会获得很多的在线解码工具 (例如 https://base64.us/), 甚至不需要下载, 只要在网页里粘贴内容即可实现编码/解码.\n","permalink":"/technical/5a37b3/","summary":"Base64 是一种常用的二进制到文本的编码方式, 应用非常广泛.\n考虑这么一种场景, 两人之间现只能发送文字信息, 但他们要发送一张 jpeg 格式的图片.\n如果尝试用文本编辑软件打开 jpeg, 将会发现是一大堆乱码. 原因是 jpeg 是二进制文件, 每个字节表示的东西几乎都不是给人看的字符, 自然没法解析出来.\n而如果想把这些东西强行复制出来, 那更是一种灾难. 里面会有各种各样神奇的比如换行符, 甚至是\\0 (文件结束符) 这种迷惑的东西. 自然是没法很好地以文本的方式传输的.\n于是就有了这么一种把任意二进制文件都转化成没有奇怪特殊字符的方法.\n首先把二进制文件或者任意字符串写成一串 01. 然后把相邻的 6 位合起来, 用 A-Za-z0-9+/ 一共 (64=2^6) 个字符来表示. 最后可能省下 2 个或者 4 个空位, 则用 0 补齐, 然后放一堆等号上去.\n这样就可以把任意的文件, 比如文字, 图片, 视频都转换成肉眼可见, 易于复制和通过 http 之类的协议以及 json 之类的格式来传输的数据了.\n下面是一些例子\nhello world =\u0026gt; aGVsbG8gd29ybGQ=\n我不知道 base64 是什么 =\u0026gt; 5oiR5LiN55+l6YGTIGJhc2U2NCDmmK/ku4DkuYg=\n宝宝在这里给宝宝藏了一张小纸条: 6KaB5LiN6KaB5Y6755yL55yL5a6d5a6d55qE572R5piT5LqR6Z+z5LmQ5q2M5Y2V6YeM5aSa5LqG5LuA5LmI6L+35oOR55qE5Lic6KW/Pw== я говорю по русский плохо =\u0026gt; 0Y8g0LPQvtCy0L7RgNGOINC/0L4g0YDRg9GB0YHQutC40Lkg0L/Qu9C+0YXQvg==","title":"一篇暗藏玄机的 Base64 简介"},{"content":"开心的是, 在这里写什么都不会有人审核.\n关于所谓的 yu qing 监管制度, 到底应该吐槽什么呢.\n身边的 dang yuan 都说不要制造恐慌 不传播消息-\u0026gt;渎职, 妨害公众知情权 好难额.\n可是为什么所谓的 yu 情监管机制这么强大呢.\n我想不仅仅是为了抑制 sars 吧.\n想想莆田, 想想电视上的各种医骗, 双黄莲.\n如果我是警察, 我抓到了一个说着奇怪言论的好像是医生的人. 想着我被假医生害死的老父亲, 我要不要先一刀砍了这个人?\n信任危机早就存在了. 训诫好人的不是警察, 而是千千万万或别有用心, 或管不好自己嘴巴的 elements.\n坏掉的人多了, 当中的好人也会看起来坏坏的.\n一个糟糕的社会.\n","permalink":"/random/ce69e9/","summary":"开心的是, 在这里写什么都不会有人审核.\n关于所谓的 yu qing 监管制度, 到底应该吐槽什么呢.\n身边的 dang yuan 都说不要制造恐慌 不传播消息-\u0026gt;渎职, 妨害公众知情权 好难额.\n可是为什么所谓的 yu 情监管机制这么强大呢.\n我想不仅仅是为了抑制 sars 吧.\n想想莆田, 想想电视上的各种医骗, 双黄莲.\n如果我是警察, 我抓到了一个说着奇怪言论的好像是医生的人. 想着我被假医生害死的老父亲, 我要不要先一刀砍了这个人?\n信任危机早就存在了. 训诫好人的不是警察, 而是千千万万或别有用心, 或管不好自己嘴巴的 elements.\n坏掉的人多了, 当中的好人也会看起来坏坏的.\n一个糟糕的社会.","title":"针对训诫事件的死亡凝视"},{"content":"就在刚刚运行着本网站的阿里云 ecs 经历了一次升级, 从 ubuntu 16.04 lts 升级到了 18.04 lts.\n升级过程平稳, 但升级后发现这个 php 做的网站变成了源码. 目测是 php 跪了, 于是尝试修 php.\nphp5 仿佛已经不被支持, 于是换用 php7. 直接暴力 apt remove 再 install 就可以了, 配置会被保留.\n然后发现 mysqli not found. 解决方法是在 /etc/php/7.2/apache2/php.ini 里面将 extension=mysqli 一行给 uncomment 掉.\n然后就完事了.\n","permalink":"/technical/3132d1/","summary":"就在刚刚运行着本网站的阿里云 ecs 经历了一次升级, 从 ubuntu 16.04 lts 升级到了 18.04 lts.\n升级过程平稳, 但升级后发现这个 php 做的网站变成了源码. 目测是 php 跪了, 于是尝试修 php.\nphp5 仿佛已经不被支持, 于是换用 php7. 直接暴力 apt remove 再 install 就可以了, 配置会被保留.\n然后发现 mysqli not found. 解决方法是在 /etc/php/7.2/apache2/php.ini 里面将 extension=mysqli 一行给 uncomment 掉.\n然后就完事了.","title":"Ubuntu 发行版更新记录"},{"content":"最近因为各种神奇的移动, 在不同的3台电脑上装了 debian, 并踩了不同的坑. 开一个文章来记录一下各种神奇的坑.\n0 一台 2013 年的联想 ideapad 笔记本, 配备了 AMD HD 6400M 独显. 因为突然想起了 bios 的管理密码所以激活了独显. 于是想用独显来跑 opencl 之类的.\n然而老的 amd crystal 驱动好像不是很支持? 时间有点久, 忘记了踩了什么坑. 总之 apt 瞎搞最后就装上了.\n1 实验室师兄的 i7 + GTX 1070 + 4k 屏. 装 nvidia 驱动并 disable nouveau 是常规操作.\n然后遇到的问题是 4k 屏对 gtk 的程序好像不是很友好. chrome 的地址栏和 ibus 之类的东西会变得非常小, 瞎眼. 解决方案是用 GTK_SCALE=2 这个环境变量. 但问题是这个环境变量不应该在开窗口的时候再设, 而是要放到 profile.d 里面. 然后就解决了问题.\n然后 ibus 冥顽不化地占据了我的输入法. 然后发现 apt remove 之后就能愉快地使用 fcitx 了.\n(fcitx 的五笔还是比 ibus 的五笔好用很多)\n还有问题就是 steam 会闪退. 检查发现是 steam 的 glx 炸了. 需要安装 nvidia 的 glx.\n2 成都老家里有一台 2011 年的老台式机. 因为有在家干活 20 天的需要, 所以带了块 ssd 也准备装上熟悉的 os 和 de.\n第一个坑是它的 usb 无线网卡并不被系统很好的支持. 即使装了 firmware 之后连接 wifi 还是会告诉我 authentication time out, DEAULT_LEAVE 啥啥的. google 发现是 NetworkManager 被那个 wlx... 的 if name 给搞傻了, 不知道它是 wifi. 解决方案是在 /etc/udev/rules.d/70-persistent-net.rules 这里加这样一行.\nSUBSYSTEM==\u0026#34;net\u0026#34;, ACTION==\u0026#34;add\u0026#34;, DRIVERS==\u0026#34;?*\u0026#34;, ATTR{type}==\u0026#34;1\u0026#34;, KERNEL==\u0026#34;wlx\u0026#34;, NAME=\u0026#34;wlan1\u0026#34; 大概就是指定把叫 wlx 啥啥的 if 都改名叫 wlan1. 然后重启就解决了问题.\n但是还有问题. 重启之后发现网卡整个不见了, 然后出现了一个装着 windows 驱动的块设备. 怀疑是硬件里面会判断如果没有被正常使用就切换到装驱动模式. 这我真傻了. 最后找到解决方案是先进一次 windows, 让它以为自己正常工作了, 再重启回 debian, 然后只要网卡正常工作应该就没有这样的问题了.\n然后装 nvidia 驱动的时候发现 nouveau 无论如何也没法 rmmod. 远程连接强行 rmmod 再连上之后发现花屏了 (可能和 dvi 适配器有关, 但这个辣鸡显示器只有 dvi 和 vga, 显卡上虽然有一个 hdmi 但也没用). 重启之后发现 nouveau 无论如何都还在. blacklist 也不管用. 最后只留下一张 gts 450 的 nvidia-smi 截图, 就删掉了 nvidia 驱动, 用回 nouveau 了. (反正屏幕也不高清.)\n","permalink":"/technical/29af09/","summary":"最近因为各种神奇的移动, 在不同的3台电脑上装了 debian, 并踩了不同的坑. 开一个文章来记录一下各种神奇的坑.\n0 一台 2013 年的联想 ideapad 笔记本, 配备了 AMD HD 6400M 独显. 因为突然想起了 bios 的管理密码所以激活了独显. 于是想用独显来跑 opencl 之类的.\n然而老的 amd crystal 驱动好像不是很支持? 时间有点久, 忘记了踩了什么坑. 总之 apt 瞎搞最后就装上了.\n1 实验室师兄的 i7 + GTX 1070 + 4k 屏. 装 nvidia 驱动并 disable nouveau 是常规操作.\n然后遇到的问题是 4k 屏对 gtk 的程序好像不是很友好. chrome 的地址栏和 ibus 之类的东西会变得非常小, 瞎眼. 解决方案是用 GTK_SCALE=2 这个环境变量. 但问题是这个环境变量不应该在开窗口的时候再设, 而是要放到 profile.d 里面. 然后就解决了问题.\n然后 ibus 冥顽不化地占据了我的输入法. 然后发现 apt remove 之后就能愉快地使用 fcitx 了.","title":"在若干不同机器上安装 Debian 并修了一些锅的记录"},{"content":"因为发现助教给炼丹任务提供了 64 张图片作为训练集, 64 张图片作为验证集, 所以果断放弃了炼丹任务. (update: 发现还是炼丹任务好做)\n打算用 buildroot 从底向上 build 一个能跑起 python-gpio 的 linux. 另开一文记录一下坑们.\n(补充) 计划 先不管镜像大小, 用 buildroot 搞出一个能跑的系统. (好像 buildroot 部分差不多了.) 实时性补丁 进一步裁剪内核. (即使不栽应该也比 raspbian 小很多了. 毕竟老师那边 raspbian 裁剪纪录是 200M, 而 buildroot 现在才不到 150.) build 使用了默认配置 $ make raspberrypi3_defconfig 节省了很多自己摸索的时间.\n配置静态 ip 的时候发现可能是由于 networking 的版本问题, 必需要在 interfaces 配置文件里把 netmask 写在 address 上面, 否则不 work.\n另外选装上了 openssh 以支持 ssh 登录. 在折腾了半天之后终于能 ssh 上树莓派上的系统了.\n然后发现它有一个轻量级的 dropbear 作为 sshd. 于是果断把 Openssh 给删了.\n另外神奇的锅是 eth0 会过一会再 ready, 于是 init.d 里的 ifup -a 并不能把 eth0 给 enable. 解决方案是加一个异步的 sleep 10 秒再 ifup 一次. 很醉.\nRPi.GPIO 瞎折腾一阵发现减不下来 rootfs 大小之后, 觉得第一要务是把 GPIO 程序跑上. 于是装了 python 和一个 RPi.GPIO 的 python 包 (直接在 .config 里改就行了). 然后 rootfs 直接从 60MB 暴涨到 100MB. Python 真是太可怕了.\nupd: 嫌打补丁麻烦 放弃了.\nOpenCV 转眼间折腾了大半个星期才装上 opencv. (v4l 还没搞定)\n才明白 br2 的正确用法\u0026hellip; 在 .config 里东西消失代表有 dependency 没有被满足, 此时需要手工查 Config.in 来把 dependency 满足一下.\nopencv python 的锅在于它依赖 numpy 而 numpy 依赖 glibc 而我用的是 uclibc. 解决方案是网上有人给出了 numpy 的不依赖 glibc 的 patch. 但问题是这个 patch 用的是 1.8.0 而现在已经到 1.16.0 了. 不过降级看起来影响不大. 记得要删掉 hash 否则会报错.\n另外 rootfs-overlay 可以很好地解决各种 config 在重配之后的覆盖问题.\nRaspivid 和摄像头驱动 用 rpi-userland 这个包可以装上 raspistill 之类的一系列东西.\n为了启动 camera 需要在 boot 里面加一些镜像并在 config.txt 里面加上 start_x=1. 参考了 stackoverflow\n于是加上 netcat 后终于能把摄像头监控跑起来了.\n直播推流 为了 http 加了 nginx. 准备直接用 python 静态生成 http 的方法来减少工作量.\n找到一个 nginx-rtmp 的 nginx module 来支持直播的广播. 还没完全搭好.\n后面还需要再加一些用户态的东西大概就能搞定基本需求了. nginx-rtmp 还是很好配置的, 抄 readme 即可. 一个坑在于它的 exec_static 我最开始怎么也启不起来. 后来发现要在 nginx.conf 里加一个 user root;. 大概只有 root 才有权限执行东西?\n下一个坑是 rtmp 协议比较老, 找不到好用的 html5 的前端播放器, 只有 video.js 有一个基于 flash 的版本, 显然不能要. 仔细观察发现 nginx-rtmp 支持 hls 这个比较新的比较科学的格式, 而且 video.js 也通过 contrib 的方式支持了 hls. 就很开心地写 (抄 example) 了一个前端的网页, 于是现在可以做到视频流直播了.\n运动监测 首先要把 rtmp 的视频接进 opencv. 目测是一个不小的坑. 确实是.\n发现的第一个锅是 import cv2 跪了??? 经过一顿猛如虎的检修发现首先是 ffmpeg 找不到 libmmal. 于是直接禁掉好了, 反正也不用.\n第二个锅是 /lib/uclibc-xxx.so 直接变成 invalid binary 了 (可能是 64位的 binary). 于是连夜换了 glibc, 然后发现 glibc 能够正常工作. 感到迷惑.\n总之 opencv 能用了, 很好的是 cv.VideoCapture 可以直接抓取 rtmp 流, 省了很多事.\n运动监测算法我想得比较简单, 直接拿两帧减一下取绝对值求和就可以了. 实测除了桌面抖动引发的大规模画面边缘以外, 检测效果还不错.\n想到一个解决抖动的方法是直接把图象降分辨率仿佛效果也不错.\n图像识别 这里要强烈吐槽这个任务太麻烦了. 识别人脸多好.\n感觉 dnn 会比较麻烦, 然后发现 opencv 带了一个 haar 的识别和人脸的模型, 但并没有石头剪刀布的模型. 先跑了一个人脸的, 一次 Inference 要 400ms 左右, 正好一秒一次.\n然而问题是这个传统方法训练那 64 张图片效果有若见鬼. 于是最后还是用了 pytorch 训一个 MobileNetV2.\n训练 本人不会炼丹. 请教了 cv 专家 (室友) 后学习了用 torchvision 做 random rotation 和 color gitter 的办法. 并找了一个 2699 + v100 的集群来做训练.\n发现因为原图太大, 所以很多训练时间放在了 cpu 生成数据上, 而 GPU 的利用率低得可怜. 于是想到先用 CPU 生成一些数据, 然后在 GPU 上用生成好的数据迅速地训练几十个 epoch, 达到一定精度后再使用比较慢的新鲜数据来训练. 于是成功地把 GPU 利用率打到比较高. 但神奇的事情是在预生成数据上的精度会很高, 但并不能成功迁移到新鲜数据上. 于是又在新鲜数据上过拟合了一会就放弃了. 最终达到的 training acc 在 72 左右 (4分类).\n模型转换 pytorch 训练出来的模型并不能很方便地被 opencv 读出来 (其实是我的 opencv 版本太老). 而我并不想再装一个 pytorch 在树莓派上. 然而看到 opencv dnn 有一个 readNetFromONNX 的功能, 于是导出了一个 ONNX 模型.\n然而发现它不支持 Clip 操作. 经过尝试发现新 2 个小版本的 opencv (3.4.8) 可以支持 Clip, 但新的问题是即使升到 opencv 4 也不支持自定义维度的 reduce mean (很奇怪啊? numpy 支持这个事的) 检查模型后发现 reduce mean 的作用是在 feature 的最后一步, 将任意大小的图片压缩成 1280 维的 feature map. 于是把 features 和 classifier 分开导出, 中间的压缩用 numpy 在 inference 代码里进行处理, 加上手工在 buildroot 里把 opencv 的版本升了一下, 解决了读模型的问题, 并成功地做了 Inference.\n需要注意的一点是 opencv 读进来的图片格式和 pytorch 并不一致. opencv 是 NHWC 而 pytorch 是 NCHW, 而且 opencv 的 3 个 channel 的顺序是 BGR. 再有就是 torch 输入颜色是 0 到 1, 而 opencv 读进来是 0 到 255 的 uint8. 解决了这些问题之后模型跑得稍微正常了一些.\nDNN Inference Accelerator Adaption 幸运的是我自己还有一个同款的 rpi3b+. 在 raspbian 的系统里可以方便地对 oepnvino 有初步的认识. 发现做一个 mobilenetv2 的 inference 只需要 50ms 左右. 这样的话可以比较大地提高 fps.\n然而\n在 aarch64 上装 openvino 是个天坑 --- laekov. openvino 只提供了 32 位 raspbian 的 binary 版本驱动. 所幸 inference-engine 是一个开源项目而且仿佛没有内核的东西, 而是直接用 libusb 来驱动 movidus 加速棒.\nDLDT inference-engine 的代码在 opencv/dldt 仓库里. (很神奇居然是 opencv 名下的仓库) 拉下来之后就可以愉快地写 buildroot 的配置文件来 build 了. 然而需要一些 configure 和 patch. 已知的第一个坑是 cmake 里面 find_file 需要加上 CMAKE_FIND_ROOT_PATH_BOTH 才能正确找到一些 firmware. (折腾了一上午)\n接下来的坑是有 git sub repo 而 call git 的方式下载下来的是 release tarball 所以 third party 的东西要手工下载. 下载下来之后发现 CLDNN 有奇怪的 link error 于是 disable 之. 发现居然需要一个奇怪的 opencv 头文件于是 disable 之. 发现居然要 build samples 于是 disable 之. 最后发现 pugixml 打死 link 不上又没法 disable. 谷歌之后发现可以 uncomment pugixml 的头文件里的某一行, 使它变成一个纯头文件的库, 于是终于解决了这个问题并成功地 install 了 dldt. (然而怀疑它并不能正确运行)\n事实证明 inference-engine 是能正确运行的, 只是它没有 install (大雾). 然而把 opencv 的 DInferenceEngine_DIR 给指到 inference-engine 的 build 目录里就可以了. 然后 opencv 居然也能成功 build 了???\n再然后把几个 .so 扔进 /usr/lib 里面之后就能跑了. 开熏.\n内核裁剪 栽不动. sad.\n把有对应 pyc 的 .py 都删掉可以得到一些空间.\n手工删了一些认识的不需要的 opencv data.\n剩下的都是各种 .so 和 .ko 不太认识就不敢删了.\n做不动了. 就这样吧.\n","permalink":"/technical/1f8072/","summary":"因为发现助教给炼丹任务提供了 64 张图片作为训练集, 64 张图片作为验证集, 所以果断放弃了炼丹任务. (update: 发现还是炼丹任务好做)\n打算用 buildroot 从底向上 build 一个能跑起 python-gpio 的 linux. 另开一文记录一下坑们.\n(补充) 计划 先不管镜像大小, 用 buildroot 搞出一个能跑的系统. (好像 buildroot 部分差不多了.) 实时性补丁 进一步裁剪内核. (即使不栽应该也比 raspbian 小很多了. 毕竟老师那边 raspbian 裁剪纪录是 200M, 而 buildroot 现在才不到 150.) build 使用了默认配置 $ make raspberrypi3_defconfig 节省了很多自己摸索的时间.\n配置静态 ip 的时候发现可能是由于 networking 的版本问题, 必需要在 interfaces 配置文件里把 netmask 写在 address 上面, 否则不 work.\n另外选装上了 openssh 以支持 ssh 登录. 在折腾了半天之后终于能 ssh 上树莓派上的系统了.\n然后发现它有一个轻量级的 dropbear 作为 sshd.","title":"Minimon: A minimal surveillance system based on buildroot for RaspberryPi"},{"content":"好的 scc@sc'19 终于没有拿亚军\n记个流水账\nBenchmarking 好像没啥特别的.\n一个新的发现是 HPL 的功耗飘可能是因为 GPU 功耗上升而不是计算 pattern? 回头仔细看看..?\n内核的奇怪的锅 导致 idle 状态下 ssh 上一台机器就能跳 200w 的功耗 spike. 通过更新内核版本解决了该问题.\nIB 卡烧掉了??? benchmark 本来早晨很早就交了而且数也还行. 然而中午玩着玩着发现 ib 卡没了. 尝试 pci hot reenable 失败之后重启并重新跑了 benchmark. 后来发现是 ib 卡在 gpu 风道里, 而我们给没插卡的节点的 gpu 风扇拔了一半的线, 另一半还是最低速运转的, 于是把 ib 给热傻了\u0026hellip;\nSST 人脑挖矿 + 无脑跑 SST 第一个部分是给定 cpu 核心数, l1/l2 cache 的不同搭配之类的总共乘起来 5760 种选择, 让用 SST 搞出一种性能最好且不超过5000块钱的配置.\n人脑挖矿 vs 暴力. 测算发现暴力应该能跑完所有点, 于是就暴力了一下.\n听说别的队有试图人脑的\u0026hellip;\n另一个 case 就是无脑跑. 唯一需要动一下脑的就是把 partition 打出来看了看网络 topo, 发现是1024个路由器均匀接了16384个 mpi. 路由器用 hyperx / dragonfly 分组连接. 然后发现组娄攵总之是 32 什么的, 于是单机 32 进程跑就完事了. 两个都是稳定的 70/90 分钟一轮迭代, 总共跑 10 轮. 第一天晚上就熬夜在云上跑上了, 所以也没出啥锅就完事了.\nSlides 虽然我一直觉得 slides 没用但做一些 fancy 的 slides 还是能让 interview 加分不少的. 受到 Harry 启发用 keynote 做了一个仿 beamer 样子的模板, 看起来效果不错.\n树莓派小车 女子 忄曼 口阝可\nSummary 感谢赞助商 bitmain, intel, mellanox, nvidia. 感谢组委会. 感谢很给力的老师和队友们.\n本人就此退役啦. 祝贵队武运隆昌.\n","permalink":"/technical/b1c6c4/","summary":"好的 scc@sc'19 终于没有拿亚军\n记个流水账\nBenchmarking 好像没啥特别的.\n一个新的发现是 HPL 的功耗飘可能是因为 GPU 功耗上升而不是计算 pattern? 回头仔细看看..?\n内核的奇怪的锅 导致 idle 状态下 ssh 上一台机器就能跳 200w 的功耗 spike. 通过更新内核版本解决了该问题.\nIB 卡烧掉了??? benchmark 本来早晨很早就交了而且数也还行. 然而中午玩着玩着发现 ib 卡没了. 尝试 pci hot reenable 失败之后重启并重新跑了 benchmark. 后来发现是 ib 卡在 gpu 风道里, 而我们给没插卡的节点的 gpu 风扇拔了一半的线, 另一半还是最低速运转的, 于是把 ib 给热傻了\u0026hellip;\nSST 人脑挖矿 + 无脑跑 SST 第一个部分是给定 cpu 核心数, l1/l2 cache 的不同搭配之类的总共乘起来 5760 种选择, 让用 SST 搞出一种性能最好且不超过5000块钱的配置.\n人脑挖矿 vs 暴力. 测算发现暴力应该能跑完所有点, 于是就暴力了一下.\n听说别的队有试图人脑的\u0026hellip;","title":"SCC@SC'19 笔记"},{"content":"获得一个生日礼物 raspberry pi 已将近一年, 然而因为它只有四个核所以被嫌弃地闲置了很久. 近期因为上了嵌入式的课, 所以又开始了一轮折腾. 把一些有趣的事记录一下.\n网络连接配置 老师说让我们先插上显示器配wifi, 之前我也是这么干的, 于是照做了.\n然后想拿回家用, 家里没显示器, wifi 密码输入错误, 失联 ovo\n后来想起直接给有线网口配个静态ip 就完事了. 和电脑直接对插就能访问 ovo.\n延迟测试 发了一个示波器很好玩, 然而只有 windows 的 pc 端驱动差评.\nGPIO 管脚控制居然是 python, 严重怀疑效率.\n实验本身倒是很简单. 接下来是给 kernel 打实时性补丁. (中断响应优先级? 时间步大小? 感觉 很有趣)\n视频流 网上看到一个例子是把 raspivid 的输出用 nc 接起来到 host 上用 mplayer / vlc 播放. 非常有趣就试了一下. cvlc 转发延迟略高. 直接 mplayer 放 h264 格式的视频非常流畅.\nModius NN 计算棒 去 intel 上找到了 openvino 作为 myriad 计算棒的驱动.\nopenvino 看起来是提供了一个特别版本的 opencv 来支持各种计算. 暂时没有找到别的把这个棒棒用起来的方式. (比如搞个 lapack 跑个 hpl?)\nopencv 之前接触不多. (唯一一次是 oop 课然后我觉得 cv 太重了给换成 libpng了) 发现它以 xml + bin 的方式支持各种 nn. (tf, caffee, onnx, etc.) 非常神奇. 然后还有提供一个 optimizer 大概是一个格式转换 + 迷之性能优化的工具. 非常有趣.\nopenvino 自带一个 mobile net 做人脸检测 (2d bbox) 的模型, 于是跑了一下, 发现精度非常好.\n人脸识别的视频流 想把以上两者结合起来作为练手. 使用 pytho + opencv 输出带框视频流到 tcp 在本机播放.\n一个坑在于 opencv 自带的 videowriter 必需用正常的文件, 没法 pipe. 于是想到把 rawvideo 格式直接 pipe 进 ffmpeg 转 h264. 然后问题来了, ffmpeg 吃的是 cpu, 在辣鸡 arm 上吞吐量非常低. (vid 帧率 30, 接进 ffmpeg 就只有 10 不到了) 如果不转的话会巨卡, 因为是用 wifi 把 pi 和 host 连起来的.\n于是 只好 给 pi 和 host 中间插了根网线 ovo 然后直接把 rawvideo 拿回来.\n另外其实识别也不快, 大概 6fps. 所以传 raw 带宽也就 70mbps 打住了. (不然可能得给 pi 和 host 插 infiniband?)\n想法零: 之后大作业的输出视频用远程推流的方式推到 host 上.\n猜想一: 这个棒棒的 usb 接口限制了带宽.\n想法二: 把棒棒算出来的框强行合进 raspivid 的输出.\n内核裁剪 坑. 还没开搞.\n功耗管理 好像和超算比赛有些相关. 还没开搞.\n","permalink":"/technical/0ab785/","summary":"获得一个生日礼物 raspberry pi 已将近一年, 然而因为它只有四个核所以被嫌弃地闲置了很久. 近期因为上了嵌入式的课, 所以又开始了一轮折腾. 把一些有趣的事记录一下.\n网络连接配置 老师说让我们先插上显示器配wifi, 之前我也是这么干的, 于是照做了.\n然后想拿回家用, 家里没显示器, wifi 密码输入错误, 失联 ovo\n后来想起直接给有线网口配个静态ip 就完事了. 和电脑直接对插就能访问 ovo.\n延迟测试 发了一个示波器很好玩, 然而只有 windows 的 pc 端驱动差评.\nGPIO 管脚控制居然是 python, 严重怀疑效率.\n实验本身倒是很简单. 接下来是给 kernel 打实时性补丁. (中断响应优先级? 时间步大小? 感觉 很有趣)\n视频流 网上看到一个例子是把 raspivid 的输出用 nc 接起来到 host 上用 mplayer / vlc 播放. 非常有趣就试了一下. cvlc 转发延迟略高. 直接 mplayer 放 h264 格式的视频非常流畅.\nModius NN 计算棒 去 intel 上找到了 openvino 作为 myriad 计算棒的驱动.","title":"Raspberry Pi 折腾记录"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #define _l (long long int)\nstruct Edge { int t; Edge* ne; };\nconst int maxn = 100003;\ndint f[maxn], g[maxn], ans; Edge epool[maxn * 2], *ebuf(epool), *head[maxn]; int n;\ninline void addEdge(int u, int v) { ebuf-\u0026gt;t = v; ebuf-\u0026gt;ne = head[u]; head[u] = ebuf++; }\nvoid DFS(int u, int fr) { f[u] = 1; g[u] = 0; for (Edge* e = head[u]; e; e = e-\u0026gt;ne) { if (e-\u0026gt;t != fr) { DFS(e-\u0026gt;t, u); ans += f[u] * g[e-\u0026gt;t] + f[e-\u0026gt;t] * g[u]; f[u] += f[e-\u0026gt;t]; g[u] += g[e-\u0026gt;t] + f[e-\u0026gt;t]; } } // cout \u0026laquo; u \u0026laquo; \u0026quot; \u0026quot; \u0026laquo; f[u] \u0026laquo; \u0026quot; \u0026quot; \u0026laquo; g[u] \u0026laquo; \u0026quot; \u0026quot; \u0026laquo; ans \u0026laquo; \u0026ldquo;\\n\u0026rdquo;; }\nint main() { ios::sync_with_stdio(0); cin \u0026raquo; n; for (int i = 1; i \u0026lt; n; ++i) { int u, v; cin \u0026raquo; u \u0026raquo; v; addEdge(u, v); addEdge(v, u); } DFS(0, -1); ans = _l n * (n - 1) * (n - 2) / 6 - ans; cout \u0026laquo; ans \u0026laquo; endl; }\n","permalink":"/code/bd6efc/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #define _l (long long int)\nstruct Edge { int t; Edge* ne; };\nconst int maxn = 100003;\ndint f[maxn], g[maxn], ans; Edge epool[maxn * 2], *ebuf(epool), *head[maxn]; int n;\ninline void addEdge(int u, int v) { ebuf-\u0026gt;t = v; ebuf-\u0026gt;ne = head[u]; head[u] = ebuf++; }\nvoid DFS(int u, int fr) { f[u] = 1; g[u] = 0; for (Edge* e = head[u]; e; e = e-\u0026gt;ne) { if (e-\u0026gt;t !","title":"meeting.cc"},{"content":"GridGraph 师兄的文章. 主要 idea 是把邻接矩阵切成块 (p*p) 放到磁盘上顺序读来提升 io 性能. 单机.\nGraphChi disk-based, parallel sliding windows, single consumer-level computer.\nmetis 不 work (???)\n解决出入边都要考虑和写的问题.\n按出边分块 shard. 入边按序存放, 在每个 shard 中为连续一段. 可加载进来.\n解决了一些比较麻烦的问题比如数三角形.\n","permalink":"/technical/3fd4cd/","summary":"GridGraph 师兄的文章. 主要 idea 是把邻接矩阵切成块 (p*p) 放到磁盘上顺序读来提升 io 性能. 单机.\nGraphChi disk-based, parallel sliding windows, single consumer-level computer.\nmetis 不 work (???)\n解决出入边都要考虑和写的问题.\n按出边分块 shard. 入边按序存放, 在每个 shard 中为连续一段. 可加载进来.\n解决了一些比较麻烦的问题比如数三角形.","title":"Graph Processing Systems"},{"content":"因为在 LA 爬了俩月坡, 感觉自己功率有所长进, 所以这场比赛以为自己能站个台. 然而事实是刷出了 pw. 这个经历再次验证了 flag 学三大定理 lyzy, 2016.\n起源和准备阶段 赛前两周才听说重庆有比赛. 本来下半年没有比赛计划的, 自己的公路车也还没组装好, 但考虑到可以中秋回趟成都过节, 就还是毅然决然地被报名了.\n在成都老车迷租到了一台 Trek Emonda 的入门铝公路车, 是前段时间某个比赛的赞助车, 虽然套件轮组辣鸡, 但总之能骑, 而且比在 LA 骑的那台上古 Allez 强. 甚至感觉自己能刷 pb.\n回北京第一周早晨倒时差起床跑步, 发现跑六分配速都喘. 三天跑了11km. 游泳训练是和洞pro约在陈明讨论学术顺便划了300米.\n赛前 发现20-24被重邮移通铁人队占了绝大多数. 有点方. 听尘尘和红红说他们很菜. 我竟然信了.\n去车店取了车准备骑回家, 一路在三环辅路上飙到40kph非常爽. 然而骑了 6km 胎就被扎了. 回家看了半天才发现胎里扎了个钉子. ovo\n开自家车带着爹妈和自行车从成都开了四个半小时到长寿湖. 一路定速巡航还挺爽.\n审体检报告的时候果然又被短pr间期的问题卡了. 不过这次赛会医疗组很人性化地带了心电图设备, 直接现场复查了. 赞.\n看赛道的时候让我爹开车跟着, 体验了一把后援车跟拍. 发现有一段颠颠颠颠的下坡. 以及发现这车变速不太准. 当场调变速.\n晚上去吃奇怪的水库鱼, 然后鱼一直没上, 饭都吃完了, 就把鱼退了.\n游泳 第一次遇到水下出发. 第一圈还将就就是有点慢. 第二圈下水就游偏了, 被裁判船吹哨赶了回去.\n上岸的时候发现岸边有石头甚至差点划破了脚.\n到 T1 发现只有我和另一台自行车了. 所以大概骑车能超很多人?\n骑车 刚上车有点脚疼, 骑着骑着就不疼了.\n爬坡摇车加坐踩很爽. 多数超车都发生在上坡.\n下坡低功率踩然而有个路口有点窄我总是要刹车浪费宝贵的功率还要被上坡超的人超回来.\n最大的收获是学会了从一堆人里辨识出移通的铁三服.\n超了有十多二十个移通? 然而并不够 Ovo\n不过摄影师终于待在上坡的地方了于是每圈都摇车给摄影师看并收获了很多照片.\n以及专属摄影师娘亲也在路边架着长枪拍. 于是骑得灰常开心, 甚至表演了一波给自己浇水.\n绕完圈回换项区的路有点长, 有一种骑完车骑在回家路上的感觉. 大概是已经完赛了吧.\n想的是如果换项区有少于3辆车就好好跑步否则就休闲跑.\n到了换项区发现至少10辆车. ovo\n跑步 脚一沾地膝盖就开始疼. 还好没有下楼梯. 想起了黄山拄着某艺pro完赛的悲惨经历. 艺pro不在没人拄. 只能自己苟着了.\n跑了几步发现大腿也疼.\n跑了几步发现喘不上气.\n我是谁我在哪.\n索性走路好了.\n大概不会被关门.\n我得意地走.\n我得意地走.\n看到摄影师跑两步.\n我得意地跑.\n看到移通的同学跑两步.\n后两圈状态稍微好一点了, 但也就六分配速.\n我的10k成绩曾经也是4开头的啊喂ovo\n总之捱到了终点.\n终点前还被一个冲刺大姐超了.\n看了眼时间 309. 把个人 pw 刷了 20 分钟 Ovo.\n第一次举终点线, 没敢像以前一样比一, 因为跑太慢了太丢脸了 ovo.\n最终排名 17/32.\n总结 没练就不要想着站台子了.\n但拖家die带ma口出去打铁还挺好玩的 ovo.\n","permalink":"/random/1830a0/","summary":"因为在 LA 爬了俩月坡, 感觉自己功率有所长进, 所以这场比赛以为自己能站个台. 然而事实是刷出了 pw. 这个经历再次验证了 flag 学三大定理 lyzy, 2016.\n起源和准备阶段 赛前两周才听说重庆有比赛. 本来下半年没有比赛计划的, 自己的公路车也还没组装好, 但考虑到可以中秋回趟成都过节, 就还是毅然决然地被报名了.\n在成都老车迷租到了一台 Trek Emonda 的入门铝公路车, 是前段时间某个比赛的赞助车, 虽然套件轮组辣鸡, 但总之能骑, 而且比在 LA 骑的那台上古 Allez 强. 甚至感觉自己能刷 pb.\n回北京第一周早晨倒时差起床跑步, 发现跑六分配速都喘. 三天跑了11km. 游泳训练是和洞pro约在陈明讨论学术顺便划了300米.\n赛前 发现20-24被重邮移通铁人队占了绝大多数. 有点方. 听尘尘和红红说他们很菜. 我竟然信了.\n去车店取了车准备骑回家, 一路在三环辅路上飙到40kph非常爽. 然而骑了 6km 胎就被扎了. 回家看了半天才发现胎里扎了个钉子. ovo\n开自家车带着爹妈和自行车从成都开了四个半小时到长寿湖. 一路定速巡航还挺爽.\n审体检报告的时候果然又被短pr间期的问题卡了. 不过这次赛会医疗组很人性化地带了心电图设备, 直接现场复查了. 赞.\n看赛道的时候让我爹开车跟着, 体验了一把后援车跟拍. 发现有一段颠颠颠颠的下坡. 以及发现这车变速不太准. 当场调变速.\n晚上去吃奇怪的水库鱼, 然后鱼一直没上, 饭都吃完了, 就把鱼退了.\n游泳 第一次遇到水下出发. 第一圈还将就就是有点慢. 第二圈下水就游偏了, 被裁判船吹哨赶了回去.\n上岸的时候发现岸边有石头甚至差点划破了脚.\n到 T1 发现只有我和另一台自行车了.","title":"(排名17的何先生的) 一篇站台失败记 -- 19' 长寿湖联赛"},{"content":" Formal Name: Jiaao He English Name: Rick Ho Common ID: laekov Personal E-mail: laekov.h [at] gmail [dot] com ORCID: 0000-0001-8578-5158 Google Scholar Profile here is a photo of me\nBio Dr. Jiaao He receieved his PhD degree from the Department of Comperter Science and Technology, Tsinghua University in 2025, where he also received his bachelor degree in 2020. His research interests include designing and accelerating distributed systems for tensors with sparsity. He has developed FastMoE, the world\u0026rsquo;s first open-source distributed training framework for Mixture-of-Experts models based on PyTorch. He has a few papers published on ASPLOS, PPoPP, and other conferences. He used to be the team leader of the champion-winning Tsinghua Student Cluster Competition Team.\nIndustrial ByteDance Inc., March 2025 - Present Research Scientist on Infrastructure.\nInternships PAI, Alibaba Group, July-Aug 2020 Research Intern.\nDPS, Sensetime Research, April 2018 - April 2019 Intern Researcher\nCloud Beaver Corporation, Oct. 2016 - Dec. 2016 Intern full-stack web developer.\nAcademic PACMAN Lab, Dept. CS, Tsinghua Univ., Oct. 2017 - June, 2025 Advisor: Prof. Jidong Zhai.\nResearch Intern (2017-2020) Member / Team Leader of the Student Cluster Competition Team (2018-2019) PhD Student (2020-2025) ALCHEM Lab, Dept. ECE, USC, July 2019 - Sep 2019 Summer intern advised by Prof. Xuehai Qian.\nPublications Main Contributions Jiaao He, Shengqi Chen, Kezhao Huang, Jidong Zhai, HypeReca: Distributed Heterogeneous In-Memory Embedding Database for Training Recommender Models (ATC'25)\nJiaao He, Kezhao Huang, Jidong Zhai, FastDecode: High-Throughput LLM Serving through Disaggregating Attention Computation (ICML'24 Workshop LCFM)\nJiaao He, Jidong Zhai, Tiago Antunes, Haojie Wang, et al., FasterMoE: Modeling and Optimizing Training of Large-Scale Dynamic Pre-Trained Models (PPoPP'22)\nZixuan Ma, Jiaao He, Jiezhong Qiu, Huanqi Cao, et al., BAGUALU: Targeting Brain Scale Pretrained Models with over 37 Million Cores (PPoPP'22)\nQinyi Luo, Jiaao He (co-first), Youwei Zhuo, Xuehai Qian, Prague: High-Performance Heterogeneity-Aware Asynchronous Decentralized Training (ASPLOS'20)\nWorks Involved Mingyu Xu, Tenglong Ao, Jiaao He, Jianqiao Lu, Guang Shi, Shu Zhong, DeltaFormer: Unlock the state space of Transformer(NeurIPS'25)\nHaoyu Yang, Zan Zong, Yuyang Jin, Kinman Lei, Jiaao He, Qigang Yang, Jidong Zhai, UltraAttn: Efficiently Parallelizing Attention through Hierarchical Context-Tiling(SC'25)\nKezhao Huang, Siqi Zhu, Mingshu Zhai, Liyan Zheng, Kinman Lei, Jiaao He, Yuyang Jin, Jidong Zhai, mTuner: Accelerating Parameter-Efficient Fine-Tuning on Multi-GPU Servers with Elastic Tensor (ATC'25)\nMingshu Zhai, Jiaao He, Zixuan Ma, Zan Zong, Runqing Zhang, Jidong Zhai, SmartMoE: Efficiently Training Sparsely-Activated Models through Combining Offline and Online Parallelization (ATC'23)\nZixuan Ma, Haojie Wang, Guanyu Feng, Chen Zhang, Lei Xie, Jiaao He, Shengqi Chen, Jidong Zhai, Efficiently emulating high-bitwidth computation with low-bitwidth hardware (ICS'22)\nChen Zhang, Chenggang Zhao, Jiaao He, et.al., Critique of “Planetary Normal Mode Computation: Parallel Algorithms, Performance, and Reproducibility” by SCC Team From Tsinghua University (ITPDS'21)\nJiaao He, Chenggang Zhao, et.al., Student Cluster Competition 2018, Team Tsinghua University: Reproducing the SeisSol Optimization on Intel Skylake Architecture (PARCO'19)\nPreprints \u0026amp; Posters Team Seedance, Seedance 2.0: Advancing Video Generation for World Complexity(2604.14148)\nTeam Seedream, Seedream 4.0: Toward next-generation multimodal image generation (2509.20427)\nJiaao He, Shengqi Chen, Jidong Zhai, POSTER: Pattern-Aware Sparse Communication for Scalable Recommendation Model Training (PPoPP'24)\nJiaao He, Jidong Zhai, FastDecode: High-Throughput GPU-Efficient LLM Serving using Heterogeneous Pipelines (2403.11421)\nSha Yuan, \u0026hellip;, Jiaao He, et al., A Roadmap for Big Model (2203.14101) (Shame on the plagiarism of certain co-authors in this paper)\nJiaao He, Jiezhong Qiu, et. al., FastMoE: A Fast Mixture-of-Expert Training System (2103.13262)\nTeaching Data structure and algorithm, Prof. Yuchun Ma, TA, spring 2023 Advanced Programming, Prof. Yuchun Ma, TA, fall 2022 Data structure and algorithm, Prof. Yuchun Ma, TA, spring 2022 Data structure and algorithm, Prof. Yuchun Ma, TA, spring 2021 Data structure, Prof. Hong Wang and Dr. Wentao Han, TA, spring 2021 Introduction to HPC, Prof. Jidong Zhai, TA, spring 2021 Misc QBXT Education Corporation, Aug. 2016 - Oct. 2019 As a lecturer for Olympiad Informatics, give more than 20 lectures (more than 100 hours) to high school students in programming language, algorithm and data structure in OI contests.\nStudent Association of Algorithm and Contest, Dept. CS, Tsinghua, Sep. 2016 - Sep. 2017 Vice President, Head of the Platform and System Group. Designer and developer of the TUOJ online judge system.\nAwards and Honors Champion in Student Cluster Competition at SC'19 as the team leader, Denver, CO. 2019.\nCCF Elite Colligate Award, China Computer Foundation, 2019.\nScholarship for techniques, CS Dept. Tsinghua. 2019.\nSecond place in Student Cluster Competiton at ISC'19 as the team leader, Frankfurt, Germany. 2019.\nSecond place in ASC'19 as the team leader, Dalian, China. 2019.\nOutstanding Intern Reward in Sensetime Research, Beijing, China, 2018.\nChampion in Student Cluster Competition at SC'18, Dallas, TX. 2018.\nScholarship for techniques, CS Dept. Tsinghua. 2018.\nChampion in Student Cluster Competiton at ISC'18, Frankfurt, Germany. 2018.\nChampion in ASC'18, Nanchang, China, 2018.\nStar of 9#, Dept. CS, Tsinghua, Beijing, China, 2017.\nScholarship for techniques, CS Dept. Tsinghua. 2017.\n2nd place, Lanqiao International Programming Competition, Princeton, NJ, 2017.\nGold Medal (2nd place) in ACM-ICPC Asia Regional Contest, Qingdao, China, 2016.\nSilver Medal in National Olympiad Informatics (NOI), Hangzhou, China, 2015.\nGold Medal in Asia-Pacific Informatics Olympiad (APIO), Beijing, China, 2015.\nSocial Services President of the Students\u0026rsquo; Cycling Club, Tsinghua University. Aug.2018 - June.2019\nInternational Volunteer for Turtle protection, Sri Lanka, Aug.2017\nHobbies Jiaao has been obsessed with high performance throughout his entire life. As an avid cyclist since 2017, the current activities focus on road and gravel cycling in the mountains, as well as trail running. He formerly competed in triathlons and downhill mountain biking, notably winning 3rd place in his age group at the 2018 Weihai Triathlon World Cup. Beyond that, you may also find Jiaao pushing limits on the racetrack—whether driving race cars, racing go-karts, or tearing up rally courses on the simulator.\n","permalink":"/cv/","summary":"Formal Name: Jiaao He English Name: Rick Ho Common ID: laekov Personal E-mail: laekov.h [at] gmail [dot] com ORCID: 0000-0001-8578-5158 Google Scholar Profile here is a photo of me\nBio Dr. Jiaao He receieved his PhD degree from the Department of Comperter Science and Technology, Tsinghua University in 2025, where he also received his bachelor degree in 2020. His research interests include designing and accelerating distributed systems for tensors with sparsity.","title":"Jiaao He"},{"content":"看上去很复杂的一个题. 然而数据范围 ( n \\leq 50 )\n基础知识0: python 里面 list 可以做 dict 的 key.\n基础知识1: python 里面 list 可以直接比较大小, 比较方式就是元素的字典序.\n做法是先按照 username 对记录进行归类 (dict of list).\n然后把每个 username 对应的所有记录按 timestamp 进行排序. (sorted(\u0026hellip;, key=lambda \u0026hellip;))\n然后枚举每个用户的所有访问页面三元组并扔进 list 里面. 因为要求一个用户只算一次, 所以要去除 list 里面重复的元素. 所以把 list 转换成 set (集合) 就好了. 也可以直接用 set.\n然后把 set 里面的元素都用一个 dict 做一下记数.\n最后从记数的 dict 里面挑出次数最多且字典序最小的就可以了.\n代码链接\n","permalink":"/oi/461caf/","summary":"看上去很复杂的一个题. 然而数据范围 ( n \\leq 50 )\n基础知识0: python 里面 list 可以做 dict 的 key.\n基础知识1: python 里面 list 可以直接比较大小, 比较方式就是元素的字典序.\n做法是先按照 username 对记录进行归类 (dict of list).\n然后把每个 username 对应的所有记录按 timestamp 进行排序. (sorted(\u0026hellip;, key=lambda \u0026hellip;))\n然后枚举每个用户的所有访问页面三元组并扔进 list 里面. 因为要求一个用户只算一次, 所以要去除 list 里面重复的元素. 所以把 list 转换成 set (集合) 就好了. 也可以直接用 set.\n然后把 set 里面的元素都用一个 dict 做一下记数.\n最后从记数的 dict 里面挑出次数最多且字典序最小的就可以了.\n代码链接","title":"Leetcode1152 用户行为分析"},{"content":"首先弄清楚中序遍历是什么意思.\n中序遍历是一个序列 (list).\n不存在的节点的中序遍历是空序 ([]).\n以 u 为根的二叉树的中序遍历 = u 的左儿子的中序遍历 + u + u 的右儿子的中序遍历\n其中加号就是连接两个序列的意思.\n题目里说只考虑叶子节点的中序遍历, 就是把所有非叶子从中序里扔掉就好了.\n然后考虑从随便一个序列构造一个满足条件的二叉树. 其实这个二叉树上的任意一个点会对应原序列中的连续一段, 而这个点的值就是这一段的所有数的最大值.\n我们考虑自底向上的建树. 也就是说最开始是 n 个单独的点, 然后每次建一个新点, 它的两个儿子分别是原来的两个点. 然后用这个新点代替原来的两个点. 重复 \u0026ldquo;挑选, 替代\u0026rdquo; 的过程直到只剩一个点, 就建成了一棵完整的树.\n每次挑选的两个点一定代表原数组上相邻的两个区间. 合并后建成这棵树的 最小 代价为 左儿子的最小代价 + 右儿子的最小代价 + 左边最大值 * 右边最大值. 而我们的最小化目标是根的 最小 代价.\n自然想到用 f[l][i] 代表以 i 为第一个数的长度为 l 的区间所代表的点为根的树 的 最小 代价. 首先 f[1][i] == a[i], 而我们的目标是 f[n][0].\n进一步想, 最小化 f[l][i] 就是在所有该点的左右儿子分配方式 (就是各有多长, 总之加起来是 l) 中挑一个最小的. 也就是说 f[l][i] = min(f[j][i] + f[l - j][i + j] + max(a[i:i+j]) * max(a[i+j:i+l]) ) for j in [1, l).\n那么直接使用这个式子把整个 f 数组递推出来就行.\nbtw 这是经典的区间合并动态规划. 其中 f[l][i] 是状态, 那个式子是状态转移方程.\n可以参考一道2004年的经典题目 \u0026ldquo;合并果子\u0026rdquo;.\n代码链接\n","permalink":"/oi/967d6b/","summary":"首先弄清楚中序遍历是什么意思.\n中序遍历是一个序列 (list).\n不存在的节点的中序遍历是空序 ([]).\n以 u 为根的二叉树的中序遍历 = u 的左儿子的中序遍历 + u + u 的右儿子的中序遍历\n其中加号就是连接两个序列的意思.\n题目里说只考虑叶子节点的中序遍历, 就是把所有非叶子从中序里扔掉就好了.\n然后考虑从随便一个序列构造一个满足条件的二叉树. 其实这个二叉树上的任意一个点会对应原序列中的连续一段, 而这个点的值就是这一段的所有数的最大值.\n我们考虑自底向上的建树. 也就是说最开始是 n 个单独的点, 然后每次建一个新点, 它的两个儿子分别是原来的两个点. 然后用这个新点代替原来的两个点. 重复 \u0026ldquo;挑选, 替代\u0026rdquo; 的过程直到只剩一个点, 就建成了一棵完整的树.\n每次挑选的两个点一定代表原数组上相邻的两个区间. 合并后建成这棵树的 最小 代价为 左儿子的最小代价 + 右儿子的最小代价 + 左边最大值 * 右边最大值. 而我们的最小化目标是根的 最小 代价.\n自然想到用 f[l][i] 代表以 i 为第一个数的长度为 l 的区间所代表的点为根的树 的 最小 代价. 首先 f[1][i] == a[i], 而我们的目标是 f[n][0].\n进一步想, 最小化 f[l][i] 就是在所有该点的左右儿子分配方式 (就是各有多长, 总之加起来是 l) 中挑一个最小的.","title":"Leetcode1130 叶值最小代价生成树"},{"content":"很基础的 BFS 题目.\nBFS 和 DFS 是相对应的两种算法. 其区别在于对于新发现的可能性, BFS 将其放入队列末尾, 稍后进行探索, 而 DFS 立即探索这种新情况, 等探索完之后再回到之前的状态继续枚举.\n对于这道题目来说, 具体来讲, 状况可以用 (位置, 距离, 颜色) 这么一个 tuple 来表示. 最开始的时候, 有 (0, 0, blue) 和 (0, 0, red) 这两种情况. 假设 0到1 有一条蓝边, 0到2 有一条红边, 那么新的情况是 (1, 1, red) 和 (2, 1, blue).\n如果我们使用 DFS, 那么当新发现 (1, 1, red) 这个状态的时候, 我会立即以 (1, 1, red) 为起点, 继续探索 1 号点的邻居, 比如找到了 (3, 2, blue) \u0026hellip; 直到找完所有通过 (1, 1, red) 可以达到的状态之后, 再继续以 (2, 1, blue) 为基础进行枚举.\n而 BFS 不同. BFS 会将 (3, 2, blue) 放到一个队列 q 的 末尾, 然后假装什么都没发生过, 继续从 q 的 队首 拿一个状态出来, 枚举它的邻居, 以此往复.\n这样做的好处是, BFS 队列 q 中的所有状态一定是按距离升序排列的. 一但某个 (顶点, 颜色) 对出现在 q 中, 那么它一定是从起点到该顶点且下一步是该颜色的最短距离. 所以如果后面再遇到该 (顶点, 颜色) 对, 就可以不进行枚举了. 从而节省极大的时间.\n下面是一个例子 如果使用 DFS, 那么一个搜索顺序如下:\n(0, 0, blue) (1, 1, red) (3, 2, blue) 回到(1, 1, red) (4, 2, blue) 回到(1, 1, red) 回到(0, 0, blue) 继续 (0, 0, red) (2, 1, blue) (4, 2, red) 回到(2, 1, blue) (5, 2, red) 回到(2, 1, blue) 回到(0, 0, red) 结束 如果使用 BFS, 那么一个搜索顺序如下:\n(0, 0, blue) # 使 (1, 1, red) 加入到队尾 (0, 0, red) # 使 (2, 1, blue) 加入到队尾 (1, 1, red) # 使 (3, 2, blue), (3, 4, blue) 加入到队尾 (2, 1, blue) # 使 (4, 2, red), (5, 2, red) 加入到队尾 (3, 2, blue) # 没新的状态可加了 下同 (3, 4, blue) (4, 2, red) (5, 2, red) 结束 下面是代码链接 在代码中, 我使用节点编号 k 和 k+n 分别代表下一步该走蓝边还是红边.\n代码链接\n","permalink":"/oi/0529db/","summary":"很基础的 BFS 题目.\nBFS 和 DFS 是相对应的两种算法. 其区别在于对于新发现的可能性, BFS 将其放入队列末尾, 稍后进行探索, 而 DFS 立即探索这种新情况, 等探索完之后再回到之前的状态继续枚举.\n对于这道题目来说, 具体来讲, 状况可以用 (位置, 距离, 颜色) 这么一个 tuple 来表示. 最开始的时候, 有 (0, 0, blue) 和 (0, 0, red) 这两种情况. 假设 0到1 有一条蓝边, 0到2 有一条红边, 那么新的情况是 (1, 1, red) 和 (2, 1, blue).\n如果我们使用 DFS, 那么当新发现 (1, 1, red) 这个状态的时候, 我会立即以 (1, 1, red) 为起点, 继续探索 1 号点的邻居, 比如找到了 (3, 2, blue) \u0026hellip; 直到找完所有通过 (1, 1, red) 可以达到的状态之后, 再继续以 (2, 1, blue) 为基础进行枚举.","title":"Leetcode1129  颜色交替的最短路径"},{"content":"先预处理一下, 把 \u0026gt;8h 的变成 +1, \u0026lt;=8h 的变成 -1\n现在问题就变成了: 找最长的连续一段使其和 \u0026gt;0\n使用前缀和数组, 要求 i~j 的和, 公式是 sum[j] - sum[i - 1].\n枚举左端点 i. 对于某个确定的 i, 要找以 i 为左端点的最长一段符合要求的区间, 即找满足条件 sum[j] \u0026gt; sum[i - 1] 的最大的 j\n注意到 sum 数组的取值为 [-n, n], 故使用值域数组 values. value[k] 表示 sum[j] == k 的最大的 j. 该数组可以在求 sum 数组时一并求出.\n满足条件 sum[j] \u0026gt; sum[i - 1] 的最大 j 即求 values[sum[i - 1] + 1], values[sum[i - 1] + 2], values[sum[i - 1] + 3], \u0026hellip;, values[正无穷] 中的最大值.\n此处可以使用类似于前缀和的做法, maxvalues[k] 表示 values 数组从 k + 1 到 正无穷 的最大值, 使用一遍从大到小的 for 循环可以求出.\n利用 maxvalues[sum[i - 1] + 1] 即可求出上述要求的 j, 然后取所有 i 中最大的 j - i + 1 作为答案即可.\n代码链接\n","permalink":"/oi/51d1b4/","summary":"先预处理一下, 把 \u0026gt;8h 的变成 +1, \u0026lt;=8h 的变成 -1\n现在问题就变成了: 找最长的连续一段使其和 \u0026gt;0\n使用前缀和数组, 要求 i~j 的和, 公式是 sum[j] - sum[i - 1].\n枚举左端点 i. 对于某个确定的 i, 要找以 i 为左端点的最长一段符合要求的区间, 即找满足条件 sum[j] \u0026gt; sum[i - 1] 的最大的 j\n注意到 sum 数组的取值为 [-n, n], 故使用值域数组 values. value[k] 表示 sum[j] == k 的最大的 j. 该数组可以在求 sum 数组时一并求出.\n满足条件 sum[j] \u0026gt; sum[i - 1] 的最大 j 即求 values[sum[i - 1] + 1], values[sum[i - 1] + 2], values[sum[i - 1] + 3], \u0026hellip;, values[正无穷] 中的最大值.","title":"Leetcode5129"},{"content":"class Solution: def longestWPI(self, hours: List[int]) -\u0026gt; int: for i, h in enumerate(hours): hours[i] = 1 if h \u0026gt; 8 else -1 s = [0] n = len(hours) values = [0] * (n * 2 + 2) for i, h in enumerate(hours): s.append(s[-1] + h) values[s[-1] + n] = i + 1 for i in range(n * 2 - 1, -1, -1): values[i] = max(values[i], values[i + 1]) answer = 0 for i in range(n): answer = max(answer, values[s[i] + n + 1] - i) return answer\n","permalink":"/code/fbcc0f/","summary":"class Solution: def longestWPI(self, hours: List[int]) -\u0026gt; int: for i, h in enumerate(hours): hours[i] = 1 if h \u0026gt; 8 else -1 s = [0] n = len(hours) values = [0] * (n * 2 + 2) for i, h in enumerate(hours): s.append(s[-1] + h) values[s[-1] + n] = i + 1 for i in range(n * 2 - 1, -1, -1): values[i] = max(values[i], values[i + 1]) answer = 0 for i in range(n): answer = max(answer, values[s[i] + n + 1] - i) return answer","title":"leetcode5129.py"},{"content":"状压动态规划.\ndp[x] 表示 x 状态下的最少人数. 其中 x 是二进制数, 第 i 位表示第 i 项技能是否有人已经拥有. 例如 ( x = (10010)_2 ) 从右往左第 1, 4 位是 1, 表示技能 1, 4 已有人掌握, 而 0, 2, 3 无人掌握.\n假设一个人的技巧是 p, 现在的状态是 x, 则加入后的状态是 x|p. 其中 | 即 python/cpp 中的 | 运算符, 意义是取二进制或.\n运算过程为最初时只有 dp[0] = 0. 对于每个人的技能集合 p, 可以更新 dp 数组 dp[x | p] = min(dp[x | p], dp[x] + 1)\n最后的答案是 dp[((111\\dots 1)_2)] 即 dp[(1 \u0026laquo; len(skills)) - 1]\n代码链接\nHistorical Comments nina at 2019-07-29T21:02:28 蟹蟹~\n","permalink":"/oi/63d337/","summary":"状压动态规划.\ndp[x] 表示 x 状态下的最少人数. 其中 x 是二进制数, 第 i 位表示第 i 项技能是否有人已经拥有. 例如 ( x = (10010)_2 ) 从右往左第 1, 4 位是 1, 表示技能 1, 4 已有人掌握, 而 0, 2, 3 无人掌握.\n假设一个人的技巧是 p, 现在的状态是 x, 则加入后的状态是 x|p. 其中 | 即 python/cpp 中的 | 运算符, 意义是取二进制或.\n运算过程为最初时只有 dp[0] = 0. 对于每个人的技能集合 p, 可以更新 dp 数组 dp[x | p] = min(dp[x | p], dp[x] + 1)\n最后的答案是 dp[((111\\dots 1)_2)] 即 dp[(1 \u0026laquo; len(skills)) - 1]","title":"Leetcode5130"},{"content":"class Solution: def smallestSufficientTeam(self, req_skills: List[str], people: List[List[str]]) -\u0026gt; List[int]: m = len(req_skills) dp = [99999] * (1 \u0026laquo; m) fr = [None] * (1 \u0026laquo; m) dp[0] = 0 for pi, p in enumerate(people): skills = 0 for s in p: try: idx = req_skills.index(s) skills |= 1 \u0026laquo; idx except Exception: continue for i in range(1 \u0026laquo; m): if dp[i | skills] \u0026gt; dp[i] + 1: dp[i | skills] = dp[i] + 1 fr[i | skills] = (i, pi) result = [] stat = (1 \u0026laquo; m) - 1 while stat \u0026gt; 0: result.append(fr[stat][1]) stat = fr[stat][0] return result\n","permalink":"/code/be49b0/","summary":"class Solution: def smallestSufficientTeam(self, req_skills: List[str], people: List[List[str]]) -\u0026gt; List[int]: m = len(req_skills) dp = [99999] * (1 \u0026laquo; m) fr = [None] * (1 \u0026laquo; m) dp[0] = 0 for pi, p in enumerate(people): skills = 0 for s in p: try: idx = req_skills.index(s) skills |= 1 \u0026laquo; idx except Exception: continue for i in range(1 \u0026laquo; m): if dp[i | skills] \u0026gt; dp[i] + 1: dp[i | skills] = dp[i] + 1 fr[i | skills] = (i, pi) result = [] stat = (1 \u0026laquo; m) - 1 while stat \u0026gt; 0: result.","title":"leetocde5130.py"},{"content":"ISC'19. 一场大概是退役失败的超算比赛.\n我负责的 part 是 AI, 还有万年大锅 HPL, 以及神秘应用. 还有就是订保险订酒店联系赞助商blabla.\n本来想帮忙搞 HPCC 的但是没有精力搞不动 ovo\nAI AI 题是去年的 GB 论文 + 精调模型. 在解决了组委会提供的脚本里的一些性能上的 bug 之后顺利地训了起来. 而且按照原文里在上千个节点上并行训还能收敛来讲, 是可以在现有机器条件下随便数据并行的. (事实证明直接把整个训练集切成 10 个batch 也没有问题)\n因为最终要求是精度, 所以请教了一些人, 得到的思路是 数据增强, ensemble. 数据增强不太写得动, 于是改脚本做了 ensemble 的 inference, 效果还不错. 比原文高了几个点. 但也没有特别闪亮的突破性进展. 唯一发现是 bn 用的是 training mode. (原因应该是 tf 的 bn 一直自带 bug, 如果用推理模式精度就是会炸掉) 于是推理的时候也应该 bs 越大越好. 于是就有了 dummy sample inference + unique 的一个脚本. 然后因为没有处理好 \u0026ldquo;//\u0026rdquo; 于是组委会还怀疑了半天为什么我的脚本有锅. 哭.\n然后就是现场出了一个锅: unseen dataset 发下来一看居然是事前给出的 test set. 虽然理论上不应该在 test set 上训, 但别的队肯定有队这么干了呀, 那过拟合到什么精度都不过分. 哭了. 而且发现的时候离比赛结束只有30分钟了. argue 也没有用了组委会也不会再改数据了 ovo 只好硬着头皮上了, 结果成为你清为数不多的没进前三的题. 跪下认错.jpg.\n还有就是关于作为一个超算比赛为什么会比这种 cv 领域都当作 trick 在看的细节, 而真正性能相关的东西几乎没有 ovo. 如果有跟组委会吐槽的机会, 我觉得可以适当吐槽一下这个事. (至少 ASC 一直都是这个风格, ISC 也就这样. 相比起来 SC 去年的 AI 题目还是很不错的)\nPennant 因为 AI 应用是第二天所以我第一天没啥事于是就在跑这个叫 pennant 的有限元.\n代码很短, 还算优美(形式上), 也很好编译. Openmp 扩展性不行, 于是骚调了一波进程数.\n然后发现这个东西吃的是内存带宽. 然而我们强行插双倍内存把 2933 的主存频率降成了 2666. 于是. 哭了. 而且机器数少, 所以尝试不了更大的并行方式了并被同样机器的中大吊打. 于是就成为了你清另一个没有进前三的题. 跪下认错.jpg x2.\n试图优化一下代码, 发现确实是很杂乱的访存 pattern, 但是也没优化动. 以及由于跟 cp2k 和 swift 两个应用在同一天, 有抢机时的问题, 所以其实只在集群上跑了两次, 也没有太多时间进行别的尝试. qaq\nHPL 虽然hpl没有什么新的东西, 而且 ISC 比赛要让机时给 HPCC, 但我要强力吐槽一波.\nInspur 的 MF5280M5 机器的 PCIE 有四个 x16 的槽, 其中三个跟 CPU1 亲和, 一个跟 CPU0 亲和. 奇怪的配置ovo. 于是导致四张卡之间的计算严重不均衡, 这也是功耗曲线如此抖动的原因.\n希望以后的机器\u0026hellip; 正常一点.\n另外就是造了一个 hpl auto tune script. 以后有机会可以试试.\nHPCG 没话可说. 卡多就是厉害.\n为数不多的拿了第一的题. 也是我跑的. ovo\n杂 赛前根据 shanker wang 师兄的建议要了三倍备用机, 并且确实用上了. 但其实内存这些物资不一定要从机器里面 hao. 其实应该跟赞助商更好地沟通的. 有很多物资 (比如 PCIe 扩展板, 内存, 额外的ssd) 其实可以直接联系对接的同学去专门要. 这次动机器动得很厉害也导致拆装机器挺麻烦的. 以后可以更精细地管理一下.\n以及也并不是16卡和内存插满就是最好的操作方式. 还是要考虑清楚应用的需求和比赛的导向. 以及每次都大胆猜想神秘应用能上GPU每次都猜错, 也是很尴尬了.\n清华是一支很优秀很成熟的队伍, 获得了很多的荣誉. 但荣誉可以是自信的来源, 也可能是在比赛中畏缩从而错失机会的根源. 不忘初心, 方能始终.\n","permalink":"/technical/6a12b3/","summary":"ISC'19. 一场大概是退役失败的超算比赛.\n我负责的 part 是 AI, 还有万年大锅 HPL, 以及神秘应用. 还有就是订保险订酒店联系赞助商blabla.\n本来想帮忙搞 HPCC 的但是没有精力搞不动 ovo\nAI AI 题是去年的 GB 论文 + 精调模型. 在解决了组委会提供的脚本里的一些性能上的 bug 之后顺利地训了起来. 而且按照原文里在上千个节点上并行训还能收敛来讲, 是可以在现有机器条件下随便数据并行的. (事实证明直接把整个训练集切成 10 个batch 也没有问题)\n因为最终要求是精度, 所以请教了一些人, 得到的思路是 数据增强, ensemble. 数据增强不太写得动, 于是改脚本做了 ensemble 的 inference, 效果还不错. 比原文高了几个点. 但也没有特别闪亮的突破性进展. 唯一发现是 bn 用的是 training mode. (原因应该是 tf 的 bn 一直自带 bug, 如果用推理模式精度就是会炸掉) 于是推理的时候也应该 bs 越大越好. 于是就有了 dummy sample inference + unique 的一个脚本. 然后因为没有处理好 \u0026ldquo;//\u0026rdquo; 于是组委会还怀疑了半天为什么我的脚本有锅. 哭.\n然后就是现场出了一个锅: unseen dataset 发下来一看居然是事前给出的 test set.","title":"ISC'19 马后炮"},{"content":"前段时间遇到 mac 微信出了一个锅.\n部分微信群和联系人在电脑上收不到消息, 可以发消息, 但发出去一直显示转圈圈 (其实对方已经收到了), 切换窗口再切回来就连之前自己发的消息都不见了ovo\n然而因为不太影响使用(可以在手机上看消息, 电脑盲回) 所以没太管. 但是作为一个强迫症还是不太能忍, 于是过了好久还是决定动手修一下.\nmac下微信的本地数据文件在 /Users/laekov/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9. 初步估计是本地文件出锅了, 于是对它动手.\n首先在mac端不上线的情况下手机拉了一个不影响别人的群, 然后用mac登录, 果然这个群属于bug群.\n把 Message 目录移动为 Message_bak, 重新登录, 失去了所有聊天记录. 再次尝试使用上面那个群, 发现可以正常使用. 定位到问题文件在 Message 目录里.\n发现 Message 目录下有 msg_[0-9]十种前缀的文件, 估计是对聊天记录进行了分桶. 大胆猜测是某个桶坏了.\n于是等了一分钟后在群里发了一条消息, 发现只有 msg_6 开头文件被更新了. 大胆猜想是 msg_6 这个桶炸了.\n另有有一个 MessageTemp 目录较大, 目测是数据文件. (比如消息, 图片, 视频) 猜想这里放的是元数据. 于是把旧的 MessageTemp 先拷回来.\n然后恢复了 msg_1 开头的几个文件, 发现果然聊天记录回来了一部分.\n挨个恢复除了 msg_6 以外的所有 msg_x 文件, 于是除了之前炸掉的记录以外, 聊天记录都回来了.\n坏掉的文件就确实没法修了. 鬼知道.data格式是啥玩意. 完结撒花.\n微信这个黑盒子也不是完全坏掉就不能修.\n但是这种完全不开源的东西修起来好心累.\n真不知道这么烂透的一个软件为什么这么多人用.\n","permalink":"/technical/f93221/","summary":"前段时间遇到 mac 微信出了一个锅.\n部分微信群和联系人在电脑上收不到消息, 可以发消息, 但发出去一直显示转圈圈 (其实对方已经收到了), 切换窗口再切回来就连之前自己发的消息都不见了ovo\n然而因为不太影响使用(可以在手机上看消息, 电脑盲回) 所以没太管. 但是作为一个强迫症还是不太能忍, 于是过了好久还是决定动手修一下.\nmac下微信的本地数据文件在 /Users/laekov/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9. 初步估计是本地文件出锅了, 于是对它动手.\n首先在mac端不上线的情况下手机拉了一个不影响别人的群, 然后用mac登录, 果然这个群属于bug群.\n把 Message 目录移动为 Message_bak, 重新登录, 失去了所有聊天记录. 再次尝试使用上面那个群, 发现可以正常使用. 定位到问题文件在 Message 目录里.\n发现 Message 目录下有 msg_[0-9]十种前缀的文件, 估计是对聊天记录进行了分桶. 大胆猜测是某个桶坏了.\n于是等了一分钟后在群里发了一条消息, 发现只有 msg_6 开头文件被更新了. 大胆猜想是 msg_6 这个桶炸了.\n另有有一个 MessageTemp 目录较大, 目测是数据文件. (比如消息, 图片, 视频) 猜想这里放的是元数据. 于是把旧的 MessageTemp 先拷回来.\n然后恢复了 msg_1 开头的几个文件, 发现果然聊天记录回来了一部分.\n挨个恢复除了 msg_6 以外的所有 msg_x 文件, 于是除了之前炸掉的记录以外, 聊天记录都回来了.\n坏掉的文件就确实没法修了. 鬼知道.data格式是啥玩意. 完结撒花.","title":"Mac微信Bug修复手记"},{"content":"许久没写过博客了.\n看到 harry 写了赛记才想起我还有个博客.\n随便写一点东西吧.\nASC19. 拿了 \u0026ldquo;大满贯\u0026rdquo; 之后第一场比赛, 拿了个亚军. @大连理工\nSec 0 赛前给自己的定位大概就是, 学学配机器和benchmark这种看上去比较底层的东西. 应用上就划划水好好干别的事.\n于是初赛成为了写 proposal 选手 + 装机器选手. 最初装机器闹了很多笑话 比如在R730上把 V100 的挡板拆了然后导致显卡悬空. 感谢戴尔和 NVIDIA 的 PCIe 槽足够结实没有直接坏掉让我赔20万的机器的卡.\n然后 proposal 也是写到崩溃 ovo.\n然后跑 HPL 发现各种玄学, 以及 32G 的 V100 性能和 16G 的不太一样. 单卡跑不上去, 多卡也有各种问题. 然后 P, Q, NB 有很多玄妙的组合. (后来知道 N 也有很多玄学). 以及连续跑和单独跑是不一样的. 这还是不考虑功耗在四台 R730 上插上 8 张卡裸跑的情况.\nHPCG 单卡不压功率也只有 125 的样子.\n另一个神奇的情况是直接跑HPL会报 MPI Error: Illegal address. 解决它的方法是, 跑一次HPCG.\nSec 1 后来水过初赛 (可能是没过然后保送的) 然后出了新的应用叫 wtdbg2. (问题的报告? 维他打不过?) 是一位叫阮珏(jue2)的农业科学家写的20000行的基因拼接程序. (科学家科学家 orz) rd 看了一眼表示他要搞. 我看了一眼表示可以抽空帮忙看一下 (划水).\n然后rd发现阮老师一个人写了八年, 居然用了 git. 然而只有十几个 .h 文件包罗了手写线程池和用宏实现的 vector, 以及几个 .c 是可以直接 gcc 一行编译的! 链接都不用! 唯一的依赖库是 zlib! 震惊了!\n果然, 算法我们都懂, 但代码一行没看懂. 在rd和翟老师的教导下学会了使用 VTune (虽然ssh -X即使用wifi也巨卡). 然后 rd 就去优化热点了而我则在瞎跑 + 继续划水.\nbtw这玩意虽然单机消耗内存巨大 (多达 1000+GB), 但是没法移到多机上的. 尝试了 ArgoDSM 然而失败了. 后来别的学校 (SJTU) 也想到这个 idea 并成功了然而翻车了.\nSec 2 然后就到了现场. (只挑印象深刻的事情写好了. 太懒了)\n刷爆信用卡垫钱给大家买了火车票. (真的是把信用卡刷到 \u0026ldquo;余额不足\u0026rdquo;. 人生第一次被支付宝教做人)\n出发前一晚拆东西打包四个人搞到两点并吃了鱼头泡饼当夜宵. (从大连回来之后发现胖了2kg)\n住的地方不是太好而且是和 BUAA 的HPL同学合住. 两人很尴尬地不敢说话怕透露情报. orz (所以 asc 为啥每队是五人而不是六人. 槽点满满)\n发现好像会装机的人没有超算比赛经验, 有经验的人不负责装机. (除了我自己这个两边都是半吊子的家伙)\n于是拿自己的行李箱装了 20 块美国金卡加一堆装备装了一个巨重的箱子打车去赛场 (1.4km) 并成功把腰拉伤了第二天一整天都在腰疼. (可钊: 不愧是铁三小哥哥orz, 就是铁. 我: 铁三是铁饼三项吗????)\n装机过程就是 bios 出了一会锅然后 legacy boot 又出了一会锅然后 eno1 bridge 又出了一会锅总之最后修了各种锅. 比较值得吐槽的是 inspur 的 pcie razer 没插紧导致我们懵了好久, 后来又发现 PCIe 槽是裂的. (满脸黑线.jpg)\n总之学会了配 bmc 感觉很有用.\n当然还有就是拔插内存的时候内存没插紧 ovoovoovov.\n总之出了各种锅并修掉之后还留了大半天来跑压功耗版本的 hpl. 这才意识到事情没有想象的那么简单.\nV100 250W * 16 + 待机功耗175W * 6 = ????? 这比赛要求功耗3000w?????\n于是学会了各种玄学控风扇以及通过控cpu的功率(频率? 功耗限?) 来控制GPU的运算速度以及其实可以直接手控GPU的功耗限制和频率.\nSec 3 重点来了!\nHPL的运算曲线是不平的! 要边算边放CPU功率! 每次比赛完之后都说要写一个帅气的功耗调音台然而都要等下次比赛开始的时候才想起还没写. 于是 saffah 从他的 home 里掏出了一个(可能不是祖传的) expect 脚本. 读 hpl 输出到 stderr 里的东西来决定功耗怎么压!\n于是接下来的事情就是首先调 N. 因为是 32G 的卡所以总运算量乘了 (2^1.5). 于是风扇全关的情况下会 GPU 撞温度墙. ovoovoovovo.\n纠结了一下发现 N 变小的情况下跑分会低.\n(插播两段)\n于是首先拍着脑门列了个表决定了一下机器配置. 这里面用到了 \u0026ldquo;城市模型概率\u0026rdquo; 课里面龙老师讲过的一个方法: 假设路人智商普通, 但你想知道一个问题的答案, 那你可以找 10000000 个路人让他们给一个答案, 然后所有答案求平均 (或者投票), 总能得到一个比较正确的答案.\n于是我们就集中全队的人, 趴在 saffah (教练? 雾) 的大床上投票投出了一个不同配置下的估计得分表, 然后选了一个 3G4C 的奇怪方案.\n于是就是拿 12块 V100 调. 发现其实风扇开到最低档并不消耗很多功率但可以成功压制GPU的温度. 于是就把风扇开起来解决了撞墙的问题.\n然后就是一次次地跑HPL, 盯着组委会大屏上的功率, 逐段做功耗整形ovoovoovo\n其实应该直接抓 PDU 的数据, matplotlib 画两条曲线出来, 做整形. 如果有机会以后做一个好了. (如果还不退役的话)\n配机器结束的时候也没整出很规整的形. 但比赛日上来暴了两次功率之后狂吹了一会, 然后跑了一发, 发现结果还可以, 就交了. 以及事实证明冰啤酒拜机器还是蛮管用的, 唯一的问题是我只买了3瓶, 导致剩下四台机那天不太 work.\n以及 HPCG 就比较无脑了, 写了个 python 的功率无脑三控脚本, 找了个能控稳的功率, 跑就完事了. 完全是拼机器配置的.\nSec 4 比较高能的部分来了.\n之前选 3G4C 方案是为了让 CESM 多拿点分. 果然有队伍拿 12xV100 跑了 50T 的 HPL(BUAA). 以及有队伍拿 16xV100 跑了2000+的 HPCG (NTHU). 完全吻合我赛前的估计.\n然而 CESM 第一个点, 不收敛. 第二三个点, SF. 于是就无能为力地看着harry和zly在那里疯狂折腾最后只能用三机跑 (见上文3瓶冰啤酒). 最后第一个点也没折腾出来. 2和3在没有什么性能分的情况下跑完了.\n最初以为不能用 checkpoint 续跑, 于是第二个点在SF之后就掐了重来, 结果又SF了, 于是才去问了组委会并得知可以续跑. 后来harry又发现用 checkpoint 也跑不起来, 于是我让他用前一个月的 checkpoint, 结果又跑起来了.\n(再插一段)\n想起了我在城市模型上训 A-CA-GCN 的时候疯狂地 checkout 到上一个存档点然后改 lr 接着训来获得更高的 (R^2) 的搞笑做法. (甚至有 neiatt2.pt neiatt3.pt \u0026hellip; neiatt5.pt)\n总之 CESM 是第一天的事故现场. 以及那个 fluidity 直接弃疗了因为没机时了. ovooovo\n事后知道第一个点换个进程数就能跑了. 以及 cesm 在进程数是 2 的幂的时候有奇妙的加速.\nSec 5 Day2没我啥事了. 主要任务是盯功耗(其实有harry盯) + rd让我跑wtdbg(对我来负责跑, 因为有24个测试点) + 神秘应用(也没我啥事因为有harry和zly).\n然后发现 wtdbg 是一个数据跑不同的选项中间结果可以复用. 之前没试过那个复用中间结果的方式, 于是出了好一会的锅, 才发现 help 信息里少看了一行, 要先开另一个叫 kbmserver(类似) 的程序再跑主程序于是就跑起来了尴尬并行跑完了. 没有什么大的优化稳稳的. 唯一开心的是之前让harry给弄的每机额外480GB SSD (inspur机器里本来插的硬盘, 本来是想拔掉的然而我让留下了)有作用, 因为成功地把 IO 负载均衡了.\n然而你让我 80 core 的 daul socket gold 6230 单线程跑了好久, 然后再 power spike 一下, 这个程序的 pattern 我也是很无语了. 而且实际上 CPU 没打满, 80 core 并行的时候也只用到20-30. 再次认识到科学家是多么厉害的人 orz.\n再然后就是发现神秘应用 ShengBTE 会 OOM. 原因是每个进程都会占很多时间. 最后只剩2h的时候准备起最后一波. 当时的情报是: 有人说可扩展性还可以. SUST 说4分点跑完了. 于是我脑门一拍就让去抢4分点. 最后发现4分点有4个温度要迭代, 而3.5分点只有一个. ovoovovoooovo. 为啥跑之前不知道 ovovoovovo. 当然这也不怪谁. 就是缺乏经验吧.\nSec 6 于是比完听说 SYSU 跑完了 ShengBTE 并大幅优化了 WTDBG. SJTU 也很厉害, 于是觉得要没钱拿直接回家了.\n以及事故现场抽答辩抽到倒数第二个. 早晨七点半开始的答辩我要12点才讲. 这不凉了么评委都要睡着了 ovoovo. 考虑了一下要不要讲个段子博一下, 然后发现这比赛连段子都没得讲ovoovovoovov.\n于是回去盯着一群人暴风地做了个 PPT 然后合ppt熬夜改 ppt 改到三点过. 别人做PPT这事, 以及PPT都有很多槽点不过我想去吃饭了就不讲了. 细节细节. 总之不是所有人都像我一样擅长做PPT. ovoovovovo (其实我也不会做ppt\u0026hellip; 作为一个 beamer 和 keynote 用户并不知道 ppt 为何物)\n然后早晨全队只有我一个人醒了念了几遍计时的 PPT, 然后大家就一起起床了, 然后就去那么讲了一下.\n(插) 最后拿到分数表就比最高的隔壁学校低了( \\epsilon=0.01) (10分满分), 也算是对得起我 23分的 TOEFL 口语了 ovo\n就这么结束了退役了. 最后演讲完深深躹了一躬.\n最后的超算比赛就这么结束了. (并不)\n第一年拿了一次大满贯, 上了电视若干次, 领了年度人物.\n第二年当上了队长, 第一次比赛啥奖都没有就退役回家了.\n也是很符合我事故现场的人设吧.\nSec -1 开开心心(并不)地出了大厦甚至想抽支烟 (然而没烟也没钱).\n不太开心地开车带着rd, harry, 年级第一(7), 和成钢小哥哥出去飚车. 骚操作了一下然而并不知道去哪, 去海边被吹成鸡之后就回来了.\nharry 说在大连开车体验不好, 大概是在吐槽我的车技吧ovo.\n然后领奖的时候发现别的学校(SYSU, SJTU)都跪了, 于是我们拿了第二.\n也算捡了个奖金, 也不是太高兴 ovoo.\n总结了一下, 和BUAA的HPL老哥喝了杯酒, 就收拾东西回北京了. 然后在回北京后第二天经历了另一场更有戏剧性的事故现场. (this page will be marked as private)\n一周没在北京感觉北京已经过去了一个月.\n生活还在继续, 新的超算比赛还要面对, 新的锅还在产生.\n不管事故还有多少, 都总得一个个去解决不是么.\nHistorical Comments mmmqaq at 2019-05-01T13:33:34 (this page will be marked as private) 是啥\n","permalink":"/random/34dd44/","summary":"许久没写过博客了.\n看到 harry 写了赛记才想起我还有个博客.\n随便写一点东西吧.\nASC19. 拿了 \u0026ldquo;大满贯\u0026rdquo; 之后第一场比赛, 拿了个亚军. @大连理工\nSec 0 赛前给自己的定位大概就是, 学学配机器和benchmark这种看上去比较底层的东西. 应用上就划划水好好干别的事.\n于是初赛成为了写 proposal 选手 + 装机器选手. 最初装机器闹了很多笑话 比如在R730上把 V100 的挡板拆了然后导致显卡悬空. 感谢戴尔和 NVIDIA 的 PCIe 槽足够结实没有直接坏掉让我赔20万的机器的卡.\n然后 proposal 也是写到崩溃 ovo.\n然后跑 HPL 发现各种玄学, 以及 32G 的 V100 性能和 16G 的不太一样. 单卡跑不上去, 多卡也有各种问题. 然后 P, Q, NB 有很多玄妙的组合. (后来知道 N 也有很多玄学). 以及连续跑和单独跑是不一样的. 这还是不考虑功耗在四台 R730 上插上 8 张卡裸跑的情况.\nHPCG 单卡不压功率也只有 125 的样子.\n另一个神奇的情况是直接跑HPL会报 MPI Error: Illegal address. 解决它的方法是, 跑一次HPCG.","title":"行走的事故现场 -- ASC19 赛记"},{"content":"我的愿望真的很简单\n如果有一天我变成骨灰了的话\n我不想被装进盒子里\n","permalink":"/random/a3a526/","summary":"我的愿望真的很简单\n如果有一天我变成骨灰了的话\n我不想被装进盒子里","title":"愿望"},{"content":"看了一篇文章叫 \u0026ldquo;北大毕业生去送外卖\u0026rdquo;\n以前北大毕业生好像还有去卖猪肉的.\n这篇就是, 很真实噢\n我们活成了什么样?\n我们自己希望活成什么样?\n我们被别人希望活成什么样?\n我们凭什么要活成别人希望的那样?\n再问下去就应该问 \u0026ldquo;我们为什么要活着\u0026rdquo; 了\n怎么活着不是活着?\n人生苦短, 为什么要干这么多不喜欢干的事?\n所谓 \u0026ldquo;幸福\u0026rdquo; 的 \u0026ldquo;未来\u0026rdquo;, \u0026ldquo;前途\u0026rdquo;, 谁知道是不是扯淡?\n我大胆猜想, 都是一个更大的坑\n因为投入多\n期待有收益\n但现在没有得到应有的收益\n出于愚蠢/拖延\n只能天真地期望未来的收益/下一代带来收益\n切\n还不如活得洒脱一点呢\nHistorical Comments AInoob at 2019-07-18T13:36:31 活得快乐就不错吧。虽然我还没想好搞什么。\nlaekov at 2019-07-24T04:49:21 @Alnoob 快乐也没有那么简单吧..\n","permalink":"/random/d00a5b/","summary":"看了一篇文章叫 \u0026ldquo;北大毕业生去送外卖\u0026rdquo;\n以前北大毕业生好像还有去卖猪肉的.\n这篇就是, 很真实噢\n我们活成了什么样?\n我们自己希望活成什么样?\n我们被别人希望活成什么样?\n我们凭什么要活成别人希望的那样?\n再问下去就应该问 \u0026ldquo;我们为什么要活着\u0026rdquo; 了\n怎么活着不是活着?\n人生苦短, 为什么要干这么多不喜欢干的事?\n所谓 \u0026ldquo;幸福\u0026rdquo; 的 \u0026ldquo;未来\u0026rdquo;, \u0026ldquo;前途\u0026rdquo;, 谁知道是不是扯淡?\n我大胆猜想, 都是一个更大的坑\n因为投入多\n期待有收益\n但现在没有得到应有的收益\n出于愚蠢/拖延\n只能天真地期望未来的收益/下一代带来收益\n切\n还不如活得洒脱一点呢\nHistorical Comments AInoob at 2019-07-18T13:36:31 活得快乐就不错吧。虽然我还没想好搞什么。\nlaekov at 2019-07-24T04:49:21 @Alnoob 快乐也没有那么简单吧..","title":"北大毕业生去送外卖了, 我呢"},{"content":" ","permalink":"/post/fbf425/","summary":" ","title":"Cena 用户指南"},{"content":"API角度 Python 功能没有 pytorch 完善. 参数收集等都需要手写.\nCPP API 同 Python.\n设计理念 类名为 Expression: 表达式 -\u0026gt; 明确定义 未执行.\nGraph @xl nodes, parameter_nodes\ninplace: forward_inplace_state { NOPE } 完全没支持inplace.\nimmediate_compute 立即执行.\n提供backward方法, 但传入了loss的index.\nTensor 暴力绑定内存. (直接就是一个裸指针)\nExpression (Variable) value() 方法真正执行expression并获取值. 调用ee(ExecutionEngine).\nAutobatching 在执行cg的时候做. 具体代码在 exec.cc 里一个叫 incremental_forward_no_update的函数里.\n使用 signiture 机制. 不同功能的function对应不同的signiture. 相同signiture的 合并.\nOptimize 没有做. 只有一个找关键路径的简单算法.\nNode(Functions) Spec推断 DimForward 专门维护 shape 信息.\nforward 和 backward 放在一个子类里.\n所有控制都由 Graph 接管. 包括所有 Variable 和 Nodes (Function)\nTreeNN 的实现 Expression 为 Node 级别, 可以被 batch 起来.\n(这个对 engine 的合并性能要求较高, 因为 node 可能非常多)\nRNN Batching 没有 batch 这个概念, 而是自动 batching. 其实生成了很多张图, 然后再聚合.\n","permalink":"/technical/bb68d3/","summary":"API角度 Python 功能没有 pytorch 完善. 参数收集等都需要手写.\nCPP API 同 Python.\n设计理念 类名为 Expression: 表达式 -\u0026gt; 明确定义 未执行.\nGraph @xl nodes, parameter_nodes\ninplace: forward_inplace_state { NOPE } 完全没支持inplace.\nimmediate_compute 立即执行.\n提供backward方法, 但传入了loss的index.\nTensor 暴力绑定内存. (直接就是一个裸指针)\nExpression (Variable) value() 方法真正执行expression并获取值. 调用ee(ExecutionEngine).\nAutobatching 在执行cg的时候做. 具体代码在 exec.cc 里一个叫 incremental_forward_no_update的函数里.\n使用 signiture 机制. 不同功能的function对应不同的signiture. 相同signiture的 合并.\nOptimize 没有做. 只有一个找关键路径的简单算法.\nNode(Functions) Spec推断 DimForward 专门维护 shape 信息.\nforward 和 backward 放在一个子类里.\n所有控制都由 Graph 接管. 包括所有 Variable 和 Nodes (Function)","title":"DyNet 代码笔记"},{"content":"最近做 attack lab 感到虽然很头大但是很好玩.\n主要分为两个 target: code injection 和 return hack\n两个实验的原理都是栈向上溢出之后抹掉了一些 return address, 从而可以改写, 做任何你想做的事.\nctarget 比较简单粗暴, 可以直接跳到用户上传的字符串里面, 把用户数据直接当代码执行.\n第一个子任务 可以直接跳转.\n第二个子任务 需要把 cookie 找出来并写进 %rdi. 我最开始以为cookie是随机的, 于是去gdb里把 cookie 的内存地址给弄出来强行读了. 后来才发现可以直接 hardcode.\n第三个子任务 同上, 没有发现这个 trick, 于是就从内存里读之后, 调用它提供的 sprintf 函数. 这个函数有很多的陷阱, 比如一定要把 %rax 设成 0, 不然会跳错. 然后打印的地址也得自己在栈里找. 更坑的是栈空间会被 sprintf 函数给抹掉, 所以必需得先把 %rsp 放低到很远的位置去, 不然就算打对了字符串, 注入的代码段也没有了, 还是会 segmentation fault.\n好了现在问题又来了, 注入的栈只有 56 个字节. 如何把上面一长串代码塞进去. 其实有个简单的方法是继续向上溢出, 中间加一条 jmp. 但是懒惰的我强行使用各种办法把代码给压进去了. 比如 subl 比 subq 少一个字节, 于是可以只减 rsp 的低32位 esp. 同理还有 movq 和 movl. 再有就是清零可以直接 xor %eax, %eax, 直接省下了四五个字节, 岂不美哉.\nrtarget 这个就没那么粗暴了. 注入到栈空间里的东西只能是数据或者 ra, 不可以是代码. 如果 %pc 指进栈空间会直接报错.\n但是引入了一个叫 farm 的东西. farm 里全是一些小函数, 有很多 c3, 即 ret. 于是只要在 c3 的前面找到一些有用的子串作为我需要的代码, 岂不就能解决问题了.\n第四个子任务 这个任务要调 touch2, 即把 cookie 放进 %rdi. 前面说了其实 cookie 是固定的. 所以可以写进栈里.\n观察发现有 popq %rax, 和 mov %eax, %edi 这俩非常有用的代码片段, 所以就直接 从栈里弹出来然后扔进 %edi 就完事了.\n####第五个子任务 这个玩意挺有难度也挺有意思, 虽然做完之后觉得也就那样了.\n任务是写字符串. 其实那个字符串的长度刚好就是一个 64 位整数, 放进栈里的某个位置就好. 然后有一个非常非常关键的函数叫 add_xy. (我因为没看到这个函数懵了一个小时也是很醉.) 这函数的意思是把 %rdi 和 %rsi 加起来放进 %rax.\n观察发现有 movq %rsp, %rax 和 movq %rax, %rdi. 因为栈地址前面一段都是 f, 所以必需得用 64 位操作. 正好这一条链式传递可以把 %rsp 放到 %rdi.\n另外还需要弄一个偏移量. 把常数压进栈里然后放到 %rsi. 但是由于 farm 里找不到 很好用的片段, 这里需要一个非常长的传递, 依次经过 rax rdx rcx rsi. 这里需要好好使用 vim 的正则匹配功能才能迅速地找到对应的代码.\n最后就是把 %rax 再放到 %rdi, 然后调 touch3.\n最后一个问要大力感谢室友 seventhheavan 给我的提示.\n","permalink":"/technical/6788d3/","summary":"最近做 attack lab 感到虽然很头大但是很好玩.\n主要分为两个 target: code injection 和 return hack\n两个实验的原理都是栈向上溢出之后抹掉了一些 return address, 从而可以改写, 做任何你想做的事.\nctarget 比较简单粗暴, 可以直接跳到用户上传的字符串里面, 把用户数据直接当代码执行.\n第一个子任务 可以直接跳转.\n第二个子任务 需要把 cookie 找出来并写进 %rdi. 我最开始以为cookie是随机的, 于是去gdb里把 cookie 的内存地址给弄出来强行读了. 后来才发现可以直接 hardcode.\n第三个子任务 同上, 没有发现这个 trick, 于是就从内存里读之后, 调用它提供的 sprintf 函数. 这个函数有很多的陷阱, 比如一定要把 %rax 设成 0, 不然会跳错. 然后打印的地址也得自己在栈里找. 更坑的是栈空间会被 sprintf 函数给抹掉, 所以必需得先把 %rsp 放低到很远的位置去, 不然就算打对了字符串, 注入的代码段也没有了, 还是会 segmentation fault.\n好了现在问题又来了, 注入的栈只有 56 个字节. 如何把上面一长串代码塞进去. 其实有个简单的方法是继续向上溢出, 中间加一条 jmp. 但是懒惰的我强行使用各种办法把代码给压进去了. 比如 subl 比 subq 少一个字节, 于是可以只减 rsp 的低32位 esp.","title":"汇编 CSAPP Attack Lab"},{"content":"DYNET 1701.03980\nABS cpp backend\nlw graph representation\nProblems easier debugging / maintaining large proj. express naturally Static vs Dynamic static pre-written model transfered to computation graph\ngraph can be well optimized\ncannot deal with variable input size. NLP RNN\ncannot deal with variable input structure. Tree NN, Graph NN\nhard for complex flow-contronl logic (interface design)\nnontrivial interface.\ndebug difficulty during execution\ndynamic do computation on the fly\ncan be expensiveo flow control and variable sized inputs are in host language (python?)\nDynet lazy execution. explicitly ask for it. value() method\nModel, parameter, trainer, expression, operations\nexamples Tree encode nn Dynamic control flow. Break when some score is high enough in serial model Computation Graph (CG) Node variable. (Some intermediate result)\nmaintain a list of incoming node, one incoming function\nC level implementations manual mem manager\ncython\neigen library\nUI RNN builder (compare to PyTorch Modules)\nOptimizations sparse update may be negligible on GPU\nnot work under some specific optimizers\nMinibatch another way of UI design\nParallelism CPU data parallel ??????\nshared memory PS mode???\nBM results CPU faster on LSTM. Variable length vs Monolength\nsparse works well ???\nGPU weak\nvegetable\nTODO Multi-device CG Optim More support for Ops and Optims Inspriations Variable CG is important to outperform TensorFlow UI is simple to to fake Python\u0026rsquo;s overhead is not significant in expression and even graph computing ","permalink":"/technical/e51049/","summary":"DYNET 1701.03980\nABS cpp backend\nlw graph representation\nProblems easier debugging / maintaining large proj. express naturally Static vs Dynamic static pre-written model transfered to computation graph\ngraph can be well optimized\ncannot deal with variable input size. NLP RNN\ncannot deal with variable input structure. Tree NN, Graph NN\nhard for complex flow-contronl logic (interface design)\nnontrivial interface.\ndebug difficulty during execution\ndynamic do computation on the fly\ncan be expensiveo flow control and variable sized inputs are in host language (python?","title":"DyNet 论文笔记"},{"content":"Queue 了一篇 CaPiano. 上午展示完. 人智课生产力低下. 把它 Dequeue 了罢.\n这个项目的最初设想是造一个识别指尖的算法, 然后用它来弹钢琴并发出声音. 还有一个完全没有开动的二期工程是把它变成一个音游 / 录音机.\n蓝图是美好的, 实现是丑陋的.\n摄像头 过去一个半月的主要工作就是和这个 OV7670 (AL422B) 的摄像头做斗争. AL422B 是一个 DRAM 的 FIFO 队列, 通过巧妙地接 7670 和 422 的管脚可以实现把 422 作为 7670 的一个输出缓冲. 422 本来是用于简化这件事的. 在国外大学的 PA 文档里也是这么说的. 然而 422 这个东西最大的毛病就是没有 dataready 这个信号, 所以根本没法成功探索出什么时候可以读. 挣扎了很久之后我选择买了一个不带 422 的 7670.\n7670 通过 SCCB 协议来进行配置, 有一些寄存器. 主要有用的是控制彩色的 12 和控制输出格式的 40. 本来想要 RGB565 加 QVGA 爽歪歪. 然而我的配置模块跑出来结果完全不对, 最后发现根本没设起. 降频到手工时钟都没有办法正常工作. 于是只好放弃, 使用默认的 YUV + VGA.\n另外在网上看到有一个输出彩色条的 80 寄存器. 然而因为同上原因也没有用上.\nYUV格式是一个相邻两个像素共用四字节的奇怪格式. 按照时间读进来的四个字节是 Y1 U Y2 V. 其中Y是灰度, U和V是奇怪的参数. wikipedia 上有一个通过线性变换把它变到 RGB 彩色空间上的矩阵. 然而我发现我只有G是能判断出来的, 而且屏幕上的G其实是红色\u0026hellip;\n这些问题都没解决也不打算解决了. 红色, 够用了.\n识别算法 最初想的识别算法是连通块判定blabla. 选这个题也是想用这个 CV 的问题充分发挥 FPGA 逻辑单元的并行性.\n然后噩耗是, 摄像头和VGA都是扫描的.\n于是最后变成了直接 Threshold. 因为 Threshold 太难调所以又加了个拿 PS2 键盘调 threshold 的小功能.\n然后就变成了识别一个像素点的 绿 红 蓝 分别大于或者小于某个值.\n真 简单粗暴.\n当然直接用手指是效果不好的\n于是我就去淘宝买了三盒红色橡胶指套.\n这指套也不是正红而是粉红.\n于是又去文具店买了根红色记号笔.\n终于能让它稍微效果好点了.\n琴键按下 同上. 直接判断某个屏幕区域里有多少个像素点是被识别成手指的. 然后用个 threshold.\n本来这块也是想并行做的, 然而. 扫描的.\n讲道理只要 30fps 的话并行也不错. 然而实在是懒得写状态姬了. 于是yy了一个动态维护的方法, 直接减去旧值加上新值 (都是0或者1).\n后来发现竟然会减成负的. 毕竟这个识别的准确性和 ram 读写都不是特别靠谱.\n索性过一段时间清零一次这个 count 寄存器组.\n然后意外发现这个东西顺便解决了长按弹起的问题, 鲁棒性大大地加强了. 非常开心.\n别的部分 剩下和 pc 通信并发现钢琴声的部分就全靠队友 bakser 同学了.\nbakser 同学干活还是很靠谱的.\n用了别人的 python 库. 来发声. 竟然还有 fft 和弦这种高级玩意.\n最后其实用起来效果也蛮奇怪的. 不过大家都是弹弹玩, 也没有谁认真地弹琴的. 也就乐呵呵地糊过去了.\n差点搞死我的数设 project 也就是这样了啦.\n以后有机会希望能拿 fpga 造点真正有用的东西. (比如网卡? 交换机? 硬件压缩算法? DL infer?)\n代码库也是乱七八糟没救了. (顺便感激一下 github 上找到的 submodule 让我抄都懒得抄了)\nhttps://github.com/laekov/capiano\nHistorical Comments laekov at 2018-06-12T22:05:42 突然产生了自己寨一个 strava 的想法\u0026hellip; 然而除了画图有什么好玩之处呢? 思考\n","permalink":"/technical/7acc1f/","summary":"Queue 了一篇 CaPiano. 上午展示完. 人智课生产力低下. 把它 Dequeue 了罢.\n这个项目的最初设想是造一个识别指尖的算法, 然后用它来弹钢琴并发出声音. 还有一个完全没有开动的二期工程是把它变成一个音游 / 录音机.\n蓝图是美好的, 实现是丑陋的.\n摄像头 过去一个半月的主要工作就是和这个 OV7670 (AL422B) 的摄像头做斗争. AL422B 是一个 DRAM 的 FIFO 队列, 通过巧妙地接 7670 和 422 的管脚可以实现把 422 作为 7670 的一个输出缓冲. 422 本来是用于简化这件事的. 在国外大学的 PA 文档里也是这么说的. 然而 422 这个东西最大的毛病就是没有 dataready 这个信号, 所以根本没法成功探索出什么时候可以读. 挣扎了很久之后我选择买了一个不带 422 的 7670.\n7670 通过 SCCB 协议来进行配置, 有一些寄存器. 主要有用的是控制彩色的 12 和控制输出格式的 40. 本来想要 RGB565 加 QVGA 爽歪歪. 然而我的配置模块跑出来结果完全不对, 最后发现根本没设起. 降频到手工时钟都没有办法正常工作. 于是只好放弃, 使用默认的 YUV + VGA.","title":"CaPiano 基于 FPGA 和摄像头的现实增强钢琴"},{"content":"教你 30 分钟写完 MNIST 作业 laekov 2018.05.20\nOverview 题目要求 随便用什么框架去 Kaggle 上做手写数字识别的数据集.\n你可以选择自己写一个框架. (谁爱写谁写)\nTHU PACMAN 实验室最近在筹划写一个框架, 有兴趣的同学可以联系我.\n最好多实现几个模型, 调调参, 写报告需要.\n需要做的事 找一个框架 抄一遍 Tutorial 写一个处理数据 (csv格式) 的模块 写一个模型 写训练/验证/测试的东西 CNTK 框架 微软的框架. Python 文档见https://cntk.ai/pythondocs/index.html\n安装. 见官网. pip, conda, install_cntk.exe 什么的都行.\n略.\n使用 CNTK 框架.\nimport os import cntk as C import numpy as np 轻松愉快.\n处理 CSV 数据格式\n第一行不用管\n1234567890,0,0,...,255,0 一行一张图, 第一个是数字, 后面是28x28个0-255的灰度值.\n可以用 pandas 之类的又麻烦又难用的库.\n不如自己写个小函数.\ndef csv_reader(filename, batch_size = 1, is_test = False): with open(filename, \u0026#39;r\u0026#39;) as f: f.readline() batch = { \u0026#39;image\u0026#39;: [], \u0026#39;label\u0026#39;: [] } while True: raw_line = f.readline().split(\u0026#39;,\u0026#39;) if len(raw_line) \u0026lt; 10: break label = np.zeros(10, dtype = float) if not is_test: label[int(raw_line[0])] = 1 raw_line = raw_line[1:] batch[\u0026#39;image\u0026#39;].append(np.array([ float(x) for x in raw_line ], dtype = float).reshape((1, 28, 28))) batch[\u0026#39;label\u0026#39;].append(label) if len(batch[\u0026#39;image\u0026#39;]) == batch_size: yield batch batch = { \u0026#39;image\u0026#39;: [], \u0026#39;label\u0026#39;: [] } if len(batch[\u0026#39;image\u0026#39;]) \u0026gt; 0: yield batch 模型 计算部分 LeNet\n一层CNN一层ReLU 一口咸菜一口粥\n两遍, 然后全连接两层 (中间有一个隐层).\n线性结构, CNTK自带Sequential化简.\ndef create_model(features): with C.layers.default_options(init=C.glorot_uniform(), activation=C.relu): h = features h = C.layers.Convolution2D(filter_shape=(5,5), num_filters=8, strides=(2,2), pad=True, name=\u0026#39;first_conv\u0026#39;)(h) h = C.layers.Convolution2D(filter_shape=(5,5), num_filters=16, strides=(2,2), pad=True, name=\u0026#39;second_conv\u0026#39;)(h) r = C.layers.Dense(10, activation=None, name=\u0026#39;classify\u0026#39;)(h) return r Loss部分 不管是啥抄 Tutorial 就好.\n一个简单的交叉熵. 输入是模型的输出 (十维向量) 和标签 (One-hot 的十维向量)\ndef create_criterion_function(model, labels): loss = C.cross_entropy_with_softmax(model, labels) errs = C.classification_error(model, labels) return loss, errs 拼起来部分 def main(is_test = False): x = C.input_variable((1, 28, 28), name = \u0026#39;image\u0026#39;) y = C.input_variable((10, ), name = \u0026#39;label\u0026#39;) z = create_model(x) model = z(x / 255) loss, label_error = create_criterion_function(model, y) 训练验证测试 训练 训练一个epoch的过程是: 把一个batch的数据正向跑一遍, 反向算梯度, 更新权重.\n使用自带的 learner 和 trainer 即可.\nlearning_rate = 0.2 lr_schedule = C.learning_parameter_schedule(learning_rate) learner = C.sgd(z.parameters, lr_schedule) trainer = C.Trainer(z, (loss, label_error), [learner]) 训练一个epoch的过程就是把数据读进来喂给trainer的无脑过程.\ndef train_epoch(loss, learner, trainer): i = 0 for batched_data in csv_reader(\u0026#39;train.csv\u0026#39;, batch_size = 64): trainer.train_minibatch(batched_data) training_loss = trainer.previous_minibatch_loss_average i += 1 if i % 100 == 0: print(\u0026#39;Trained %d batches, loss = %e\u0026#39; % (i, training_loss)) 验证 把一部分数据拿来算一遍精度, 实时监测训练进度, 防止过拟合.\n算精度相当于把训练结果拿出来. 使用 model.eval 函数.\n善用np.array的argmax函数.\ndef validate(model): i = 0 tot = 0. corr = 0. for batched_data in csv_reader(\u0026#39;train.csv\u0026#39;, batch_size = 64): data = { \u0026#39;image\u0026#39;: batched_data[\u0026#39;image\u0026#39;] } ans = model.eval(data) for posbs, answer in zip(ans, batched_data[\u0026#39;label\u0026#39;]): x = np.array(posbs).argmax() corr += 1. if x == answer.argmax() else 0. tot += 1. i += 1 if i % 100 == 0: print(\u0026#39;Tested %d batches\u0026#39; % (i)) print(\u0026#39;Accuracy = %.7f\u0026#39; % (corr / tot)) return corr / tot 测试 跑测试集, 把答案写进result.csv. 和 Validate 大同小异.\ndef test(model): with open(\u0026#39;result.csv\u0026#39;, \u0026#39;w\u0026#39;) as f: f.write(\u0026#39;ImageId,Label\\n\u0026#39;) base_id = 1 i = 0 for batched_data in csv_reader(\u0026#39;test.csv\u0026#39;, batch_size = 256, is_test = True): data = { \u0026#39;image\u0026#39;: batched_data[\u0026#39;image\u0026#39;] } ans = model.eval(data) for j, a in enumerate(ans): f.write(\u0026#39;%d,%d\\n\u0026#39; % (j + base_id, np.array(a).argmax())) base_id += len(ans) i += 1 if i % 10 == 0: print(\u0026#39;Inferred %d images\u0026#39; % base_id) 总过程 重复以下过程: 训练, 验证. 找到一个不错的模型就存下来.\n直到你觉得OK了就把你觉得OK的模型Load进来跑测试.\ntrainer有 save_checkpoint 和 load_from_checkpoint 函数. 参数就是文件名. 很方便.\ndef main(is_test = False): x = C.input_variable((1, 28, 28), name = \u0026#39;image\u0026#39;) y = C.input_variable((10, ), name = \u0026#39;label\u0026#39;) z = create_model(x) model = z(x / 255) loss, label_error = create_criterion_function(model, y) if not is_test: max_epoch = 10 learning_rate = 0.2 lr_schedule = C.learning_parameter_schedule(learning_rate) learner = C.sgd(z.parameters, lr_schedule) trainer = C.Trainer(z, (loss, label_error), [learner]) if os.path.isfile(\u0026#39;lenet.pm\u0026#39;): trainer.restore_from_checkpoint(\u0026#39;lenet.pm\u0026#39;) best_acc = validate(model) for i in range(max_epoch): print(\u0026#39;Running epoch %d\u0026#39; % i) train_epoch(loss, learner, trainer) acc = validate(model) trainer.save_checkpoint(\u0026#39;lenet.pm\u0026#39;) if acc \u0026gt; best_acc: trainer.save_checkpoint(\u0026#39;lenet_best.pm\u0026#39;) else: if os.path.isfile(\u0026#39;lenet.pm\u0026#39;): trainer.restore_from_checkpoint(\u0026#39;lenet.pm\u0026#39;) test(model) 思考题和讨论 验证集的划分 我没划分直接在训练集上跑的. 肯定不对. 划分也不难.\n模型复杂化 只用修改 create_model 函数就行了.\n调参 程序里写的常数都能调. 比如 lr. 模型里还有一些默认的参数, 详见文档.\n性能优化 CNTK自带优先在GPU上跑.\nGPU加速有多快? 也就几十倍.?\nhint 这回提供的代码我良心地跑过了且确实能跑能用.\n屠龙宝刀点击就送\n","permalink":"/technical/75774b/","summary":"教你 30 分钟写完 MNIST 作业 laekov 2018.05.20\nOverview 题目要求 随便用什么框架去 Kaggle 上做手写数字识别的数据集.\n你可以选择自己写一个框架. (谁爱写谁写)\nTHU PACMAN 实验室最近在筹划写一个框架, 有兴趣的同学可以联系我.\n最好多实现几个模型, 调调参, 写报告需要.\n需要做的事 找一个框架 抄一遍 Tutorial 写一个处理数据 (csv格式) 的模块 写一个模型 写训练/验证/测试的东西 CNTK 框架 微软的框架. Python 文档见https://cntk.ai/pythondocs/index.html\n安装. 见官网. pip, conda, install_cntk.exe 什么的都行.\n略.\n使用 CNTK 框架.\nimport os import cntk as C import numpy as np 轻松愉快.\n处理 CSV 数据格式\n第一行不用管\n1234567890,0,0,...,255,0 一行一张图, 第一个是数字, 后面是28x28个0-255的灰度值.\n可以用 pandas 之类的又麻烦又难用的库.\n不如自己写个小函数.\ndef csv_reader(filename, batch_size = 1, is_test = False): with open(filename, \u0026#39;r\u0026#39;) as f: f.","title":"人智的另一个作业. 教你 30 分钟写完 MNIST 作业"},{"content":"最近在做一个 Cache 替换算法的 PA. 系统结构课.\n给的 Baseline 是 2010 年的一个 championship.\n看了看现在用得比较多的通用算法叫 LIRS.\n在 LIRS 基础上想方法优化.\n瞎搞的东西把单核 miss 率降低得有点 surprising.\n还没有更多的 benchmark 测试.\n感觉有点意思.\n","permalink":"/technical/3e470a/","summary":"最近在做一个 Cache 替换算法的 PA. 系统结构课.\n给的 Baseline 是 2010 年的一个 championship.\n看了看现在用得比较多的通用算法叫 LIRS.\n在 LIRS 基础上想方法优化.\n瞎搞的东西把单核 miss 率降低得有点 surprising.\n还没有更多的 benchmark 测试.\n感觉有点意思.","title":"LIRS Plus"},{"content":" 断路负载波形\n短路负载波形\n匹配负载波形\n纵波和深孔波形\n","permalink":"/random/d81ca0/","summary":"断路负载波形\n短路负载波形\n匹配负载波形\n纵波和深孔波形","title":"波的传输实验波形"},{"content":" 这篇讲义都是五笔打的\nlaekov 2018.04.12\nOverview 作业要求 写一个拼音输入法, 一行一行地读拼音, 输出对应的汉语句子\n84: 两小时就能写完\n给出的数据 GBK编码的拼音-\u0026gt;汉字对应表 新浪新闻一年的文章 评分 基础2字模型 扩展3字模型 四字, 双词, 三词\u0026hellip; 需要写什么东西 拼音 2 汉字的 map 快速查找某个字/词词频的 map 估值函数和 infer 的算法 训练数据处理 最常用的16位编码是utf-8, 但是 Python 默认是 ASCII 的\n所以在程序第一行写上\n# -*- coding:utf-8 -*- Py 内部的 u'一个字符串' 可以用来表示 unicode 格式的字符串. 但是好像用不到.\n创建 pinyin to 汉字的 map 读 GBK 文件的最简单的方法 with open(\u0026#39;somefile.txt\u0026#39;, \u0026#39;r\u0026#39;, encoding = \u0026#39;gbk\u0026#39;) as f: for (lineno, content) in enumerate(f): dealWithALine(content) content 的格式 wo 窝 我 握 渥 (五笔党词穷了) python 自带分割 py2ch_map = {} def dealWithALine(c): d = c.split() py2ch_map[d[0]] = d 把 map 存进文件 python 带了一个叫 pickle 的库 (很原生, 也很原生地慢)\njson 也可以\nnumpy 也有 dump 的功能\nimport pickle with open(\u0026#39;some.pickle\u0026#39;, \u0026#39;rb\u0026#39;) as f: data = pickle.load(f) with open(\u0026#39;some.pickle\u0026#39;, \u0026#39;wb\u0026#39;) as f: pickle.dump(data, f) 记得用 b 二进制模式\n创建词频表 有 gbk 也有 utf-8, 直接用 utf-8\n每行的格式大概长这样\n{\u0026#34;html\u0026#34;: \u0026#34;原标题：被困36天重见天日昨晚，第一名被困矿工通过救生吊带被成功救出。经过36天艰难救援，山东平邑“12·25”石膏矿坍塌事故中又有4名被困矿工获救。去年12月25日，山东省平邑县玉荣商贸有限公司石膏矿发生坍塌，当时共有29名作业人员被困井下。事故发生后，救援人员先后成功打通4个小口径保命孔，通过2号孔和7号孔发现4名被困矿工幸存者并与其取得联系，先后为他们输送充足的食物、保暖内衣、照明工具等物资。截至昨日，共有15名井下被困矿工获救，其他14名井下被困矿工，1人已确认遇难，13人仍然失联。新华社记者 郭绪雷 摄详见A14·中国\u0026#34;, \u0026#34;time\u0026#34;: \u0026#34;2016-01-30 03:20\u0026#34;, \u0026#34;title\u0026#34;: \u0026#34;被困36天重见天日\u0026#34;, \u0026#34;url\u0026#34;: \u0026#34;http://news.sina.com.cn/o/2016-01-30/doc-ifxnzanm3825052.shtml\u0026#34;} 是个 json, 其中 title 和 html 可以作为语料.\npython 处理 json import json def dealWithALine(l): data = json.loads(l) dealAsMaterial(data[\u0026#39;html\u0026#39;]) dealAsMaterial(data[\u0026#39;title\u0026#39;]) 分割语料 数字, 标点之类的东西要去掉\n使用正则表达式. (参形式语言与自动机课)\nimport re def dealAsMaterial(l): pieces = re.split(r\u0026#39; |,|\\.|\\d\u0026#39;, l) # 还有很多请自己补充 for i in pieces: addToMap(i) 单双字扔进词频表 freq_map = {} def addToMap(l): global freq_map for i in range(len(l)): w = l[i] if not w in freq_map: freq_map[w] = 1 else: freq_map[w] += 1 w = l[i : i + 2] if not w in freq_map: freq_map[w] = 1 else: freq_map[w] += 1 Infer 算法 概率模型 设有一个串$\\overline{ab}$\n事件$A$表示$a$出现\n事件$B$表示$b$出现\n则有条件概率公式, 也有人叫马尔可夫概率链\n$$P(B|A) = \\frac{P(AB)}{P(A)}=\\frac{freq_map[\\overline{ab}]}{freq_map[a]}$$\n这个概率表示了前一个字是$a$时后一个字是$b$的概率\n设答案是$S=\\overline{a_1a_2\\dots a_n}$\n假设估值函数为\n$$Val(s) = \\sum_{i=1}^{n-1}P(a_{i+1}|a_i)$$\n找最好的答案就是要最大化上面这个式子\n这里你需要实现一个求条件概率的代码\ndef getLinkValue(a, b): rat1 = freq_dict[a + b] / freq_dict[a] rat2 = freq_dict[b] return smooth(rat1, rat2) 平滑化自己想办法实现就好\n动态规划 动态规划是显然的做法\n设$F_{i,j}$表示第$i$个字是$j$时$\\overline{a_1a_2\\dots a_i}$的最大价值\n易得到状态转移方程\n$$F_{i,j} = \\max_{k\\in D_{i-1}}{{F_{i-1}{k} + \\frac{freq_map[\\overline{kj}]}{freq_map[k]} }} $$\n代码实现\nf = [ {} ] * (n + 1) f[0][\u0026#39;\u0026lt;start\u0026gt;\u0026#39;] = { \u0026#39;val\u0026#39;: 0 } for i in range(1, n + 1): for j in py[a[i]]: f[i][j] = { \u0026#39;val\u0026#39;: 0, \u0026#39;from\u0026#39;: 0 } for k in f[i - 1]: if f[i - 1][k][\u0026#39;val\u0026#39;] + getLinkValue(k, j) \u0026gt; f[i][j][\u0026#39;val\u0026#39;]: f[i][j][\u0026#39;val\u0026#39;] = f[i - 1][k][\u0026#39;val\u0026#39;] + getLinkValue(k, j) f[i][j][\u0026#39;from\u0026#39;] = k\t记录from后就逆向查找即可获得答案\n讨论内容 如何提高性能和提高精准度\n优化上述DP的性能 对于每个$i$, 跑完一轮后只留值最高的$k$个\n优化精准度 高端的估值函数 三词模型 引入新的学习数据 ","permalink":"/technical/fdd853/","summary":"这篇讲义都是五笔打的\nlaekov 2018.04.12\nOverview 作业要求 写一个拼音输入法, 一行一行地读拼音, 输出对应的汉语句子\n84: 两小时就能写完\n给出的数据 GBK编码的拼音-\u0026gt;汉字对应表 新浪新闻一年的文章 评分 基础2字模型 扩展3字模型 四字, 双词, 三词\u0026hellip; 需要写什么东西 拼音 2 汉字的 map 快速查找某个字/词词频的 map 估值函数和 infer 的算法 训练数据处理 最常用的16位编码是utf-8, 但是 Python 默认是 ASCII 的\n所以在程序第一行写上\n# -*- coding:utf-8 -*- Py 内部的 u'一个字符串' 可以用来表示 unicode 格式的字符串. 但是好像用不到.\n创建 pinyin to 汉字的 map 读 GBK 文件的最简单的方法 with open(\u0026#39;somefile.txt\u0026#39;, \u0026#39;r\u0026#39;, encoding = \u0026#39;gbk\u0026#39;) as f: for (lineno, content) in enumerate(f): dealWithALine(content) content 的格式 wo 窝 我 握 渥 (五笔党词穷了) python 自带分割 py2ch_map = {} def dealWithALine(c): d = c.","title":"人智作业展示, 手把手教写拼音输入法"},{"content":"看 paper 看烦了来贴点代码玩.\nLagrange插值就是一个多项式乘.\nvoid genLagrangePoly(int n) { double *x = new double[n + 1]; double *y = new double[n + 1]; double *a = new double[n + 1]; double *tmp = new double[n + 1]; for (int i = 0; i \u0026lt;= n; ++ i) { x[i] = -5. + 10. / n * i; y[i] = f(x[i]); a[i] = 0; } for (int i = 0; i \u0026lt;= n; ++ i) { memset(tmp, 0, sizeof(double) * (n + 1)); tmp[0] = 1.; double s(y[i]); for (int j = 0; j \u0026lt;= n; ++ j) { if (j != i) { s /= x[i] - x[j]; for (int k = min(j, n - 1); k \u0026gt;= 0; -- k) { tmp[k + 1] = tmp[k] - tmp[k + 1] * x[j]; } tmp[0] *= -x[j]; } } for (int j = 0; j \u0026lt;= n; ++ j) { a[j] += tmp[j] * s; } } #define LATEX_OUTPUT for (int i = 0; i \u0026lt;= n; ++ i) { #ifdef JS_OUTPUT /* JS format output */ printf(\u0026#34; %+.12lf*pow(x, %d)\u0026#34;, a[i], i); #else #ifdef PYTHON_OUTPUT /* Python format output */ printf(\u0026#34; %+.12lf* x ** %d\u0026#34;, a[i], i); #else /* LaTeX format output */ printf(\u0026#34; %+lf* x^{%d}\u0026#34;, a[i], i); #endif #endif } putchar(10); delete [] x; delete [] y; delete [] a; delete [] tmp; } 三次样条插值是解常数(M_i). 解一个二对角线性方程. 随手高消一下就行.\nvoid genTriSmpPoly(int n) { double h = 10. / n; double *x = new double[n + 1]; double *y = new double[n + 1]; double *d = new double[n + 1]; double *m = new double[n + 1]; double *a = new double[n + 1]; for (int i = 0; i \u0026lt;= n; ++ i) { x[i] = -5. + 10. / n * i; y[i] = f(x[i]); } d[0] = 6. / h * (adf(x[0], x[1]) - df(x[0])); d[n] = 6. / h * (df(x[n]) - adf(x[n - 1], x[n])); for (int i = 1; i \u0026lt; n; ++ i) { d[i] = 6. * (adf(x[i], x[i + 1]) - adf(x[i], x[i - 1])) / (2 * h); } a[0] = 2.; for (int i = 1; i \u0026lt;= n; ++ i) { double rat(.5 / a[i - 1]); a[i] = 2. - .5 * rat; d[i] -= d[i - 1] * rat; } m[n] = d[n] / a[n]; for (int i = n - 1; i \u0026gt;= 0; -- i) { m[i] = (d[i] - m[i + 1] * .5) / a[i]; } for (int i = 0; i \u0026lt; n; ++ i) { double a0(m[i] / 6. / h); double a1(m[i + 1] / 6. / h); double b0(y[i] / h - m[i] * h / 6.); double b1(y[i + 1] / h - m[i + 1] * h / 6.); // #define JS_OUTPUT #ifdef JS_OUTPUT /* JS format output */ printf(\u0026#34;+ ((x \u0026gt;= %.12lf \u0026amp;\u0026amp; x \u0026lt; %.12lf) ? (\u0026#34;, x[i], x[i + 1]); printf(\u0026#34; %+.12lf*pow(%.12lf - x, 3)\u0026#34;, a0, x[i + 1]); printf(\u0026#34; %+.12lf*pow(x %+.12lf, 3)\u0026#34;, a1, -x[i]); printf(\u0026#34; %+.12lf*(%.12lf - x)\u0026#34;, b0, x[i + 1]); printf(\u0026#34; %+.12lf*(x %+.12lf)\u0026#34;, b1, -x[i]); printf(\u0026#34;) : 0)\u0026#34;); #else #ifdef PYTHON_OUTPUT /* Python format output */ printf(\u0026#34;+ ((\u0026#34;); printf(\u0026#34; %+.12lf*(%.12lf - x)**3\u0026#34;, a0, x[i + 1]); printf(\u0026#34; %+.12lf*(x %+.12lf)**3\u0026#34;, a1, -x[i]); printf(\u0026#34; %+.12lf*(%.12lf - x)\u0026#34;, b0, x[i + 1]); printf(\u0026#34; %+.12lf*(x %+.12lf)\u0026#34;, b1, -x[i]); printf(\u0026#34;) if x \u0026gt;= %.12lf and x \u0026lt; %.12lf else 0)\u0026#34;, x[i], x[i + 1]); #else /* LaTeX format output */ printf(\u0026#34; %.3lf(%.1lf - x)^3\u0026#34;, a0, x[i + 1]); printf(\u0026#34; %+.3lf(x %+.1lf)^3\u0026#34;, a1, -x[i]); printf(\u0026#34; %+.3lf(%.1lf - x)\u0026#34;, b0, x[i + 1]); printf(\u0026#34; %+.3lf(x %+.1lf)\u0026#34;, b1, -x[i]); printf(\u0026#34;\u0026amp; \\\\texttt{for } x \\\\in [%.1lf, %.1lf) \\\\\\\\\\n\u0026#34;, x[i], x[i + 1]); #endif #endif } putchar(10); delete [] x; delete [] y; delete [] d; delete [] m; delete [] a; } 多项式最小二乘是解一个函数点积和函数值的线性方程组. 还是搞个高消就完了.\nvoid minSqr(int n, int m, double* x, double* y) { ++ n; double** a = new double*[n]; double* s = new double[n]; for (int i = 0; i \u0026lt; n; ++ i) { a[i] = new double[n + 1]; } for (int i = 0; i \u0026lt; n; ++ i) { for (int j = 0; j \u0026lt; n; ++ j) { a[i][j] = 0; for (int k = 0; k \u0026lt; m; ++ k) { a[i][j] += pow(x[k], i + j); } } a[i][n] = 0; for (int k = 0; k \u0026lt; m; ++ k) { a[i][n] += y[k] * pow(x[k], i); } } for (int i = 0; i \u0026lt; n; ++ i) { for (int j = i + 1; j \u0026lt; n; ++ j) { double rat(a[i][j] / a[i][i]); for (int k = i; k \u0026lt;= n; ++ k) { a[j][k] -= a[i][k] * rat; } } } s[n - 1] = a[n - 1][n] / a[n - 1][n - 1]; for (int i = n - 2; i \u0026gt;= 0; -- i) { s[i] = a[i][n]; for (int k = i + 1; k \u0026lt; n; ++ k) { s[i] -= a[i][k] * s[k]; } s[i] /= a[i][i]; } for (int i = 0; i \u0026lt; n; ++ i) { #ifdef PYTHON_FORMAT printf(\u0026#34;%+.12lf * x**%d \u0026#34;, s[i], i); #else printf(\u0026#34;%+.3lf * x^%d \u0026#34;, s[i], i); #endif } putchar(10); double mn(0); #ifndef PYTHON_FORMAT printf(\u0026#34;$P_{%d}$ \u0026amp; \u0026#34;, n - 1); for (int i = 0; i \u0026lt; m; ++ i) { double p(0); for (int j = 0; j \u0026lt; n; ++ j) { p += pow(x[i], j) * s[j]; } printf(\u0026#34;$%.3lf$ \u0026amp; \u0026#34;, p); mn += sqr(p - y[i]); } printf(\u0026#34;$%.3lf$ \\\\tabularnewline \\\\hline \\n\u0026#34;, mn); #endif for (int i = 0; i \u0026lt; n; ++ i) { delete [] a[i]; } delete [] a; delete [] s; } ","permalink":"/technical/4aba20/","summary":"看 paper 看烦了来贴点代码玩.\nLagrange插值就是一个多项式乘.\nvoid genLagrangePoly(int n) { double *x = new double[n + 1]; double *y = new double[n + 1]; double *a = new double[n + 1]; double *tmp = new double[n + 1]; for (int i = 0; i \u0026lt;= n; ++ i) { x[i] = -5. + 10. / n * i; y[i] = f(x[i]); a[i] = 0; } for (int i = 0; i \u0026lt;= n; ++ i) { memset(tmp, 0, sizeof(double) * (n + 1)); tmp[0] = 1.","title":"Lagrange插值, 三次样条插值和最小二乘拟合"},{"content":"发现 strava 出了个 sport heatmap 的功能\n于是去看了看\n发现奥园有如下神奇现象\n呵呵一笑\n不说话\n","permalink":"/random/3dcb7f/","summary":"发现 strava 出了个 sport heatmap 的功能\n于是去看了看\n发现奥园有如下神奇现象\n呵呵一笑\n不说话","title":"Strava heatmap and GPS"},{"content":"PA3-3\n题意\n一堆字符串判循环相等\n做法\n最小表示法模板题\n也可以直接 hash\n不过最小表示了也得 hash.\nPA \u0026lt;= 常数优化实习.\n可能会在这里贴代码.\n","permalink":"/oi/6ca708/","summary":"PA3-3\n题意\n一堆字符串判循环相等\n做法\n最小表示法模板题\n也可以直接 hash\n不过最小表示了也得 hash.\nPA \u0026lt;= 常数优化实习.\n可能会在这里贴代码.","title":"CST DS2017 PA3-3"},{"content":" Text Key Encode base64 Ceasar (needs key to be a number) Vigenere (needs key to be a string) MD5 SHA1 ","permalink":"/post/a338f5/","summary":" Text Key Encode base64 Ceasar (needs key to be a number) Vigenere (needs key to be a string) MD5 SHA1 ","title":"Encode"},{"content":"最近在尝试搭 python 的数据分析的环境. 总结一下遇到的一些坑.\n用的是 14.04 这个有点老的 ubuntu.\nnginx + jupyter jupyter 这个玩意的 web 写得不是很优美. 所以需要转发的地方蛮麻烦的.\n本来想直接在 uri 里搞一下. 然后发现过于难受就放弃了, 重新配置了一个域名转发.\nnginx 的 server 配置里需要加这么一段.\nserver { location ~* /(api/kernels/[^/]+/(channels|iopub|shell|stdin)|terminals/websocket)/? { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # WebSocket support proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_pass http://127.0.0.1:8888; } } 其中有个Upgrade是这么定义的.\nhttp { map $http_upgrade $connection_upgrade { default upgrade; \u0026#39;\u0026#39; close; } sendfile on; } google 了几个配置文件才弄出这么一个能用的.\nscipy 用 pip3 装 scipy 的时候会有一个错误.\npip.exceptions.InstallationError: Command /usr/bin/python3 -c \u0026#34;import setuptools, tokenize;__file__=\u0026#39;/tmp/pip_build_root/scipy/setup.py\u0026#39;;exec(compile(getattr(tokenize, \u0026#39;open\u0026#39;, open)(__file__).read().replace(\u0026#39;\\r\\n\u0026#39;, \u0026#39;\\n\u0026#39;), __file__, \u0026#39;exec\u0026#39;))\u0026#34; install --record /tmp/pip-llz085yi-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip_build_root/scipy 我以为是啥奇怪的依赖问题. 结果发现解决方法很简单. 直接 apt install python3-scipy 就完了.\n","permalink":"/technical/7422c7/","summary":"最近在尝试搭 python 的数据分析的环境. 总结一下遇到的一些坑.\n用的是 14.04 这个有点老的 ubuntu.\nnginx + jupyter jupyter 这个玩意的 web 写得不是很优美. 所以需要转发的地方蛮麻烦的.\n本来想直接在 uri 里搞一下. 然后发现过于难受就放弃了, 重新配置了一个域名转发.\nnginx 的 server 配置里需要加这么一段.\nserver { location ~* /(api/kernels/[^/]+/(channels|iopub|shell|stdin)|terminals/websocket)/? { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # WebSocket support proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_pass http://127.0.0.1:8888; } } 其中有个Upgrade是这么定义的.\nhttp { map $http_upgrade $connection_upgrade { default upgrade; \u0026#39;\u0026#39; close; } sendfile on; } google 了几个配置文件才弄出这么一个能用的.","title":"Logs on setting up Jupyter"},{"content":"laekov naiiiiiiiiive\n问题 一个无向图 (G), 每条边 (e) 有两个边权 (a_e, b_e).\n求一个生成树 (T) 使得 ( (\\sum_{e \\in T} a_e) * ( \\sum_{e \\in T} b_e) ) 最小.\n多项式算法就是胜利w.\n原题 搜 bzoj2395.\n这网站里搜可以找到代码.\n一个未成形的算法 正确性和时间复杂度都待证 qwq.\n感觉是对的. 但是严格证明 qaq. 已经脱离理论计算机科学界太久了.\n假设我们有一个生成树的序列 ( Q ) 和一个生成树池 ( P ).\n算法如下\n对 ( a ) 这一个权值跑出一个最小生成树 ( T_0 ). 把 ( T_0 ) 作为 ( Q ) 里的第一个元素. 取出 ( Q ) 里的最后一棵生成树 ( T ). 枚举未在 ( T ) 里的每条边, 用这条边替换掉 ( T ) 里的若干条边, 都可以形成新的生成树. 把它们全部扔进 ( P ) 里. 挑选 ( P ) 里 ( \\sum_{e \\in T\u0026rsquo;} a_e \u0026gt; \\sum_{e \\in T} a_e ) 且 ( \\sum_{e \\in T\u0026rsquo;} b_e \u0026lt; \\sum_{e \\in T} b_e ) 的 ( \\sum_{e \\in T\u0026rsquo;} a_e ) 最小的 ( T\u0026rsquo; ), 把它加到 ( Q ) 的末尾. 重复 3 到 5 直到找到关于 ( \\sum b ) 的最小生成树. 把 ( Q ) 枚举一遍就能找到答案. 对于正确性 会枚举整个 ( A ) 单增 ( B ) 单减的点列.\n对于时间复杂度 每条边被踢出去后不会再被加进来, 即使被加进来也可以由不重复加边的替换方案生成.\n所以 ( Q ) 的总大小有保障, 进而 ( P ) 的总大小有保障.\nHistorical Comments SherlynW at 2017-10-06T19:26:31 及时的题解\n","permalink":"/post/e61433/","summary":"laekov naiiiiiiiiive\n问题 一个无向图 (G), 每条边 (e) 有两个边权 (a_e, b_e).\n求一个生成树 (T) 使得 ( (\\sum_{e \\in T} a_e) * ( \\sum_{e \\in T} b_e) ) 最小.\n多项式算法就是胜利w.\n原题 搜 bzoj2395.\n这网站里搜可以找到代码.\n一个未成形的算法 正确性和时间复杂度都待证 qwq.\n感觉是对的. 但是严格证明 qaq. 已经脱离理论计算机科学界太久了.\n假设我们有一个生成树的序列 ( Q ) 和一个生成树池 ( P ).\n算法如下\n对 ( a ) 这一个权值跑出一个最小生成树 ( T_0 ). 把 ( T_0 ) 作为 ( Q ) 里的第一个元素. 取出 ( Q ) 里的最后一棵生成树 ( T ).","title":"Two key MST"},{"content":"1 使用数论快速傅立叶变换进行多项式乘法.\n要压三位才能过.\n2 先把两维坐标分别快速排序\n然后每个问题二分\n然后建立两个向量, 看它们的夹角是劣的还是优的, 从而判断这个点在线段和坐标轴围成的三角形的内外\n3 维护一个栈\n如果右边所有数里的最大值都没有栈顶大, 就弹栈, 否则一直压栈到右边最大的数, 输出最大的数, 然后重复执行此操作.\n4 在普通的队列里再维护一个单调队列, 对价格单调. 每次从单调队列里选择当前持有的股票, 用普通队列维护添加 / 删除.\n5 替罪羊树维护序列.\n至今 90 的数据有一个点 wa 掉不知为何. 可能满跑速度有点悬.\n6 利用双向链表进行操作.\n链表并不记录前后, 而是只记录两个端.\n每个光标记录左右.\n然而还是被卡常了.\n","permalink":"/oi/440904/","summary":"1 使用数论快速傅立叶变换进行多项式乘法.\n要压三位才能过.\n2 先把两维坐标分别快速排序\n然后每个问题二分\n然后建立两个向量, 看它们的夹角是劣的还是优的, 从而判断这个点在线段和坐标轴围成的三角形的内外\n3 维护一个栈\n如果右边所有数里的最大值都没有栈顶大, 就弹栈, 否则一直压栈到右边最大的数, 输出最大的数, 然后重复执行此操作.\n4 在普通的队列里再维护一个单调队列, 对价格单调. 每次从单调队列里选择当前持有的股票, 用普通队列维护添加 / 删除.\n5 替罪羊树维护序列.\n至今 90 的数据有一个点 wa 掉不知为何. 可能满跑速度有点悬.\n6 利用双向链表进行操作.\n链表并不记录前后, 而是只记录两个端.\n每个光标记录左右.\n然而还是被卡常了.","title":"CST DS2017 PA1"},{"content":"最近 get 了一个技能叫爬虫. (可能早就 get 了只是没有实践过?)\n然而我是用 js 写的. 毕竟自带异步而且瓶颈是延迟.\n任务大概是说抓 wiki 的 list of people 上的人的 info.\n然后发现可能它是一个不规则的索引结构.\n每个二级索引都长得不太一样.\n没事我们直接当作它就是二级索引结构.\n然后发现有的企业也有 infobox. 这就很无语了?\n没事我们判断一下它是不是有 occupation, born 这样的关键字吧.\n然后大概就比较能看了? (才怪)\n另外在看资料的时候才发现一种把 html plain 化的方式. 直接把所有的标签去了.\n之前沉迷剥标签的我突然觉得自己真是蠢哭了.\n嗯就是这么愉快.\n","permalink":"/technical/e522cb/","summary":"最近 get 了一个技能叫爬虫. (可能早就 get 了只是没有实践过?)\n然而我是用 js 写的. 毕竟自带异步而且瓶颈是延迟.\n任务大概是说抓 wiki 的 list of people 上的人的 info.\n然后发现可能它是一个不规则的索引结构.\n每个二级索引都长得不太一样.\n没事我们直接当作它就是二级索引结构.\n然后发现有的企业也有 infobox. 这就很无语了?\n没事我们判断一下它是不是有 occupation, born 这样的关键字吧.\n然后大概就比较能看了? (才怪)\n另外在看资料的时候才发现一种把 html plain 化的方式. 直接把所有的标签去了.\n之前沉迷剥标签的我突然觉得自己真是蠢哭了.\n嗯就是这么愉快.","title":"Web 爬虫二三事"},{"content":"docker-compose 的网络\n会自动加一些解析\n把服务名和 ip 给绑起来\n所以根本不用去搞 static ip\n好像被这事坑了一万年了\n","permalink":"/technical/f07783/","summary":"docker-compose 的网络\n会自动加一些解析\n把服务名和 ip 给绑起来\n所以根本不用去搞 static ip\n好像被这事坑了一万年了","title":"docker-compose DHCP and DNS"},{"content":"Life is strange.\nWorld is even more strange.\n推这游戏的时候对所谓平行宇宙有了更多的想法.\n游戏里每个分枝点你只能选一个, 但是另一个分枝点的剧本都写好了! 也就是说不管你怎么选择, 它都是存在的.\n那么世界是不是也是一样的呢? 任何选择都是同步进行的.\n或者说平行时间是存在的, 然而存在的形式并不是物质, 而是逻辑.\n那么新的问题是, 以逻辑的方式存在算不算存在呢?\nHistorical Comments Bakser at 2017-07-14T15:05:44 建议了解一下free-will问题，会很有趣XD\nlaekov at 2017-09-15T15:53:13 留言有问题?\n","permalink":"/random/98b42d/","summary":"Life is strange.\nWorld is even more strange.\n推这游戏的时候对所谓平行宇宙有了更多的想法.\n游戏里每个分枝点你只能选一个, 但是另一个分枝点的剧本都写好了! 也就是说不管你怎么选择, 它都是存在的.\n那么世界是不是也是一样的呢? 任何选择都是同步进行的.\n或者说平行时间是存在的, 然而存在的形式并不是物质, 而是逻辑.\n那么新的问题是, 以逻辑的方式存在算不算存在呢?\nHistorical Comments Bakser at 2017-07-14T15:05:44 建议了解一下free-will问题，会很有趣XD\nlaekov at 2017-09-15T15:53:13 留言有问题?","title":"World is Strange"},{"content":"Upd: 代码来了 https://github.com/laekov/rbrrm\n来 mark 一下我的 oop 组队大作业中窝肝的部分.\n姚氏大作业果然有趣.\n大概问题是这样的.\n现在一个 pcb 上面有 (n*n) 的元件矩阵(忽略元件面积). 然后你要布线让每个元件都单独连着一条通往边界的电线, 我们管它叫这个点的 escape 路线. (最边上的就直接算作逃出去了)\n然后电线只能横竖沿着格线走. 显然直接走是走不出去的. 所以你要找一个最小的 ( w ), 把原来的每行每列的中间都插上(w)条格线, 然后找一个总长最小 (或者如果你有其它的 feature 的话可以是尽量小) 的方案.\n官方的的范围是 ( 80 ), 然后我算出来的 (80) 对应的 (w) 是 (23). 这个范围直接二分建图跑网络流已经非常吃力了. (或者直说要跑几天才跑得出来).\n一个比较小的例子如图.\n这个问题的标题叫作_rule based regular routing path_, 也就是说有某种直接用规则布线就可以了?\n然后窝的第一个想法是神贪心, 然而在和大树讨论了很久之后也没有找到一种能让我们两个觉得靠谱且简洁优美的贪心.\n然后窝就在想网络流是否有救. 在和 czr 讨论了一阵以及 czr 帮窝去 ieee 找了几篇 paper (btw, 校内网可以免费直接下 ieee 的论文不能更赞) 后发现了这么一个结论. 对于每个 ( w*w ) 的格子, 它的承载上限 (也就是说穿过这个格子的线的条数) 是 ( w ).\n而且没毛病的话没有线会从这个格子的某条边进来又出去. 如果有的话那么这条边的另外一边也应该是同样的情况. 这时两边都有进有出了, 怎么办? 那当然是选择消圈啦. 消掉圈之后不会对解产生影响.\n大概每个格子都会长成这个样子.\n其中只有四周的红点是有电子原件的, 而紫色的点是新建的 ( w * w ) 的格子的边界.\n然后下一个问题是相邻的格子怎么连起来呢? 如果跑出 ( w ) 之后直接搜的话可能能搜出比较短的路, 但是感觉巨麻烦, 而且不一定能满足所有点都能逃出去.\n于是窝找到了一个比较_rule based_ 的方法. 就是上面那张图.\n对于每个格子, 我们已经知道从每条边进来 / 出去多少个线头了. 于是我们约定对这个格子的边界顺时针走. 从正方形的四个顶点开始连续地给线头. 而它的上下左右的四个格子就逆时针, 然后上下左右的上下左右再顺时针, 就像一个国际象棋的棋盘一样, 黑格子顺, 白格子逆这样. 这个方案是肯定可以保证(w)根线头都接上的.\n然后每个格子里再暴跑一个网络流不就好了嘛? 然后就有了下面这玩意.\n那个突出来的玩意是什么鬼!?\n然后发现 dinic 在退流的时候会留下一些环流. 于是输出方案的时候要记得重新 BFS 一遍.\n下一个问题是这些顶点. 它们好像既不属于边也不属于点. 它们怎么进来图里啊 qwq.\n显然它必需要上下左右走, 于是会走到一条边上, 然后从这条边拐进每个格子. 所以直接把它向它的上下左右的边连个线就好喽?\n然后就出现了下面这一幕.\n它它它, 断了!?\n这个 (w=4)的格子确实满足入和出都不超过四个. 但是它居然不能成功地布线!?\n那天晚上hja的内心是绝望的.\n这个问题就出在左下那个元件, 因为它多占用了这条边的第一个位置, 但是在上面这个格子并不知道这条信息, 所以它还天真地认为任意 (w) 个线头都能完美地通过它. 然而它已经被别了.\nhja一度十分绝望. 然后hja发现一个奇妙的性质. 出现上面的情况仅当这个点的接入点是从某个顶点开始的一串线头的第一个. 因为它会导致这个格子里后面的线头都依次向中间移动一格, 从而导致移不出去.\n那么强行让每个顶点连出去的线都是最后一个可不可以呢? 因为上面那个奇怪的接线方式 (顺逆时针交替), 不难发现每个格子要么是上下的起点, 要么是左右的起点, 所以总有一个方向是一串线的尾巴的方向. 那么让这个点只能从这个方向进格子就可以了?\n实验了一下发现是可以的. 想了一下道理是这样的. 考虑一个顶点( (0, 0) )要进到( (1, 1) ). 不管它走( (1, 0) )还是( (0, 1) ), 另外一个格子都是废掉的. 所以只从上下 / 左右中的一个方向进格子是完全不影响答案的.\n所以就成功地找到了一种合法且(w)最小的布线方案.\n然而这种方案好像巨浪费.\n拿张 (80)的图感受一下 .\n还有 (120)的. (可能会导致设备卡)\n因为那个旋转式的布线, 导致在比较稀疏的地方会有类似方便面一样拐来拐去的东西, 然后长度巨长.\n但是比较密集的地方就没有问题.\n所以它到底有多浪费?\n用费用流跑到(26)就再也跑不动了. 然后结果大概是这样的.\n(发现之前统计的时候统计错了)\nn\trule\tbest\tratio 2\t3\t3\t100.000% 3\t12\t12\t100.000% 4\t29\t29\t100.000% 5\t58\t56\t103.571% 6\t162\t131\t123.664% 7\t248\t208\t119.231% 8\t362\t322\t112.422% 9\t718\t560\t128.214% 10\t955\t779\t122.593% 11\t1259\t1076\t117.007% 12\t2096\t1621\t129.303% 13\t2591\t2100\t123.381% 14\t3244\t2737\t118.524% 15\t3980\t3552\t112.050% 16\t5813\t4672\t124.422% 17\t6912\t5824\t118.681% 18\t8198\t7237\t113.279% 19\t11294\t9112\t123.946% 20\t13160\t11009\t119.539% 21\t15271\t13244\t115.305% 22\t17682\t15857\t111.509% 23\t22788\t19048\t119.635% 24\t25967\t22394\t115.955% 25\t29563\t26224\t112.733% (n)大了之后会导致图片没法输出. (100k分辨率的图片画面太美)\n所以窝造了一个不显示细节而是以颜色深度表示线的密度的输出方式.\n然后花了四十分钟跑了一个(200200)的东西, 顺便制造了2.3GB的边输出文件, 总共有大概(1.1310^8)的长度.\n效果如图.\n大概窝就能做这些了. 其实可以再造一个能缩放的图形界面, 动态加载细节的.\n不过懒得做了.\n大概就这样了吧.\n大概也是有个千行代码的.\n窝好菜啊qwq.\n等ddl过了再把代码放出来.\n队友: 于是泥就是造了个壁纸生成嚣嘛.\n放送一张2k的壁纸. 价值2h.\n","permalink":"/technical/4dc587/","summary":"Upd: 代码来了 https://github.com/laekov/rbrrm\n来 mark 一下我的 oop 组队大作业中窝肝的部分.\n姚氏大作业果然有趣.\n大概问题是这样的.\n现在一个 pcb 上面有 (n*n) 的元件矩阵(忽略元件面积). 然后你要布线让每个元件都单独连着一条通往边界的电线, 我们管它叫这个点的 escape 路线. (最边上的就直接算作逃出去了)\n然后电线只能横竖沿着格线走. 显然直接走是走不出去的. 所以你要找一个最小的 ( w ), 把原来的每行每列的中间都插上(w)条格线, 然后找一个总长最小 (或者如果你有其它的 feature 的话可以是尽量小) 的方案.\n官方的的范围是 ( 80 ), 然后我算出来的 (80) 对应的 (w) 是 (23). 这个范围直接二分建图跑网络流已经非常吃力了. (或者直说要跑几天才跑得出来).\n一个比较小的例子如图.\n这个问题的标题叫作_rule based regular routing path_, 也就是说有某种直接用规则布线就可以了?\n然后窝的第一个想法是神贪心, 然而在和大树讨论了很久之后也没有找到一种能让我们两个觉得靠谱且简洁优美的贪心.\n然后窝就在想网络流是否有救. 在和 czr 讨论了一阵以及 czr 帮窝去 ieee 找了几篇 paper (btw, 校内网可以免费直接下 ieee 的论文不能更赞) 后发现了这么一个结论. 对于每个 ( w*w ) 的格子, 它的承载上限 (也就是说穿过这个格子的线的条数) 是 ( w ).","title":"Rule-based Regular Routing Method"},{"content":"有个科学发现说观测到一个疑似戴森球的东西. 于是寝室里引发了如下讨论.\nlr: 泥觉得外星文明存在么.\n众: 存在.\nlr: 有没有一种低级文明间交流的方式? 比如运气好的虫洞?\n可能有.\nlr: 高级文明间一定有_三体_里描述的_黑暗森林法则_吗?\n黑暗森林法则的原理在于文明之间无法充分交流来取得互相信任. 两方如果都具备 (或者可能具备) 直接摧毁对方的能力. 那么选择 \u0026ldquo;摧毁\u0026rdquo; 和 \u0026ldquo;不摧毁\u0026rdquo; 将是一个类似于纳什均衡的博弈问题.\n每个回合, 两者都可以选择摧毁或不摧毁. 如果两方都选择不摧毁, 都欢喜. 如果两方中的任何一方选择摧毁, 那么游戏结束.\n根据四年前 lyd 在 wc 上讲的课, 如果游戏在有限轮内结束, 那么两方都会选择在第一轮就摧毁. 如果游戏可以无限继续, 那么两方就会一直选择不摧毁.\n而宇宙的寿命相对来说可以认为是无限的. 所以法则错误了么?\n原作中有进一步假设: 摧毁所消耗的成本几乎可以忽略不记, 而不摧毁几乎不能带来任何好处. 与对方交流并获取收益的期望可以认为是极低的. 所以直接摧毁依然是最佳决定.\n然而这步假设与人类的现状显然不符合.\n所以说假设没错, 但是也不一定适用.\nHistorical Comments Bakser at 2017-07-14T15:13:01 你们就没怀疑过“生存是文明的第一需要”吗// 晓智太强辣!!!!\n","permalink":"/random/ea4d1d/","summary":"有个科学发现说观测到一个疑似戴森球的东西. 于是寝室里引发了如下讨论.\nlr: 泥觉得外星文明存在么.\n众: 存在.\nlr: 有没有一种低级文明间交流的方式? 比如运气好的虫洞?\n可能有.\nlr: 高级文明间一定有_三体_里描述的_黑暗森林法则_吗?\n黑暗森林法则的原理在于文明之间无法充分交流来取得互相信任. 两方如果都具备 (或者可能具备) 直接摧毁对方的能力. 那么选择 \u0026ldquo;摧毁\u0026rdquo; 和 \u0026ldquo;不摧毁\u0026rdquo; 将是一个类似于纳什均衡的博弈问题.\n每个回合, 两者都可以选择摧毁或不摧毁. 如果两方都选择不摧毁, 都欢喜. 如果两方中的任何一方选择摧毁, 那么游戏结束.\n根据四年前 lyd 在 wc 上讲的课, 如果游戏在有限轮内结束, 那么两方都会选择在第一轮就摧毁. 如果游戏可以无限继续, 那么两方就会一直选择不摧毁.\n而宇宙的寿命相对来说可以认为是无限的. 所以法则错误了么?\n原作中有进一步假设: 摧毁所消耗的成本几乎可以忽略不记, 而不摧毁几乎不能带来任何好处. 与对方交流并获取收益的期望可以认为是极低的. 所以直接摧毁依然是最佳决定.\n然而这步假设与人类的现状显然不符合.\n所以说假设没错, 但是也不一定适用.\nHistorical Comments Bakser at 2017-07-14T15:13:01 你们就没怀疑过“生存是文明的第一需要”吗// 晓智太强辣!!!!","title":"关于戴森球和黑暗森林假设"},{"content":"#include #include #include using namespace std;\ntypedef long long qw; typedef pair \u0026lt;qw, int\u0026gt; dpair;\n#ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif\nconst int maxn = 13; const int maxw = 400009;\nint n, w[maxn]; qw b0, b1, d[maxw]; dpair hp[maxn * maxw];\nvoid dijkstra() { int th = 1; memset(d, -1, sizeof(d)); hp[0] = dpair(0, 0); while (th) { dpair g = hp[0]; pop_heap(hp, hp + (th \u0026ndash;)); if (d[g. second] \u0026gt; -1) continue; d[g. second] = -g. first; for (int i = 0; i \u0026lt; n; ++ i) { hp[th] = dpair(g. first - w[i], (g. second + w[i]) % w[0]); if (d[hp[th]. second] == -1) push_heap(hp, hp + (++ th)); } } }\nqw calc(qw x) { qw s = x; if (x == 0) return 0; for (int i = 0; i \u0026lt; w[0]; ++ i) if (d[i] \u0026lt;= x \u0026amp;\u0026amp; d[i] \u0026gt; -1) s -= d[i] / w[0]; else s -= x / w[0] + (x % w[0] \u0026gt;= i); return s;\n}\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot; lld lld, \u0026amp;n, \u0026amp;b0, \u0026amp;b1); for (int i = 0; i \u0026lt; n; ++ i) scanf(\u0026quot;%d\u0026quot;, w + i); sort(w, w + n); dijkstra(); printf(lld \u0026quot;\\n\u0026quot;, calc(b1) - calc(b0 - 1)); }\n","permalink":"/code/c6433f/","summary":"#include #include #include using namespace std;\ntypedef long long qw; typedef pair \u0026lt;qw, int\u0026gt; dpair;\n#ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif\nconst int maxn = 13; const int maxw = 400009;\nint n, w[maxn]; qw b0, b1, d[maxw]; dpair hp[maxn * maxw];\nvoid dijkstra() { int th = 1; memset(d, -1, sizeof(d)); hp[0] = dpair(0, 0); while (th) { dpair g = hp[0]; pop_heap(hp, hp + (th \u0026ndash;)); if (d[g.","title":"bzoj2118.cc"},{"content":"好像一天都在做视频, 剪视频, 整理bgm, 被批斗.\n晚上去听讲座然后居然睡过去了.\nFAST好像很厉害的样子. 但是老师说 \u0026ldquo;我们是做实验科学的, 我们才是少数派\u0026rdquo; 感觉好辛酸. 为什么社会是这个样子呢.\n时隔若干个月去刷ingress任务. 被自己军dalao问是哪个学校的. 汗. 然后半路手机被冻僵关机. 无知的我就直接回来了.\n想去拆盖发现没有武器. 在蓝绿形势严峻的thu我还是很无力呀.\n然后好像我无意中干了什么不好的事情 \u0026gt;_\u0026lt;. 为什么每次试图帮助别人都会发生如此奇怪的事情呢.\n还是及时 \u0026ldquo;止损\u0026rdquo; 比较好吧. 不过大家都要坚强呀. 好好刷题才是硬道理呢.\n","permalink":"/diary/7bd6ed/","summary":"好像一天都在做视频, 剪视频, 整理bgm, 被批斗.\n晚上去听讲座然后居然睡过去了.\nFAST好像很厉害的样子. 但是老师说 \u0026ldquo;我们是做实验科学的, 我们才是少数派\u0026rdquo; 感觉好辛酸. 为什么社会是这个样子呢.\n时隔若干个月去刷ingress任务. 被自己军dalao问是哪个学校的. 汗. 然后半路手机被冻僵关机. 无知的我就直接回来了.\n想去拆盖发现没有武器. 在蓝绿形势严峻的thu我还是很无力呀.\n然后好像我无意中干了什么不好的事情 \u0026gt;_\u0026lt;. 为什么每次试图帮助别人都会发生如此奇怪的事情呢.\n还是及时 \u0026ldquo;止损\u0026rdquo; 比较好吧. 不过大家都要坚强呀. 好好刷题才是硬道理呢.","title":"20161219"},{"content":"想起好像很久没有写过什么东西了.\n在thu的生活真是充实呢.\ntuoj上周末去扛了ccsp. 这周末又要扛清华集训. 这么个满是bug的oj真是药丸. 当初让没有经验的萌新去写后端我也是醉了.\nccsp前一天晚上淦到凌晨四点半, 睡了一个小时起来接着淦. 好像总共四十个小时没睡觉. 不过总算没有被领导发现地扛过去了.\n以及每天有人道早安晚安的感觉很幸福.\n然后作业做不完了. 快要堕落去抄作业了qaq. 不过总算做完了上周的微积分和离散. 高三被积分虐了, 现在还是被虐. 我怎么就没有长进呢.\n不过作业是做不完的qaq.\n现在的情况是我十分zz地用dd去备份硬盘. 然后明明只有30g的使用它非要给我写80g. 我怎么可以如此智障. 心疼我的硬盘.\n嗯我是不是要在网管的不归路上越走越远了.\n然而离散还没写完. 啊啊啊.\nHistorical Comments lyzy at 2016-11-30T13:49:27 把积分拿给我做吧 顺便说一句 你是不是线代打成离散了……\n","permalink":"/diary/00e552/","summary":"想起好像很久没有写过什么东西了.\n在thu的生活真是充实呢.\ntuoj上周末去扛了ccsp. 这周末又要扛清华集训. 这么个满是bug的oj真是药丸. 当初让没有经验的萌新去写后端我也是醉了.\nccsp前一天晚上淦到凌晨四点半, 睡了一个小时起来接着淦. 好像总共四十个小时没睡觉. 不过总算没有被领导发现地扛过去了.\n以及每天有人道早安晚安的感觉很幸福.\n然后作业做不完了. 快要堕落去抄作业了qaq. 不过总算做完了上周的微积分和离散. 高三被积分虐了, 现在还是被虐. 我怎么就没有长进呢.\n不过作业是做不完的qaq.\n现在的情况是我十分zz地用dd去备份硬盘. 然后明明只有30g的使用它非要给我写80g. 我怎么可以如此智障. 心疼我的硬盘.\n嗯我是不是要在网管的不归路上越走越远了.\n然而离散还没写完. 啊啊啊.\nHistorical Comments lyzy at 2016-11-30T13:49:27 把积分拿给我做吧 顺便说一句 你是不是线代打成离散了……","title":"20161129"},{"content":"组合数 求n和m都各在一个范围里的组合数里能被k整除的数的个数.\n用熟悉的组合数的公式.\n\\( C_n^m = C_{n-1}^{m-1} + C_{n-1}^m \\)\n把组合数先处理出来.\n对于多组询问, 求出上面那个数组的二维前缀和即可.\n蚯蚓 你有n只蚯蚓. 每秒把最长的蚯蚓砍成同比例的两段, 且其它蚯蚓变长. 求m秒中每一秒被砍的蚯蚓和最后所有的蚯蚓.\n\\( n \\leq 10^5, m \\leq 7*10^6 \\)\n目测那个t只是为了输入输出不超时.\n正常的暴力是用堆来维护蚯蚓长度.\n发现一个性质, 下一次被砍的蚯蚓被砍之后两段肯定会分别短于本次被砍的蚯蚓的两段.\n仔细想想没有低于\\( O(m) \\) 的做法.\n所以我们把堆换成若干个队列, 每次只取队首的蚯蚓来比较, 砍, 然后塞回队尾. 保证队列中的元素单调.\n这样时间复杂度就变成线性了.\n小鸟 平面上有若干只猪. 你可以从原点发射一个抛物线并消灭抛物线上的所有猪. 求最小发射多少次.\n\\( n \\leq 18 \\)\n我们知道两点确定一条过原点的抛物线. 所以枚举两只猪就能得到所有能消灭至少两只猪的消灭方式. 剩余的猪只能直接消灭.\n可以使用状态压缩型动态规划来解决这个问题. 只需要记录下当前已经消灭了哪些猪, 就可以进行转移了.\nps 题目难度还是比去年高. 祝各位好运.\nlaekov版权所有, 未经允许不得转载. 侵权必究. ","permalink":"/oi/fc5d4b/","summary":"组合数 求n和m都各在一个范围里的组合数里能被k整除的数的个数.\n用熟悉的组合数的公式.\n\\( C_n^m = C_{n-1}^{m-1} + C_{n-1}^m \\)\n把组合数先处理出来.\n对于多组询问, 求出上面那个数组的二维前缀和即可.\n蚯蚓 你有n只蚯蚓. 每秒把最长的蚯蚓砍成同比例的两段, 且其它蚯蚓变长. 求m秒中每一秒被砍的蚯蚓和最后所有的蚯蚓.\n\\( n \\leq 10^5, m \\leq 7*10^6 \\)\n目测那个t只是为了输入输出不超时.\n正常的暴力是用堆来维护蚯蚓长度.\n发现一个性质, 下一次被砍的蚯蚓被砍之后两段肯定会分别短于本次被砍的蚯蚓的两段.\n仔细想想没有低于\\( O(m) \\) 的做法.\n所以我们把堆换成若干个队列, 每次只取队首的蚯蚓来比较, 砍, 然后塞回队尾. 保证队列中的元素单调.\n这样时间复杂度就变成线性了.\n小鸟 平面上有若干只猪. 你可以从原点发射一个抛物线并消灭抛物线上的所有猪. 求最小发射多少次.\n\\( n \\leq 18 \\)\n我们知道两点确定一条过原点的抛物线. 所以枚举两只猪就能得到所有能消灭至少两只猪的消灭方式. 剩余的猪只能直接消灭.\n可以使用状态压缩型动态规划来解决这个问题. 只需要记录下当前已经消灭了哪些猪, 就可以进行转移了.\nps 题目难度还是比去年高. 祝各位好运.\nlaekov版权所有, 未经允许不得转载. 侵权必究. ","title":"NOIP2016 DAY2 简要思路"},{"content":"简单看了看NOIP2016的题. 口糊一下自己的想法吧.\n玩具 描述好乱. 反正就是一群人围成圈, 若干次左走右走问最后到哪.\n加加减减取模就好了.\n水水水水过.\n跑步 一棵n个点的树, m条路径, 问对于每个点, 经过本点且起点距离本点为本点点权的路径条数.\n\\( n, m \\leq 3*10^5 \\)\n我感觉这个题有点难呀. 很有可能是我想复杂了.\n把每条路径从lca处拆成两段.\n考虑对于每个点的询问.\n对于起点到lca这段, 询问就是询问子树里lca深度小于等于当前深度的深度刚好为某个值的路径起点个数.\n对于lca到终点这段, 询问就是询问子树里lca深度小于等于当前深度的 (长度-深度) 刚好为某个值的路径终点个数.\n然后就成了一个比较简明的数据结构问题.\n一种思路是平衡树启发式合并, 但是时间可能会炸.\n另一种思路是用dfs序式树链剖分, 每条路径会被拆分为不超过lg个dfs序上的子段. 在路径的每个子段的起点和终点处分别打上标记. 然后对dfs序进行一次扫描即可得出答案. 复杂度比较优.\n换教室 n节课, v间教室. 每节课有两种教室位置选择, 其中一种是已定的. 你有m次机会申请换掉其中一节课的教室位置, 每个请求有独立的p的概率成功. 教室在一张图上, 求最小总奔波路期望.\n\\( n, m \\leq 10^3, v \\leq 3*10^2 \\)\n个人认为这题比上一题水.\n先用floyd处理出任意两间教室间的最短路.\n然后用dp.\n\\( f_{i,j,k} \\) 表示前i间教室, 用了j次交换机会, k表示上一次有没有换. 存答案.\n转移就是一个概率的算式, 较为简单. 略.\nps 八年来第一次没有在赛场上考noip. 今年题目描述好长好长好长.\n题目难度比去年高.\nlaekov版权所有, 未经允许不得转载. 侵权必究. Historical Comments saruka at 2017-01-23T09:18:28 %%%Laekov\n","permalink":"/oi/5402cd/","summary":"简单看了看NOIP2016的题. 口糊一下自己的想法吧.\n玩具 描述好乱. 反正就是一群人围成圈, 若干次左走右走问最后到哪.\n加加减减取模就好了.\n水水水水过.\n跑步 一棵n个点的树, m条路径, 问对于每个点, 经过本点且起点距离本点为本点点权的路径条数.\n\\( n, m \\leq 3*10^5 \\)\n我感觉这个题有点难呀. 很有可能是我想复杂了.\n把每条路径从lca处拆成两段.\n考虑对于每个点的询问.\n对于起点到lca这段, 询问就是询问子树里lca深度小于等于当前深度的深度刚好为某个值的路径起点个数.\n对于lca到终点这段, 询问就是询问子树里lca深度小于等于当前深度的 (长度-深度) 刚好为某个值的路径终点个数.\n然后就成了一个比较简明的数据结构问题.\n一种思路是平衡树启发式合并, 但是时间可能会炸.\n另一种思路是用dfs序式树链剖分, 每条路径会被拆分为不超过lg个dfs序上的子段. 在路径的每个子段的起点和终点处分别打上标记. 然后对dfs序进行一次扫描即可得出答案. 复杂度比较优.\n换教室 n节课, v间教室. 每节课有两种教室位置选择, 其中一种是已定的. 你有m次机会申请换掉其中一节课的教室位置, 每个请求有独立的p的概率成功. 教室在一张图上, 求最小总奔波路期望.\n\\( n, m \\leq 10^3, v \\leq 3*10^2 \\)\n个人认为这题比上一题水.\n先用floyd处理出任意两间教室间的最短路.\n然后用dp.\n\\( f_{i,j,k} \\) 表示前i间教室, 用了j次交换机会, k表示上一次有没有换. 存答案.\n转移就是一个概率的算式, 较为简单. 略.\nps 八年来第一次没有在赛场上考noip. 今年题目描述好长好长好长.","title":"NOIP2016 DAY1 简要思路"},{"content":"补mark.\n去青岛欢度周末然而没吃到任何海鲜差评.\n想带点纪念品回来然而一直没机会. 最后只有在高铁站里乱逛感觉东西不行于是啥都没买qwq.\n所以说好的acm旅游呢.\n头天试机的时候感觉自己状态好差, 仔细分析发现是头天晚上在火车上没洗澡所致.\n而且现在头发的长度已经有点不能忍了啊. 又开始纠结要不要去剪头发了.\n试机晚上和zhx去打台球. zhx一直在跳球真是有毒qaq. 然而我的台球水平还是竦么菜.\n睡前看板发现这都是些smg啊qaq. 为什么你们的板子大括号要换行啊qaq. 果然以后还是得自己备板.\n考试日起来感觉满血满状态复活.\n打vimrc的时候手僵.\n听说有些区的pc方在开场的时候挂了半小时. 还好我们运气不错, 只有榜挂了.\n上来zhx先切掉了a.\n然后觉得c可以推一推然后发现这个微分方程我还没学啊喂.\n于是我就去写b的魔方了. 魔方这玩意真是有毒好么.\n然后发现zhx和mhy还在推c还是f来着. 然后我发现g是个裸裸的费用流于是去写. 好久不写这玩意都手生了. 然后强行看错题意乘二. 第一次是直接把概率加起来了. 第二次是把有向边看成了无向边还yy了一个蛮麻烦的建图方法.\n然后zhx终于把c给淦出来了. 结果方程凑一下就出来了, 式子炒鸡简单.\n然后我和mhy都想到d题只算轮数较少的情况就行了. 然后zhx就写挂了过不到样例.\n于是我就去开k的kd-tree做法.\n过了一会zhx发现他sb了, 改了一下就过了还喊了一句 \u0026ldquo;woc\u0026rdquo;, 技惊四座.\n然后我就把kd-tree给debug了一下也过了.\n然后就发现没题可做了. 我把m转化成平面上放点, 区间改点区间查询. 想用二维线段树感觉标记不好维护. zhx写一半弃疗了.\n然后我们看了一下h插头懒得写, f大模拟懒得写, i式子太复杂不知道是啥鬼, l想了半天没有思路.\nzhx和我又想了想可以用象限四分树. zhx写了半天. 然后我灵机一动为什么不直接用kd-tree艹过去呢. 然后半粘半写的搞了一份.\nzhx和mhy则开始想j. 然后zhx搞了一个乱七八糟的dfs.\n然后我的m开始tle, zhx的j开始wa.\n这时候已经封榜了. 我对着我打印的代码找bug, zhx和mhy用gdb debug.\n然后我发现我的m写得太匆忙好多细节都没想清楚. 最后写了个data generator拍了一下, 发现因为忘剪标记所以死循环了. 然后就wa了. 然后再改个brute force出来拍了一下发现还是标记没打对. 然后最后终于在还有9分钟的时候a掉了. 后来发现还是first blood.\n然而mhy和zhx的j题一直在debug最后还是没对有点遗憾.\n于是rank2被陈老师队怒踩.\n说不定我们选择不要j, 去写f和h能艹上rank1. 不过事后再想没用了.\n都怪我英语太差qaq.\n然后我顺便吃掉了全队的巧克力, 还承包了全队的面包. 233.\n然后就是赛艇的揭榜颁奖. 第一次没有输罚时真是奇迹. 而且全队的罚时都是我贡献的 233.\n主持人念我们队名的时候内心肯定是崩溃的.\n居然要上台领奖, 居然还有杯.\n嗯然后这个赛季就结束了.\n滚粗回北京, 还要直面周三惨淡的微积分补考qaq.\n","permalink":"/diary/3ed1b2/","summary":"补mark.\n去青岛欢度周末然而没吃到任何海鲜差评.\n想带点纪念品回来然而一直没机会. 最后只有在高铁站里乱逛感觉东西不行于是啥都没买qwq.\n所以说好的acm旅游呢.\n头天试机的时候感觉自己状态好差, 仔细分析发现是头天晚上在火车上没洗澡所致.\n而且现在头发的长度已经有点不能忍了啊. 又开始纠结要不要去剪头发了.\n试机晚上和zhx去打台球. zhx一直在跳球真是有毒qaq. 然而我的台球水平还是竦么菜.\n睡前看板发现这都是些smg啊qaq. 为什么你们的板子大括号要换行啊qaq. 果然以后还是得自己备板.\n考试日起来感觉满血满状态复活.\n打vimrc的时候手僵.\n听说有些区的pc方在开场的时候挂了半小时. 还好我们运气不错, 只有榜挂了.\n上来zhx先切掉了a.\n然后觉得c可以推一推然后发现这个微分方程我还没学啊喂.\n于是我就去写b的魔方了. 魔方这玩意真是有毒好么.\n然后发现zhx和mhy还在推c还是f来着. 然后我发现g是个裸裸的费用流于是去写. 好久不写这玩意都手生了. 然后强行看错题意乘二. 第一次是直接把概率加起来了. 第二次是把有向边看成了无向边还yy了一个蛮麻烦的建图方法.\n然后zhx终于把c给淦出来了. 结果方程凑一下就出来了, 式子炒鸡简单.\n然后我和mhy都想到d题只算轮数较少的情况就行了. 然后zhx就写挂了过不到样例.\n于是我就去开k的kd-tree做法.\n过了一会zhx发现他sb了, 改了一下就过了还喊了一句 \u0026ldquo;woc\u0026rdquo;, 技惊四座.\n然后我就把kd-tree给debug了一下也过了.\n然后就发现没题可做了. 我把m转化成平面上放点, 区间改点区间查询. 想用二维线段树感觉标记不好维护. zhx写一半弃疗了.\n然后我们看了一下h插头懒得写, f大模拟懒得写, i式子太复杂不知道是啥鬼, l想了半天没有思路.\nzhx和我又想了想可以用象限四分树. zhx写了半天. 然后我灵机一动为什么不直接用kd-tree艹过去呢. 然后半粘半写的搞了一份.\nzhx和mhy则开始想j. 然后zhx搞了一个乱七八糟的dfs.\n然后我的m开始tle, zhx的j开始wa.\n这时候已经封榜了. 我对着我打印的代码找bug, zhx和mhy用gdb debug.\n然后我发现我的m写得太匆忙好多细节都没想清楚. 最后写了个data generator拍了一下, 发现因为忘剪标记所以死循环了. 然后就wa了. 然后再改个brute force出来拍了一下发现还是标记没打对. 然后最后终于在还有9分钟的时候a掉了. 后来发现还是first blood.","title":"20161113 ICPC Qingdao"},{"content":"qaq. 我有说过10天要更新一次么.\n时间过得真是快qaq. 就要半期考试了qaq.\n沉浸在微积分和线代的恐怖中.\n感觉acm也药丸.\n练了场cf, 被队列卡成poi.\n神tm补考.\ngg.\nHistorical Comments lyzy at 2016-11-04T19:41:42 hh\n","permalink":"/diary/ba67d7/","summary":"qaq. 我有说过10天要更新一次么.\n时间过得真是快qaq. 就要半期考试了qaq.\n沉浸在微积分和线代的恐怖中.\n感觉acm也药丸.\n练了场cf, 被队列卡成poi.\n神tm补考.\ngg.\nHistorical Comments lyzy at 2016-11-04T19:41:42 hh","title":"20161103"},{"content":"据说本学期程设的大作业是写个魔方.\n看到别人都开动了, laekov就有点方.\n所以laekov也开动了. 为了表现laekov很弱就随手记录一下好了.\n10.21 晚上9点左右开始写魔方类. 支持三轴整体转动和四种八向扭动. 其实是用两轴转动和一种扭动组合出来的. 然后发现写得不太对. debug到12点搞定.\n10.22 早上有运动会. 九点左右开始写层洗ai. 中午随便吃了点然后接着写. 全程没make. 大概一点左右写完开始debug. 两点惊闻有项目. 直到晚上六点半去听心理讲座接着debug. 晚上回寝室接着debug. 很多公式和判定都有小小的问题. 不过幸好函数都分开写了, 调试还算方便. 晚上九点左右能跑过随机了. core部分基本完结撒花. 顺手完善了一下document. 准备开始看qt.\n10.23 懒死了不想看qt. 晚上决定图形还是就用h5写吧.\nHistorical Comments lyzy at 2016-10-26T20:22:21 膜Qt大神 至今不会release\nlyzy at 2016-10-26T20:27:43 我还是没有名字 I still have no name Todavia no tengo un nombre.\nlyzy at 2016-10-26T20:28:57 怎么办 What to do ¿Cómo？\nlyzy at 2016-10-26T20:29:21 太年轻 too young muy joven\n","permalink":"/technical/bd3e8b/","summary":"据说本学期程设的大作业是写个魔方.\n看到别人都开动了, laekov就有点方.\n所以laekov也开动了. 为了表现laekov很弱就随手记录一下好了.\n10.21 晚上9点左右开始写魔方类. 支持三轴整体转动和四种八向扭动. 其实是用两轴转动和一种扭动组合出来的. 然后发现写得不太对. debug到12点搞定.\n10.22 早上有运动会. 九点左右开始写层洗ai. 中午随便吃了点然后接着写. 全程没make. 大概一点左右写完开始debug. 两点惊闻有项目. 直到晚上六点半去听心理讲座接着debug. 晚上回寝室接着debug. 很多公式和判定都有小小的问题. 不过幸好函数都分开写了, 调试还算方便. 晚上九点左右能跑过随机了. core部分基本完结撒花. 顺手完善了一下document. 准备开始看qt.\n10.23 懒死了不想看qt. 晚上决定图形还是就用h5写吧.\nHistorical Comments lyzy at 2016-10-26T20:22:21 膜Qt大神 至今不会release\nlyzy at 2016-10-26T20:27:43 我还是没有名字 I still have no name Todavia no tengo un nombre.\nlyzy at 2016-10-26T20:28:57 怎么办 What to do ¿Cómo？\nlyzy at 2016-10-26T20:29:21 太年轻 too young muy joven","title":"PD大作业"},{"content":"唔, 最近剁了两次手.\n第一次买了个超级廉价的windows平板然后发现连跑跑卡丁车都玩不了. 不过至少可以上课的时候看pdf以及听文素的时候写写程设作业. 这里就要吐槽为什么这个板子的各种符号都被压缩到fn+主键区了qaq. 不过总之还是不错的. win10有了ubuntu之后终于有点能用了.\n然后又去剁了一架廉价死飞, 配了个很sao气的颜色. 现在很担心明天早上还能不能见到我的车.\n中午很激动地装了车下去骑. 然而我真的不具有绑手胶的技术啊qaq. 虽然我绑网球拍很熟练.\n跑起来呼呼生风很爽啊. 然而手机架还没到货也不知道哪里可以有足够的空地给我测速. 目测30-40码还是可以的.\n不过心里很虚啊. 自己作死不装刹车. 然后刹车的时候很痛苦啊. 这个杠杆加速的时候是优势, 减速的时候就很不开心了.\n总之还是要练一练技术的. 现在这样停车都停不下来还是很惨痛的.\n所以我还是太年轻了.\n","permalink":"/diary/d0ec33/","summary":"唔, 最近剁了两次手.\n第一次买了个超级廉价的windows平板然后发现连跑跑卡丁车都玩不了. 不过至少可以上课的时候看pdf以及听文素的时候写写程设作业. 这里就要吐槽为什么这个板子的各种符号都被压缩到fn+主键区了qaq. 不过总之还是不错的. win10有了ubuntu之后终于有点能用了.\n然后又去剁了一架廉价死飞, 配了个很sao气的颜色. 现在很担心明天早上还能不能见到我的车.\n中午很激动地装了车下去骑. 然而我真的不具有绑手胶的技术啊qaq. 虽然我绑网球拍很熟练.\n跑起来呼呼生风很爽啊. 然而手机架还没到货也不知道哪里可以有足够的空地给我测速. 目测30-40码还是可以的.\n不过心里很虚啊. 自己作死不装刹车. 然后刹车的时候很痛苦啊. 这个杠杆加速的时候是优势, 减速的时候就很不开心了.\n总之还是要练一练技术的. 现在这样停车都停不下来还是很惨痛的.\n所以我还是太年轻了.","title":"20161020"},{"content":"好久没有写过东西了. 军训完了之后突然就好忙好忙呢.\n试图干些惊天地泣鬼神的事情不过失败了.\n试图认真学习然后失败了.\n试图过一种悠闲的生活然后失败了.\n试图征服人生然后失败了.\n接了不少锅, 感觉生活很充实.\n都没有什么可以虚度的时间.\n依然很想吐槽.\n很纠结要不要去买个好玩的自行车.\n很纠结要不要买hhkb.\n很纠结要不要买个显示器.\n很纠结要不要买个平板.\n很纠结要不要买个主机.\n很纠结不要要买个女朋友.\n然而我穷死了什么都买不起\u0026gt;_\u0026lt;\n还是乖乖地沉迷学习和背锅吧.\nHistorical Comments ArtemisLiu at 2016-10-11T22:49:55 你加了多少社团啊\nArtemisLiu at 2016-10-11T22:52:05 你加了多少社团啊\n","permalink":"/diary/8982c3/","summary":"好久没有写过东西了. 军训完了之后突然就好忙好忙呢.\n试图干些惊天地泣鬼神的事情不过失败了.\n试图认真学习然后失败了.\n试图过一种悠闲的生活然后失败了.\n试图征服人生然后失败了.\n接了不少锅, 感觉生活很充实.\n都没有什么可以虚度的时间.\n依然很想吐槽.\n很纠结要不要去买个好玩的自行车.\n很纠结要不要买hhkb.\n很纠结要不要买个显示器.\n很纠结要不要买个平板.\n很纠结要不要买个主机.\n很纠结不要要买个女朋友.\n然而我穷死了什么都买不起\u0026gt;_\u0026lt;\n还是乖乖地沉迷学习和背锅吧.\nHistorical Comments ArtemisLiu at 2016-10-11T22:49:55 你加了多少社团啊\nArtemisLiu at 2016-10-11T22:52:05 你加了多少社团啊","title":"20161010"},{"content":"\u0026quot; local syntax file - set colors on a per-machine basis: \u0026quot; vim: tw=0 ts=4 sw=4 \u0026quot; Vim color file \u0026quot; Maintainer:\tlaekov laekov@163.com \u0026quot; Last Change:\t2015 Feb \u0026quot; hi clear set background=dark syntax reset let g:colors_name=\u0026lsquo;pineapple\u0026rsquo; if has(\u0026lsquo;gui\u0026rsquo;) hi Normal guibg=#000000 guifg=white hi SpecialKey term=bold ctermfg=4 guifg=Blue hi Directory term=bold ctermfg=4 guifg=Blue hi ErrorMsg term=standout cterm=bold ctermfg=7 ctermbg=1 gui=bold guifg=White guibg=Red hi IncSearch term=reverse cterm=reverse gui=reverse hi Search term=reverse guibg=Blue guifg=White hi MoreMsg term=bold ctermfg=2 gui=bold guifg=White hi ModeMsg term=bold cterm=bold gui=bold hi LineNr term=underline ctermfg=3 guifg=Pink guibg=#222222 hi Question term=standout ctermfg=2 gui=bold guifg=White hi StatusLine term=bold,reverse cterm=bold,reverse gui=bold guifg=White guibg=Grey35 hi StatusLineNC term=reverse cterm=reverse gui=bold guifg=Grey10 guibg=Gray85 hi VertSplit guibg=Pink guifg=Black hi Title term=bold ctermfg=5 gui=bold guifg=DeepPink3 hi Visual term=reverse cterm=reverse gui=reverse guifg=Grey80 guibg=fg hi VisualNOS term=bold,underline cterm=bold,underline gui=bold,underline hi WarningMsg term=standout ctermfg=1 gui=bold guifg=Red hi WildMenu term=standout ctermfg=0 ctermbg=3 guifg=Black guibg=Yellow hi Folded term=standout ctermfg=4 ctermbg=7 guifg=Black guibg=#e3c1a5 hi FoldColumn term=standout ctermfg=4 ctermbg=7 guifg=DarkBlue guibg=Gray80 hi DiffAdd term=bold ctermbg=4 guibg=White hi DiffChange term=bold ctermbg=5 guibg=#edb5cd hi DiffDelete term=bold cterm=bold ctermfg=4 ctermbg=6 gui=bold guifg=LightBlue guibg=#f6e8d0 hi DiffText term=reverse cterm=bold ctermbg=1 gui=bold guibg=#ff8060 hi Cursor guifg=black guibg=white hi lCursor guifg=bg guibg=fg hi CursorLine guibg=#222222 hi CursorLineNr guibg=#222222 guifg=red hi NonText guifg=green guibg=#1a1a1a \u0026quot; Colors for syntax highlighting hi Comment term=bold ctermfg=4 guifg=Cyan hi Constant term=underline ctermfg=1 guifg=Yellow hi Special term=bold ctermfg=5 guifg=#ff9c3a hi Identifier term=underline ctermfg=6 guifg=#9999ff hi Statement term=bold ctermfg=3 gui=bold guifg=#09f93f hi PreProc term=underline ctermfg=5 guifg=#888888 hi Type term=underline ctermfg=2 gui=bold guifg=#598ff9 hi Ignore cterm=bold ctermfg=7 guifg=bg hi Error term=reverse cterm=bold ctermfg=7 ctermbg=1 gui=bold guifg=White guibg=Red hi Todo term=standout ctermfg=0 ctermbg=3 guifg=Blue guibg=Yellow else hi Normal ctermfg=white ctermbg=0 hi ErrorMsg cterm=standout cterm=bold ctermfg=7 ctermbg=1 hi IncSearch cterm=reverse ctermbg=1 ctermfg=7 hi Search cterm=reverse ctermbg=7 ctermfg=blue hi Visual cterm=reverse if $TERM == \u0026lsquo;xterm-256color\u0026rsquo; \u0026quot;\thi NonText cterm=bold ctermbg=232 ctermfg=2 \u0026quot;\thi Type cterm=bold ctermfg=4 \u0026quot;\thi Special cterm=bold ctermfg=172 hi NonText cterm=bold ctermbg=234 ctermfg=2 hi Type cterm=bold ctermfg=4 hi Special cterm=bold ctermfg=1 else hi NonText cterm=bold ctermbg=8 ctermfg=2 hi Type cterm=bold ctermfg=32 hi Special cterm=bold ctermfg=1 endif hi LineNr cterm=bold ctermfg=5 hi ModeMsg cterm=bold hi StatusLine cterm=bold ctermfg=7 ctermbg=8 hi StatusLineNC ctermfg=7 ctermbg=8 hi VertSplit ctermfg=0 ctermbg=5 hi Folded cterm=standout ctermfg=3 ctermbg=4 hi FoldedColumn cterm=standout ctermfg=3 ctermbg=4 \u0026ldquo;For syntax hilighter hi Comment cterm=bold ctermfg=6 hi Constant ctermfg=yellow hi Indentifier cterm=bold ctermfg=2 hi Statement cterm=bold ctermfg=2 hi PreProc cterm=bold ctermfg=darkgrey hi Ignore ctermfg=7 hi Error term=reverse cterm=bold ctermfg=7 ctermbg=1 hi Todo term=standout ctermbg=6 ctermfg=0 endif\n","permalink":"/code/pineapple/","summary":"\u0026quot; local syntax file - set colors on a per-machine basis: \u0026quot; vim: tw=0 ts=4 sw=4 \u0026quot; Vim color file \u0026quot; Maintainer:\tlaekov laekov@163.com \u0026quot; Last Change:\t2015 Feb \u0026quot; hi clear set background=dark syntax reset let g:colors_name=\u0026lsquo;pineapple\u0026rsquo; if has(\u0026lsquo;gui\u0026rsquo;) hi Normal guibg=#000000 guifg=white hi SpecialKey term=bold ctermfg=4 guifg=Blue hi Directory term=bold ctermfg=4 guifg=Blue hi ErrorMsg term=standout cterm=bold ctermfg=7 ctermbg=1 gui=bold guifg=White guibg=Red hi IncSearch term=reverse cterm=reverse gui=reverse hi Search term=reverse guibg=Blue guifg=White hi MoreMsg term=bold ctermfg=2 gui=bold guifg=White hi ModeMsg term=bold cterm=bold gui=bold hi LineNr term=underline ctermfg=3 guifg=Pink guibg=#222222 hi Question term=standout ctermfg=2 gui=bold guifg=White hi StatusLine term=bold,reverse cterm=bold,reverse gui=bold guifg=White guibg=Grey35 hi StatusLineNC term=reverse cterm=reverse gui=bold guifg=Grey10 guibg=Gray85 hi VertSplit guibg=Pink guifg=Black hi Title term=bold ctermfg=5 gui=bold guifg=DeepPink3 hi Visual term=reverse cterm=reverse gui=reverse guifg=Grey80 guibg=fg hi VisualNOS term=bold,underline cterm=bold,underline gui=bold,underline hi WarningMsg term=standout ctermfg=1 gui=bold guifg=Red hi WildMenu term=standout ctermfg=0 ctermbg=3 guifg=Black guibg=Yellow hi Folded term=standout ctermfg=4 ctermbg=7 guifg=Black guibg=#e3c1a5 hi FoldColumn term=standout ctermfg=4 ctermbg=7 guifg=DarkBlue guibg=Gray80 hi DiffAdd term=bold ctermbg=4 guibg=White hi DiffChange term=bold ctermbg=5 guibg=#edb5cd hi DiffDelete term=bold cterm=bold ctermfg=4 ctermbg=6 gui=bold guifg=LightBlue guibg=#f6e8d0 hi DiffText term=reverse cterm=bold ctermbg=1 gui=bold guibg=#ff8060 hi Cursor guifg=black guibg=white hi lCursor guifg=bg guibg=fg hi CursorLine guibg=#222222 hi CursorLineNr guibg=#222222 guifg=red hi NonText guifg=green guibg=#1a1a1a \u0026quot; Colors for syntax highlighting hi Comment term=bold ctermfg=4 guifg=Cyan hi Constant term=underline ctermfg=1 guifg=Yellow hi Special term=bold ctermfg=5 guifg=#ff9c3a hi Identifier term=underline ctermfg=6 guifg=#9999ff hi Statement term=bold ctermfg=3 gui=bold guifg=#09f93f hi PreProc term=underline ctermfg=5 guifg=#888888 hi Type term=underline ctermfg=2 gui=bold guifg=#598ff9 hi Ignore cterm=bold ctermfg=7 guifg=bg hi Error term=reverse cterm=bold ctermfg=7 ctermbg=1 gui=bold guifg=White guibg=Red hi Todo term=standout ctermfg=0 ctermbg=3 guifg=Blue guibg=Yellow else hi Normal ctermfg=white ctermbg=0 hi ErrorMsg cterm=standout cterm=bold ctermfg=7 ctermbg=1 hi IncSearch cterm=reverse ctermbg=1 ctermfg=7 hi Search cterm=reverse ctermbg=7 ctermfg=blue hi Visual cterm=reverse if $TERM == \u0026lsquo;xterm-256color\u0026rsquo; \u0026quot;\thi NonText cterm=bold ctermbg=232 ctermfg=2 \u0026quot;\thi Type cterm=bold ctermfg=4 \u0026quot;\thi Special cterm=bold ctermfg=172 hi NonText cterm=bold ctermbg=234 ctermfg=2 hi Type cterm=bold ctermfg=4 hi Special cterm=bold ctermfg=1 else hi NonText cterm=bold ctermbg=8 ctermfg=2 hi Type cterm=bold ctermfg=32 hi Special cterm=bold ctermfg=1 endif hi LineNr cterm=bold ctermfg=5 hi ModeMsg cterm=bold hi StatusLine cterm=bold ctermfg=7 ctermbg=8 hi StatusLineNC ctermfg=7 ctermbg=8 hi VertSplit ctermfg=0 ctermbg=5 hi Folded cterm=standout ctermfg=3 ctermbg=4 hi FoldedColumn cterm=standout ctermfg=3 ctermbg=4 \u0026ldquo;For syntax hilighter hi Comment cterm=bold ctermfg=6 hi Constant ctermfg=yellow hi Indentifier cterm=bold ctermfg=2 hi Statement cterm=bold ctermfg=2 hi PreProc cterm=bold ctermfg=darkgrey hi Ignore ctermfg=7 hi Error term=reverse cterm=bold ctermfg=7 ctermbg=1 hi Todo term=standout ctermbg=6 ctermfg=0 endif","title":"pineapple.vim"},{"content":"一些可以用的轮子.\npassportjs 用户登陆/管理模块\nzmq 消息队列. 处理后台各种不能异步的请求.\nopenjudge-sandbox oj评测沙箱(还没搞懂)\nreact 前端框架\nangularjs 更重量更强大的前端框架\nbootstrap css板子\nnodegit 顾名思义\ngrunt 开发自动化\nthreejs h5的3d绘图\nphoria 另一个h5的3d绘图 // 似乎star比上一个多, 然而没有文档, 玩ball喽\n// 开始考虑要不要重写srk了然而没有时间\u0026gt;_\u0026lt;\n","permalink":"/technical/38ac37/","summary":"一些可以用的轮子.\npassportjs 用户登陆/管理模块\nzmq 消息队列. 处理后台各种不能异步的请求.\nopenjudge-sandbox oj评测沙箱(还没搞懂)\nreact 前端框架\nangularjs 更重量更强大的前端框架\nbootstrap css板子\nnodegit 顾名思义\ngrunt 开发自动化\nthreejs h5的3d绘图\nphoria 另一个h5的3d绘图 // 似乎star比上一个多, 然而没有文档, 玩ball喽\n// 开始考虑要不要重写srk了然而没有时间\u0026gt;_\u0026lt;","title":"轮子们"},{"content":"军训完了.\n看别人送教官的时候哭了.\n唔.\n今天acm大连网赛.\n零输出.\n唉.\n我还是太年轻了.\n难测者, 人心.\n还有收到了迷之包裹的mhy好强.\n","permalink":"/diary/92b8f2/","summary":"军训完了.\n看别人送教官的时候哭了.\n唔.\n今天acm大连网赛.\n零输出.\n唉.\n我还是太年轻了.\n难测者, 人心.\n还有收到了迷之包裹的mhy好强.","title":"20160910"},{"content":"早。\n人生多艰。\n还是老老实实地在跪系跪着吧。\n只是突然觊觎别人的机会和资源，怎么可能被接受。\n本来只是想着考着玩玩的。怎么就认真了呢？\n所以我啊，还是太naive了。\nhello, real world.\nHistorical Comments ArtemisLiu at 2016-08-24T13:36:07 qwq\n","permalink":"/diary/cbf84a/","summary":"早。\n人生多艰。\n还是老老实实地在跪系跪着吧。\n只是突然觊觎别人的机会和资源，怎么可能被接受。\n本来只是想着考着玩玩的。怎么就认真了呢？\n所以我啊，还是太naive了。\nhello, real world.\nHistorical Comments ArtemisLiu at 2016-08-24T13:36:07 qwq","title":"20160821"},{"content":"感觉很久不更新要被婊了。\n辣鸡laekov来到了帝都的thu。\n然后就不准在寝室里用电脑了。laekov决定当个乖宝宝所以把键盘接手机上玩了。恼火ing。\nlaekov发现自己终于有了床po好开心啊。\nlaekov去考茶园不小心进了面试然后被d了一顿好郁闷啊。然而明天才出结果。\n你清又红又专可为啥总是要我从寝室走路出去啊。我明明有自行车嘛qaq\n听说thu军训好无奈ovo。\n所以laekov还是太辣鸡啦。\n","permalink":"/diary/a8c335/","summary":"感觉很久不更新要被婊了。\n辣鸡laekov来到了帝都的thu。\n然后就不准在寝室里用电脑了。laekov决定当个乖宝宝所以把键盘接手机上玩了。恼火ing。\nlaekov发现自己终于有了床po好开心啊。\nlaekov去考茶园不小心进了面试然后被d了一顿好郁闷啊。然而明天才出结果。\n你清又红又专可为啥总是要我从寝室走路出去啊。我明明有自行车嘛qaq\n听说thu军训好无奈ovo。\n所以laekov还是太辣鸡啦。","title":"20160820"},{"content":"这是一篇乱七八糟的瓦尔登湖读后感. 可能要花很多天才能写完\u0026gt;_\u0026lt;\n一湖一林一屋一人, 就是一个世界.\n人们常常抱怨这个世界过于喧嚣, 却没有发现世界的喧嚣源于自己的索求. 如梭罗自己所实验的, 如果你不需要整日辛勤劳作开荒种田, 你就不需要厚实的衣服鞋子. 如果你不需要为了咖啡和茶而赚钱, 那你就不需要用它们来支撑你的体力. 正所谓世上本无事, 庸人自扰之. 虽然东西不同, 但是梭罗的思想和中国古代的道家不谋而和. 人类的麻烦都是自找的.\n我们明明可以选择一种悠闲而优雅的生活方式, 浪迹山林, 仰观蓝天, 坐看清湖.\n然而啊, 存在即合理. 为什么人类是这样而不是那样啊? 明明全人类都可以退隐山林, 回归原始人. 即环保, 又悠闲. 然而, 发展是人类的必然趋势.所以我们必然也必需社会化, 工业化, 以及未来的信息化, 宇宙化. 如果不求上进, 和那些动物一样只会吃吃吃睡睡睡, 那么人凭什么能有今天如此悠闲的生活? 上进是人类的必需品. 环保, 回归, 可以是人类的幻想, 也有如作者一般的人会追求它, 赞扬它, 但是他们永远只能是少数.\n另一方面讲, 人们从梭罗研究环保的先驱. 然而这样的环保是真正的环保吗? 未必. 真正的环保应该是尽量减少资源的浪费. 即最大化资源利用效率. 可是我们的梭罗先生呢? 伐木为柴, 折枝为箭. 他才是真正挥霍资源的人. 他所谓的情怀, 不过是文人式的矫情的无病呻吟罢了.\n以上.\n20160829\nHistorical Comments lyzy at 2016-10-26T20:21:16 膜laekov\nlyzy at 2016-10-26T20:21:27 hahahaha 成功了\n","permalink":"/random/cb9485/","summary":"这是一篇乱七八糟的瓦尔登湖读后感. 可能要花很多天才能写完\u0026gt;_\u0026lt;\n一湖一林一屋一人, 就是一个世界.\n人们常常抱怨这个世界过于喧嚣, 却没有发现世界的喧嚣源于自己的索求. 如梭罗自己所实验的, 如果你不需要整日辛勤劳作开荒种田, 你就不需要厚实的衣服鞋子. 如果你不需要为了咖啡和茶而赚钱, 那你就不需要用它们来支撑你的体力. 正所谓世上本无事, 庸人自扰之. 虽然东西不同, 但是梭罗的思想和中国古代的道家不谋而和. 人类的麻烦都是自找的.\n我们明明可以选择一种悠闲而优雅的生活方式, 浪迹山林, 仰观蓝天, 坐看清湖.\n然而啊, 存在即合理. 为什么人类是这样而不是那样啊? 明明全人类都可以退隐山林, 回归原始人. 即环保, 又悠闲. 然而, 发展是人类的必然趋势.所以我们必然也必需社会化, 工业化, 以及未来的信息化, 宇宙化. 如果不求上进, 和那些动物一样只会吃吃吃睡睡睡, 那么人凭什么能有今天如此悠闲的生活? 上进是人类的必需品. 环保, 回归, 可以是人类的幻想, 也有如作者一般的人会追求它, 赞扬它, 但是他们永远只能是少数.\n另一方面讲, 人们从梭罗研究环保的先驱. 然而这样的环保是真正的环保吗? 未必. 真正的环保应该是尽量减少资源的浪费. 即最大化资源利用效率. 可是我们的梭罗先生呢? 伐木为柴, 折枝为箭. 他才是真正挥霍资源的人. 他所谓的情怀, 不过是文人式的矫情的无病呻吟罢了.\n以上.\n20160829\nHistorical Comments lyzy at 2016-10-26T20:21:16 膜laekov\nlyzy at 2016-10-26T20:21:27 hahahaha 成功了","title":"人类为什么要自相残杀"},{"content":"laekov成为了司机.\n上午去考科三然后拿证. 整个节奏就是办个事等半个小时干三分钟正事.\n虽然车上四个人只过了两个但是我过了.\n然后就开自家车到浦江去了.\n然后又去跑三环.\n自动档开起来就是倍爽.\n在某条路上飚到了100码.\n看到街上练科三的教练车就一脚老油超过去. 叫你们前两天超我, 口哼.\n其实很多人都已经拿到驾照了呢.\n好想开车去ingress啊.\n亦可赛艇.\n","permalink":"/diary/21c66f/","summary":"laekov成为了司机.\n上午去考科三然后拿证. 整个节奏就是办个事等半个小时干三分钟正事.\n虽然车上四个人只过了两个但是我过了.\n然后就开自家车到浦江去了.\n然后又去跑三环.\n自动档开起来就是倍爽.\n在某条路上飚到了100码.\n看到街上练科三的教练车就一脚老油超过去. 叫你们前两天超我, 口哼.\n其实很多人都已经拿到驾照了呢.\n好想开车去ingress啊.\n亦可赛艇.","title":"20160810"},{"content":"题意:\n给你n个数和一个k. 求这n个数的一个最小子集, 使得元素乘积为k的倍数, 且元素之和最小.\n要输出方案.\n\\( n \\leq 10^3, k \\leq 10^{12} \\)\n结局:\n死在输出方案上了.\n思路:\n首先发现k的质因数不会很多, 最多有14个.\n然后k的因数也不会很多.\n所以就dp一下. \\(f_i\\)表示当前积与k的gcd为i的时候的元素个数.\n然后就像个背包一样嘛. 输出方案? 记录从哪里转移来的不就好了.\n然后.\n考虑这个例子.\n3 9 3 24 21 你会先拿24从3更新到9.\n然后21就会把3和9的转移都更新.\n然后就炸了.\n因为3应该是从原来的状态更新的. 但是现在被覆盖了.\n然后发现状态是棵树. 可以把状态可持久化记下来.\n更新一个状态的时候, 不是直接覆盖, 而是新建一个状态来保证从原来的状态转移出去的情况不会出错.\n这样空间复杂度应该和转移次数有关?\n然后怎么就糊过去了.\n另一个细节是k=1是答案不能是0. woc.\n依然感觉很鬼蓄.\n代码\n","permalink":"/oi/7a9bc3/","summary":"题意:\n给你n个数和一个k. 求这n个数的一个最小子集, 使得元素乘积为k的倍数, 且元素之和最小.\n要输出方案.\n\\( n \\leq 10^3, k \\leq 10^{12} \\)\n结局:\n死在输出方案上了.\n思路:\n首先发现k的质因数不会很多, 最多有14个.\n然后k的因数也不会很多.\n所以就dp一下. \\(f_i\\)表示当前积与k的gcd为i的时候的元素个数.\n然后就像个背包一样嘛. 输出方案? 记录从哪里转移来的不就好了.\n然后.\n考虑这个例子.\n3 9 3 24 21 你会先拿24从3更新到9.\n然后21就会把3和9的转移都更新.\n然后就炸了.\n因为3应该是从原来的状态更新的. 但是现在被覆盖了.\n然后发现状态是棵树. 可以把状态可持久化记下来.\n更新一个状态的时候, 不是直接覆盖, 而是新建一个状态来保证从原来的状态转移出去的情况不会出错.\n这样空间复杂度应该和转移次数有关?\n然后怎么就糊过去了.\n另一个细节是k=1是答案不能是0. woc.\n依然感觉很鬼蓄.\n代码","title":"CF703E Mishka and Divisors"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #define _l (long long int) #ifdef WIN32\ndefine lld \u0026ldquo;%I64d\u0026rdquo; #else\ndefine lld \u0026ldquo;%lld\u0026rdquo; #endif\nconst int maxs = (1 \u0026laquo; 22) + 1; const int maxf = 23; const int inf = 0x3f3f3f3f; const int maxn = 1003;\ntypedef pair \u0026lt;dint, int\u0026gt; item;\nitem a[maxn]; dint k, kf[maxf], fs[maxs]; int f[maxs], ff[maxs], cs[maxs], fv[maxs], n, m, t, cf[maxf], v[maxf], vn[maxf], c;\nvoid dissolve(dint k) { t = 0; m = 1; for (dint i = 2; i * i \u0026lt;= k; ++ i) { if (k % i == 0) { kf[t] = i; for (cf[t] = 0; k % i == 0; k /= i, ++ cf[t]); ++ t; } } if (k \u0026gt; 1) { kf[t] = k; cf[t] = 1; ++ t; } for (int i = 0; i \u0026lt; t; ++ i) { m *= cf[i] + 1; } }\nvoid unzipState(int* a, int s) { for (int i = 0; i \u0026lt; t; ++ i) { a[i] = s % (cf[i] + 1); s /= cf[i] + 1; } } int zipState(int* a) { int s(0); for (int i = t - 1; i \u0026gt;= 0; \u0026ndash; i) { s = s * (cf[i] + 1) + a[i]; } return s; }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot; lld, \u0026amp;n, \u0026amp;k); dissolve(k); memset(f, 0x3f, sizeof(f)); memset(fs, 0x3f, sizeof(fs)); f[0] = fs[0] = 0; for (int i = 0; i \u0026lt; n; ++ i) { scanf(lld, \u0026amp;a[i].first); a[i].second = i + 1; } sort(a, a + n); c = 0; cs[0] = 0; for (int ti = 0; ti \u0026lt; n; ++ ti) { dint z(a[ti].first); for (int i = 0; i \u0026lt; t; ++ i) { for (vn[i] = 0; z % kf[i] == 0; z /= kf[i], ++ vn[i]); } for (int j = m - 1; j \u0026gt;= 0; -- j) { if (f[j] \u0026lt; inf) { unzipState(v, j); for (int k = 0; k \u0026lt; t; ++ k) { v[k] = min(cf[k], v[k] + vn[k]); } int sn(zipState(v)); if (f[j] + 1 \u0026lt; f[sn] || (f[j] + 1 == f[sn] \u0026amp;\u0026amp; fs[j] + a[ti].first \u0026lt; fs[sn])) { f[sn] = f[j] + 1; fs[sn] = fs[j] + a[ti].first; fv[cs[sn] = ++ c] = a[ti].second; ff[c] = cs[j]; } } } } if (!t) { printf(\u0026quot;1\\n%d\\n\u0026quot;, a[0].second); } else if (f[m - 1] \u0026gt; n) { puts(\u0026quot;-1\u0026quot;); } else { printf(\u0026quot;%d\\n\u0026quot;, f[m - 1]); for (int i = cs[m - 1]; i; i = ff[i]) { printf(\u0026quot;%d%c\u0026quot;, fv[i], ff[i] ? 32 : 10); } } }\n","permalink":"/code/c868c5/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #define _l (long long int) #ifdef WIN32\ndefine lld \u0026ldquo;%I64d\u0026rdquo; #else\ndefine lld \u0026ldquo;%lld\u0026rdquo; #endif\nconst int maxs = (1 \u0026laquo; 22) + 1; const int maxf = 23; const int inf = 0x3f3f3f3f; const int maxn = 1003;\ntypedef pair \u0026lt;dint, int\u0026gt; item;\nitem a[maxn]; dint k, kf[maxf], fs[maxs]; int f[maxs], ff[maxs], cs[maxs], fv[maxs], n, m, t, cf[maxf], v[maxf], vn[maxf], c;","title":"cf703e.cc"},{"content":"大半夜的.\n要是我写完开始system test了我就等它完.\n上午在银行排了很久的队. 然后就给夏令营的小朋友们出了个造排队机的奇怪的题目. 听说讨论得很诡异.\n下午打了奇奇怪怪的多校. 只输出了一个题然后就开始爆炸qaq.\n晚上还是耐不住去打了cf.\n打开aoao那个号想把friends copy过来. 才发现已经没有什么friends了.\n就像acm组队一样. 总像是在等什么, 然而什么都没有.\n然而cf这种游戏已经不适合我这种看错题还交了好多好多遍的老年人了.\n数据结构题也是想了好久, 比赛最后才生死时速. 没拍过感觉药丸.\n明天早上还要去学科目三. 真是药丸.\n所以我真是一只辣鸡呢.\n","permalink":"/diary/ac19c2/","summary":"大半夜的.\n要是我写完开始system test了我就等它完.\n上午在银行排了很久的队. 然后就给夏令营的小朋友们出了个造排队机的奇怪的题目. 听说讨论得很诡异.\n下午打了奇奇怪怪的多校. 只输出了一个题然后就开始爆炸qaq.\n晚上还是耐不住去打了cf.\n打开aoao那个号想把friends copy过来. 才发现已经没有什么friends了.\n就像acm组队一样. 总像是在等什么, 然而什么都没有.\n然而cf这种游戏已经不适合我这种看错题还交了好多好多遍的老年人了.\n数据结构题也是想了好久, 比赛最后才生死时速. 没拍过感觉药丸.\n明天早上还要去学科目三. 真是药丸.\n所以我真是一只辣鸡呢.","title":"20160805"},{"content":"玄妙的一天.\n第一次正经参加MU.\n上午睡啊睡. 然后雨好大还忘了家里有吃的, 跑出去湿身淋得焦湿.\n于是就错过了抢水题fb的机会\u0026gt;_\u0026lt;.\nyjq: 03比较好写啊.\nhja: 我来.\n几分钟后.\nhja: 卧槽wa了. 卧槽看错题了.\nyjq: 辣鸡hja滚一边去.\nhja: TAT我去搞辣鸡dp题1011.\n几分钟后.\nhja: 过掉了1011. 这个1012看上去很清真啊. 不就是容斥一下嘛. 刚才浪费的树状数组代码也可以用上辣.\n几分钟后.\nhja: 过掉了1012. 这个1005似乎是个回文串的题? 作为讲字符串的老师尊严何在? 撸!\n十几分钟后.\nhja: 过掉了1005. interesting. 然而被抢走了fb. 这个1002的数据范围怎么那么小? 很像是暴力嘛.\nmhy: 资瓷啊. 搞暴力啊.\n十几分钟后.\nhja: 果然暴力走next树就艹掉了这题.\nhja: 这个1008很清真啊. 也就是一个dfs序+主席树+dfs乱搞? 你们有谁要接这个锅啊?\nyjq: 艹了半天1010这题有毒.\nlxl: 别用主席树. 我这有高效平衡树.\n十几分钟后.\nhja: 还没人接锅? 那我自己背好了.\n几十分钟后.\nhja: 多年不写ds手生了. wtf? 居然tle了?\nlxl: 主席树肯定会火暴. 你可以试试写对顶堆合并? 我这有高效平衡树你要不要.\nhja: 我去写个对顶左偏树算了.\n几十分钟后.\nhja: 差点忘了怎么写了. WTF!!!? 怎么WA了?\nhja: 拍了一发发现真有毒. 这对顶堆能合并个ball啊.\nhja: 重新检查主席树. 发现psgtKth()这个玩意太慢了. 把几个变量搬到外面似乎就变快了诶. 交.\nhja: 怎么又wa了. WTWTFFF!!!!! 居然是r=md写成了r=md-1. 真是完蛋.\n然后就弃疗了.\n比赛结束前几十分钟.\nhja: yjq的1004写丑tle了. 毛毛你去用叉积换atan2.\nmhy: 吼啊吼啊.\n晚上hja点开代码, 发现mhy默默地加了个O2.\n然而\u0026hellip;\n还是tle.\n于是今日输出.\nzhx=0, mhy=1, yjq=2, hja=5.\nzhx太强辣. 于是最后rank13. 听说大家都是几十个人开黑啊. 666.\n然后晚上从yjq那里听说了一些大新闻.\n上海的王队长, 比laekov高到不知道哪里去了. orz.\n恭喜啦2333.\n已经从被虐变成祝贺了. 233333.\n说好的科目三呢qaq.\n所以我还是太年轻啦.\n","permalink":"/diary/282c65/","summary":"玄妙的一天.\n第一次正经参加MU.\n上午睡啊睡. 然后雨好大还忘了家里有吃的, 跑出去湿身淋得焦湿.\n于是就错过了抢水题fb的机会\u0026gt;_\u0026lt;.\nyjq: 03比较好写啊.\nhja: 我来.\n几分钟后.\nhja: 卧槽wa了. 卧槽看错题了.\nyjq: 辣鸡hja滚一边去.\nhja: TAT我去搞辣鸡dp题1011.\n几分钟后.\nhja: 过掉了1011. 这个1012看上去很清真啊. 不就是容斥一下嘛. 刚才浪费的树状数组代码也可以用上辣.\n几分钟后.\nhja: 过掉了1012. 这个1005似乎是个回文串的题? 作为讲字符串的老师尊严何在? 撸!\n十几分钟后.\nhja: 过掉了1005. interesting. 然而被抢走了fb. 这个1002的数据范围怎么那么小? 很像是暴力嘛.\nmhy: 资瓷啊. 搞暴力啊.\n十几分钟后.\nhja: 果然暴力走next树就艹掉了这题.\nhja: 这个1008很清真啊. 也就是一个dfs序+主席树+dfs乱搞? 你们有谁要接这个锅啊?\nyjq: 艹了半天1010这题有毒.\nlxl: 别用主席树. 我这有高效平衡树.\n十几分钟后.\nhja: 还没人接锅? 那我自己背好了.\n几十分钟后.\nhja: 多年不写ds手生了. wtf? 居然tle了?\nlxl: 主席树肯定会火暴. 你可以试试写对顶堆合并? 我这有高效平衡树你要不要.\nhja: 我去写个对顶左偏树算了.\n几十分钟后.\nhja: 差点忘了怎么写了. WTF!","title":"20160802"},{"content":"和瑞触一起在广州参加了中国历史上第二场Ingress MD.\n早上队友懒床ovo. 在酒店吃早餐的时候看到了UFC.\n然后就坐地铁先去广州tower. 出站发现满街都是agents. 据说广州塔有地方见鬼了不过我们机智地飘过去了. 幸好没有到要用铁锅的地步ovo.\n然后一路向北一直到天河体育场. 图书馆和体育场两个mission走得都有点远差评.\n然后去做西边. 博物馆的po过马路好烦. 公园里爬山又爬了半天. 一律差评.\n然后吃了个麦当劳. 喝了杯冰汽水.\n然后去签退点北边补最后几个mission.\n然后去签退. 好热闹. 然而人都不熟啊. 然后也没有收到几张卡. sad. 我还是太naive了.\n往回的路上就下雨了.\n本来打算去补3个mission的. 然而走出珠江新城地铁站的时候就发现风力堪比台风啊. 伞直接被吹翻. 玩不动啊只好折回来. 鞋子湿完了sad.\n在回酒店的路上开始痉挛. madan.\n晚上出去吃饭的时候发现自己养成了边走路边瞟路人手机屏幕的习惯.\n所以我还是太年轻了.\n","permalink":"/diary/6a6cb2/","summary":"和瑞触一起在广州参加了中国历史上第二场Ingress MD.\n早上队友懒床ovo. 在酒店吃早餐的时候看到了UFC.\n然后就坐地铁先去广州tower. 出站发现满街都是agents. 据说广州塔有地方见鬼了不过我们机智地飘过去了. 幸好没有到要用铁锅的地步ovo.\n然后一路向北一直到天河体育场. 图书馆和体育场两个mission走得都有点远差评.\n然后去做西边. 博物馆的po过马路好烦. 公园里爬山又爬了半天. 一律差评.\n然后吃了个麦当劳. 喝了杯冰汽水.\n然后去签退点北边补最后几个mission.\n然后去签退. 好热闹. 然而人都不熟啊. 然后也没有收到几张卡. sad. 我还是太naive了.\n往回的路上就下雨了.\n本来打算去补3个mission的. 然而走出珠江新城地铁站的时候就发现风力堪比台风啊. 伞直接被吹翻. 玩不动啊只好折回来. 鞋子湿完了sad.\n在回酒店的路上开始痉挛. madan.\n晚上出去吃饭的时候发现自己养成了边走路边瞟路人手机屏幕的习惯.\n所以我还是太年轻了.","title":"20160730"},{"content":"早上起了个大早去机场. 然后拿到了飞机上的最后一个座位ovo.\n于是就在大雨中离开了帝都, 来到了晴朗的贵阳.\n原来的计划是去贵阳北站坐高铁去铜仁南再去铜仁.\n然而下飞机发现只有晚上8点的高铁了. 很生气.\n然后决定在机场咸鱼半晚上, 在火车站咸鱼半晚上.\n然后在机场吃了个贵到坑的饭.\n然后走之前抖了个机灵, 看了一下铜仁南的地图. 坐车去县城要一个半小时? Excuse me?\nsb的我把地图看错了. 于是决定在贵阳市咸鱼一晚上.\n然后就去开了个火车站附近的酒店. 坐出租坐了老半天, 花掉了五十大洋.\n然后咸鱼下来开始研究明天怎么玩. 发现可以坐飞机去铜仁凤凰机场啊woc.\n早知道就住机场附近了.\n然而市区也挺好玩的.\n酒店居然是智能(电子化)的. 花了一刻钟才搞明白如何关上窗帘QAQ.\n晚上出去浪了一会. 然而一个人在外面浪还是不方便ovo. 尤其是背了一个巨大的包的时候.\n早知道就不背包出去了.\n这个包没有发挥任何用处.\n街上似乎有不少穿着校服的妹子ovo. 不是放暑假了么.\n奇奇怪怪的.\n所以我还是太naive啦.\n","permalink":"/diary/e9614e/","summary":"早上起了个大早去机场. 然后拿到了飞机上的最后一个座位ovo.\n于是就在大雨中离开了帝都, 来到了晴朗的贵阳.\n原来的计划是去贵阳北站坐高铁去铜仁南再去铜仁.\n然而下飞机发现只有晚上8点的高铁了. 很生气.\n然后决定在机场咸鱼半晚上, 在火车站咸鱼半晚上.\n然后在机场吃了个贵到坑的饭.\n然后走之前抖了个机灵, 看了一下铜仁南的地图. 坐车去县城要一个半小时? Excuse me?\nsb的我把地图看错了. 于是决定在贵阳市咸鱼一晚上.\n然后就去开了个火车站附近的酒店. 坐出租坐了老半天, 花掉了五十大洋.\n然后咸鱼下来开始研究明天怎么玩. 发现可以坐飞机去铜仁凤凰机场啊woc.\n早知道就住机场附近了.\n然而市区也挺好玩的.\n酒店居然是智能(电子化)的. 花了一刻钟才搞明白如何关上窗帘QAQ.\n晚上出去浪了一会. 然而一个人在外面浪还是不方便ovo. 尤其是背了一个巨大的包的时候.\n早知道就不背包出去了.\n这个包没有发挥任何用处.\n街上似乎有不少穿着校服的妹子ovo. 不是放暑假了么.\n奇奇怪怪的.\n所以我还是太naive啦.","title":"20160720"},{"content":"终于把课都讲完了happy.\n今天在高端班讲字符串, 然而依然花了一个上午才讲完kmp. 感觉讲字符串让同学们很难理解啊qaq.\n以及讲课会让嗓子冒烟.\n一定是我的讲课水平太弱了.\n昨天晚上都要睡觉了才接到任务出今天晚上的考试题. 然后熬到快十二点. 今天早上起来整个人感觉要废了.\n于是难度完全没有把握好. 出的题乱七八糟七八糟八糟糟.\n还是拿昨天的最后一题防ak.\n感觉我会炸.\n然而现在看成绩表似乎没有爆炸.\n似乎到处都在下暴雨. 连北京都看海了. sad.\n感觉这回出去玩要gg.\n然后今天收到录取通知了(不是录取通知书).\n所以我真的是太弱了.\n","permalink":"/diary/3563ba/","summary":"终于把课都讲完了happy.\n今天在高端班讲字符串, 然而依然花了一个上午才讲完kmp. 感觉讲字符串让同学们很难理解啊qaq.\n以及讲课会让嗓子冒烟.\n一定是我的讲课水平太弱了.\n昨天晚上都要睡觉了才接到任务出今天晚上的考试题. 然后熬到快十二点. 今天早上起来整个人感觉要废了.\n于是难度完全没有把握好. 出的题乱七八糟七八糟八糟糟.\n还是拿昨天的最后一题防ak.\n感觉我会炸.\n然而现在看成绩表似乎没有爆炸.\n似乎到处都在下暴雨. 连北京都看海了. sad.\n感觉这回出去玩要gg.\n然后今天收到录取通知了(不是录取通知书).\n所以我真的是太弱了.","title":"20160719"},{"content":"来到了帝都. happy.\n中午坐787过来的. 新飞机就是高端. 窗户好大啊ovo 然后还是高档的电子变色窗户. 高空要拉遮阳板的时候它是电控变成深色的orz.\n第一次正经坐first class. 比较爽. 然后随手发了个空间假装我是土豪.\n北京好堵好堵好堵. 遇到了来自成都金堂的出租车师傅\u0026gt;_\u0026lt;.\nzhx居然留了个洗剪吹的发型. 我被惊呆了.\n这边学员人好多啊ovo.\nmhy好神啊.\n所以我还是太弱了.\nHistorical Comments ArtemisLiu at 2016-07-18T01:09:28 哈哈哈哈我看到钟神也惊呆了，变帅了有木有！\n","permalink":"/diary/5f5007/","summary":"来到了帝都. happy.\n中午坐787过来的. 新飞机就是高端. 窗户好大啊ovo 然后还是高档的电子变色窗户. 高空要拉遮阳板的时候它是电控变成深色的orz.\n第一次正经坐first class. 比较爽. 然后随手发了个空间假装我是土豪.\n北京好堵好堵好堵. 遇到了来自成都金堂的出租车师傅\u0026gt;_\u0026lt;.\nzhx居然留了个洗剪吹的发型. 我被惊呆了.\n这边学员人好多啊ovo.\nmhy好神啊.\n所以我还是太弱了.\nHistorical Comments ArtemisLiu at 2016-07-18T01:09:28 哈哈哈哈我看到钟神也惊呆了，变帅了有木有！","title":"20160716"},{"content":"最近两天在cdqz讲课.\n感觉我还是弱啊.\n第一天的时候准备课件没想清楚, 把讲算法的部分当成题了. 然后讲得飞快. 我真是没救了.\n第二天出题把数据出错了qaq. 然后还出了个别人都做过的原题. 只好换了个高数题来考. 我真是没救了*2.\n然后还要研究如何用电脑录像ovo.\n然后开心地发现七中多了一个年轻的ingresser. 然而是res. 炸res最好玩啦.\n惊讶地发现我的暑假快要只剩不到一个月了. 然而我还没被任何大学录取啊摔.\n嗯, 我还是太年轻了.\n","permalink":"/diary/1bb2d4/","summary":"最近两天在cdqz讲课.\n感觉我还是弱啊.\n第一天的时候准备课件没想清楚, 把讲算法的部分当成题了. 然后讲得飞快. 我真是没救了.\n第二天出题把数据出错了qaq. 然后还出了个别人都做过的原题. 只好换了个高数题来考. 我真是没救了*2.\n然后还要研究如何用电脑录像ovo.\n然后开心地发现七中多了一个年轻的ingresser. 然而是res. 炸res最好玩啦.\n惊讶地发现我的暑假快要只剩不到一个月了. 然而我还没被任何大学录取啊摔.\n嗯, 我还是太年轻了.","title":"20160713"},{"content":"唔白天去扎针了. (明明叫造菊花嘛)\n然而根本不懂规矩啊尴尬.jpg. 以及选了po少还难走的棕北. 真是自作死不可活. 下午还喝了瓶冻怡宝导致想吐qaq.\n中午去找mhy蹭饭. 然后就有了迷之饭局. 讲课什么的, 感觉好厉害呢. 然而我真能讲得好吗? 心中充满了怀疑qaq.\n晚上坐在奶奶家用手机流量去群上 \u0026ldquo;答疑\u0026rdquo;. 同学们都好强啊. 感觉我并不需要讲什么啊. 锋芒毕露的年轻人. 莫名想起了自己那时的样子呢. 年轻真好.\n然而为什么会有这么多人听课啊. 我现在开始觉得工资太少了. sad.\n所以我依然太年轻了.\nHistorical Comments ArtemisLiu at 2016-07-10T23:47:53 何姥爷拿到工资请饭ovo\n","permalink":"/diary/d6f4ef/","summary":"唔白天去扎针了. (明明叫造菊花嘛)\n然而根本不懂规矩啊尴尬.jpg. 以及选了po少还难走的棕北. 真是自作死不可活. 下午还喝了瓶冻怡宝导致想吐qaq.\n中午去找mhy蹭饭. 然后就有了迷之饭局. 讲课什么的, 感觉好厉害呢. 然而我真能讲得好吗? 心中充满了怀疑qaq.\n晚上坐在奶奶家用手机流量去群上 \u0026ldquo;答疑\u0026rdquo;. 同学们都好强啊. 感觉我并不需要讲什么啊. 锋芒毕露的年轻人. 莫名想起了自己那时的样子呢. 年轻真好.\n然而为什么会有这么多人听课啊. 我现在开始觉得工资太少了. sad.\n所以我依然太年轻了.\nHistorical Comments ArtemisLiu at 2016-07-10T23:47:53 何姥爷拿到工资请饭ovo","title":"20160709"},{"content":"考过了科目二, 浑身舒畅.\n考试车上坡的时候比平时那个cng车动力充足得多. Duang地一下就爬上坡了.\n幸好我跑进去得飞快占到了前面的位置进场就考. 过了一会车管所的破网络就爆炸了. 同去考科目一的小伙伴都被网给水掉了. 什么破玩意.\n昨天还在雨里模拟考试2333.\n然而最近几天身上全是湿的. 这天气太见鬼了.\n突然变成咸鱼了, 虽然没几天ovo.\n所以我还是太年轻了.\n","permalink":"/diary/8b3b8f/","summary":"考过了科目二, 浑身舒畅.\n考试车上坡的时候比平时那个cng车动力充足得多. Duang地一下就爬上坡了.\n幸好我跑进去得飞快占到了前面的位置进场就考. 过了一会车管所的破网络就爆炸了. 同去考科目一的小伙伴都被网给水掉了. 什么破玩意.\n昨天还在雨里模拟考试2333.\n然而最近几天身上全是湿的. 这天气太见鬼了.\n突然变成咸鱼了, 虽然没几天ovo.\n所以我还是太年轻了.","title":"20160707"},{"content":"被催更了. 说好的心情更呢.\n最近真是没啥好心情ovo.\n凭什么科目一和科目二要隔10天啊? 交管部门脑子进屎了吧. 还有科目三要30天又是什么鬼. 开车去绵阳的计划泡汤了. very sad.\n还得隔几天去场地跑一天. 要热死啊. 不准踩油门的日子还有多久啊sad.\n不过昨天看到了付和付的妹妹. 说好的青梅竹马怎么就变妹妹了. 搞不懂.\n一代车神付, 练车第二天就开始倒库了. 佩服.\n总算是定下来下周四考科二了. 据说考前集训特别恐怖.\n然后因为背了在七中和北京讲课的锅, 所以要备课. 刷了那么多年的题然而到想找道题来用的时候就发现啥都想不起来了. 要死啊.\n完全没讲过课呢. 听mhy众说听课的人水平低所以要讲得慢. 然而一上午才讲完那么几张slides是不是太过分了? 然后我又总是担心准备的东西太少, 讲完了就没得讲了. 效率爆炸.\n然后出题也完全把握不到难度嘛. 有的题感觉出得有点bt有的题感觉水到暴. 真是没救了.\n反正就是在太难和太水之间纠结ing.\n就酱. 心累.\n所以我还是太年轻了.\n","permalink":"/diary/72000b/","summary":"被催更了. 说好的心情更呢.\n最近真是没啥好心情ovo.\n凭什么科目一和科目二要隔10天啊? 交管部门脑子进屎了吧. 还有科目三要30天又是什么鬼. 开车去绵阳的计划泡汤了. very sad.\n还得隔几天去场地跑一天. 要热死啊. 不准踩油门的日子还有多久啊sad.\n不过昨天看到了付和付的妹妹. 说好的青梅竹马怎么就变妹妹了. 搞不懂.\n一代车神付, 练车第二天就开始倒库了. 佩服.\n总算是定下来下周四考科二了. 据说考前集训特别恐怖.\n然后因为背了在七中和北京讲课的锅, 所以要备课. 刷了那么多年的题然而到想找道题来用的时候就发现啥都想不起来了. 要死啊.\n完全没讲过课呢. 听mhy众说听课的人水平低所以要讲得慢. 然而一上午才讲完那么几张slides是不是太过分了? 然后我又总是担心准备的东西太少, 讲完了就没得讲了. 效率爆炸.\n然后出题也完全把握不到难度嘛. 有的题感觉出得有点bt有的题感觉水到暴. 真是没救了.\n反正就是在太难和太水之间纠结ing.\n就酱. 心累.\n所以我还是太年轻了.","title":"20160702"},{"content":"高考出成绩.\n感冒了. 颓废了一整天.\n然后就上一本线了.\n不考虑语文的话和我估分完全一样.\n然而语文居然比估分高了4分.\n数学和中考一个分.\n英语是高三一年唯一一次上140.\n物理估高了. 最后一题最后一问看来是被扣完了. madannnnn.\n化学差不多. 错一个选择题太划不来了.\n生物差不多.\n今年题好简单啊. 排名太低了. 丢脸.\n唉. 看到好多人. 大家. 好运.\n所以我还是太年轻了.\n","permalink":"/diary/851f34/","summary":"高考出成绩.\n感冒了. 颓废了一整天.\n然后就上一本线了.\n不考虑语文的话和我估分完全一样.\n然而语文居然比估分高了4分.\n数学和中考一个分.\n英语是高三一年唯一一次上140.\n物理估高了. 最后一题最后一问看来是被扣完了. madannnnn.\n化学差不多. 错一个选择题太划不来了.\n生物差不多.\n今年题好简单啊. 排名太低了. 丢脸.\n唉. 看到好多人. 大家. 好运.\n所以我还是太年轻了.","title":"20160622"},{"content":"maya居然会被催更.\n昨天去outlets的时候发现居然有po. 然而都是绿的\u0026gt;_\u0026lt;. 现在更喜欢蓝po.\n今天去毛家湾考科目一居然又有po, 然而不是绿的就是灰的. Unhappy.\n话说lv8了感觉就是不一样. 炮姐你才lv5太弱了. (大雾)\n然后就随随便便地考过了科一.\n还要等10多天啊. Sad.\n然后下午倒个车下车的时候就发生了惨剧. 手机飞出来砸到了石头上, 然后屏幕就碎了sad.\n明天要过一天没有手机的生活了?\n晚上补完了_电磁炮_第一季. 炮姐好帅!\n所以我还是太年轻了啊.\n","permalink":"/diary/2a78a2/","summary":"maya居然会被催更.\n昨天去outlets的时候发现居然有po. 然而都是绿的\u0026gt;_\u0026lt;. 现在更喜欢蓝po.\n今天去毛家湾考科目一居然又有po, 然而不是绿的就是灰的. Unhappy.\n话说lv8了感觉就是不一样. 炮姐你才lv5太弱了. (大雾)\n然后就随随便便地考过了科一.\n还要等10多天啊. Sad.\n然后下午倒个车下车的时候就发生了惨剧. 手机飞出来砸到了石头上, 然后屏幕就碎了sad.\n明天要过一天没有手机的生活了?\n晚上补完了_电磁炮_第一季. 炮姐好帅!\n所以我还是太年轻了啊.","title":"20160620"},{"content":"连续6天去了驾校. 明天不去了.\n终于学完了科目二的所有内容. 然而离科目二考试至少还有12天. very sad.\n听说mhy准备让老爸教开车? 感觉并不科学. 毕竟考试和实际驾驶有区别诶.\n科目二的五个项目的一点心得.\n直角弯. 在直道要靠右一点. 打死可以早不能晚. 早了还能修. 最好还是一步到位.\n坡道定点和起步. 在直道上要把横向距离先比好. 然后上坡基本可以不踩离合. 停车的时候先踩完离合滑一下再踩刹车(反正速度是连续函数). 这样以免脚乱. 起步的时候松离合要连续且慢. 靠感觉车身震动比较靠谱. 以及一定要打起步灯. 上去之后左打四分之一圈盘子迅回正来关灯. 不要用手去扳, 不然显得好菜\u0026gt;_\u0026lt;. btw如果天气太热没有空调, 可以趁教练不在, 离合踩到底不踩刹车强行冲坡吹风.\ns弯. 慢, 靠外侧行进, 基本不需要打死. 最后一个左弯要靠右.\n侧方停车. 视野比较好, 直接到位打死打死打死就搞定了. 可以小修.\n倒库. 点位什么的并不是很靠谱. 每次座位的高矮角度都会影响. sad. 所以还是要早一点打死然后修. 修的时候要培养一点感觉. 然后今天下午一直在车上倒库差点被烤熟\u0026gt;_\u0026lt;.\n下周一考科目一啦. ovoovovoovo.\n上午lmy发来了奇怪的apk. 然后机智的我就没有开. 果然是个恶意程序. 想起了我初一的时候做的那个恶意软件. 其实思路都一样. 这种传播途径嘛, 水平和我一样菜. 如果如lmy所说这是一个毕业设计, 那我想重点是发起者想研究人们为什么在受骗的情况下, 还会把这种东西继续散布给其他人. 迷之低骗233333.\n晚上似乎吃西瓜吃多了肚子好难受QwQ.\n化学笔记的字被吐槽啦. 其实我自己写完笔记之后就再也没有看过, 也没有打算过看它. 真是对不起嘛.\n骗钱大会那边还是没有给我回复啊. 突然意识到\u0026quot;清华学生\u0026quot;这个身份还是有点含金量的. 对不起我太弱了.\nHistorical Comments ArtemisLiu at 2016-06-20T13:18:31 骗钱大会是啥\n","permalink":"/diary/328630/","summary":"连续6天去了驾校. 明天不去了.\n终于学完了科目二的所有内容. 然而离科目二考试至少还有12天. very sad.\n听说mhy准备让老爸教开车? 感觉并不科学. 毕竟考试和实际驾驶有区别诶.\n科目二的五个项目的一点心得.\n直角弯. 在直道要靠右一点. 打死可以早不能晚. 早了还能修. 最好还是一步到位.\n坡道定点和起步. 在直道上要把横向距离先比好. 然后上坡基本可以不踩离合. 停车的时候先踩完离合滑一下再踩刹车(反正速度是连续函数). 这样以免脚乱. 起步的时候松离合要连续且慢. 靠感觉车身震动比较靠谱. 以及一定要打起步灯. 上去之后左打四分之一圈盘子迅回正来关灯. 不要用手去扳, 不然显得好菜\u0026gt;_\u0026lt;. btw如果天气太热没有空调, 可以趁教练不在, 离合踩到底不踩刹车强行冲坡吹风.\ns弯. 慢, 靠外侧行进, 基本不需要打死. 最后一个左弯要靠右.\n侧方停车. 视野比较好, 直接到位打死打死打死就搞定了. 可以小修.\n倒库. 点位什么的并不是很靠谱. 每次座位的高矮角度都会影响. sad. 所以还是要早一点打死然后修. 修的时候要培养一点感觉. 然后今天下午一直在车上倒库差点被烤熟\u0026gt;_\u0026lt;.\n下周一考科目一啦. ovoovovoovo.\n上午lmy发来了奇怪的apk. 然后机智的我就没有开. 果然是个恶意程序. 想起了我初一的时候做的那个恶意软件. 其实思路都一样. 这种传播途径嘛, 水平和我一样菜. 如果如lmy所说这是一个毕业设计, 那我想重点是发起者想研究人们为什么在受骗的情况下, 还会把这种东西继续散布给其他人. 迷之低骗233333.\n晚上似乎吃西瓜吃多了肚子好难受QwQ.\n化学笔记的字被吐槽啦. 其实我自己写完笔记之后就再也没有看过, 也没有打算过看它. 真是对不起嘛.\n骗钱大会那边还是没有给我回复啊. 突然意识到\u0026quot;清华学生\u0026quot;这个身份还是有点含金量的. 对不起我太弱了.\nHistorical Comments ArtemisLiu at 2016-06-20T13:18:31 骗钱大会是啥","title":"20160617"},{"content":"laekov努力成为老司机第二天.\n坡道起步-\u0026gt;熄火-\u0026gt;打火-\u0026gt;熄火-\u0026gt;打火-\u0026gt;熄火. 无限循环中.\n其实就是控制离合. 发动机只要稍微吃阻力吃猛一点就要gg. 所以必需一点一点慢慢来.\n感觉科目二要gg的样子.\n左脚和右脚千万不能同时动否则gg.\n一定, 要, 记得, 打, 起, 步, 灯!!!!!!!!!!!!!!!!!!!\n还有侧向停车和倒库没学qwq. 老jeta真是太鬼畜了.\n趁教练不在偷偷挂2档开到10码爽了一下qwq.\n骑自行车去学开车的路上花了几乎一半的时间在, 修, 车. 郁闷.\n就酱.\nHistorical Comments ArtemisLiu at 2016-06-14T12:03:10 能在一个月内拿到驾照么\n","permalink":"/diary/9548c2/","summary":"laekov努力成为老司机第二天.\n坡道起步-\u0026gt;熄火-\u0026gt;打火-\u0026gt;熄火-\u0026gt;打火-\u0026gt;熄火. 无限循环中.\n其实就是控制离合. 发动机只要稍微吃阻力吃猛一点就要gg. 所以必需一点一点慢慢来.\n感觉科目二要gg的样子.\n左脚和右脚千万不能同时动否则gg.\n一定, 要, 记得, 打, 起, 步, 灯!!!!!!!!!!!!!!!!!!!\n还有侧向停车和倒库没学qwq. 老jeta真是太鬼畜了.\n趁教练不在偷偷挂2档开到10码爽了一下qwq.\n骑自行车去学开车的路上花了几乎一半的时间在, 修, 车. 郁闷.\n就酱.\nHistorical Comments ArtemisLiu at 2016-06-14T12:03:10 能在一个月内拿到驾照么","title":"20160613"},{"content":"laekov在努力地成为一个老司机.\n说人话就是去驾校day1.\n早上说好的去体检呢. 然后就233了.\n然后就直接开始开啊233.\n刚上去有点方. 脚和手没有配合好ovo. 然而教练对我熟练的松手刹打火挂档技术感到吃惊.\n原来驾校就是踩着半离合在小路上3码转圈. qwqwqwq.\n同车的居然是个大叔, 大叔的女儿今年也是高三毕业ovovovovovovo.\n还有一对川大来的cp. 女生高三暑假就成老司机了, 男生还没过科目二. 2333333.\n方向什么的. 感觉和游戏差距有点大.\n科目一模考还是要背一背啊ovo. 回到了高三的美好时光.\n晚上颓死了.\n我还是太年轻了.\nHistorical Comments yeguanghao at 2016-06-12T20:43:42 羡慕你们这些毕业就满了18的人\u0026hellip; 我开始对我的高三生活充满担忧\n","permalink":"/diary/f9bcca/","summary":"laekov在努力地成为一个老司机.\n说人话就是去驾校day1.\n早上说好的去体检呢. 然后就233了.\n然后就直接开始开啊233.\n刚上去有点方. 脚和手没有配合好ovo. 然而教练对我熟练的松手刹打火挂档技术感到吃惊.\n原来驾校就是踩着半离合在小路上3码转圈. qwqwqwq.\n同车的居然是个大叔, 大叔的女儿今年也是高三毕业ovovovovovovo.\n还有一对川大来的cp. 女生高三暑假就成老司机了, 男生还没过科目二. 2333333.\n方向什么的. 感觉和游戏差距有点大.\n科目一模考还是要背一背啊ovo. 回到了高三的美好时光.\n晚上颓死了.\n我还是太年轻了.\nHistorical Comments yeguanghao at 2016-06-12T20:43:42 羡慕你们这些毕业就满了18的人\u0026hellip; 我开始对我的高三生活充满担忧","title":"20160612"},{"content":"今天挺开心ovo.\n上午去了太升南路, 搞了个包括铃铛在内全身都很响的二手自行车(怀疑是贼车).\n管它呢就上路了. 有自行车跑得就是快啊happy.\n去天府广场玩了一圈. 然而警察叔叔会把我从街边赶走. 画个图都不让啊qwq. 所以只好去科技馆停车走过去. 然后炸了几个po. 然而满广场条子都不敢说话. 更不敢说\u0026quot;我要炸了这个po\u0026quot;. 估计这样就直接吃防暴枪枪子了.\n然后骑回林荫街. 腿要散架了.\n然而上楼才发现钦妹已经跑掉了unhappy.\n中午去连了个政正菊花.\n估计下午已经被炸了.\n有车跑得就是快啊.\n然后和mhy约在scu里见. 然而一不小心捏刹车捏劲狠了, 前刹就tm脱了. (这还不是夹式前刹. 不知道是多少年前的车了). 诚惶诚恐地骑了一会终于找到了修车的地方. 修车师傅也是暴力直接拿鎯头砸开接上再砸回去. 要是我的话就肯定是拿钳子夹半天qwq.\n然而scu里在修. 到处都是工地差评.\n然后转了半天终于找到了mhy.\n然而scu拼图真是**的烦啊. 各种需要飘移. 差点就跳荷塘了.\n跑到第6个任务的时候悲伤地发现出不了小北门. mdzz绕了半天终于从十二中那边绕过去了.\n然后回来发现tm飘雨了? madan.\n于是干脆跑去百联看电影得了. scu拼图暑假重新找个时间接着做qwq.\n然后去看了x战警. 一如既往地神奇.\n然后吃了饭. 没喝酒ovo.\n然后又骑车回家.\n腿要断了.\n晚上似乎还有一堆锅要背(比如写离散剧).\n所以我还是太年轻啦.\nHistorical Comments yeguanghao at 2016-06-10T23:06:14 拼图任务跑断腿是常态2333\n","permalink":"/diary/07b697/","summary":"今天挺开心ovo.\n上午去了太升南路, 搞了个包括铃铛在内全身都很响的二手自行车(怀疑是贼车).\n管它呢就上路了. 有自行车跑得就是快啊happy.\n去天府广场玩了一圈. 然而警察叔叔会把我从街边赶走. 画个图都不让啊qwq. 所以只好去科技馆停车走过去. 然后炸了几个po. 然而满广场条子都不敢说话. 更不敢说\u0026quot;我要炸了这个po\u0026quot;. 估计这样就直接吃防暴枪枪子了.\n然后骑回林荫街. 腿要散架了.\n然而上楼才发现钦妹已经跑掉了unhappy.\n中午去连了个政正菊花.\n估计下午已经被炸了.\n有车跑得就是快啊.\n然后和mhy约在scu里见. 然而一不小心捏刹车捏劲狠了, 前刹就tm脱了. (这还不是夹式前刹. 不知道是多少年前的车了). 诚惶诚恐地骑了一会终于找到了修车的地方. 修车师傅也是暴力直接拿鎯头砸开接上再砸回去. 要是我的话就肯定是拿钳子夹半天qwq.\n然而scu里在修. 到处都是工地差评.\n然后转了半天终于找到了mhy.\n然而scu拼图真是**的烦啊. 各种需要飘移. 差点就跳荷塘了.\n跑到第6个任务的时候悲伤地发现出不了小北门. mdzz绕了半天终于从十二中那边绕过去了.\n然后回来发现tm飘雨了? madan.\n于是干脆跑去百联看电影得了. scu拼图暑假重新找个时间接着做qwq.\n然后去看了x战警. 一如既往地神奇.\n然后吃了饭. 没喝酒ovo.\n然后又骑车回家.\n腿要断了.\n晚上似乎还有一堆锅要背(比如写离散剧).\n所以我还是太年轻啦.\nHistorical Comments yeguanghao at 2016-06-10T23:06:14 拼图任务跑断腿是常态2333","title":"20160610"},{"content":"高考day2.\n终.\n于.\n考.\n完.\n了.\n考英语的最后, 像noi的时候一样, 盯着挂钟看着最后两分钟溜走.\n然后就结束了.\n早上mhy来送考. 感动.\n早上理综只花了2个小时就做完了. 后来下午英语开考前发呆的时候发现物理最后一题做错了.\n中午懒得连po都没摸完.\n下午英语. 作文是原来四川卷语文的节奏啊. 其它无感.\n下来就和家长走了.\n路上娘亲给我看数学的答案. 感觉, 做答案的人是zz吧? 晚上又找答案, 结果第9道选择题硬是看到了2种不同的答案, 还和我的都不一样.\n晚上回家整理书. 高中三年的卷子和书摞起来比我都高.\n然后出去烧掉了过去. 其实这件事已经憋了三年了呢ovo.\n发现一个严重的问题叫我不知道玩什么了ovo.\n所以我还是太年轻啦.\n以后不会再每天写diary了.\nHistorical Comments yeguanghao at 2016-06-09T00:23:03 为什么没有diary了啊qwq 我以后彻底没有连续剧看了\nArtemisLiu at 2016-06-10T16:01:34 不能停更啊(๑′°︿°๑)\n","permalink":"/diary/7d76c9/","summary":"高考day2.\n终.\n于.\n考.\n完.\n了.\n考英语的最后, 像noi的时候一样, 盯着挂钟看着最后两分钟溜走.\n然后就结束了.\n早上mhy来送考. 感动.\n早上理综只花了2个小时就做完了. 后来下午英语开考前发呆的时候发现物理最后一题做错了.\n中午懒得连po都没摸完.\n下午英语. 作文是原来四川卷语文的节奏啊. 其它无感.\n下来就和家长走了.\n路上娘亲给我看数学的答案. 感觉, 做答案的人是zz吧? 晚上又找答案, 结果第9道选择题硬是看到了2种不同的答案, 还和我的都不一样.\n晚上回家整理书. 高中三年的卷子和书摞起来比我都高.\n然后出去烧掉了过去. 其实这件事已经憋了三年了呢ovo.\n发现一个严重的问题叫我不知道玩什么了ovo.\n所以我还是太年轻啦.\n以后不会再每天写diary了.\nHistorical Comments yeguanghao at 2016-06-09T00:23:03 为什么没有diary了啊qwq 我以后彻底没有连续剧看了\nArtemisLiu at 2016-06-10T16:01:34 不能停更啊(๑′°︿°๑)","title":"20160608 ncee2016 day2"},{"content":"离高考还有-1天.\n诶诶计时器忘return啦233.\n其实昨天晚上并没有完全在颓啊. 睡觉之前看了一眼语文默写. 然后今天就考到了.\n但是我还是不知道窈窕之诗是上句还是下句还是背错了. 于是写了2遍.\n感觉走进考场的时候就像是走了很多遍的程序一样.\n不是考生的人似乎多数觉得作文不好写然而我觉得还行啊.\n就是写到最后发现批驳反面那一段已经在前面写过了. 于是只好临时改了一个分论点.\n现代文做的小说. 然而题都答完了才搞明白主题.\n然后就出去了.\n开心地巧遇岚妹儿orz. 挨捶的感觉还是三年前的原味.\n中午去奇怪的地方吃饭休息. 正好wifi定位在一个po上. 然而手残插了个盾. 然后再插了一个multihack. 于是五分钟起来hack一次233. 最后机智的我通过数key的数量确定了不能再hack了.\n下午考数学好想上厕所然而我告诉自己一定是下丘脑的小把戏于是没去.\n做得挺顺的. 除了解几最后多算了几遍才算出一个看似正确的答案. 函数题参变分离试了一下发现不行.\n今年数学有点简单啊连我都能做完. yzy肯定要不开心了.\n然后检查的时候发现做错了算法题ovovovo. 要是没检查真错了我就神作了.\n然后就回家辣. 明天考理综\u0026gt;_\u0026lt;.\n所以我还是太年轻了.\n","permalink":"/diary/318b53/","summary":"离高考还有-1天.\n诶诶计时器忘return啦233.\n其实昨天晚上并没有完全在颓啊. 睡觉之前看了一眼语文默写. 然后今天就考到了.\n但是我还是不知道窈窕之诗是上句还是下句还是背错了. 于是写了2遍.\n感觉走进考场的时候就像是走了很多遍的程序一样.\n不是考生的人似乎多数觉得作文不好写然而我觉得还行啊.\n就是写到最后发现批驳反面那一段已经在前面写过了. 于是只好临时改了一个分论点.\n现代文做的小说. 然而题都答完了才搞明白主题.\n然后就出去了.\n开心地巧遇岚妹儿orz. 挨捶的感觉还是三年前的原味.\n中午去奇怪的地方吃饭休息. 正好wifi定位在一个po上. 然而手残插了个盾. 然后再插了一个multihack. 于是五分钟起来hack一次233. 最后机智的我通过数key的数量确定了不能再hack了.\n下午考数学好想上厕所然而我告诉自己一定是下丘脑的小把戏于是没去.\n做得挺顺的. 除了解几最后多算了几遍才算出一个看似正确的答案. 函数题参变分离试了一下发现不行.\n今年数学有点简单啊连我都能做完. yzy肯定要不开心了.\n然后检查的时候发现做错了算法题ovovovo. 要是没检查真错了我就神作了.\n然后就回家辣. 明天考理综\u0026gt;_\u0026lt;.\n所以我还是太年轻了.","title":"20160607 ncee2016 day1"},{"content":"离高考还有0天. (100天处心积虑地构造了这句话)\n还是按照搞oi的习惯给日子命名吧. 今天是day看考场.\n早上在家颓电竞.\n中午睡觉的时候感觉好紧张啊ovo. (我总是不在正确的时间紧张)\n下午到十二中发现时间还早. 打开手机发现有一堆po. happy. 顺手炸了一把蓝军的cf.\n感觉现在更喜欢炸cf. 暴力狂的laekov.\n然后进考场的时候才知道不能带手机. 于是把手机交给了一个不认识的阿姨. 以至于整个期间心都在抖. 幸好阿姨认识我妈ovo. 我真是zz.\n然而并没有\u0026quot;偶遇\u0026quot;唯一的初中同学. sad. 感觉三年了是不是长变了都要不认识了?\n坐在考场里听一个普通话不标准的校领导瞎扯了辣么久ovo. 都是看过和听过好多遍的东西了.\n晚上接着颓电竞. 顺手给自己和yzy报了noi的网络同步赛, 感觉自己萌萌哒. 啊喂是不是该复习一下? 似乎是.\n唉.\n我.\n还.\n是.\n太.\n年.\n轻.\n了.\n明天考完就可以找工作了happy.\nHistorical Comments ArtemisLiu at 2016-06-06T23:05:48 找到工作拿到工资请我吃饭ovo\n","permalink":"/diary/9ca3bc/","summary":"离高考还有0天. (100天处心积虑地构造了这句话)\n还是按照搞oi的习惯给日子命名吧. 今天是day看考场.\n早上在家颓电竞.\n中午睡觉的时候感觉好紧张啊ovo. (我总是不在正确的时间紧张)\n下午到十二中发现时间还早. 打开手机发现有一堆po. happy. 顺手炸了一把蓝军的cf.\n感觉现在更喜欢炸cf. 暴力狂的laekov.\n然后进考场的时候才知道不能带手机. 于是把手机交给了一个不认识的阿姨. 以至于整个期间心都在抖. 幸好阿姨认识我妈ovo. 我真是zz.\n然而并没有\u0026quot;偶遇\u0026quot;唯一的初中同学. sad. 感觉三年了是不是长变了都要不认识了?\n坐在考场里听一个普通话不标准的校领导瞎扯了辣么久ovo. 都是看过和听过好多遍的东西了.\n晚上接着颓电竞. 顺手给自己和yzy报了noi的网络同步赛, 感觉自己萌萌哒. 啊喂是不是该复习一下? 似乎是.\n唉.\n我.\n还.\n是.\n太.\n年.\n轻.\n了.\n明天考完就可以找工作了happy.\nHistorical Comments ArtemisLiu at 2016-06-06T23:05:48 找到工作拿到工资请我吃饭ovo","title":"20160606 ncee2016 day0"},{"content":"离高考还有1天.\n写下这行字的时候心情好复杂.\n大概是因为时间的大浪终于要把我冲走了吧.\n然而今天似乎任何和文化课有关的事都没干.\nnoi之前似乎也是差不多地颓ovo.\n上午出去摸了一下别人的po搞回来几个6炸. 然后在某鼎门口被善良的保安哥提醒\u0026quot;你要不要进去坐坐\u0026quot;. 然而ovovovoovo.\n下午好热. 于是躲在家打电竞. ed终于飞回文明区了. 搞了个高配viper开始刷res. 然而viper终究是viper, 不能当作vulture来用. sad.\n晚上想到了一个关于ingress的oi题. 感觉萌萌哒. 然而我的oi水平已经废了呢. sad.\n为啥lk的周更跳票了呢sad.\n所以明天就要看考场啦. excited.\n所以我还是太年轻啦.\n","permalink":"/diary/46e729/","summary":"离高考还有1天.\n写下这行字的时候心情好复杂.\n大概是因为时间的大浪终于要把我冲走了吧.\n然而今天似乎任何和文化课有关的事都没干.\nnoi之前似乎也是差不多地颓ovo.\n上午出去摸了一下别人的po搞回来几个6炸. 然后在某鼎门口被善良的保安哥提醒\u0026quot;你要不要进去坐坐\u0026quot;. 然而ovovovoovo.\n下午好热. 于是躲在家打电竞. ed终于飞回文明区了. 搞了个高配viper开始刷res. 然而viper终究是viper, 不能当作vulture来用. sad.\n晚上想到了一个关于ingress的oi题. 感觉萌萌哒. 然而我的oi水平已经废了呢. sad.\n为啥lk的周更跳票了呢sad.\n所以明天就要看考场啦. excited.\n所以我还是太年轻啦.","title":"20160605"},{"content":"Ps: 在思考ingress自动规划连边的时候顺便想到的一个题.\n题:\nIngress里要连多重来刷ap. 这是一种简化的情况.\n假设平面上有点(A), (B), (C_1, \\dots , C_n).\n其中(C_1 , \\dots , C_n)在直线(AB)同侧.\n要连一个多重就要选一些点( { C_{a_i} } ), 使得( \\Delta ABC_{a_1}, \\Delta ABC_{a_2}, \\dots \\Delta ABC_{a_m} ) 依次包含. 即( C_{a_i} )在( \\Delta ABC_{a_{i-1}} ) 内.\n然后每个(C_i)都有个权值( W_i ), 求所有方案中最大的权值和.\n另:\n把权值和最大改成权值积最大, 对( 998244353 )取模. 让一群人写高精去然后再随便把高精卡T掉哈哈哈哈哈哈哈.\n解法: (口糊的请打脸)\n大概是个dp题.\n把(C_i)按照离直线(AB)的距离排序即可保证拓补序. (其实这题我觉得有意思的地方就是这个了. 然而太简单)\n然后就是找平面上某个三角形里的最大(f)值. KD树搞之. (AFO太久的我已经不知道KD树是什么了. 似乎有人告诉过我KD树这么用保证不到时间复杂度.)\n印象中KD树常年被用来打脸和被打脸.\n也许有更方便的搞法? 然而我的数据结构实在太渣ovo.\n就酱.\n","permalink":"/random/258fa2/","summary":"Ps: 在思考ingress自动规划连边的时候顺便想到的一个题.\n题:\nIngress里要连多重来刷ap. 这是一种简化的情况.\n假设平面上有点(A), (B), (C_1, \\dots , C_n).\n其中(C_1 , \\dots , C_n)在直线(AB)同侧.\n要连一个多重就要选一些点( { C_{a_i} } ), 使得( \\Delta ABC_{a_1}, \\Delta ABC_{a_2}, \\dots \\Delta ABC_{a_m} ) 依次包含. 即( C_{a_i} )在( \\Delta ABC_{a_{i-1}} ) 内.\n然后每个(C_i)都有个权值( W_i ), 求所有方案中最大的权值和.\n另:\n把权值和最大改成权值积最大, 对( 998244353 )取模. 让一群人写高精去然后再随便把高精卡T掉哈哈哈哈哈哈哈.\n解法: (口糊的请打脸)\n大概是个dp题.\n把(C_i)按照离直线(AB)的距离排序即可保证拓补序. (其实这题我觉得有意思的地方就是这个了. 然而太简单)\n然后就是找平面上某个三角形里的最大(f)值. KD树搞之. (AFO太久的我已经不知道KD树是什么了. 似乎有人告诉过我KD树这么用保证不到时间复杂度.)\n印象中KD树常年被用来打脸和被打脸.\n也许有更方便的搞法? 然而我的数据结构实在太渣ovo.\n就酱.","title":"由Ingress想到的oi题0"},{"content":"离高考还有2天.\n在成都七中上课的最后一天了.\n水坝哥永远是话最多的.\n就结束了呢.\n高考就来了呢.\n听说明天钦妹儿众考thusc? gl. 祝荡气回肠的ak.\n中午回家路上炸了政正ovo. 莫名地攒了一把炸盾po的自信.\n下午太热在家玩电竞和ed. 两次掉进恒星引力圈ovo. 打算飞回文明区然而半路上网断了.\n晚上本来不是很想出去散步的.\n然而发现居然看不了intel了? 蓝军这nm是连了多少层?\n泸县, 绵阳, 重庆. 成都被包围了ovo.\nI am unhappy. I am going to zha po!\n于是就去神仙树炸po. 那边有一堆上了axa的po.\n炸第一处的盾花掉了上百个67xmp. mdzz.\n炸第二处盾花了10个左右的67ultra. mdzz. 然后, 问题来了. 为什么我炸了之后角能自动回血啊? 难道有人在充? madan!\n今天本来地图就卡成傻b了还有人和我充能?\n瞬间我会的不会的所有脏话都给骂出来了.\n于是在我花完了所有7炸6炸5炸和大部分4炸的情况下终于把这给端了.\nmdzzmdzzmdzz.\n我真是太年轻了.\nHistorical Comments yeguanghao at 2016-06-05T02:12:51 Orz 为什么不先破盾再炸啊\nlaekov at 2016-06-05T08:29:13 因为我naive啊ovo 拿5炸直接炸掉绿盾, 于是莫名自信\n","permalink":"/diary/61d29d/","summary":"离高考还有2天.\n在成都七中上课的最后一天了.\n水坝哥永远是话最多的.\n就结束了呢.\n高考就来了呢.\n听说明天钦妹儿众考thusc? gl. 祝荡气回肠的ak.\n中午回家路上炸了政正ovo. 莫名地攒了一把炸盾po的自信.\n下午太热在家玩电竞和ed. 两次掉进恒星引力圈ovo. 打算飞回文明区然而半路上网断了.\n晚上本来不是很想出去散步的.\n然而发现居然看不了intel了? 蓝军这nm是连了多少层?\n泸县, 绵阳, 重庆. 成都被包围了ovo.\nI am unhappy. I am going to zha po!\n于是就去神仙树炸po. 那边有一堆上了axa的po.\n炸第一处的盾花掉了上百个67xmp. mdzz.\n炸第二处盾花了10个左右的67ultra. mdzz. 然后, 问题来了. 为什么我炸了之后角能自动回血啊? 难道有人在充? madan!\n今天本来地图就卡成傻b了还有人和我充能?\n瞬间我会的不会的所有脏话都给骂出来了.\n于是在我花完了所有7炸6炸5炸和大部分4炸的情况下终于把这给端了.\nmdzzmdzzmdzz.\n我真是太年轻了.\nHistorical Comments yeguanghao at 2016-06-05T02:12:51 Orz 为什么不先破盾再炸啊\nlaekov at 2016-06-05T08:29:13 因为我naive啊ovo 拿5炸直接炸掉绿盾, 于是莫名自信","title":"20160604"},{"content":"离高考还有\\((11)_2\\)天.\n唉唉晚上突然发现高考就在眼前了呢.\n即使是二进制也无法让那个数字显得大一点.\n看着洒进走廊里的夕阳仿佛看到了自己落山的高中生活.\n已经没有什么心思学习了ovo.\n所以一天都在不知道干什么中度过.\n中午的时候去了南虹村, 然后下午又被打回来了.\n不会再在中午1点急匆匆地往学校跑了.\n最后一个晚上最疯. 拉着cyl去望江推po. 迟到了至少20分钟.\n所以也并没有回教室去上晚自习. 毕竟我高中三年超过50%的晚自习是在科技楼3楼和4楼度过的.\n熟悉的机房已经没有了熟悉的味道. 四个和机房格格不入高三党怎么也无法填充出回忆中的欢声笑语.\n人总是要向前走的.\n结束就是结束. 何苦用一种仪式的行为仪式的心态去面对?\n大概是我自认为太了解结束了吧.\n所以我还是太年轻了.\n","permalink":"/diary/c0ee7e/","summary":"离高考还有\\((11)_2\\)天.\n唉唉晚上突然发现高考就在眼前了呢.\n即使是二进制也无法让那个数字显得大一点.\n看着洒进走廊里的夕阳仿佛看到了自己落山的高中生活.\n已经没有什么心思学习了ovo.\n所以一天都在不知道干什么中度过.\n中午的时候去了南虹村, 然后下午又被打回来了.\n不会再在中午1点急匆匆地往学校跑了.\n最后一个晚上最疯. 拉着cyl去望江推po. 迟到了至少20分钟.\n所以也并没有回教室去上晚自习. 毕竟我高中三年超过50%的晚自习是在科技楼3楼和4楼度过的.\n熟悉的机房已经没有了熟悉的味道. 四个和机房格格不入高三党怎么也无法填充出回忆中的欢声笑语.\n人总是要向前走的.\n结束就是结束. 何苦用一种仪式的行为仪式的心态去面对?\n大概是我自认为太了解结束了吧.\n所以我还是太年轻了.","title":"20160603"},{"content":"离高考还有\\((100)_2\\)天.\n越发近了呢.\n考了理综和英语.\n物理第二个大题鬼畜了. 然而算错了第一个大题是什么情况qwq.\n看来主要还是给信心的题.\n于是花了今天剩下的时间来做视频. 终于让强迫症队友满意了qwq.\n然而收视频的孩子为什么不回短信啊ovo.\n都没出去摸po. 似乎磨子桥这个po的竞争很激烈啊. excited.\n然而最近是没机会大攒ap了.\n红桶确实比较鸡助qwq.\n所以我还是太弱啦.\nHistorical Comments ArtemisLiu at 2016-06-03T11:18:45 视频已经在官微挂出来辣(快去看我微信) 何姥爷好帅orz\n","permalink":"/diary/8ca1c7/","summary":"离高考还有\\((100)_2\\)天.\n越发近了呢.\n考了理综和英语.\n物理第二个大题鬼畜了. 然而算错了第一个大题是什么情况qwq.\n看来主要还是给信心的题.\n于是花了今天剩下的时间来做视频. 终于让强迫症队友满意了qwq.\n然而收视频的孩子为什么不回短信啊ovo.\n都没出去摸po. 似乎磨子桥这个po的竞争很激烈啊. excited.\n然而最近是没机会大攒ap了.\n红桶确实比较鸡助qwq.\n所以我还是太弱啦.\nHistorical Comments ArtemisLiu at 2016-06-03T11:18:45 视频已经在官微挂出来辣(快去看我微信) 何姥爷好帅orz","title":"20160602"},{"content":"离高考还有5天.\n儿童节.\n热身考试呢. 然而. 似乎. 已经. 麻木. 了.\n上午语文作文还比较好写.\n下午数学最后一题后俩问都没做出来ovo. 那个超越方程不会逗啊.\n中午去找水坝哥审查视频. 然后. 表示. 不. 开心.\n为啥非要把我们班成绩多优秀拿出来说啊.\n说就说吧. 于是就去让may念了一下有多少人进省队多少人进集训队多少人进国家队ovo.\n然后去各种找照片凑了两张墙. lwx的表情好厉害.\n然后. 晚上我在组里提醒lql要下下来看不然laekov的服务器流量就炸了.\nlql: 怎么下下来是个gv啥的啊?\nlaekov: 这是graduation video的缩写啊.\nlql: 已经删了.\nlaekov: qwqwqqwqwqwqwqwqwqwqwqwqwqwqwqwq.\n以及今天在南虹雅园那边的po几度易主. 我辛辛苦苦立的5po诶. ovo还没怎么摸就炸了.\n所以我还是太年轻啦.\n","permalink":"/diary/537f71/","summary":"离高考还有5天.\n儿童节.\n热身考试呢. 然而. 似乎. 已经. 麻木. 了.\n上午语文作文还比较好写.\n下午数学最后一题后俩问都没做出来ovo. 那个超越方程不会逗啊.\n中午去找水坝哥审查视频. 然后. 表示. 不. 开心.\n为啥非要把我们班成绩多优秀拿出来说啊.\n说就说吧. 于是就去让may念了一下有多少人进省队多少人进集训队多少人进国家队ovo.\n然后去各种找照片凑了两张墙. lwx的表情好厉害.\n然后. 晚上我在组里提醒lql要下下来看不然laekov的服务器流量就炸了.\nlql: 怎么下下来是个gv啥的啊?\nlaekov: 这是graduation video的缩写啊.\nlql: 已经删了.\nlaekov: qwqwqqwqwqwqwqwqwqwqwqwqwqwqwqwq.\n以及今天在南虹雅园那边的po几度易主. 我辛辛苦苦立的5po诶. ovo还没怎么摸就炸了.\n所以我还是太年轻啦.","title":"20160601"},{"content":"离高考还有6天.\n然而那只laekov还在颓视频.\n早上居然自动起床了真是奇迹.\n上午逃掉了最后一节课. 碰到了出去上自习的yzy. 回教室的时候发现生物老师在讲题.\n下午逃掉了最后一节课. 带上了萌萌的cyl. 回教室的时候发现数学老师在讲题.\n我: f***.\n于是晚上饭都没吃就跑妇儿院去拿了个桶. 然后我就把桶还回去了然后我就听说桶是不用还的\u0026gt;_\u0026lt;.\n于是晚上接着淦视频.\n然而试图在mac os上找一个能用的不要钱的音频处理软件然后失败了sad. 只好投奔了windows. 感觉我做了一件非常恶心的事情. 我要向\u0008教父忏悔.\n付老那个强行要我站远点录真是sad. 最终也没学会如何消掉鸟叫. 而且声音, 就像在浴室里录的一样.\nget了新的技能, 在chrome缓存里找视频文件.\n晚上做完视频顺手打了一局csgo官匹, ping居然只有100+, 瞬间感觉整个人都精神了. 开心. 也许机房那个低得鬼畜的鼠标灵敏度也有contribution. 以后是不是想打cs官匹的时候就去机房蹭网呢?\n所以我还是太年轻啦.\n钦妹儿太强啦.\n","permalink":"/diary/cabb9c/","summary":"离高考还有6天.\n然而那只laekov还在颓视频.\n早上居然自动起床了真是奇迹.\n上午逃掉了最后一节课. 碰到了出去上自习的yzy. 回教室的时候发现生物老师在讲题.\n下午逃掉了最后一节课. 带上了萌萌的cyl. 回教室的时候发现数学老师在讲题.\n我: f***.\n于是晚上饭都没吃就跑妇儿院去拿了个桶. 然后我就把桶还回去了然后我就听说桶是不用还的\u0026gt;_\u0026lt;.\n于是晚上接着淦视频.\n然而试图在mac os上找一个能用的不要钱的音频处理软件然后失败了sad. 只好投奔了windows. 感觉我做了一件非常恶心的事情. 我要向\u0008教父忏悔.\n付老那个强行要我站远点录真是sad. 最终也没学会如何消掉鸟叫. 而且声音, 就像在浴室里录的一样.\nget了新的技能, 在chrome缓存里找视频文件.\n晚上做完视频顺手打了一局csgo官匹, ping居然只有100+, 瞬间感觉整个人都精神了. 开心. 也许机房那个低得鬼畜的鼠标灵敏度也有contribution. 以后是不是想打cs官匹的时候就去机房蹭网呢?\n所以我还是太年轻啦.\n钦妹儿太强啦.","title":"20160531"},{"content":"离高考还有7天.\n我, 居然, 帅气地, 发烧了. qwqqwqwqwqwqwqwqqwqwqwqwq.\n果然是考前病么? 想起去年夏天的长沙qaq.\n于是早上到底干了什么呢?\nimovie用起来好奇怪啊. 一定是我的打开方式不对.\n倒是发现下午刷物理效率异常高.\n然后下午的采访怎么同学们都辣么害羞啊.\n于是差点都没采集全数据.\nzjr的迷之单反我也是醉了. 其实我觉得手机就能拍出不错的效果吖.\n翘掉晚自习去淦视频然后面到了ygh orz. 二话不说就把我的po都给炸掉了.\n拖了达达过来帮忙. 感觉耽误了正经高考党复习. 不安ing.\n然后还摆拍了两段233.\n然而淦视频淦得我更想吐了.\n还有论bgm的重要性. 没有bgm的时候各种声音都是离散的好难受, 加了bgm瞬间耳朵就舒服了ovovoovovo.\n所以我还是太年轻啦.\n感觉明天一定会跪在床上起不来.\n","permalink":"/diary/e252d6/","summary":"离高考还有7天.\n我, 居然, 帅气地, 发烧了. qwqqwqwqwqwqwqwqqwqwqwqwq.\n果然是考前病么? 想起去年夏天的长沙qaq.\n于是早上到底干了什么呢?\nimovie用起来好奇怪啊. 一定是我的打开方式不对.\n倒是发现下午刷物理效率异常高.\n然后下午的采访怎么同学们都辣么害羞啊.\n于是差点都没采集全数据.\nzjr的迷之单反我也是醉了. 其实我觉得手机就能拍出不错的效果吖.\n翘掉晚自习去淦视频然后面到了ygh orz. 二话不说就把我的po都给炸掉了.\n拖了达达过来帮忙. 感觉耽误了正经高考党复习. 不安ing.\n然后还摆拍了两段233.\n然而淦视频淦得我更想吐了.\n还有论bgm的重要性. 没有bgm的时候各种声音都是离散的好难受, 加了bgm瞬间耳朵就舒服了ovovoovovo.\n所以我还是太年轻啦.\n感觉明天一定会跪在床上起不来.","title":"20160530"},{"content":"离高考还有\\(2^3\\)天.\n我不好好学习于是被嫌弃了qaq.\n那么我来写点干货? 然而并没有干货可写嘛qaq.\n怎么学好高二化学? 如果你有一个像廖老这样的老师的话\u0026hellip;\n没有动过笔的一天呢ovo.\n早上睡到10点. happy.\n中午去吃了奇怪的自助餐.\n发现家的旁边有好几条蓝色的link和cf. 被包围了十分不爽. 下午去紫荆炸它们. 然后发现那蓝军的axa盾粉盾就像不要钱一样插. 根本炸不动还消耗了我宝贵的7炸. f**k.\n所以今天都没有攒多少ap.\n唉懒死了.\ncs水平还是不行qaq.\n已经不会写程序了qaq.\n简单地学习了一下mongoose. 感觉就是懒人的mognodb client. 不用自己处理各种各种了比较爽.\nczr太强辣.\n我太年轻了.\n","permalink":"/diary/a47edf/","summary":"离高考还有\\(2^3\\)天.\n我不好好学习于是被嫌弃了qaq.\n那么我来写点干货? 然而并没有干货可写嘛qaq.\n怎么学好高二化学? 如果你有一个像廖老这样的老师的话\u0026hellip;\n没有动过笔的一天呢ovo.\n早上睡到10点. happy.\n中午去吃了奇怪的自助餐.\n发现家的旁边有好几条蓝色的link和cf. 被包围了十分不爽. 下午去紫荆炸它们. 然后发现那蓝军的axa盾粉盾就像不要钱一样插. 根本炸不动还消耗了我宝贵的7炸. f**k.\n所以今天都没有攒多少ap.\n唉懒死了.\ncs水平还是不行qaq.\n已经不会写程序了qaq.\n简单地学习了一下mongoose. 感觉就是懒人的mognodb client. 不用自己处理各种各种了比较爽.\nczr太强辣.\n我太年轻了.","title":"20160529"},{"content":"离高考还有9天.\n十进制进入一位数.\n周六注定是拿来颓废的嘛.\n早上被水坝哥的怒吼惊醒.\n除了水坝哥以外的所有老师上课都进入了闲扯状态.\n为什么不能说\u0026quot;非常罕见\u0026quot;呢? ovo.\n中午去龙江路玩. 然后发现被地图的定位偏移给骗了.\n下午数学考试好难啊. 然而已经弃疗了ovo.\n然后沿着科华路去玩.\nygh就lv7了呢跪烂了.\n我在望江里面正准备做多重. 就剩一个po的最后两条边了. 然后, 就发现整个区域都被绿色盖掉了ovovovovovo.\n真是神一样的队友啊orz.\n因为中午发现我居然hack到了复制桶, 所以突然觉得生活不愁了呢.\n于是把6炸当粉笔头扔. 随随便便就炸了蓝军的菊心po. happy.\n晚上各种翻照片. 感觉, 我们班, 再正经的照片也是黑照ovovovovoovo.\n所以我还是太年轻啦.\nHistorical Comments yeguanghao at 2016-05-28T23:33:25 我红桶一个月就出了一个axa\u0026hellip;\n","permalink":"/diary/1e0c75/","summary":"离高考还有9天.\n十进制进入一位数.\n周六注定是拿来颓废的嘛.\n早上被水坝哥的怒吼惊醒.\n除了水坝哥以外的所有老师上课都进入了闲扯状态.\n为什么不能说\u0026quot;非常罕见\u0026quot;呢? ovo.\n中午去龙江路玩. 然后发现被地图的定位偏移给骗了.\n下午数学考试好难啊. 然而已经弃疗了ovo.\n然后沿着科华路去玩.\nygh就lv7了呢跪烂了.\n我在望江里面正准备做多重. 就剩一个po的最后两条边了. 然后, 就发现整个区域都被绿色盖掉了ovovovovovo.\n真是神一样的队友啊orz.\n因为中午发现我居然hack到了复制桶, 所以突然觉得生活不愁了呢.\n于是把6炸当粉笔头扔. 随随便便就炸了蓝军的菊心po. happy.\n晚上各种翻照片. 感觉, 我们班, 再正经的照片也是黑照ovovovovoovo.\n所以我还是太年轻啦.\nHistorical Comments yeguanghao at 2016-05-28T23:33:25 我红桶一个月就出了一个axa\u0026hellip;","title":"20160528"},{"content":"离高考还有10天.\n**的一天ovo.\n早上.\n水坝哥: 同学们要是觉得不开心了可以出去走一走散散心.\n水坝哥(转身要走): hja你出来.\nlaekov: 这\u0026hellip;\n水坝哥: 看你这么闲毕业典礼那个视频你去做吧.\nlaekov(泪奔): 高三一年, 我干过水管工, 投影维修工, 电脑清理工, 打字员, 现在终于升职当视频编辑了orz.\n中午去莱福士转po. 然后发现两个粉色的盾一上, 我连4角都炸不到ovo.\n于是只好把林荫街到一环路的区域全部涂绿了.\n晚上去跑了个mission. 然而感觉跑mission并不赚ap.\n还是应该多搞cf和炸cf. 然而别人的cf一般炸不到. ovo.\n下午似乎是社团文化节呢. 年年都去签了道于是今年也去签了个道. 想起去年社团文化节那天下午acm训练被yjq众怒艹几道题.\n整个高三第一次翘晚自习去了机房.\n本来是因为在教室看小说不安全的. 然而去了之后就改淦程序了ovo.\nyjq太强啦orz.\nyjq太萌啦orz.\n所以我还是太年轻了.\nHistorical Comments yeguanghao at 2016-05-27T23:20:56 ……跑任务当然是为了那个好看的牌子啊 还有一点是为了拿成就…… L8及其以后的等级不只有AP要求\n","permalink":"/diary/3fa3a6/","summary":"离高考还有10天.\n**的一天ovo.\n早上.\n水坝哥: 同学们要是觉得不开心了可以出去走一走散散心.\n水坝哥(转身要走): hja你出来.\nlaekov: 这\u0026hellip;\n水坝哥: 看你这么闲毕业典礼那个视频你去做吧.\nlaekov(泪奔): 高三一年, 我干过水管工, 投影维修工, 电脑清理工, 打字员, 现在终于升职当视频编辑了orz.\n中午去莱福士转po. 然后发现两个粉色的盾一上, 我连4角都炸不到ovo.\n于是只好把林荫街到一环路的区域全部涂绿了.\n晚上去跑了个mission. 然而感觉跑mission并不赚ap.\n还是应该多搞cf和炸cf. 然而别人的cf一般炸不到. ovo.\n下午似乎是社团文化节呢. 年年都去签了道于是今年也去签了个道. 想起去年社团文化节那天下午acm训练被yjq众怒艹几道题.\n整个高三第一次翘晚自习去了机房.\n本来是因为在教室看小说不安全的. 然而去了之后就改淦程序了ovo.\nyjq太强啦orz.\nyjq太萌啦orz.\n所以我还是太年轻了.\nHistorical Comments yeguanghao at 2016-05-27T23:20:56 ……跑任务当然是为了那个好看的牌子啊 还有一点是为了拿成就…… L8及其以后的等级不只有AP要求","title":"20160527"},{"content":"离高考还有11天.\n又是个吉利的数字ovo.\n今天早上睡觉啊睡觉. 然后睡醒了开始看书. 然后水坝哥进来抓睡觉的正好逃过一顿d. ovo.\n中午去各种逛连了几个多重.\n下午体锻课试图拉hobo入坑. 然后走来走去地刷磨子桥. 毕竟学校里只能勉强摸到这一个po.\n以及占别人床po多好玩啊.\n晚上出去又连了几个. 第一次去了那个啥李时珍. 那明明是个公共厕所嘛ovo.\n于是今天的收获大约有10w?\nhappy.\n然后晚自习看完了_霍乱_觉得心情复杂于是去操场散步. 然后, 就, 遇, 到, 了, 跑步的, 水坝, 哥!\nlaekov(回头): 刘老好!\n水坝哥(跑过): hja你怎么逃课呢!!!!!!!!!!!!!!\nmaya.\n我还是太年轻了.\nHistorical Comments yeguanghao at 2016-05-27T02:36:05 maya你怎么每天都10w啊…… 我现在只求去hk前能到L7 QwQ\n","permalink":"/diary/2e12b6/","summary":"离高考还有11天.\n又是个吉利的数字ovo.\n今天早上睡觉啊睡觉. 然后睡醒了开始看书. 然后水坝哥进来抓睡觉的正好逃过一顿d. ovo.\n中午去各种逛连了几个多重.\n下午体锻课试图拉hobo入坑. 然后走来走去地刷磨子桥. 毕竟学校里只能勉强摸到这一个po.\n以及占别人床po多好玩啊.\n晚上出去又连了几个. 第一次去了那个啥李时珍. 那明明是个公共厕所嘛ovo.\n于是今天的收获大约有10w?\nhappy.\n然后晚自习看完了_霍乱_觉得心情复杂于是去操场散步. 然后, 就, 遇, 到, 了, 跑步的, 水坝, 哥!\nlaekov(回头): 刘老好!\n水坝哥(跑过): hja你怎么逃课呢!!!!!!!!!!!!!!\nmaya.\n我还是太年轻了.\nHistorical Comments yeguanghao at 2016-05-27T02:36:05 maya你怎么每天都10w啊…… 我现在只求去hk前能到L7 QwQ","title":"20160526"},{"content":"离高考还有0xc天.\n似乎又把日期搞错了? 0xc真的不是\\((12)_{10}\\)? mdzz.\n早上好困. 不能再晚上颓cs了.\n各种做卷子ovo. 雨中去摸了磨子桥.\n中午雨中忍不住出去把林荫街附近的po给占了一遍还毒掉了铁柱的政正. 然后被铁柱怒斥了ovo.\n然后被铁柱报复了ovo.\n铁柱好强啊ovo.\n然后另外的po又被**Su给拔了.\n晚上又去补了一波然后又被拔了.\n打来打去何时了. ap得多少.\n今天还是收获了7w+吧?\n然而我还是太弱了.\n晚上看完了级数. 感觉最后泰勒展开的部分有点醚. 感觉好厉害.\n我还是太年轻啦.\nHistorical Comments yeguanghao at 2016-05-26T00:20:00 窝只会套(\\sum^{\\infty}_{i=0}{\\frac{f^i(a)(x-a)^i}{i!}})这个公式Orz\nyeguanghao at 2016-05-26T00:20:55 干人家床po不管怎么说都是\u0026hellip; 只比干人家的成就好那么一点\n","permalink":"/diary/94f7ef/","summary":"离高考还有0xc天.\n似乎又把日期搞错了? 0xc真的不是\\((12)_{10}\\)? mdzz.\n早上好困. 不能再晚上颓cs了.\n各种做卷子ovo. 雨中去摸了磨子桥.\n中午雨中忍不住出去把林荫街附近的po给占了一遍还毒掉了铁柱的政正. 然后被铁柱怒斥了ovo.\n然后被铁柱报复了ovo.\n铁柱好强啊ovo.\n然后另外的po又被**Su给拔了.\n晚上又去补了一波然后又被拔了.\n打来打去何时了. ap得多少.\n今天还是收获了7w+吧?\n然而我还是太弱了.\n晚上看完了级数. 感觉最后泰勒展开的部分有点醚. 感觉好厉害.\n我还是太年轻啦.\nHistorical Comments yeguanghao at 2016-05-26T00:20:00 窝只会套(\\sum^{\\infty}_{i=0}{\\frac{f^i(a)(x-a)^i}{i!}})这个公式Orz\nyeguanghao at 2016-05-26T00:20:55 干人家床po不管怎么说都是\u0026hellip; 只比干人家的成就好那么一点","title":"20160525"},{"content":"离高考还有0xd天.\n又是颓废的一天.\n睡了一个早读.\n然后做了会语文.\n然后化学时间强行做物理. 物理的最后几题好奇怪ovo.\n中午匆匆吃面. 在校门口强行拍钦妹儿. 然后出去占po.\n在华西连了一大片cf. lv1的po的距离实在是太短了啊ovo.\n下午做上个暑假的数学作业发现还是有好多题做不起. 药丸的节奏啊.\n体锻课全年级活动等于不活动, 还不把我放出去占po. 真是*了水坝哥了.\n于是坐在看台上盯着某个素不相识的女生打球for 10分钟. 感觉我这个猥琐大叔好奇怪的样子.\n要不要说其实是我在发呆.\n都是水坝哥的锅.\n终于等到放学惊闻要5:45才开门. 于是又和钦妹玩耍了一会.\n然后又去华西把下午被打散的po占回来.\n于是终于lv6啦happy. lv6的xmp就是爽.\n回来的时间很紧差点迟到.\n晚上发现我吃饭的时候占的po被另一个人在4分钟内全部打散ovo.\n然而都学我放lv1的res. 多谢了.\n晚上做幂级数. 感觉要死了.\n但是还是很有意思啊.\n主要是各种判别公式比较迷. 以及我的运算能力qaq.\n晚上放学发现政正被洗过了? 于是二话不说打下来.\n十字路口等红灯发现几个弱po, 二话不说打下来.\n有6炸就是爽.\n所以我还是太年轻啦.\n","permalink":"/diary/10dd40/","summary":"离高考还有0xd天.\n又是颓废的一天.\n睡了一个早读.\n然后做了会语文.\n然后化学时间强行做物理. 物理的最后几题好奇怪ovo.\n中午匆匆吃面. 在校门口强行拍钦妹儿. 然后出去占po.\n在华西连了一大片cf. lv1的po的距离实在是太短了啊ovo.\n下午做上个暑假的数学作业发现还是有好多题做不起. 药丸的节奏啊.\n体锻课全年级活动等于不活动, 还不把我放出去占po. 真是*了水坝哥了.\n于是坐在看台上盯着某个素不相识的女生打球for 10分钟. 感觉我这个猥琐大叔好奇怪的样子.\n要不要说其实是我在发呆.\n都是水坝哥的锅.\n终于等到放学惊闻要5:45才开门. 于是又和钦妹玩耍了一会.\n然后又去华西把下午被打散的po占回来.\n于是终于lv6啦happy. lv6的xmp就是爽.\n回来的时间很紧差点迟到.\n晚上发现我吃饭的时候占的po被另一个人在4分钟内全部打散ovo.\n然而都学我放lv1的res. 多谢了.\n晚上做幂级数. 感觉要死了.\n但是还是很有意思啊.\n主要是各种判别公式比较迷. 以及我的运算能力qaq.\n晚上放学发现政正被洗过了? 于是二话不说打下来.\n十字路口等红灯发现几个弱po, 二话不说打下来.\n有6炸就是爽.\n所以我还是太年轻啦.","title":"20160524"},{"content":"yzy给的题. 感觉挺有意思.\n听说是thu的自招题.\n题:\nyzy有个计算器, 只有一个按键.\n计算器上有一个自然数n, 每按一次按键这个数就会等概率变成区间[0,n)中的一个自然数.\n现在的数字是2333, yzy不停地按直到变成0. 问同时出现过999, 99, 9的概率.\n解法:\n首先随便想个dp类似的递推.\n然后推一下前几项就发现规律了.\n然后就完了.\n答案是(\\frac{1}{10^6}).\n可以拿来出题用.\n","permalink":"/random/49fe08/","summary":"yzy给的题. 感觉挺有意思.\n听说是thu的自招题.\n题:\nyzy有个计算器, 只有一个按键.\n计算器上有一个自然数n, 每按一次按键这个数就会等概率变成区间[0,n)中的一个自然数.\n现在的数字是2333, yzy不停地按直到变成0. 问同时出现过999, 99, 9的概率.\n解法:\n首先随便想个dp类似的递推.\n然后推一下前几项就发现规律了.\n然后就完了.\n答案是(\\frac{1}{10^6}).\n可以拿来出题用.","title":"yzy的计算器"},{"content":"高考倒计时0xe天.\n开始自习了呢.\n刷题啊excited.\n其实有些科的题还是辣么boring.\n就数学题最interesting啦.\n感觉立了这么多flag我高考数学肯定要挂啊.\n比如遇到一道把旁边人都给坑懵了的题.\n求证:\n$$ \\sum_{i=1}^{n} \\frac{lni}{i^4} \u0026lt; \\frac{1}{2e} $$\n以及小国洋发现的它的加强版\n$$ \\sum_{i=1}^{n} \\frac{lni}{i^4} \u0026lt; \\frac{1}{9} $$\n还有拿计算器按出来的炒鸡加强版\n$$ \\sum_{i=1}^{n} \\frac{lni}{i^4} \u0026lt; \\frac{1}{14} $$\n国洋太强啦orz.\n晚上接着看霍乱ovo.\n磨子桥的po被蓝军拔掉了呢. 现在我的位置似乎被蓝色link给包围了? unhappy.\n晚上去蹭磨子桥, 遇到某君结果该君当场表示要入ingress坑并且不希望ygh知道.\n该君太强啦orz.\n水坝哥表示某老师无法复制我pdf打的作文? 然后我走过去盯着该老师把文字正确地复制了出来23333.\n晚上突然想起一件事. 为什么我总是担心别人会生气呢? 原来是从小养成的奇怪的习性233.\n唉唉.\n我还是太年轻了呢.\nHistorical Comments yeguanghao at 2016-05-23T23:27:14 写在博客里面我几乎能猜到是谁？\nyeguanghao at 2016-05-23T23:31:40 又在磨子桥又知道我在颓这个的人不多啊= =\n","permalink":"/diary/d9b20b/","summary":"高考倒计时0xe天.\n开始自习了呢.\n刷题啊excited.\n其实有些科的题还是辣么boring.\n就数学题最interesting啦.\n感觉立了这么多flag我高考数学肯定要挂啊.\n比如遇到一道把旁边人都给坑懵了的题.\n求证:\n$$ \\sum_{i=1}^{n} \\frac{lni}{i^4} \u0026lt; \\frac{1}{2e} $$\n以及小国洋发现的它的加强版\n$$ \\sum_{i=1}^{n} \\frac{lni}{i^4} \u0026lt; \\frac{1}{9} $$\n还有拿计算器按出来的炒鸡加强版\n$$ \\sum_{i=1}^{n} \\frac{lni}{i^4} \u0026lt; \\frac{1}{14} $$\n国洋太强啦orz.\n晚上接着看霍乱ovo.\n磨子桥的po被蓝军拔掉了呢. 现在我的位置似乎被蓝色link给包围了? unhappy.\n晚上去蹭磨子桥, 遇到某君结果该君当场表示要入ingress坑并且不希望ygh知道.\n该君太强啦orz.\n水坝哥表示某老师无法复制我pdf打的作文? 然后我走过去盯着该老师把文字正确地复制了出来23333.\n晚上突然想起一件事. 为什么我总是担心别人会生气呢? 原来是从小养成的奇怪的习性233.\n唉唉.\n我还是太年轻了呢.\nHistorical Comments yeguanghao at 2016-05-23T23:27:14 写在博客里面我几乎能猜到是谁？\nyeguanghao at 2016-05-23T23:31:40 又在磨子桥又知道我在颓这个的人不多啊= =","title":"20160523"},{"content":"高考倒计时0xf天.\n一位数倒计时了.\n然而今天下雨. very unhappy.\n早上在家做作业. 效率真是太低了.\n于是搞了一下午的电竞. 买了一堆皮肤. 最终放弃了练ak的想法, 改练m4了.\n晚上觉得不行啊不能这么颓废还是出去逛一逛吧.\n于是就在雨里走了一大圈. 鞋子都打湿完了. 好久没有这么愉快地ca过水了.\n总是必需要顾虑到更多, 也许就是长大的意义吧. 担心衣服会打湿, 担心被车撞, 担心娘亲生气\u0026hellip; 真是烦. 宁愿不长大呢.\n下午为了开(an)导(li)某人而抖出了自己初中那点破事. 想想也真是naive. 就像现在的自己一样. 所以我根本没有从naive长得不naive嘛. 唉唉.\n每次和娘亲赌气的时候就会想到从家里跑路之后应该怎么活. 然后觉得还是死了简单些呢.\n然而死也不简单啊. 怕痛. sad. 唉真是烦.\n然后磨子桥under attack了. 感觉明天中午又是一阵疯跑ovo.\n所以我还是太年轻了. sad.\n","permalink":"/diary/894cf4/","summary":"高考倒计时0xf天.\n一位数倒计时了.\n然而今天下雨. very unhappy.\n早上在家做作业. 效率真是太低了.\n于是搞了一下午的电竞. 买了一堆皮肤. 最终放弃了练ak的想法, 改练m4了.\n晚上觉得不行啊不能这么颓废还是出去逛一逛吧.\n于是就在雨里走了一大圈. 鞋子都打湿完了. 好久没有这么愉快地ca过水了.\n总是必需要顾虑到更多, 也许就是长大的意义吧. 担心衣服会打湿, 担心被车撞, 担心娘亲生气\u0026hellip; 真是烦. 宁愿不长大呢.\n下午为了开(an)导(li)某人而抖出了自己初中那点破事. 想想也真是naive. 就像现在的自己一样. 所以我根本没有从naive长得不naive嘛. 唉唉.\n每次和娘亲赌气的时候就会想到从家里跑路之后应该怎么活. 然后觉得还是死了简单些呢.\n然而死也不简单啊. 怕痛. sad. 唉真是烦.\n然后磨子桥under attack了. 感觉明天中午又是一阵疯跑ovo.\n所以我还是太年轻了. sad.","title":"20160522"},{"content":"高考倒计时0x10天.\n天数很吉利诶.\n早上好困.\n中午出去占po. 面到了qzh和一堆人.\n然而周末蓝军的攻势很猛呢. 根本打不过.\n下午理综. 发答案的时候全班的心情都是崩溃的. 然后发现我错了整整六个选择题. 幸好是发答案ovo.\n放学去望江打了个酱油.\n带了充电宝而没有带充电线. 去买了根线然后是坏的. poi.\n晚上大概会颓废过去了sad.\n所以我还是太年轻啦!\n","permalink":"/diary/45a5fb/","summary":"高考倒计时0x10天.\n天数很吉利诶.\n早上好困.\n中午出去占po. 面到了qzh和一堆人.\n然而周末蓝军的攻势很猛呢. 根本打不过.\n下午理综. 发答案的时候全班的心情都是崩溃的. 然后发现我错了整整六个选择题. 幸好是发答案ovo.\n放学去望江打了个酱油.\n带了充电宝而没有带充电线. 去买了根线然后是坏的. poi.\n晚上大概会颓废过去了sad.\n所以我还是太年轻啦!","title":"20160521"},{"content":"高考倒计时17天.\n又水过一天呢.\n高中正式行课的日子就再见了.\n数学课为啥老师讲的东西这么麻烦啊.\n语文课写作文. 高中三年唯一一次作文上50分. happy.\n下午物理课老师花一节课讲了一道题. 然而因为我第一问弄错正负号导致错完qaq.\n中午出去打作文顺便绕旅游村两周. 把磨子桥给拔了. 然后把旅游村给占成绿色的了. 第一次占这么大一团领地. excited.\n然后回去发现望江的蓝军在做一个巨型扇形? 好虚啊. 当时看到的图形就是他们要把我的地盘吃掉的样子.\n然后下午的时候果然几个po都被人给推了. sad.\n然而蓝军还是很奇怪推成白色之后就不管了. 要是放几个高级的res我基本就gg了啊. 难道在故意帮我刷ap?\n顺便开心地发现在游泳池楼下角落里可以蹭到磨子桥. 虽然不太稳定而且还要对角线穿越校园.\n晚上的时候去把磨子桥修了. 然而街口被保护起来了, 于是去把海外学院的po给占了又把磨子桥利用起来.\n顺便去华西里面占空po. 然后发现似乎与ai学长擦肩而过了?\n晚自习的时候果然磨子桥, 旅游村, 华西都被炸掉了.\n晚上放学去修磨子桥然后发现旅游村剩下的po被打残了没法link. sad.\n于是我并没有get到收集key的正确方式.\n3天lv4好开心, 然而明天并没有机会升到lv5 sad.\n看来我还是太年轻啦.\nHistorical Comments yeguanghao at 2016-05-20T22:53:10 不然为什么我们叫懒军呢2333 key的话多画图。 你应该认识tzh，去抱他大腿吧😂\n","permalink":"/diary/e8a32c/","summary":"高考倒计时17天.\n又水过一天呢.\n高中正式行课的日子就再见了.\n数学课为啥老师讲的东西这么麻烦啊.\n语文课写作文. 高中三年唯一一次作文上50分. happy.\n下午物理课老师花一节课讲了一道题. 然而因为我第一问弄错正负号导致错完qaq.\n中午出去打作文顺便绕旅游村两周. 把磨子桥给拔了. 然后把旅游村给占成绿色的了. 第一次占这么大一团领地. excited.\n然后回去发现望江的蓝军在做一个巨型扇形? 好虚啊. 当时看到的图形就是他们要把我的地盘吃掉的样子.\n然后下午的时候果然几个po都被人给推了. sad.\n然而蓝军还是很奇怪推成白色之后就不管了. 要是放几个高级的res我基本就gg了啊. 难道在故意帮我刷ap?\n顺便开心地发现在游泳池楼下角落里可以蹭到磨子桥. 虽然不太稳定而且还要对角线穿越校园.\n晚上的时候去把磨子桥修了. 然而街口被保护起来了, 于是去把海外学院的po给占了又把磨子桥利用起来.\n顺便去华西里面占空po. 然后发现似乎与ai学长擦肩而过了?\n晚自习的时候果然磨子桥, 旅游村, 华西都被炸掉了.\n晚上放学去修磨子桥然后发现旅游村剩下的po被打残了没法link. sad.\n于是我并没有get到收集key的正确方式.\n3天lv4好开心, 然而明天并没有机会升到lv5 sad.\n看来我还是太年轻啦.\nHistorical Comments yeguanghao at 2016-05-20T22:53:10 不然为什么我们叫懒军呢2333 key的话多画图。 你应该认识tzh，去抱他大腿吧😂","title":"20160520"},{"content":"(madan打到一半不小心把浏览器关了)\n(微分方程挺有意思的. 要是暑假有人找我出oi题我就出数学题吼吼吼)\n题:\n一维空间里有个质点.\n速度为\\(v\\)的时候加速度为\\(-k\\sqrt{a^2-v^2}\\) (即与速度方向相反).\n求速度从\\(v_1\\)变成\\(v_2\\)的过程中的位移\\(x_m\\).\n其中\\(0\\leq v_2 \\leq v_1 \u0026lt; a\\).\n歪:\n仔细看看这不就是简谐振动么? mdzz题.\n算都不用算随便看看就出来了.\n下面的东西不用看了.\n解:\n根据题意列个方程.\n$$\\frac{dv}{dt}=-k\\sqrt{a^2-v^2}$$\n整理.\n$$\\frac{dv}{\\sqrt{a^2-v^2}} = -kdt$$\n两边积分.\n$$arcsin\\frac{v}{a} = -kt + C_1$$\n顺手整理.\n$$v = -a*sin(kt-C_1)$$\n$$t = \\frac{C_1 - arcsin\\frac{v}{a}}{k}$$\n再对\\(v\\)积分求位移.\n$$x=\\int vdt = -\\frac{a}{k} \\int sin(kt-C_1)dkt$$\n$$x=\\frac{a}{k}cos(kt-C_1)=\\frac{a}{k}cos(arcsin\\frac{v}{a})$$\n再定积分.\n$$x_m = \\int_{v_1}^{v_2}vdt$$\n$$x_m = \\frac{a}{k} [cos(arcsin\\frac{v_2}{a})-cos(arcsin\\frac{v_1}{a}) ] $$\n顺手化简.\n$$x_m = \\frac{a}{k} ( \\sqrt{1-(\\frac{v_2}{a})^2} - \\sqrt{1-(\\frac{v_1}{a})^2}$$\n$$x_m = \\frac{\\sqrt{a^2-v_2^2}-\\sqrt{a^2-v_1^2}}{k}$$\n全剧终.\n不知道有没有算对也不知道有没有更简便的方法.\n","permalink":"/random/810ef0/","summary":"(madan打到一半不小心把浏览器关了)\n(微分方程挺有意思的. 要是暑假有人找我出oi题我就出数学题吼吼吼)\n题:\n一维空间里有个质点.\n速度为\\(v\\)的时候加速度为\\(-k\\sqrt{a^2-v^2}\\) (即与速度方向相反).\n求速度从\\(v_1\\)变成\\(v_2\\)的过程中的位移\\(x_m\\).\n其中\\(0\\leq v_2 \\leq v_1 \u0026lt; a\\).\n歪:\n仔细看看这不就是简谐振动么? mdzz题.\n算都不用算随便看看就出来了.\n下面的东西不用看了.\n解:\n根据题意列个方程.\n$$\\frac{dv}{dt}=-k\\sqrt{a^2-v^2}$$\n整理.\n$$\\frac{dv}{\\sqrt{a^2-v^2}} = -kdt$$\n两边积分.\n$$arcsin\\frac{v}{a} = -kt + C_1$$\n顺手整理.\n$$v = -a*sin(kt-C_1)$$\n$$t = \\frac{C_1 - arcsin\\frac{v}{a}}{k}$$\n再对\\(v\\)积分求位移.\n$$x=\\int vdt = -\\frac{a}{k} \\int sin(kt-C_1)dkt$$\n$$x=\\frac{a}{k}cos(kt-C_1)=\\frac{a}{k}cos(arcsin\\frac{v}{a})$$\n再定积分.\n$$x_m = \\int_{v_1}^{v_2}vdt$$\n$$x_m = \\frac{a}{k} [cos(arcsin\\frac{v_2}{a})-cos(arcsin\\frac{v_1}{a}) ] $$\n顺手化简.\n$$x_m = \\frac{a}{k} ( \\sqrt{1-(\\frac{v_2}{a})^2} - \\sqrt{1-(\\frac{v_1}{a})^2}$$\n$$x_m = \\frac{\\sqrt{a^2-v_2^2}-\\sqrt{a^2-v_1^2}}{k}$$","title":"混乱的变加速运动位移"},{"content":"离高考还有\\(3^2*2\\)天.\n又在颓废呢.\n晚上在看小说ovo.\n数学卷子居然是五道函数加一道解几.\n然后发现解几怎么直接用极坐标就秒了啊.\n怎么函数题一道比一道水啊.\n怎么函数题随便参变分离一下就完了啊.\n药丸.\n除了数学题, 毫无做其它题的心情.\n今天把ingress升到3级了呢happy.\n中午跑去捡了scu望江大门的po. 然后下午就被打回来了还被也许是报复性地拔了几个po.\n感觉蓝军的行动方式很奇怪啊. 晚上的时候拔掉了我连续3个po中的1个, 然后打残了1个, 却没有占领. 什么鬼? 我觉得对面应该是完全能把我打废的啊. 难道是他们在照顾萌新laekov?\n晚上出去修po的时候. 林荫街和旅游村街路口.\nlaekov(冲): maya我的海外学院大门被拔了.\n(一个蓝衣男子低头走过)\nlaekov(回头): 这人怎么这么像是在玩ingress啊? 一看蓝绿黑的屏幕果然是呢. 穿着一身蓝色t恤.ovo.\nlaekov(怕挨打继续走): 咦怎么我的po被绿军的兄弟占回来了? 一定就是刚才那人.\nlaekov(回头): 这人还没走啊肯定是在刷po.\nlaekov(走上去): 同学你好请问你是绿军吗? (感觉laekov好傻)\n学长(愣了一下): 是吖是吖. 你是laekov吧. balabala(新手教程略)\n感觉好开心居然能在街上面到学长.\n正在纠结星期六是去望江逛一圈还是去玉林逛一圈.\n看来我还是太年轻啦.\n","permalink":"/diary/19fe56/","summary":"离高考还有\\(3^2*2\\)天.\n又在颓废呢.\n晚上在看小说ovo.\n数学卷子居然是五道函数加一道解几.\n然后发现解几怎么直接用极坐标就秒了啊.\n怎么函数题一道比一道水啊.\n怎么函数题随便参变分离一下就完了啊.\n药丸.\n除了数学题, 毫无做其它题的心情.\n今天把ingress升到3级了呢happy.\n中午跑去捡了scu望江大门的po. 然后下午就被打回来了还被也许是报复性地拔了几个po.\n感觉蓝军的行动方式很奇怪啊. 晚上的时候拔掉了我连续3个po中的1个, 然后打残了1个, 却没有占领. 什么鬼? 我觉得对面应该是完全能把我打废的啊. 难道是他们在照顾萌新laekov?\n晚上出去修po的时候. 林荫街和旅游村街路口.\nlaekov(冲): maya我的海外学院大门被拔了.\n(一个蓝衣男子低头走过)\nlaekov(回头): 这人怎么这么像是在玩ingress啊? 一看蓝绿黑的屏幕果然是呢. 穿着一身蓝色t恤.ovo.\nlaekov(怕挨打继续走): 咦怎么我的po被绿军的兄弟占回来了? 一定就是刚才那人.\nlaekov(回头): 这人还没走啊肯定是在刷po.\nlaekov(走上去): 同学你好请问你是绿军吗? (感觉laekov好傻)\n学长(愣了一下): 是吖是吖. 你是laekov吧. balabala(新手教程略)\n感觉好开心居然能在街上面到学长.\n正在纠结星期六是去望江逛一圈还是去玉林逛一圈.\n看来我还是太年轻啦.","title":"20160519"},{"content":"离高考还有19天.\n时日不多了啊.\n玩了一天的ingress.\n为什么我加入了奇萌军呢? 只是因为我在选阵营的时候觉得绿色比蓝色好看啊233.\n仔细算算其实出去玩ingress的时间就是之前待在教室里无聊的时间. 其实这样也挺好的呢.\n第一次正确地占po. 然后发现拿lv2的xmp揍lv8的res真是作死. 去scu里转了一圈倒是感觉不错. 要不是玩了ingress我这三年都不知道Scu华西里面长什么样子呢.\n然后回来的时候发现怎么占的po又变灰了? 幸好我是原路返回的2333.\n于是产生了毛病, 走在路上看到低头看手机的都觉得是蓝军2333333.\n然而真的很好玩呢.\n谁说今天白天要下雨来着. 没带衣服结果遇到晴天还是最后一节体育课. 于是打了球没衣服换. 淦.\n晚上的时候努力地学习了微分方程. 感觉自己萌萌哒233.\n想到一个好玩的东西.\n两条水平光滑超导平行金属导轨间距为\\(L\\), 匀强磁场垂直于水平面向上, 场强为\\(B\\), 左边接一个电阻为\\(R\\)的定值电阻. 一个质量为\\(m\\)的足够长的超导金属滑杆以\\(v_0\\)的初速度向右水平滑动, 求最大位移.\n推一推积一积就粗来啦. 感觉挺神奇的. 周参表示是无穷远处2333.\n最后验算的时候只算了单位都算了5分钟ovo.\n所以我还是太年轻啦.\n","permalink":"/diary/5e8211/","summary":"离高考还有19天.\n时日不多了啊.\n玩了一天的ingress.\n为什么我加入了奇萌军呢? 只是因为我在选阵营的时候觉得绿色比蓝色好看啊233.\n仔细算算其实出去玩ingress的时间就是之前待在教室里无聊的时间. 其实这样也挺好的呢.\n第一次正确地占po. 然后发现拿lv2的xmp揍lv8的res真是作死. 去scu里转了一圈倒是感觉不错. 要不是玩了ingress我这三年都不知道Scu华西里面长什么样子呢.\n然后回来的时候发现怎么占的po又变灰了? 幸好我是原路返回的2333.\n于是产生了毛病, 走在路上看到低头看手机的都觉得是蓝军2333333.\n然而真的很好玩呢.\n谁说今天白天要下雨来着. 没带衣服结果遇到晴天还是最后一节体育课. 于是打了球没衣服换. 淦.\n晚上的时候努力地学习了微分方程. 感觉自己萌萌哒233.\n想到一个好玩的东西.\n两条水平光滑超导平行金属导轨间距为\\(L\\), 匀强磁场垂直于水平面向上, 场强为\\(B\\), 左边接一个电阻为\\(R\\)的定值电阻. 一个质量为\\(m\\)的足够长的超导金属滑杆以\\(v_0\\)的初速度向右水平滑动, 求最大位移.\n推一推积一积就粗来啦. 感觉挺神奇的. 周参表示是无穷远处2333.\n最后验算的时候只算了单位都算了5分钟ovo.\n所以我还是太年轻啦.","title":"20160518"},{"content":"离高考还有20天.\n咦时间有点快啊.\n昨天晚上睡觉之前才发现作文忘打了. 是说有什么事没做. 于是今天困死了.\n因为换了课所以没有化学, 四科都有两节ovo.\n困的时候做物理的正确率变高了然而做生物错得一塌糊涂.\n中午顶着太阳去磨子桥hack. 然而根本没有找到正确的打开方式.\n于是加了四川的群. 然后发现怎么有熟人. 怎么七中的学长居然认识我而我还不认识他ovo.\nsmg.\n于是吃完晚饭又去hack川大, 晚上放学又去了一次. 然而还是不能掌握正确的姿势 sad.\n感觉要中毒了呢. 好想有辆自行车啊.\n所以我还是太年轻了呢.\n今天晚上要早点睡觉才是.\nzhx的广告\nHistorical Comments yeguanghao at 2016-05-18T01:19:28 看起来加入绿军了啊\u0026hellip;为什么来我懒军啊\u0026hellip;\nyeguanghao at 2016-05-18T01:19:29 看起来加入绿军了啊\u0026hellip;为什么来我懒军啊\u0026hellip;\n","permalink":"/diary/2003f2/","summary":"离高考还有20天.\n咦时间有点快啊.\n昨天晚上睡觉之前才发现作文忘打了. 是说有什么事没做. 于是今天困死了.\n因为换了课所以没有化学, 四科都有两节ovo.\n困的时候做物理的正确率变高了然而做生物错得一塌糊涂.\n中午顶着太阳去磨子桥hack. 然而根本没有找到正确的打开方式.\n于是加了四川的群. 然后发现怎么有熟人. 怎么七中的学长居然认识我而我还不认识他ovo.\nsmg.\n于是吃完晚饭又去hack川大, 晚上放学又去了一次. 然而还是不能掌握正确的姿势 sad.\n感觉要中毒了呢. 好想有辆自行车啊.\n所以我还是太年轻了呢.\n今天晚上要早点睡觉才是.\nzhx的广告\nHistorical Comments yeguanghao at 2016-05-18T01:19:28 看起来加入绿军了啊\u0026hellip;为什么来我懒军啊\u0026hellip;\nyeguanghao at 2016-05-18T01:19:29 看起来加入绿军了啊\u0026hellip;为什么来我懒军啊\u0026hellip;","title":"20160517"},{"content":"离高考还有21天.\n最后一周上课的时间了.\n好多课都处于半自习状态.\n体育课的时候发现因为手痛所以投篮命中率为0. very sad.\n于是整天都各种不开心.\n晚上被数学虐.\n最初学洛比达, 感觉还不错. 到了积分开始懵了. 到了微分方程开始炸了.\n原来那个很好玩的东西叫ingress. 然而墙墙真烦. mdzz还让不让人好好玩耍了.\n少壮不努力, 老大留内地.\n药丸.\n","permalink":"/diary/6dc065/","summary":"离高考还有21天.\n最后一周上课的时间了.\n好多课都处于半自习状态.\n体育课的时候发现因为手痛所以投篮命中率为0. very sad.\n于是整天都各种不开心.\n晚上被数学虐.\n最初学洛比达, 感觉还不错. 到了积分开始懵了. 到了微分方程开始炸了.\n原来那个很好玩的东西叫ingress. 然而墙墙真烦. mdzz还让不让人好好玩耍了.\n少壮不努力, 老大留内地.\n药丸.","title":"20160516"},{"content":"离高考还有22天了.\n星期天.\n早上撸作业.\n下午撸数学.\n积分的姿势还是不对.\nsad.\n晚上打cs. 已经弱到没救了. 要再打怕是我要剁手了.\n花了几毛钱买了个最便宜的ak的涂装. 然而技术\u0026ndash;. mlgj.\n是不是太颓废了点.\n唉我还是太弱了.\n今天整个手臂都在痛. 手指用力也很痛. 拿个筷子就像元首一样. nlgxp.\n所以我还是太年轻了.\n","permalink":"/diary/a68e9b/","summary":"离高考还有22天了.\n星期天.\n早上撸作业.\n下午撸数学.\n积分的姿势还是不对.\nsad.\n晚上打cs. 已经弱到没救了. 要再打怕是我要剁手了.\n花了几毛钱买了个最便宜的ak的涂装. 然而技术\u0026ndash;. mlgj.\n是不是太颓废了点.\n唉我还是太弱了.\n今天整个手臂都在痛. 手指用力也很痛. 拿个筷子就像元首一样. nlgxp.\n所以我还是太年轻了.","title":"20160515"},{"content":"人工高考倒计时\\(23\\)天.\n都是lym的锅. 右手要断掉了. 右手中指和无名指打字都不利索了.\n早上对理综答案正常炸. 然而至今不知道上周理综的成绩是什么鬼喽?\n中午去打球. 然而都不想打于是就投了会. rp暴发打532虐了hj和ls. 然后比三分若干个都没进, 于是hj来防, 一防就进了233. 果然是我在有人盖的情况下后仰更容易进球?\n下午考英语. 做完还有40分钟忍不住看了答案然后内心是绝望的.\n然后就去和lym打羽毛球. oi退役之后第一次打羽毛球已经不太会打了ovo. 14班众打羽毛球的热情好高啊. 然而我已经不会打了呢. 地滑得像滑冰ovo.\n打完回家发现手抖死了. 右手手腕gg了. 等会试试这样打cs是什么效果.\n晚上出去逛坐在车上看到了从双流起飞的飞机和红绿的翼尖灯. 唉.\n我还是太年轻了呢.\n","permalink":"/diary/6374e3/","summary":"人工高考倒计时\\(23\\)天.\n都是lym的锅. 右手要断掉了. 右手中指和无名指打字都不利索了.\n早上对理综答案正常炸. 然而至今不知道上周理综的成绩是什么鬼喽?\n中午去打球. 然而都不想打于是就投了会. rp暴发打532虐了hj和ls. 然后比三分若干个都没进, 于是hj来防, 一防就进了233. 果然是我在有人盖的情况下后仰更容易进球?\n下午考英语. 做完还有40分钟忍不住看了答案然后内心是绝望的.\n然后就去和lym打羽毛球. oi退役之后第一次打羽毛球已经不太会打了ovo. 14班众打羽毛球的热情好高啊. 然而我已经不会打了呢. 地滑得像滑冰ovo.\n打完回家发现手抖死了. 右手手腕gg了. 等会试试这样打cs是什么效果.\n晚上出去逛坐在车上看到了从双流起飞的飞机和红绿的翼尖灯. 唉.\n我还是太年轻了呢.","title":"20160514"},{"content":"人工高考倒计时\\(3*2^3\\)天.\n学校停电了诶. happy. 是不是电网炸了就要改造限改造了就可以装空调了? 反正都轮不到我们这届了呸.\n然而老楼居然有电. 于是去鸠占雀巢进攻高二出国党教室做作业. 为毛12班众有台灯啊ovo.\n坐在长着爬山虎的窗台边吹着微风. 这又是什么感觉呢?\n喂这么浪漫的时候居然没有一个妹子陪着真是太浪费表情了. 其实旁边是有妹子的呢然而又不是我的ovo. 幸好没有cp再来进行二次伤害. 新楼的监控也暴掉了他们应该正在黑暗里happy吧233.\n走在街上觉得似乎很久没有这样悠闲了. 已经不会玩了. 唉.\n然而白天还是困.\n下午理综各种心力憔悴.\n唉. 我还是太年轻了.\n还是去颓cs吧.\n","permalink":"/diary/7081a9/","summary":"人工高考倒计时\\(3*2^3\\)天.\n学校停电了诶. happy. 是不是电网炸了就要改造限改造了就可以装空调了? 反正都轮不到我们这届了呸.\n然而老楼居然有电. 于是去鸠占雀巢进攻高二出国党教室做作业. 为毛12班众有台灯啊ovo.\n坐在长着爬山虎的窗台边吹着微风. 这又是什么感觉呢?\n喂这么浪漫的时候居然没有一个妹子陪着真是太浪费表情了. 其实旁边是有妹子的呢然而又不是我的ovo. 幸好没有cp再来进行二次伤害. 新楼的监控也暴掉了他们应该正在黑暗里happy吧233.\n走在街上觉得似乎很久没有这样悠闲了. 已经不会玩了. 唉.\n然而白天还是困.\n下午理综各种心力憔悴.\n唉. 我还是太年轻了.\n还是去颓cs吧.","title":"20160513"},{"content":"人工高考倒计时\\(3^2+4^2\\)天.\n汶川八周年.\n又是妖风天. 每次这个时候刮妖风就想起泸山地震. 然后又想起湖南同学的问题: 你们四川是不是天天地震啊?\n早上困死了睡睡睡睡了4节课.\n中午开始刮大妖风. 发现老楼侧面的爬山虎会随风出现波纹. 然而静态的照片似乎很难表现这种效果, 以及拍视频也不太爽. 加之今天光线也不好. sad.\n下午接着睡.\n晚上发现作业略少于是接着看_霍乱_. 怎么到中\\(\\frac{1}{3}\\)就成乱爱了ovo. 怎么别人走在街上都能勾搭到鸟.\n回家的时候发生了有趣的事.\n在桥下, 因为A柱档视线差点撞上一位交警同志.\n上面不是重点.\n交警同志(示意把窗户摇下来, 左手拿着酒精测试仪, 右手拿着电筒, 把右手伸到爹面前): 吹一口气.\n爹: 呼.\n交警同志(挥手): 好了. 走吧.\n五秒后.\n爹, 我: 怎么不太对啊!\n交警同志您醉了吧?\n所以我还是太年轻了.\n","permalink":"/diary/f47ffc/","summary":"人工高考倒计时\\(3^2+4^2\\)天.\n汶川八周年.\n又是妖风天. 每次这个时候刮妖风就想起泸山地震. 然后又想起湖南同学的问题: 你们四川是不是天天地震啊?\n早上困死了睡睡睡睡了4节课.\n中午开始刮大妖风. 发现老楼侧面的爬山虎会随风出现波纹. 然而静态的照片似乎很难表现这种效果, 以及拍视频也不太爽. 加之今天光线也不好. sad.\n下午接着睡.\n晚上发现作业略少于是接着看_霍乱_. 怎么到中\\(\\frac{1}{3}\\)就成乱爱了ovo. 怎么别人走在街上都能勾搭到鸟.\n回家的时候发生了有趣的事.\n在桥下, 因为A柱档视线差点撞上一位交警同志.\n上面不是重点.\n交警同志(示意把窗户摇下来, 左手拿着酒精测试仪, 右手拿着电筒, 把右手伸到爹面前): 吹一口气.\n爹: 呼.\n交警同志(挥手): 好了. 走吧.\n五秒后.\n爹, 我: 怎么不太对啊!\n交警同志您醉了吧?\n所以我还是太年轻了.","title":"20160512"},{"content":"人工高考倒计时\\(26\\)天.\n似乎MathJax在渲染公式的时候有时候会见鬼? smg.\n早上困.\n中午吃完饭遇到了老司机yjq. 问起实验操作和thusc, 猛然发现又是一届了呢. 其实呢, 开心就好.\n听说cyz和flaze在一起了? 恭喜orz.\n下午体育课32度太阳下打篮球我都觉得自己好拼. 出了一身臭汗.\n考数学的时候整个人都是昏的. 最后一题迷之简单ovo.\n晚上课间坐在科技楼门口的长凳上看人. 已经有大半年没有走上过那个楼梯了吧. 内心依然是拒绝的.\n难得做完作业于是高三第一次翘晚自习. 躺在操场吹风看星星月亮.\n还真有一颗孤星呢. 以我的斗鸡眼.\n上一次这样躺在操场上都是一年前的事了. 那时我有没有想过今天呢? 大概已经忘了吧.\n然而回忆过去有个ball用啊.\n然而未来我也想不清楚.\n然而当下真是无药可救了.\n高考前自暴自弃的不怕开水烫的死laekov还是太年轻了.\n","permalink":"/diary/aa3e41/","summary":"人工高考倒计时\\(26\\)天.\n似乎MathJax在渲染公式的时候有时候会见鬼? smg.\n早上困.\n中午吃完饭遇到了老司机yjq. 问起实验操作和thusc, 猛然发现又是一届了呢. 其实呢, 开心就好.\n听说cyz和flaze在一起了? 恭喜orz.\n下午体育课32度太阳下打篮球我都觉得自己好拼. 出了一身臭汗.\n考数学的时候整个人都是昏的. 最后一题迷之简单ovo.\n晚上课间坐在科技楼门口的长凳上看人. 已经有大半年没有走上过那个楼梯了吧. 内心依然是拒绝的.\n难得做完作业于是高三第一次翘晚自习. 躺在操场吹风看星星月亮.\n还真有一颗孤星呢. 以我的斗鸡眼.\n上一次这样躺在操场上都是一年前的事了. 那时我有没有想过今天呢? 大概已经忘了吧.\n然而回忆过去有个ball用啊.\n然而未来我也想不清楚.\n然而当下真是无药可救了.\n高考前自暴自弃的不怕开水烫的死laekov还是太年轻了.","title":"20160511"},{"content":"人工高考倒计时\\(3^3\\)天.\n@yeguanghao MathJax的反括弧是\u0026quot;\\)\u0026ldquo;喂.\n还有hht造的新闻是什么鬼啊. 根本不知道.\n然而今天very unhappy.\n清早去没认真清洁然后被水坝哥d了一顿.\n早上做操的时候发现有个数独? 有T恤? 然后就hold不住了. 搞个暴搜就能有T恤.\n然而没有电脑. 痛苦了两节课. 在草稿纸上写了cpp代码课间去电脑上打, 然后发现没有输出smg. 果然是程序能力变弱了么.\n没有吃饭接着调程序. 然后发现程序毫无问题啊又是smg.\n急匆匆地跑下去, 发现那张数独上已经写上了\u0026quot;数竞\u0026quot;两个大字. mlgj. 唉.\n怎么不来十张呢? 一百张都没有问题.\n我解数独只要两分钟. 一分钟用来输入, 一分钟用来抄.\n然而我太naive了.\nsad.\n中午颓得不行于是去zhihu上开了\u0026quot;高考之前自暴自弃\u0026quot;这个坑.\n下午做数学作业发现一道挺好玩的题.\n求证\\( (x-1)(e^{-x}-x)+2lnx \u0026lt; \\frac{2}{3} \\).\n打错了ovo\n中间有高能代换.\n吃完晚饭去晒夕阳. 觉得自己为什么这么废柴啊sad.\n晚上发现物理作业真**多. 强行假装我没看到卷子有两面好了.\n这就叫所谓的自暴自弃.\n所以我还是太年轻了.\nHistorical Comments laekov at 2016-05-10T23:26:35 ( f(x)=\\frac{1}{x^2}+\\frac{1}{x}+a\\ lnx )\nyeguanghao at 2016-05-11T00:40:45 ( (x-1)(e^{-x}-x)-2lnx\u0026lt; \\frac{2}{3} )\nyeguanghao at 2016-05-11T00:41:00 我果然还是太年轻了\nyeguanghao at 2016-05-11T20:17:07 ( (0.5-1)(e^{-0.5}-0.5)-2ln(0.5)=1.33303 \u0026gt; \\frac{2}{3} ) ?\nlaekov at 2016-05-11T22:20:25 @yeguanghao ln前面符号打错了sorry.\nyeguanghao at 2016-05-11T23:53:32 我还是太年轻了…… 我找这个反例都找了很久ovo\n","permalink":"/diary/8efe3c/","summary":"人工高考倒计时\\(3^3\\)天.\n@yeguanghao MathJax的反括弧是\u0026quot;\\)\u0026ldquo;喂.\n还有hht造的新闻是什么鬼啊. 根本不知道.\n然而今天very unhappy.\n清早去没认真清洁然后被水坝哥d了一顿.\n早上做操的时候发现有个数独? 有T恤? 然后就hold不住了. 搞个暴搜就能有T恤.\n然而没有电脑. 痛苦了两节课. 在草稿纸上写了cpp代码课间去电脑上打, 然后发现没有输出smg. 果然是程序能力变弱了么.\n没有吃饭接着调程序. 然后发现程序毫无问题啊又是smg.\n急匆匆地跑下去, 发现那张数独上已经写上了\u0026quot;数竞\u0026quot;两个大字. mlgj. 唉.\n怎么不来十张呢? 一百张都没有问题.\n我解数独只要两分钟. 一分钟用来输入, 一分钟用来抄.\n然而我太naive了.\nsad.\n中午颓得不行于是去zhihu上开了\u0026quot;高考之前自暴自弃\u0026quot;这个坑.\n下午做数学作业发现一道挺好玩的题.\n求证\\( (x-1)(e^{-x}-x)+2lnx \u0026lt; \\frac{2}{3} \\).\n打错了ovo\n中间有高能代换.\n吃完晚饭去晒夕阳. 觉得自己为什么这么废柴啊sad.\n晚上发现物理作业真**多. 强行假装我没看到卷子有两面好了.\n这就叫所谓的自暴自弃.\n所以我还是太年轻了.\nHistorical Comments laekov at 2016-05-10T23:26:35 ( f(x)=\\frac{1}{x^2}+\\frac{1}{x}+a\\ lnx )\nyeguanghao at 2016-05-11T00:40:45 ( (x-1)(e^{-x}-x)-2lnx\u0026lt; \\frac{2}{3} )\nyeguanghao at 2016-05-11T00:41:00 我果然还是太年轻了\nyeguanghao at 2016-05-11T20:17:07 ( (0.5-1)(e^{-0.5}-0.5)-2ln(0.5)=1.33303 \u0026gt; \\frac{2}{3} ) ?","title":"20160510"},{"content":"人工高考倒计时28天.\n昨天又把倒计时搞错了幸好今天就发现了.\n然而我真的是智障呢.\n昨天晚上帮zhx做推广然而似乎没有人看. 我的造新闻水平还是太低了啊.\n不得不感叹时光飞逝啊. 还感觉当年和zhx在305打森林冰火人的时候就是昨天呢.\n于是早上升旗的时候好困.\n数学课被题虐了. 下课才发现mdzz.\n体育课考1000. 非要在这种时候这种天气考试么. 于是果断水了个4分钟. 想想我当年是3分钟的男人呢. 唉唉好汉不提当年勇. 然而. 就让那些东西消散在风里吧.\n然而腿痛. 打球还和nuzzi撞了一下膝盖. 感觉内伤了sad.\n中午在zhihu上看到一个奇怪的脑洞小说于是忘了做作业. 手机果然是生产力杀手.\n下午听说物理老师开车开到交警大队去了. 233.\n于是3节连续的英语课.\n晚上做数学再被虐一遍. 我的数学真是没救了.\n然而qbq也是效率杀手.\n还有那啥yjq虽然你心里难受但是要装出一副很正常的样子嘛不然招打啊.\n第一次看到钦妹儿打滚撒娇. 已截图.\n所以我还是太年轻了.\n","permalink":"/diary/a65785/","summary":"人工高考倒计时28天.\n昨天又把倒计时搞错了幸好今天就发现了.\n然而我真的是智障呢.\n昨天晚上帮zhx做推广然而似乎没有人看. 我的造新闻水平还是太低了啊.\n不得不感叹时光飞逝啊. 还感觉当年和zhx在305打森林冰火人的时候就是昨天呢.\n于是早上升旗的时候好困.\n数学课被题虐了. 下课才发现mdzz.\n体育课考1000. 非要在这种时候这种天气考试么. 于是果断水了个4分钟. 想想我当年是3分钟的男人呢. 唉唉好汉不提当年勇. 然而. 就让那些东西消散在风里吧.\n然而腿痛. 打球还和nuzzi撞了一下膝盖. 感觉内伤了sad.\n中午在zhihu上看到一个奇怪的脑洞小说于是忘了做作业. 手机果然是生产力杀手.\n下午听说物理老师开车开到交警大队去了. 233.\n于是3节连续的英语课.\n晚上做数学再被虐一遍. 我的数学真是没救了.\n然而qbq也是效率杀手.\n还有那啥yjq虽然你心里难受但是要装出一副很正常的样子嘛不然招打啊.\n第一次看到钦妹儿打滚撒娇. 已截图.\n所以我还是太年轻了.","title":"20160509"},{"content":"人工高考倒计时29天.\n最近心情好狂暴啊好想打人啊.\n早上睡到10点ovo.\n中午在家里玩到2点. 我真是没救了. 还是做完了作业.\n然后\u0026hellip;\n我真是智障.\n就是这个坑爹东西.\n\\(\\int\\frac{dx}{1+sin^2x}\\)\n居然想了一个小时.\n我真是没救了. 找块豆腐撞死算了.\n玩cs颓得不亦乐乎.\n我真是没救了.\nHistorical Comments yeguanghao at 2016-05-09T00:41:50 上下同乘$csc^2 x$?\nlaekov at 2016-05-09T22:29:08 @yeghuanghao 是的就这么一个智障玩意我对着看了一个小时才看出来. MathJax行内公式用(\nyeguanghao at 2016-05-09T23:58:48 (csc^2 x$)\\\n","permalink":"/diary/50c565/","summary":"人工高考倒计时29天.\n最近心情好狂暴啊好想打人啊.\n早上睡到10点ovo.\n中午在家里玩到2点. 我真是没救了. 还是做完了作业.\n然后\u0026hellip;\n我真是智障.\n就是这个坑爹东西.\n\\(\\int\\frac{dx}{1+sin^2x}\\)\n居然想了一个小时.\n我真是没救了. 找块豆腐撞死算了.\n玩cs颓得不亦乐乎.\n我真是没救了.\nHistorical Comments yeguanghao at 2016-05-09T00:41:50 上下同乘$csc^2 x$?\nlaekov at 2016-05-09T22:29:08 @yeghuanghao 是的就这么一个智障玩意我对着看了一个小时才看出来. MathJax行内公式用(\nyeguanghao at 2016-05-09T23:58:48 (csc^2 x$)\\","title":"20160508"},{"content":"人工高考倒计时0x1e天.\n居然有人催更啊. 受宠若惊.\n今天发生了什么呢?\n早上那么好的天气应该待在家里睡觉啊. 然而要去上学. 梦游去了当然是可以原谅的喽.\n中午发现似乎有什么事情没有做? 然后就下去打球去了. 晚上回来才发现是没有打照片.\n和班上大腿去打球就是爽啊. 虐暴野场啊. 然而水坝哥并没有出现.\n下午考语文好鬼畜. 我一直以为\u0026quot;主要看气质\u0026quot;的意思是空气质量啊!!! 然后就开始乱批. 感觉最近特别有批判精神, 看到什么东西都想批判一番 ovo.\nzhihu上的问题越发鬼畜了.\n下午下课被lym拉去接着打球. fjm还是fjm的同学的妹子居然坐那陪男朋友打球. 被秀了一脸啊摔.\n然而平行班的同学打得真的好拼. 而且大腿不够粗被虐惨了.\n中途抢了张玉棍(不知道张老师的名字怎么写雾)老师的球, 于是被同学提醒\u0026quot;小心张老师扣你的分\u0026quot;. 233333. 然而张老师又不教我啊.\n再说了, 球场上体现对对手的尊重, 难道不就是应该拼尽全力把对方虐得体无完肤?\n然而悲伤地发现我的篮球技术和cs技术一样差得体无完肤. sad.\n所以我还真是一无所长啊.\n所以我还是太年轻了.\nHistorical Comments yeguanghao at 2016-05-07T22:30:09 何姥爷周末还上课？ Orz\nlaekov at 2016-05-07T22:57:26 @yeguanghao 高三周六一直都要上课啊\u0026hellip;\n","permalink":"/diary/955cb6/","summary":"人工高考倒计时0x1e天.\n居然有人催更啊. 受宠若惊.\n今天发生了什么呢?\n早上那么好的天气应该待在家里睡觉啊. 然而要去上学. 梦游去了当然是可以原谅的喽.\n中午发现似乎有什么事情没有做? 然后就下去打球去了. 晚上回来才发现是没有打照片.\n和班上大腿去打球就是爽啊. 虐暴野场啊. 然而水坝哥并没有出现.\n下午考语文好鬼畜. 我一直以为\u0026quot;主要看气质\u0026quot;的意思是空气质量啊!!! 然后就开始乱批. 感觉最近特别有批判精神, 看到什么东西都想批判一番 ovo.\nzhihu上的问题越发鬼畜了.\n下午下课被lym拉去接着打球. fjm还是fjm的同学的妹子居然坐那陪男朋友打球. 被秀了一脸啊摔.\n然而平行班的同学打得真的好拼. 而且大腿不够粗被虐惨了.\n中途抢了张玉棍(不知道张老师的名字怎么写雾)老师的球, 于是被同学提醒\u0026quot;小心张老师扣你的分\u0026quot;. 233333. 然而张老师又不教我啊.\n再说了, 球场上体现对对手的尊重, 难道不就是应该拼尽全力把对方虐得体无完肤?\n然而悲伤地发现我的篮球技术和cs技术一样差得体无完肤. sad.\n所以我还真是一无所长啊.\n所以我还是太年轻了.\nHistorical Comments yeguanghao at 2016-05-07T22:30:09 何姥爷周末还上课？ Orz\nlaekov at 2016-05-07T22:57:26 @yeguanghao 高三周六一直都要上课啊\u0026hellip;","title":"20160507"},{"content":"人工高考倒计时0x1f天.\n今天忘撕计时纸了sad.\n早上起来下雨然而并不凉快.\n出门的时候居然真的听了娘亲的话没拿充电宝. wtf. 手机电压根本不够一点也不凉快.\n英语课并不敢吹风扇.\n花了一节数学课加一节语文课还是没想对那道数学sb题.\n然后yzy一句话就点醒了orz. 我太弱啦. 其实之前做过的模型, 不过. ovo.\n中午去打作文的时候发现校门口有莫名其妙的街访. 然后低头闪过.\n下午考理综爆炸了呢. 错了一堆选择题sad.\n晚上忙着做作业都没对答案ovo.\n教室里真是吵得要死. 还闷.\n同桌玩手机被值班的班主任捸到了. 然而我在几分钟前嫌音乐吵扔掉了耳机233.\n所以我还是太弱啦sad.\n说好的五月可以玩呢? 现在真的有点期望明天就高考了ovo.\n然后就可以愉快地去货站当搬运工啦~\n","permalink":"/diary/e3816e/","summary":"人工高考倒计时0x1f天.\n今天忘撕计时纸了sad.\n早上起来下雨然而并不凉快.\n出门的时候居然真的听了娘亲的话没拿充电宝. wtf. 手机电压根本不够一点也不凉快.\n英语课并不敢吹风扇.\n花了一节数学课加一节语文课还是没想对那道数学sb题.\n然后yzy一句话就点醒了orz. 我太弱啦. 其实之前做过的模型, 不过. ovo.\n中午去打作文的时候发现校门口有莫名其妙的街访. 然后低头闪过.\n下午考理综爆炸了呢. 错了一堆选择题sad.\n晚上忙着做作业都没对答案ovo.\n教室里真是吵得要死. 还闷.\n同桌玩手机被值班的班主任捸到了. 然而我在几分钟前嫌音乐吵扔掉了耳机233.\n所以我还是太弱啦sad.\n说好的五月可以玩呢? 现在真的有点期望明天就高考了ovo.\n然后就可以愉快地去货站当搬运工啦~","title":"20160506"},{"content":"人工高考倒计时0x20天.\n要热死了. 淦.\n听说11班比我们更惨. 对面2班关着门闷声吹空调. 现在后悔没有去对面勾搭几个妹子了.\n于是糊了个风车玩了至少半个小时ovo.\n明天还是带个风扇去吧.\n热天会莫名想起在404吹空调的日子呢. 还会有些伤心呢.\n热的后果是智商下降sad.\n于是又要打作文, 还要给语文老师背锅. unhappy.\n所以我还是太年轻了.\n","permalink":"/diary/a54e1f/","summary":"人工高考倒计时0x20天.\n要热死了. 淦.\n听说11班比我们更惨. 对面2班关着门闷声吹空调. 现在后悔没有去对面勾搭几个妹子了.\n于是糊了个风车玩了至少半个小时ovo.\n明天还是带个风扇去吧.\n热天会莫名想起在404吹空调的日子呢. 还会有些伤心呢.\n热的后果是智商下降sad.\n于是又要打作文, 还要给语文老师背锅. unhappy.\n所以我还是太年轻了.","title":"20160505"},{"content":"人工高考倒计时33天.\n希望没把天数算错.\nyjq你站出来\u0026hellip; 你数数我到底上过几次140. QaQ.\n然而我写的本来就是离散剧嘛.\n上午好困zzz.\n中午收到了书happy. 然后做了一中午解析几何题.\n之前觉得函数题比算几题更烦. 现在觉得算几题比函数题烦. ovo.\n下午更困zzzzzz.\n虽然嗓子痛还是去打球.\n然后热死了.\n然后热死了.\n然后数学考试就把最后俩题都搞错了. sad.\n晚上偷偷看小说. 然而水坝哥没有出现怎么感觉亏了呢.\nhosts又炸了呢. sad.\n所以我还是太年轻啦.\n","permalink":"/diary/d28f20/","summary":"人工高考倒计时33天.\n希望没把天数算错.\nyjq你站出来\u0026hellip; 你数数我到底上过几次140. QaQ.\n然而我写的本来就是离散剧嘛.\n上午好困zzz.\n中午收到了书happy. 然后做了一中午解析几何题.\n之前觉得函数题比算几题更烦. 现在觉得算几题比函数题烦. ovo.\n下午更困zzzzzz.\n虽然嗓子痛还是去打球.\n然后热死了.\n然后热死了.\n然后数学考试就把最后俩题都搞错了. sad.\n晚上偷偷看小说. 然而水坝哥没有出现怎么感觉亏了呢.\nhosts又炸了呢. sad.\n所以我还是太年轻啦.","title":"20160504"},{"content":"人工高考倒计时34天.\n成人礼.\n其实穿西服一点都没有t恤运动裤舒服嘛. 人类为什么要发明这么奇怪的衣服来为难自己呢?\n在操场上听乱扯的时候感觉好热好热好热.\n也没有妹子来和我合影啊. 唉. 果然是**.\n还有, 爹被别人当作哥哥是怎样一种体验?\n对面班的妹子穿了汉服感觉好好看233. 尤其喜欢某个妹子的头绳. 我也想扎好看的头绳~ 然后中午+2同学试图给我别发卡233. 首先我要能忍受超过1厘米的头发啊. 唉算了.\n在穿了一上午衬衣之后放弃了.\n下午被化学老师怒斥\u0026quot;你需要补习基础\u0026quot;. 唉, naive.\n晚上试图提高自己的积分水平, 然而还是蠢哭.\n晚上还研究了一下上午发的宪法, 得出的结论是, 这玩意就是一装饰嘛.\n唉, 所以我还是太年轻了.\nHistorical Comments ArtemisLiu at 2016-05-04T09:14:03 何姥爷快把头发留长，你爹好帅😍\n","permalink":"/diary/08b892/","summary":"人工高考倒计时34天.\n成人礼.\n其实穿西服一点都没有t恤运动裤舒服嘛. 人类为什么要发明这么奇怪的衣服来为难自己呢?\n在操场上听乱扯的时候感觉好热好热好热.\n也没有妹子来和我合影啊. 唉. 果然是**.\n还有, 爹被别人当作哥哥是怎样一种体验?\n对面班的妹子穿了汉服感觉好好看233. 尤其喜欢某个妹子的头绳. 我也想扎好看的头绳~ 然后中午+2同学试图给我别发卡233. 首先我要能忍受超过1厘米的头发啊. 唉算了.\n在穿了一上午衬衣之后放弃了.\n下午被化学老师怒斥\u0026quot;你需要补习基础\u0026quot;. 唉, naive.\n晚上试图提高自己的积分水平, 然而还是蠢哭.\n晚上还研究了一下上午发的宪法, 得出的结论是, 这玩意就是一装饰嘛.\n唉, 所以我还是太年轻了.\nHistorical Comments ArtemisLiu at 2016-05-04T09:14:03 何姥爷快把头发留长，你爹好帅😍","title":"20160503"},{"content":"人工高考倒计时35天.\n颓废啊颓废.\n上午睡到10点ovo. 然后把极坐标grapher搞了. 顺便发现了为什么昨天去掉换行之后就挂掉了.\n有极坐标就可以画出好看的曲线啦.\n然而cs技术还是废柴.\n花了几乎整个下午来提高自己的积分能力. 感觉自己要弱暴了. 主要是基础积分表不熟悉. 主要就是sec和csc这两个严重不熟. sad.\n晚上才发现maya还有个成人礼的信没写. 然后听说别人班只有家长写不用学生写? maya.\n然后看电影玩. 再打cs估计就要砸键盘了.\n听说百度推广的医院出事了? 好开心啊. 赶紧闹闹闹把百度闹垮了最好. happy.\n所以我还是太年轻了.\nUpdate:\n晚上看完了语文老师推荐的电影. 高考前推荐这电影是什么心态ovo. 只要努力学习, 就算智障也能上pku? 到最后才开始觉得女主还是有点漂亮的233. 跑题了ovo.\n教训是, 考试之前才不要立flag, 喝什么\u0026quot;合格咖啡\u0026quot;.\n","permalink":"/diary/4f07d2/","summary":"人工高考倒计时35天.\n颓废啊颓废.\n上午睡到10点ovo. 然后把极坐标grapher搞了. 顺便发现了为什么昨天去掉换行之后就挂掉了.\n有极坐标就可以画出好看的曲线啦.\n然而cs技术还是废柴.\n花了几乎整个下午来提高自己的积分能力. 感觉自己要弱暴了. 主要是基础积分表不熟悉. 主要就是sec和csc这两个严重不熟. sad.\n晚上才发现maya还有个成人礼的信没写. 然后听说别人班只有家长写不用学生写? maya.\n然后看电影玩. 再打cs估计就要砸键盘了.\n听说百度推广的医院出事了? 好开心啊. 赶紧闹闹闹把百度闹垮了最好. happy.\n所以我还是太年轻了.\nUpdate:\n晚上看完了语文老师推荐的电影. 高考前推荐这电影是什么心态ovo. 只要努力学习, 就算智障也能上pku? 到最后才开始觉得女主还是有点漂亮的233. 跑题了ovo.\n教训是, 考试之前才不要立flag, 喝什么\u0026quot;合格咖啡\u0026quot;.","title":"20160502"},{"content":"人工高考倒计时36天.\n五一了呢.\n又过去一个月.\n然而又颓废过去了.\n早上睡得挺晚.\n然后做作业.\n然后做作业.\n然后做作业.\n下午去写了个grapher, 然而我的程序水平已经捉鸡到不能看了. 不过这回至少把东西都封闭成类了感觉挺萌的. 然后就没有时间刷数学题了.\n晚上去理了个发. 好想留长头发啊然而每次头发稍微长了就不能忍QwQ.\n我还是太年轻了.\n","permalink":"/diary/4ac71e/","summary":"人工高考倒计时36天.\n五一了呢.\n又过去一个月.\n然而又颓废过去了.\n早上睡得挺晚.\n然后做作业.\n然后做作业.\n然后做作业.\n下午去写了个grapher, 然而我的程序水平已经捉鸡到不能看了. 不过这回至少把东西都封闭成类了感觉挺萌的. 然后就没有时间刷数学题了.\n晚上去理了个发. 好想留长头发啊然而每次头发稍微长了就不能忍QwQ.\n我还是太年轻了.","title":"20160501"},{"content":"人工高考倒计时37天.\n又颓废了一天.\n早上似乎在发卷子和发卷子和发卷子.\n廖老师: \u0026ldquo;睡不着的时候就换个姿势. 我喜欢伸展开睡.\u0026rdquo; (开始伸手)\n众: \u0026ldquo;你夫人真惨, 成天被打得鼻青脸肿.\u0026rdquo;\n10s后.\n众: \u0026ldquo;有毒.\u0026rdquo;\n下课. \u0026ldquo;yzy哥哥~\u0026rdquo;.\n中午他们去打球, 我在打作文QaQ.\n下午自习, 以为可以和周末作业缠绵一番了, 然后就发了一堆英语卷子. 做了老半天才做完. sad.\n放学搬桌子的时候强迫症犯了. 然后就没有然后了.\n回家正在和娘亲闲聊, 三诊成绩就来了. 居然比二诊分还高. 只能说改得真是水.\n物理小数位数不对不扣分, 电路图把V表画成A表加电阻不扣分. 化学方程式少写了氮气根本没有配平不扣分. 1-甲基丙烯写成了1-甲基-2-丙醇, 这都没扣分. 真是醉了.\nyzy: \u0026ldquo;我真是*了poi了.\u0026rdquo;\n后来听说cdqz有一堆上700的然而平均分还是被树德吊打. 呵呵哒. cdqz要毁在我们这届手里喽.\n晚上打cs. 我的水平真是越来越差了啊啊啊. 呵呵呵. sad.\n晚上出去散步, 鬼使神差地又去天桥上逛了一圈. 那天的事留下了深刻的印象啊. 虽然成七的音乐厅, 比这个高到不知道哪里去了.\n其实我也挺喜欢那天桥的. 站在机场高速上面, 看车以100码的速度向我撞来然后从脚下闪过去跑远. 浪漫max. 然而从来都是一个人去吹风的嘛. ovo. 以后应该在右手上套个假发.\n所以啊, 我还是真的太年轻了.\n","permalink":"/diary/f17346/","summary":"人工高考倒计时37天.\n又颓废了一天.\n早上似乎在发卷子和发卷子和发卷子.\n廖老师: \u0026ldquo;睡不着的时候就换个姿势. 我喜欢伸展开睡.\u0026rdquo; (开始伸手)\n众: \u0026ldquo;你夫人真惨, 成天被打得鼻青脸肿.\u0026rdquo;\n10s后.\n众: \u0026ldquo;有毒.\u0026rdquo;\n下课. \u0026ldquo;yzy哥哥~\u0026rdquo;.\n中午他们去打球, 我在打作文QaQ.\n下午自习, 以为可以和周末作业缠绵一番了, 然后就发了一堆英语卷子. 做了老半天才做完. sad.\n放学搬桌子的时候强迫症犯了. 然后就没有然后了.\n回家正在和娘亲闲聊, 三诊成绩就来了. 居然比二诊分还高. 只能说改得真是水.\n物理小数位数不对不扣分, 电路图把V表画成A表加电阻不扣分. 化学方程式少写了氮气根本没有配平不扣分. 1-甲基丙烯写成了1-甲基-2-丙醇, 这都没扣分. 真是醉了.\nyzy: \u0026ldquo;我真是*了poi了.\u0026rdquo;\n后来听说cdqz有一堆上700的然而平均分还是被树德吊打. 呵呵哒. cdqz要毁在我们这届手里喽.\n晚上打cs. 我的水平真是越来越差了啊啊啊. 呵呵呵. sad.\n晚上出去散步, 鬼使神差地又去天桥上逛了一圈. 那天的事留下了深刻的印象啊. 虽然成七的音乐厅, 比这个高到不知道哪里去了.\n其实我也挺喜欢那天桥的. 站在机场高速上面, 看车以100码的速度向我撞来然后从脚下闪过去跑远. 浪漫max. 然而从来都是一个人去吹风的嘛. ovo. 以后应该在右手上套个假发.\n所以啊, 我还是真的太年轻了.","title":"20160430"},{"content":"人工高考倒计时38天.\n颓废的一天.\n周围一群打游戏的人到了自习课真是吵死了sad.\n理综比想像中的错得多.\n晚上和付老聊天说到能听课的日子还有三个星期了.\n然而以后语文课还要被检查笔记了呢. ovo.\n然后lk同学的\u0026quot;大型情感连续剧\u0026quot;并没有断更嘛. @yeguanghao. 只是从看心情更变成了周更而已. 然而idy怎么这么强啊orz.\n发现我写的东西大概可以叫\u0026quot;离散剧\u0026quot;? happy.\n晚上喝了一杯西瓜汁然后装了一肚子水去跑步QaQ. 然而并没有遇到昨天那对小情侣. 然而看到了更颠覆感观的事, 一对cp骑自行车, 女生, 搭, 男生!!! 这男生真幸福啊我也想被搭啊. 然后想想能搭得动我的女生得有多重才能平衡, maya还是算了吧我应该苦练车技.\n想起了当年在thu搭zhx歪歪扭扭差点撞人撞树233.\n所以我没救啦.\nHistorical Comments yeguanghao at 2016-04-30T00:35:01 不管，反正你不断更\nMiles at 2016-04-30T11:37:48 不管,反正你不断更\nArtemisLiu at 2016-05-03T15:14:17 不管，反正你不断更\n","permalink":"/diary/8f0658/","summary":"人工高考倒计时38天.\n颓废的一天.\n周围一群打游戏的人到了自习课真是吵死了sad.\n理综比想像中的错得多.\n晚上和付老聊天说到能听课的日子还有三个星期了.\n然而以后语文课还要被检查笔记了呢. ovo.\n然后lk同学的\u0026quot;大型情感连续剧\u0026quot;并没有断更嘛. @yeguanghao. 只是从看心情更变成了周更而已. 然而idy怎么这么强啊orz.\n发现我写的东西大概可以叫\u0026quot;离散剧\u0026quot;? happy.\n晚上喝了一杯西瓜汁然后装了一肚子水去跑步QaQ. 然而并没有遇到昨天那对小情侣. 然而看到了更颠覆感观的事, 一对cp骑自行车, 女生, 搭, 男生!!! 这男生真幸福啊我也想被搭啊. 然后想想能搭得动我的女生得有多重才能平衡, maya还是算了吧我应该苦练车技.\n想起了当年在thu搭zhx歪歪扭扭差点撞人撞树233.\n所以我没救啦.\nHistorical Comments yeguanghao at 2016-04-30T00:35:01 不管，反正你不断更\nMiles at 2016-04-30T11:37:48 不管,反正你不断更\nArtemisLiu at 2016-05-03T15:14:17 不管，反正你不断更","title":"20160429"},{"content":"人工高考倒计时39天.\n三诊day2.\n昨天考完语文感觉自己萌萌哒. 考完数学觉得完了要滚粗前100了. 考完理综发现昨天立了个flag明明是要滚粗前200了. 考完英语觉得自己应该回家研究一下上哪个二本了.\n我觉得这回化学题又要被廖老婊了呢. 好奇怪啊. 同分异构只有2个还只让写数字, 害得我纠结了好久.\n物理实验题忘了取2位小数了啊.\n生物那个更多的无机盐是什么情况?\n考完理综去打球好热还出了一身汗还遇到了水坝哥. sad.\n中午坐在台子上晒太阳. 突然发现高中的日子也不剩几天了莫名伤感. 似乎是虚度了时光呢.\n下午英语. maya怎么阅读题都不确定的样子. 完型打了3个问号, 结果对答案发现三处问号都选错了QaQ.\n晚自习颓废过去了. 毕竟没人管.\n晚上跑步回家, 然后, 在, 天桥, 上, 就, 看到了, 一, 对, 校, 服, c, p, 在, k, i, s, s !!!!!!!\n当我想描写一下的时候就感到自己的语文功底zhuoji了.\n阅av无数的我从没见过如此深情的kiss. 嘛, 就是一副就要负距离接触的样子.\nbtw校服是我不认识的校服. 有点像玉林中学那种蓝黑配色, 但是蓝色要偏灰一些.\n心中受到一万点暴击的laekov面无表情地走过去了.\n然而好后悔啊. 当时应该走上去拍拍那哥们, 然后递上一包杜蕾丝, 曰, 哥们, 开这辆车要注意安全啊, 不要像我一样车没毁人先亡. (雾, 怎么能这么没节操呢)\n然而并没有这么高端的道具.\n23333333333.\n所以我还是太年轻啦.\n","permalink":"/diary/4ea595/","summary":"人工高考倒计时39天.\n三诊day2.\n昨天考完语文感觉自己萌萌哒. 考完数学觉得完了要滚粗前100了. 考完理综发现昨天立了个flag明明是要滚粗前200了. 考完英语觉得自己应该回家研究一下上哪个二本了.\n我觉得这回化学题又要被廖老婊了呢. 好奇怪啊. 同分异构只有2个还只让写数字, 害得我纠结了好久.\n物理实验题忘了取2位小数了啊.\n生物那个更多的无机盐是什么情况?\n考完理综去打球好热还出了一身汗还遇到了水坝哥. sad.\n中午坐在台子上晒太阳. 突然发现高中的日子也不剩几天了莫名伤感. 似乎是虚度了时光呢.\n下午英语. maya怎么阅读题都不确定的样子. 完型打了3个问号, 结果对答案发现三处问号都选错了QaQ.\n晚自习颓废过去了. 毕竟没人管.\n晚上跑步回家, 然后, 在, 天桥, 上, 就, 看到了, 一, 对, 校, 服, c, p, 在, k, i, s, s !!!!!!!\n当我想描写一下的时候就感到自己的语文功底zhuoji了.\n阅av无数的我从没见过如此深情的kiss. 嘛, 就是一副就要负距离接触的样子.\nbtw校服是我不认识的校服. 有点像玉林中学那种蓝黑配色, 但是蓝色要偏灰一些.\n心中受到一万点暴击的laekov面无表情地走过去了.\n然而好后悔啊. 当时应该走上去拍拍那哥们, 然后递上一包杜蕾丝, 曰, 哥们, 开这辆车要注意安全啊, 不要像我一样车没毁人先亡. (雾, 怎么能这么没节操呢)\n然而并没有这么高端的道具.\n23333333333.\n所以我还是太年轻啦.","title":"20160428 三诊day2"},{"content":"人工高考倒计时40天.\n三诊昂. 早上不用辣么早到校, 然而还是只有辣么早去教室坐起. 幸好教室不是考场. 幸福ing.\n于是一觉碎到考试. 原来考前不能进考场啊瞬间幸福感++.\n语文考试似乎很奇怪? 真的把散文当成传记了幸好没做它. 多材料把分值看错了真是**. 作文也不是时评啊. 感觉三诊语文就是给大家娱乐的?\n中午太阳蛮不错的然而不敢打球. 去操场逛了几圈之后颓废地睡觉.\n下午数学. 开考之前先看最后一题, 从没见过如此轻松愉快的最后一题. 然后, 就, gg, 了.\n所以说flag不要立得这么厉害啊.\n被一道立几填空卡了至少10min还算错了. 幸好最后检查的时候检查出来了.\n最后一道填空也没做对. 最近太痴迷于求导以至于忘记了正常的做题方法.\n解几题真不是让我们开心的? 然而真的还算错了. 俩整数搞出了\\(\\sqrt{2}\\). 幸好检查了一下发现了.\n最后一题求导的时候忘了\\(e^x\\)的分母上还有x了啊我摔.\n晚上打cs. 感觉自己的技术真的差到家了. QwQ.\n然后去把MathJax造成了公式编辑器. 然而辣么简单的东西我居然造了辣么久. 没救了. QwQ.\n打算再造个画图的玩意. 但是突然懒癌发作不想造了.\n所以我还是太弱啦.\n","permalink":"/diary/76c3c6/","summary":"人工高考倒计时40天.\n三诊昂. 早上不用辣么早到校, 然而还是只有辣么早去教室坐起. 幸好教室不是考场. 幸福ing.\n于是一觉碎到考试. 原来考前不能进考场啊瞬间幸福感++.\n语文考试似乎很奇怪? 真的把散文当成传记了幸好没做它. 多材料把分值看错了真是**. 作文也不是时评啊. 感觉三诊语文就是给大家娱乐的?\n中午太阳蛮不错的然而不敢打球. 去操场逛了几圈之后颓废地睡觉.\n下午数学. 开考之前先看最后一题, 从没见过如此轻松愉快的最后一题. 然后, 就, gg, 了.\n所以说flag不要立得这么厉害啊.\n被一道立几填空卡了至少10min还算错了. 幸好最后检查的时候检查出来了.\n最后一道填空也没做对. 最近太痴迷于求导以至于忘记了正常的做题方法.\n解几题真不是让我们开心的? 然而真的还算错了. 俩整数搞出了\\(\\sqrt{2}\\). 幸好检查了一下发现了.\n最后一题求导的时候忘了\\(e^x\\)的分母上还有x了啊我摔.\n晚上打cs. 感觉自己的技术真的差到家了. QwQ.\n然后去把MathJax造成了公式编辑器. 然而辣么简单的东西我居然造了辣么久. 没救了. QwQ.\n打算再造个画图的玩意. 但是突然懒癌发作不想造了.\n所以我还是太弱啦.","title":"20160427 三诊day1"},{"content":"人工高考倒计时41天.\n明天三诊呐. 都已经没有什么感觉了.\n白天被数学题卡了好久. 最后发现自己真是zz.\n太阳不错可惜没有机会打球.\n晚上接着颓cs. 有人表示我应该找一个能督促我学习的GF? QAQ\n又颓废过去了好伤心. 明天考试需要找一点事干. (雾)\n然而我的心还是会跳啊. 真是大新闻.\nygh表示srk评论会变成空的? 然而我真的什么也没有做啊?\n所以我还是太年轻啦.\nHistorical Comments yeguanghao at 2016-04-27T01:21:44 并不是会变成空的，只是显示Error了……看来是被据掉了啊，明明140字都不到qwq\nyeguanghao at 2016-04-27T01:22:14 何姥爷三诊加油\n","permalink":"/diary/86bf7f/","summary":"人工高考倒计时41天.\n明天三诊呐. 都已经没有什么感觉了.\n白天被数学题卡了好久. 最后发现自己真是zz.\n太阳不错可惜没有机会打球.\n晚上接着颓cs. 有人表示我应该找一个能督促我学习的GF? QAQ\n又颓废过去了好伤心. 明天考试需要找一点事干. (雾)\n然而我的心还是会跳啊. 真是大新闻.\nygh表示srk评论会变成空的? 然而我真的什么也没有做啊?\n所以我还是太年轻啦.\nHistorical Comments yeguanghao at 2016-04-27T01:21:44 并不是会变成空的，只是显示Error了……看来是被据掉了啊，明明140字都不到qwq\nyeguanghao at 2016-04-27T01:22:14 何姥爷三诊加油","title":"20160426"},{"content":"人工高考倒计时42天.\n早上升旗的时候国旗班交接. 这个交接没有太阳.\n想起去年的交接. 一年过去了. 手动骨灰.\n体育课打球happy. 成功地对lym反帽虽然我感觉运气成分很大. 求lym以后不要每场专门来帽我啊qwq.\n下午的时候有个奇怪的心理辅导. 某些人真是破坏气氛啊. 在地上滚的时候好痛qwq.\n晚上发现从没见过如此水的导数题.\n然后看杂志看了一个小时ovo.\n晚上回家终于记得了刮胡子.\n还要打作文ovo.\nbtw @yeguanghao, 说周末穿校服在外面混的多半是高新的是有道理的啊.\n例证一, 我高一的时候去嘉祥参加一个多校活动. 高新坐的那边全体整齐的白色校服. 林荫这片一副社会中学的着装. 印象深刻.\n例证二, scoi2015在uestc的集训. 当年穿校服混的多半也是高新的吧.\n结论, 高新的同学比林荫的同学遵章守纪爱学校.\nHistorical Comments yeguanghao at 2016-04-26T02:23:46 yeguanghao at 2016-04-26T02:24:42 yeguanghao at 2016-04-26T02:25:08 为什么我只能发空回复，触发了什么奇怪的bug吗\nyeguanghao at 2016-04-26T02:25:22 我可能是太久没有去学校，也太久没有穿校服，完全无感ovo\nyeguanghao at 2016-04-26T02:25:37 回复有字数限制的吗ovo\nyeguanghao at 2016-04-26T02:26:13 不要在意我刷回复啊……迷之字数限制\nyeguanghao at 2016-04-26T02:26:22 而且现在没有lk的大型情感连续剧可以看了，只有看您的了ovo\nlaekov at 2016-04-26T19:24:07 @yeguanghao 你发了什么? 超长应该会被直接拒绝掉啊\nlaekov at 2016-04-26T19:26:34 还是说奇怪的标点会爆炸? ~!@#$%^\u0026amp;*()_+{}|:\u0026quot;\u0026lt;\u0026gt;?`1234567890-=[];\u0026rsquo;,./\nlaekov at 2016-04-26T19:27:01 毫无问题啊. 什么鬼?\n","permalink":"/diary/58a1f3/","summary":"人工高考倒计时42天.\n早上升旗的时候国旗班交接. 这个交接没有太阳.\n想起去年的交接. 一年过去了. 手动骨灰.\n体育课打球happy. 成功地对lym反帽虽然我感觉运气成分很大. 求lym以后不要每场专门来帽我啊qwq.\n下午的时候有个奇怪的心理辅导. 某些人真是破坏气氛啊. 在地上滚的时候好痛qwq.\n晚上发现从没见过如此水的导数题.\n然后看杂志看了一个小时ovo.\n晚上回家终于记得了刮胡子.\n还要打作文ovo.\nbtw @yeguanghao, 说周末穿校服在外面混的多半是高新的是有道理的啊.\n例证一, 我高一的时候去嘉祥参加一个多校活动. 高新坐的那边全体整齐的白色校服. 林荫这片一副社会中学的着装. 印象深刻.\n例证二, scoi2015在uestc的集训. 当年穿校服混的多半也是高新的吧.\n结论, 高新的同学比林荫的同学遵章守纪爱学校.\nHistorical Comments yeguanghao at 2016-04-26T02:23:46 yeguanghao at 2016-04-26T02:24:42 yeguanghao at 2016-04-26T02:25:08 为什么我只能发空回复，触发了什么奇怪的bug吗\nyeguanghao at 2016-04-26T02:25:22 我可能是太久没有去学校，也太久没有穿校服，完全无感ovo\nyeguanghao at 2016-04-26T02:25:37 回复有字数限制的吗ovo\nyeguanghao at 2016-04-26T02:26:13 不要在意我刷回复啊……迷之字数限制\nyeguanghao at 2016-04-26T02:26:22 而且现在没有lk的大型情感连续剧可以看了，只有看您的了ovo\nlaekov at 2016-04-26T19:24:07 @yeguanghao 你发了什么? 超长应该会被直接拒绝掉啊\nlaekov at 2016-04-26T19:26:34 还是说奇怪的标点会爆炸? ~!@#$%^\u0026amp;*()_+{}|:\u0026quot;\u0026lt;\u0026gt;?`1234567890-=[];\u0026rsquo;,./\nlaekov at 2016-04-26T19:27:01 毫无问题啊.","title":"20160425"},{"content":"人工高考倒计时43天.\n晚上折腾桥接路由器. 然后差点忘写qwq.\n早上在图书馆做作业, 对面居然坐了一个穿cdqz校服的女生. 好神奇. 我猜周末还穿校服的多半是高新的?\n下午接着做作业. 然后学习了一下进阶的洛比达, 还有taylor的一系列东西. 感觉好神奇好神奇好神奇. 姿势水平++. 然而高考并不能用拉格朗日中值定理什么的qwq. 外国人名好难记\n晚上打cs的ping都100+了, 不时还能上200, 玩ball啊. 只有单机打bot了. 感觉这个网络已经坑废我两个游戏了sad. 后来发现似乎ping局域网网关都要100? 然后去折腾路由器桥接. 好烦啊. 最后发现两个的ssid要一样才行. 然后就感觉好鬼蓄. mac过滤也没法同步, 只好退回密码时代ovo.\n然而流量不够必需等到11点之后再上网TAT.\n姐姐说最后一个月左右巴不得明天就高考了, 想想还挺有道理的ovo.\n所以我还是太年轻了.\nHistorical Comments yeguanghao at 2016-04-24T23:51:37 高新的周末也不穿校服好吗，手动再见\nArtemisLiu at 2016-04-27T23:07:27 我上镜了诶ovo\nArtemisLiu at 2016-04-27T23:08:35 我上镜了诶ovo\n","permalink":"/diary/0f02ca/","summary":"人工高考倒计时43天.\n晚上折腾桥接路由器. 然后差点忘写qwq.\n早上在图书馆做作业, 对面居然坐了一个穿cdqz校服的女生. 好神奇. 我猜周末还穿校服的多半是高新的?\n下午接着做作业. 然后学习了一下进阶的洛比达, 还有taylor的一系列东西. 感觉好神奇好神奇好神奇. 姿势水平++. 然而高考并不能用拉格朗日中值定理什么的qwq. 外国人名好难记\n晚上打cs的ping都100+了, 不时还能上200, 玩ball啊. 只有单机打bot了. 感觉这个网络已经坑废我两个游戏了sad. 后来发现似乎ping局域网网关都要100? 然后去折腾路由器桥接. 好烦啊. 最后发现两个的ssid要一样才行. 然后就感觉好鬼蓄. mac过滤也没法同步, 只好退回密码时代ovo.\n然而流量不够必需等到11点之后再上网TAT.\n姐姐说最后一个月左右巴不得明天就高考了, 想想还挺有道理的ovo.\n所以我还是太年轻了.\nHistorical Comments yeguanghao at 2016-04-24T23:51:37 高新的周末也不穿校服好吗，手动再见\nArtemisLiu at 2016-04-27T23:07:27 我上镜了诶ovo\nArtemisLiu at 2016-04-27T23:08:35 我上镜了诶ovo","title":"20160424"},{"content":"人工高考倒计时44天.\novovoov.\n上午好颓.\n然后就喝了白花蛇草水. 整个人都发神经病了.\n中午去打了会球. 感觉还是有点准啊. 怎么打起来就不行了呢?\n下午考数学ovo. 同学们你们要不要这么夸张啊ovo.\n晚上又练习英语作文ovo. 然而高考英语打死上不到140 sad.\n所以, 我还, 是, 太, 年轻, 了.\n","permalink":"/diary/a77dad/","summary":"人工高考倒计时44天.\novovoov.\n上午好颓.\n然后就喝了白花蛇草水. 整个人都发神经病了.\n中午去打了会球. 感觉还是有点准啊. 怎么打起来就不行了呢?\n下午考数学ovo. 同学们你们要不要这么夸张啊ovo.\n晚上又练习英语作文ovo. 然而高考英语打死上不到140 sad.\n所以, 我还, 是, 太, 年轻, 了.","title":"20160423"},{"content":"人工高考倒计时\\(3^2*5\\)天.\n白花蛇草水到货了happy. 最近作死技能++. 明天先拿去让yzy试试毒2333.\n早上依然好困.\n下午理综又爆炸了. 明明中午还给了门口拉二胡的老爷爷整整1元钱诶. 生物3道选择题gg. 物理倒数第二题总觉得多给了条件, 最后五分钟才看出坑然后生死时速算错了失败sad.\n晚上听到了久仰的罗晓辉老师的课orz. 罗老师真是生动形象orz.\n所以我真的是太年轻了.\nHistorical Comments ArtemisLiu at 2016-04-27T23:05:50 魏总说，一元钱也想考好理综hhh~\n","permalink":"/diary/d6e0d8/","summary":"人工高考倒计时\\(3^2*5\\)天.\n白花蛇草水到货了happy. 最近作死技能++. 明天先拿去让yzy试试毒2333.\n早上依然好困.\n下午理综又爆炸了. 明明中午还给了门口拉二胡的老爷爷整整1元钱诶. 生物3道选择题gg. 物理倒数第二题总觉得多给了条件, 最后五分钟才看出坑然后生死时速算错了失败sad.\n晚上听到了久仰的罗晓辉老师的课orz. 罗老师真是生动形象orz.\n所以我真的是太年轻了.\nHistorical Comments ArtemisLiu at 2016-04-27T23:05:50 魏总说，一元钱也想考好理综hhh~","title":"20160422"},{"content":"人工高考倒计时46天.\n依然是颓废的一天.\n早上数学课半节课做6道导数题. 然后发现自己经过上周末的练习之后似乎求导技巧++? 然后又算错了一大堆弱智地方. 最后一个题不能用参变分离硬上失败 sad.\n化学乐学某中做完辣hahaha.\n下午生物实验题感受到了绝望.\n晚上花了一个小时颓废_哑舍5_. 没救辣.\n所以我真的是过于年轻了.\n","permalink":"/diary/1c72b2/","summary":"人工高考倒计时46天.\n依然是颓废的一天.\n早上数学课半节课做6道导数题. 然后发现自己经过上周末的练习之后似乎求导技巧++? 然后又算错了一大堆弱智地方. 最后一个题不能用参变分离硬上失败 sad.\n化学乐学某中做完辣hahaha.\n下午生物实验题感受到了绝望.\n晚上花了一个小时颓废_哑舍5_. 没救辣.\n所以我真的是过于年轻了.","title":"20160421"},{"content":"人工高考倒计时47天.\n接着颓废的一天.\n上午做数学卷子ovo了.\n下午又做适应考试数学卷子错了一pala一副要下100分的样子啊. 3道填, 三角函数搞错定义域, 概率题没考虑概率, 立几题算错了, 解几题没算出来 23333333 没救啦.\n体育课作死地在阳光下打球然后差点中暑. 命中趋近于0好痛苦. 好**累. 主要是还没习惯夏天的节奏.\n然后去买了瓶汽水结果导致整个晚上都想吐. 一定是汽水里的有机酸和\\(H_2CO_3\\)导致我体液里的离子平衡移动, 缓冲合体系中的大量\\(HCO_3^{-}\\)与\\(H^{+}\\)结合生成碳酸, 碳酸分解为\\(CO_2(g)\\)导致胃里一股要冲出来的感觉. 如果手边有一瓶\\(NaOH\\)我一定甘之如饴一饮而尽. 想想晚自习的时候廖老师说他拿酸性\\(KMnO_4(aq)\\)泡脚, 感觉这也挺温和的吖.\n晚上尝试跑步回家. 夜幕下的城市也另有一番味道ovo 等窝有空了晚上跑远点去拍夜景玩. 然而真的有1km么? 感觉地图测距逗了? ovo\n今天在zhihu上看到若干强行orz的文章笑疯了.\n总之啊, 我还是太young了.\n","permalink":"/diary/9146b8/","summary":"人工高考倒计时47天.\n接着颓废的一天.\n上午做数学卷子ovo了.\n下午又做适应考试数学卷子错了一pala一副要下100分的样子啊. 3道填, 三角函数搞错定义域, 概率题没考虑概率, 立几题算错了, 解几题没算出来 23333333 没救啦.\n体育课作死地在阳光下打球然后差点中暑. 命中趋近于0好痛苦. 好**累. 主要是还没习惯夏天的节奏.\n然后去买了瓶汽水结果导致整个晚上都想吐. 一定是汽水里的有机酸和\\(H_2CO_3\\)导致我体液里的离子平衡移动, 缓冲合体系中的大量\\(HCO_3^{-}\\)与\\(H^{+}\\)结合生成碳酸, 碳酸分解为\\(CO_2(g)\\)导致胃里一股要冲出来的感觉. 如果手边有一瓶\\(NaOH\\)我一定甘之如饴一饮而尽. 想想晚自习的时候廖老师说他拿酸性\\(KMnO_4(aq)\\)泡脚, 感觉这也挺温和的吖.\n晚上尝试跑步回家. 夜幕下的城市也另有一番味道ovo 等窝有空了晚上跑远点去拍夜景玩. 然而真的有1km么? 感觉地图测距逗了? ovo\n今天在zhihu上看到若干强行orz的文章笑疯了.\n总之啊, 我还是太young了.","title":"20160420"},{"content":"高考倒数\\(2^4*3\\)天.\ncyl太神辣.\n早上数学课. 然后发现窝的数学还是很捉鸡啊. 最近智商严重下降怎么办.\n下午考英语. 很难得听力有错, 而且还错了两道. 专注力太低了以及听不清啊声音太大了摔. 还有各种神奇的题. grow up the back fence是什么玩意.\n晚上立了个flag叫作业太少. 然后做化工做了一节课, 然后物理课代表写作业, 于是做物理做了两节课. 心力憔悴ing. 而且物理没有做对a single大题. 真是*了poi了.\nbtw光腚局封papi酱真是脑子进noi了.\n所以我还是太年轻了.\n","permalink":"/diary/73a189/","summary":"高考倒数\\(2^4*3\\)天.\ncyl太神辣.\n早上数学课. 然后发现窝的数学还是很捉鸡啊. 最近智商严重下降怎么办.\n下午考英语. 很难得听力有错, 而且还错了两道. 专注力太低了以及听不清啊声音太大了摔. 还有各种神奇的题. grow up the back fence是什么玩意.\n晚上立了个flag叫作业太少. 然后做化工做了一节课, 然后物理课代表写作业, 于是做物理做了两节课. 心力憔悴ing. 而且物理没有做对a single大题. 真是*了poi了.\nbtw光腚局封papi酱真是脑子进noi了.\n所以我还是太年轻了.","title":"20160419"},{"content":"人工高考倒计时\\(7^2\\)天.\nmaya今天忘撕倒计时纸了.\n一张解几卷子做得心力憔悴sad. 其实就是自己老是把简单的数值运算搞错或者是符号搞反什么的. 以及有个题确实想麻烦了.\n上周末理综正常炸tat.\n中午钦妹请客吃饭excited. 肿么感觉小白被带了这么久还没被带坏啊. lyx太神啦. hobo的生活似乎比我还惨233.\n英语课jby迷一样地背锅了. \u0026ldquo;jby你好讨厌啊\u0026rdquo;. 2333333. 明明就是自己点到ppt左下角的控制条啦. 都发生了好多次了居然都没发现? or水坝老师只是在卖萌? 感觉后者也有道理诶.\n唉所以我还是太年轻了.\n","permalink":"/diary/7ef389/","summary":"人工高考倒计时\\(7^2\\)天.\nmaya今天忘撕倒计时纸了.\n一张解几卷子做得心力憔悴sad. 其实就是自己老是把简单的数值运算搞错或者是符号搞反什么的. 以及有个题确实想麻烦了.\n上周末理综正常炸tat.\n中午钦妹请客吃饭excited. 肿么感觉小白被带了这么久还没被带坏啊. lyx太神啦. hobo的生活似乎比我还惨233.\n英语课jby迷一样地背锅了. \u0026ldquo;jby你好讨厌啊\u0026rdquo;. 2333333. 明明就是自己点到ppt左下角的控制条啦. 都发生了好多次了居然都没发现? or水坝老师只是在卖萌? 感觉后者也有道理诶.\n唉所以我还是太年轻了.","title":"20160418"},{"content":"离高考还有50天.\n半百了. 高三下过去一半了.\n似乎也没发生什么大不了的事.\n昨天和姐姐交流人生之后发现自己是不是太颓废了一点. 以及找妹子这种事真的就是随缘. 单着也挺好ovo.\n然后发现今天似乎过得挺不颓废的.\n刷完作业刷微积分然后发现教材习题答案是错的.\n发现自己的微积分太差了.\nyzy发来了zhihu的链接, 于是研究了一下随机游走问题. 然而感觉自己智商不足啊. 主要是数学功底不行. 以及zhihu上那个大大的算法真的好机智orz.\n晚上代写英语作文发现自己英语zhuoji了. 以及pigai.org的雷同查询居然辣么厉害.\nczr安利的react.js和flux也灰常厉害的样子. 感觉这样有两个巨大的好处. 一是可以给服务器省一大把流量. (其实这个思路有点像我做srk的时候想的\u0026quot;把渲染工作交给前端\u0026quot;的味道). 二是造移动端app会非常方便.\n然而今天都没有运动.\n想起一句很久没有说过的话.\n毕竟我还是太年轻了.\n","permalink":"/diary/571a72/","summary":"离高考还有50天.\n半百了. 高三下过去一半了.\n似乎也没发生什么大不了的事.\n昨天和姐姐交流人生之后发现自己是不是太颓废了一点. 以及找妹子这种事真的就是随缘. 单着也挺好ovo.\n然后发现今天似乎过得挺不颓废的.\n刷完作业刷微积分然后发现教材习题答案是错的.\n发现自己的微积分太差了.\nyzy发来了zhihu的链接, 于是研究了一下随机游走问题. 然而感觉自己智商不足啊. 主要是数学功底不行. 以及zhihu上那个大大的算法真的好机智orz.\n晚上代写英语作文发现自己英语zhuoji了. 以及pigai.org的雷同查询居然辣么厉害.\nczr安利的react.js和flux也灰常厉害的样子. 感觉这样有两个巨大的好处. 一是可以给服务器省一大把流量. (其实这个思路有点像我做srk的时候想的\u0026quot;把渲染工作交给前端\u0026quot;的味道). 二是造移动端app会非常方便.\n然而今天都没有运动.\n想起一句很久没有说过的话.\n毕竟我还是太年轻了.","title":"20160417"},{"content":"原问题: 从数轴原点开始, 每次抛一枚正反概率相等的硬币, 如果是正面就沿正方向走1单位长度, 否则沿反方向走1单位. 设走n步之后的位移为x, 求(x^2)的期望(E(x^2)).\n答案是n. 即随机游走时, 位移的平方的期望为步数. 并且这个结论可以推广到k维.\n(因为我的三角函数太捉鸡所以只推了2维, 但是目测了一下更多维都是对的)\n看了zhihu上的一篇答案是关于一维情况的证明, 我受到了启发. 链接在这. 答主用的我不认识的东西有点多. 所以他证明过的部分我还是用自己的语言重新写一遍.\n设第i次移动的位移为(x_i).\n引理: 对于两次不同的位移(x_i)和(x_j), ( E(x_i*x_j)=0).\n这个很好想, (x_i)的有0.5的概率为1和-1, 列个分布列(雾), 答案显然为0.\n证明:\n$$E(x^2)=E((\\sum_{i=1}^n x_i)^2)$$\n$$E(x^2)=E(\\sum_{i=1}^n x_i^2) + 2E(\\sum_{i=1}^n\\sum_{j=i+1}^n(x_ix_j))$$\n后面那坨的E可以扔进里面去, 根据引理该部分值为0.\n前面那部分显然有\n$$x_i^2=1$$\n于是得证\n$$E(x^2)=n$$\n然后是向高维推广. 这里是二维的证明.\n只需要改引理.\n对于两次不同的位移(\\vec{a_i} )和(\\vec{a_j} ), (\\vec{a_i} \\cdot \\vec{a_j} = 0 )\n证明: 设两个向量的角度分别为( \\theta_i )和( \\theta_j ).\n$$ \\theta_i , \\theta_j \\in [0, 2\\pi) $$\n因为它们都是单位向量, 所以 $$\\vec{a_i} \\cdot \\vec{a_j} = cos(\\theta_i - \\theta_j) $$\n事实上( \\forall \\theta_i), (\\theta_i-\\theta_j)的取值范围与( \\theta \\in [0, 2\\pi))等效.\n因为 $$cos(\\alpha)+cos(\\pi-\\alpha)=0$$\n所以 $$E(cos(\\theta_i - \\theta_j))=0$$\n得证.\n再多维证法类似.\n重要的问题在于期望的平方不等于平方的期望. 所以不能说位移大小的期望为(\\sqrt{n}).\n然而还在考虑如果要求的是位移的绝对值的期望应该怎么算. 感觉要多重积分? 感觉很有意思的样子.\n","permalink":"/random/a71b9d/","summary":"原问题: 从数轴原点开始, 每次抛一枚正反概率相等的硬币, 如果是正面就沿正方向走1单位长度, 否则沿反方向走1单位. 设走n步之后的位移为x, 求(x^2)的期望(E(x^2)).\n答案是n. 即随机游走时, 位移的平方的期望为步数. 并且这个结论可以推广到k维.\n(因为我的三角函数太捉鸡所以只推了2维, 但是目测了一下更多维都是对的)\n看了zhihu上的一篇答案是关于一维情况的证明, 我受到了启发. 链接在这. 答主用的我不认识的东西有点多. 所以他证明过的部分我还是用自己的语言重新写一遍.\n设第i次移动的位移为(x_i).\n引理: 对于两次不同的位移(x_i)和(x_j), ( E(x_i*x_j)=0).\n这个很好想, (x_i)的有0.5的概率为1和-1, 列个分布列(雾), 答案显然为0.\n证明:\n$$E(x^2)=E((\\sum_{i=1}^n x_i)^2)$$\n$$E(x^2)=E(\\sum_{i=1}^n x_i^2) + 2E(\\sum_{i=1}^n\\sum_{j=i+1}^n(x_ix_j))$$\n后面那坨的E可以扔进里面去, 根据引理该部分值为0.\n前面那部分显然有\n$$x_i^2=1$$\n于是得证\n$$E(x^2)=n$$\n然后是向高维推广. 这里是二维的证明.\n只需要改引理.\n对于两次不同的位移(\\vec{a_i} )和(\\vec{a_j} ), (\\vec{a_i} \\cdot \\vec{a_j} = 0 )\n证明: 设两个向量的角度分别为( \\theta_i )和( \\theta_j ).\n$$ \\theta_i , \\theta_j \\in [0, 2\\pi) $$\n因为它们都是单位向量, 所以 $$\\vec{a_i} \\cdot \\vec{a_j} = cos(\\theta_i - \\theta_j) $$","title":"空间随机游走位移平方期望及证明"},{"content":"高考还有51天.\na day.\n上午昏昏欲睡昏昏欲睡昏昏欲睡.\n下午理综内心是绝望的.\n然后去打球. 平行班的同学好厉害的样子. 打不过啊tat.\n然后接着颓废qaq.\n","permalink":"/diary/84e1c7/","summary":"高考还有51天.\na day.\n上午昏昏欲睡昏昏欲睡昏昏欲睡.\n下午理综内心是绝望的.\n然后去打球. 平行班的同学好厉害的样子. 打不过啊tat.\n然后接着颓废qaq.","title":"20160416"},{"content":"人工高考倒计时52天.\n今天晚上终于找到了倒计时天数的bug. 已经出现了两次计数器没有\u0026ndash;的情况了tat 然后真的就人工改了.\n什么时候寄快递都要用身份证了啊喂.\n下午去了一个奇怪的采访. 问我想像一下十年后自己在干啥. 当然是在找bug啦. 感觉没救诶.\n本来为了晚自习被喝茶而狂做作业的. 然而语文老师表示没空喝茶. 晚自习空虚寂寞冷啊. 然后就在那搞周末作业. 周末作业好神啊tat. 我猜结局是明天发现自己漏做了作业.\n于是一天又过去了.\n为什么我的心还会跳?\n多半是我太naive了.\nstrange.\n","permalink":"/diary/8d781c/","summary":"人工高考倒计时52天.\n今天晚上终于找到了倒计时天数的bug. 已经出现了两次计数器没有\u0026ndash;的情况了tat 然后真的就人工改了.\n什么时候寄快递都要用身份证了啊喂.\n下午去了一个奇怪的采访. 问我想像一下十年后自己在干啥. 当然是在找bug啦. 感觉没救诶.\n本来为了晚自习被喝茶而狂做作业的. 然而语文老师表示没空喝茶. 晚自习空虚寂寞冷啊. 然后就在那搞周末作业. 周末作业好神啊tat. 我猜结局是明天发现自己漏做了作业.\n于是一天又过去了.\n为什么我的心还会跳?\n多半是我太naive了.\nstrange.","title":"20160415"},{"content":"NCEE倒计时53天.\n啊喂tyh你想要invite code直接找我要不就得了ovo\n又是迷之一天.\n早上颓.\n中午出去买了一瓶红色尖叫. 酸爽. 喝一口就像被充了电一样. 然后一下午加一晚上总共喝了\\(\\frac{1}{5}\\)瓶.\n然而找了半天没有地方卖邮票. sad.\n下午充电很有效.\n似乎明天有个奇怪的锅. 烦.\n晚自习. 杜老: f**k, 我电脑死机了文档没保存. 求恢复.\n众人看向laekov.\nlaekov: @sf 你怎么不见了?\nlaekov: 你们windows世界的东西我怎么知道.\nlaekov掏出手机百度了一下.\nlaekov在windows某个文件夹里找到了缓存的文档.\n杜老: 信竞同学修电脑水平就是高.(口糊的)\nlaekov: f***.\nHistorical Comments tangyuhao at 2016-04-16T12:44:39 2333\n","permalink":"/diary/3d13f5/","summary":"NCEE倒计时53天.\n啊喂tyh你想要invite code直接找我要不就得了ovo\n又是迷之一天.\n早上颓.\n中午出去买了一瓶红色尖叫. 酸爽. 喝一口就像被充了电一样. 然后一下午加一晚上总共喝了\\(\\frac{1}{5}\\)瓶.\n然而找了半天没有地方卖邮票. sad.\n下午充电很有效.\n似乎明天有个奇怪的锅. 烦.\n晚自习. 杜老: f**k, 我电脑死机了文档没保存. 求恢复.\n众人看向laekov.\nlaekov: @sf 你怎么不见了?\nlaekov: 你们windows世界的东西我怎么知道.\nlaekov掏出手机百度了一下.\nlaekov在windows某个文件夹里找到了缓存的文档.\n杜老: 信竞同学修电脑水平就是高.(口糊的)\nlaekov: f***.\nHistorical Comments tangyuhao at 2016-04-16T12:44:39 2333","title":"20160414"},{"content":"高考前54天.\n上午颓.\n上周五理综似乎全科班上倒数. 怕挨批怕了一天.\n下午颓.\n打球出了一身汗, 然后, 就, 结晶, 了qwq 然而命中率几乎为0.\n晚上吃完饭遇到f, 然后和他出去逛书店结果遇到了一脸震惊的jh和sf.\n然后才知道发生了奇怪的事.\n然而我也不知道这件事.\n唉. 真正的结束么.\n还没看. 等会夜深人静再看.\n反正她也不会看我写日记了吧.\n事实上I turned down everyone.\n没错我就是一朝被蛇咬, 十年怕井绳.\n所谓长痛不如短痛. 人长大了, 就应该懂得现实.\n活在梦里真是不可取呢.\n然而现在连自己要做什么都不知道呢. 真希望哪天走在街上我就被车撞去和上帝谈人生了.\n唉怎么能这么想呢.\nqwq\n","permalink":"/diary/7709d6/","summary":"高考前54天.\n上午颓.\n上周五理综似乎全科班上倒数. 怕挨批怕了一天.\n下午颓.\n打球出了一身汗, 然后, 就, 结晶, 了qwq 然而命中率几乎为0.\n晚上吃完饭遇到f, 然后和他出去逛书店结果遇到了一脸震惊的jh和sf.\n然后才知道发生了奇怪的事.\n然而我也不知道这件事.\n唉. 真正的结束么.\n还没看. 等会夜深人静再看.\n反正她也不会看我写日记了吧.\n事实上I turned down everyone.\n没错我就是一朝被蛇咬, 十年怕井绳.\n所谓长痛不如短痛. 人长大了, 就应该懂得现实.\n活在梦里真是不可取呢.\n然而现在连自己要做什么都不知道呢. 真希望哪天走在街上我就被车撞去和上帝谈人生了.\n唉怎么能这么想呢.\nqwq","title":"20160413"},{"content":"高考前55天.\n早上数学考试真**生死时速啊. 然而最后一题还是搞错了sad.\n然后中午去交表结果又背了个奇怪的锅. 三氧化萌说退役竞赛党就是被班主任嘲讽的然而我怎么就直接升级成班主任的苦力了呢.\n然后发现这啥鬼啊adam你没说清楚选人的要求啊填ball喽.\n还有早上起来收到一发匿名来提神醒脑ovo 这几天明明就是因为脑子烧坏了所以神经不正常嘛.\n鉴于对面的人自称是妹子, 据说妹子说话是反的. 叫我不要猜的意思就是要我猜一猜是谁?\n所谓言多必诗?\n说那么多话就是方便我猜啊. (猜错了求不打我)\n首先对面是个女生.\n然后对面管我叫\u0026quot;学神\u0026quot;, 这就能排除掉15班的所有人和搞oi的所有人.\n而且对面还知道我会天天写日记. 在床上滚来滚去似乎是前两天回忆起去年scoi? 知道这个网站而且不搞oi的人. 想了想似乎只有一个了.\n再说啊对面知道我晚上睡觉的时间比较早, 知道我学习不认真是因为被钦定了, 话里面明显一股文科生的味道, etc.\n总之不要成天东想西想的啦认真学习把高考考好才是硬道理. 这句话我肯定不是在说我自己是吧.\n其实嘛完全没有必要匿名啊. 我大概也就是会感到受宠若惊for 10分钟吧.\n猜对了请点个赞啦(虽然不知道对面什么时候会看到). 猜错了请点15个dislike.\n鄙站注册邀请码在这16aa0e1bb8a91303.\n","permalink":"/diary/71c156/","summary":"高考前55天.\n早上数学考试真**生死时速啊. 然而最后一题还是搞错了sad.\n然后中午去交表结果又背了个奇怪的锅. 三氧化萌说退役竞赛党就是被班主任嘲讽的然而我怎么就直接升级成班主任的苦力了呢.\n然后发现这啥鬼啊adam你没说清楚选人的要求啊填ball喽.\n还有早上起来收到一发匿名来提神醒脑ovo 这几天明明就是因为脑子烧坏了所以神经不正常嘛.\n鉴于对面的人自称是妹子, 据说妹子说话是反的. 叫我不要猜的意思就是要我猜一猜是谁?\n所谓言多必诗?\n说那么多话就是方便我猜啊. (猜错了求不打我)\n首先对面是个女生.\n然后对面管我叫\u0026quot;学神\u0026quot;, 这就能排除掉15班的所有人和搞oi的所有人.\n而且对面还知道我会天天写日记. 在床上滚来滚去似乎是前两天回忆起去年scoi? 知道这个网站而且不搞oi的人. 想了想似乎只有一个了.\n再说啊对面知道我晚上睡觉的时间比较早, 知道我学习不认真是因为被钦定了, 话里面明显一股文科生的味道, etc.\n总之不要成天东想西想的啦认真学习把高考考好才是硬道理. 这句话我肯定不是在说我自己是吧.\n其实嘛完全没有必要匿名啊. 我大概也就是会感到受宠若惊for 10分钟吧.\n猜对了请点个赞啦(虽然不知道对面什么时候会看到). 猜错了请点15个dislike.\n鄙站注册邀请码在这16aa0e1bb8a91303.","title":"20160412"},{"content":"高考前56天.\n二诊踩noi造成了深远的影响.\n上午好困. 数学课心不在焉不在焉在焉焉. 然后没做完卷子sad.\n打球开始向外面蹭开始搞眼神防守233.\nqbq居然还没来? 要孤单寂寞冷了.\n下午考英语. 作文好长好长好长.\n晚上换坐位. 同桌开脑洞说每个人都有若干愿意坐的位置问存不存在使每个人都满意的方案. 我: 这不是最小割裸题么. 然后开始莫名伤感.\n乱死了.\n做白日梦的时候想抱着妹子睡觉. 然而并看不清妹子的脸qwq 没救啦.\n","permalink":"/diary/a1dc7f/","summary":"高考前56天.\n二诊踩noi造成了深远的影响.\n上午好困. 数学课心不在焉不在焉在焉焉. 然后没做完卷子sad.\n打球开始向外面蹭开始搞眼神防守233.\nqbq居然还没来? 要孤单寂寞冷了.\n下午考英语. 作文好长好长好长.\n晚上换坐位. 同桌开脑洞说每个人都有若干愿意坐的位置问存不存在使每个人都满意的方案. 我: 这不是最小割裸题么. 然后开始莫名伤感.\n乱死了.\n做白日梦的时候想抱着妹子睡觉. 然而并看不清妹子的脸qwq 没救啦.","title":"20160411"},{"content":"高考57天.\n今天是他们的scoi. yjq虐场了. 去年预言对了一半呢. 然而我不是坐着看的而是跪着看的. zms也进队了呢. 然而zms居然没拿到a队? 真是太丢脸了. (雾)\n上午做作业.\n下午打cs.\n晚上本来还打算打cs的然而被拉去打球了.\n想想上次打乒乓都是高二的事情了呢. 后来就再也没有打过羽毛球和乒乓球. 想到上回在这打乒乓还抱着pad啃猫疼死函数快速求值的论文原版. hhh\n似乎早就死了呢. 退役之前从来没有一个周末像现在这样用全部时间来打游戏. 每天至少一道bzoj从noip坚持到noi. hhh 然而现在真的是没有任何事干.\n当年的JuNe现在连42都拿不稳了. 当年的laekov现在拒绝看任何oi题. 在不断的被kill中学会了麻木地接着该干啥干啥. 不要相信自己是unique的这种骗人的鬼话. 一个人就是应该淹没在人海里. 我的期望是0.5. 知足吧.\n唉某些人还是退役了呢. 所以说啊不要去给自己立flag. 没关系心若在梦就在. 即使梦没了随风去远方也是一种解脱呢(向往脸).\n","permalink":"/diary/3de88f/","summary":"高考57天.\n今天是他们的scoi. yjq虐场了. 去年预言对了一半呢. 然而我不是坐着看的而是跪着看的. zms也进队了呢. 然而zms居然没拿到a队? 真是太丢脸了. (雾)\n上午做作业.\n下午打cs.\n晚上本来还打算打cs的然而被拉去打球了.\n想想上次打乒乓都是高二的事情了呢. 后来就再也没有打过羽毛球和乒乓球. 想到上回在这打乒乓还抱着pad啃猫疼死函数快速求值的论文原版. hhh\n似乎早就死了呢. 退役之前从来没有一个周末像现在这样用全部时间来打游戏. 每天至少一道bzoj从noip坚持到noi. hhh 然而现在真的是没有任何事干.\n当年的JuNe现在连42都拿不稳了. 当年的laekov现在拒绝看任何oi题. 在不断的被kill中学会了麻木地接着该干啥干啥. 不要相信自己是unique的这种骗人的鬼话. 一个人就是应该淹没在人海里. 我的期望是0.5. 知足吧.\n唉某些人还是退役了呢. 所以说啊不要去给自己立flag. 没关系心若在梦就在. 即使梦没了随风去远方也是一种解脱呢(向往脸).","title":"20160410"},{"content":"高考倒计时58天.\n昨天理综explode了啊sad. 有机居然错了一堆虽然是看错题了但是还是很伤心.\n物理最后一题辣么水qwq.\n下午考语文那神奇的作文题ovo.\n然后去打球. 小朋友防守的时候怎么打人啊ovo.\n然后看到了cdqz众的省选成绩.\n我表示目瞪口呆.\n目瞪口呆.\n目瞪口呆.\n目瞪口呆.\n目瞪口呆.\n为了表示我的目瞪口呆\n然后入了csgo. 感觉我要颓得没救了.\n然而要下一个半小时. 说好的10m下载速度呢?\n而且因为自己手贱把callback网页关掉了所以复了两份钱. 把自己蠢哭了. 坐等还钱(没还也没有救了)\n","permalink":"/diary/fccc15/","summary":"高考倒计时58天.\n昨天理综explode了啊sad. 有机居然错了一堆虽然是看错题了但是还是很伤心.\n物理最后一题辣么水qwq.\n下午考语文那神奇的作文题ovo.\n然后去打球. 小朋友防守的时候怎么打人啊ovo.\n然后看到了cdqz众的省选成绩.\n我表示目瞪口呆.\n目瞪口呆.\n目瞪口呆.\n目瞪口呆.\n目瞪口呆.\n为了表示我的目瞪口呆\n然后入了csgo. 感觉我要颓得没救了.\n然而要下一个半小时. 说好的10m下载速度呢?\n而且因为自己手贱把callback网页关掉了所以复了两份钱. 把自己蠢哭了. 坐等还钱(没还也没有救了)","title":"20160409"},{"content":"高考倒计时59天.\n好像有点热啊.\n玩似乎一天都不知道在干什么.\n下午考理综. 然后发现自己电磁感应大题似乎很糟糕的样子. qaq.\n还错了一pala选择题已爆炸qwq\n晚上居然找不到数学卷子了抓狂ing. 真**丢脸.\n唉 ovo\n","permalink":"/diary/b81b50/","summary":"高考倒计时59天.\n好像有点热啊.\n玩似乎一天都不知道在干什么.\n下午考理综. 然后发现自己电磁感应大题似乎很糟糕的样子. qaq.\n还错了一pala选择题已爆炸qwq\n晚上居然找不到数学卷子了抓狂ing. 真**丢脸.\n唉 ovo","title":"20160408"},{"content":"高考倒计时60天.\n又打作文ovo.\n白天发生了什么么? 就是感觉时间变得有点快ovo\n教室的网迷之好了. 难道之前一直是yjq在搞ddos? @yjq\n变身打字员形态laekov. qwq\n","permalink":"/diary/919557/","summary":"高考倒计时60天.\n又打作文ovo.\n白天发生了什么么? 就是感觉时间变得有点快ovo\n教室的网迷之好了. 难道之前一直是yjq在搞ddos? @yjq\n变身打字员形态laekov. qwq","title":"20160407"},{"content":"高考前61天.\n依然没劲. 中午抢饭都跑不动. 晚上做化学作业做得想吐.\n土神表示窝最近很\u0026quot;犀利\u0026quot;. 明明是无精打采嘛.\n体育课和cyl和ymw坐在曦园晒太阳. cyl回忆起搞oi的时光表示自己太浪. 然后晚自习就被adam水表了23333.\n然而搞oi的那群孩子怎么都不写日记了啊ovo难道是没网qwq去年窝们省选的时候那家酒店的网好好的啊.\n想起了去年省选一个人住大床房在床上滚来滚去好开心233. 以及考前的flag大会啥的. 也许现在想起比较后悔的一件事情就是没有和大家好好颓废吧.\n事实上华迪楼下的那家酒店比uestc门外那家好些2333. 反正uestc毕竟too young.\n一年都过去了诶ovo\nHistorical Comments Miles at 2016-04-06T22:28:15 我发现刷新一下visit就会多一个\u0026hellip;smg\nMiles at 2016-04-06T22:28:41 好好玩ovo\nlaekov at 2016-04-06T22:30:22 求不刷访问量qaq\n","permalink":"/diary/b99eae/","summary":"高考前61天.\n依然没劲. 中午抢饭都跑不动. 晚上做化学作业做得想吐.\n土神表示窝最近很\u0026quot;犀利\u0026quot;. 明明是无精打采嘛.\n体育课和cyl和ymw坐在曦园晒太阳. cyl回忆起搞oi的时光表示自己太浪. 然后晚自习就被adam水表了23333.\n然而搞oi的那群孩子怎么都不写日记了啊ovo难道是没网qwq去年窝们省选的时候那家酒店的网好好的啊.\n想起了去年省选一个人住大床房在床上滚来滚去好开心233. 以及考前的flag大会啥的. 也许现在想起比较后悔的一件事情就是没有和大家好好颓废吧.\n事实上华迪楼下的那家酒店比uestc门外那家好些2333. 反正uestc毕竟too young.\n一年都过去了诶ovo\nHistorical Comments Miles at 2016-04-06T22:28:15 我发现刷新一下visit就会多一个\u0026hellip;smg\nMiles at 2016-04-06T22:28:41 好好玩ovo\nlaekov at 2016-04-06T22:30:22 求不刷访问量qaq","title":"20160406"},{"content":"高考62天.\n到底是我穿多了还是我穿少了啊f***.\n整个人的脑子都不好用了.\n如果有来生\n我要当一只鸽子\n在名叫自由的天空里盘旋\n没有智商去思考\n为什么要飞翔\n然后变成了红杏的烤鸽子(逃)\n晚上发现科技楼应该是有故事的昂. 然而每天急着回家并没有机会去探寻. 其实是怕挨打不敢2333.\n爹的竞聘题居然是小学奥数? smg.\n听说hnsdfz进了四科五个国家队. 膝盖已烂.\n","permalink":"/diary/cda6f7/","summary":"高考62天.\n到底是我穿多了还是我穿少了啊f***.\n整个人的脑子都不好用了.\n如果有来生\n我要当一只鸽子\n在名叫自由的天空里盘旋\n没有智商去思考\n为什么要飞翔\n然后变成了红杏的烤鸽子(逃)\n晚上发现科技楼应该是有故事的昂. 然而每天急着回家并没有机会去探寻. 其实是怕挨打不敢2333.\n爹的竞聘题居然是小学奥数? smg.\n听说hnsdfz进了四科五个国家队. 膝盖已烂.","title":"20160405"},{"content":"高考还有63天. 好想回去扯这个整数啊.\n清明节. 呐, 请祝我节日快乐.\n又晕又烧还要做作业qwq\n尤其是做的还是生物作业. 生物作业还辣么多. 内容还是调节woc. 一边感受自己的下丘脑和各种腺体在抽搐一边做调节题的感觉真是太美妙了.\nczr似乎又造出了厉害的东西太强了orz. 然而我连打开终端的力气都没有. 我就是一个只pull不push的主感觉没救了.\nmaya一定是rp被守衡了.\nUpdate:\n晚上没事被完了一部电影叫_左耳_. 这, 原来别人的高三100天这么开心啊还可以去酒吧勾搭妹子还成天到处跑23333. 还有高考584的女主居然可以去一个北京的好大学? 别急女主你去上理是学什么专业的? 难道女主是搞oi的?\n原来我上小学那个年代的生活是那样的. 原来放学之后还可以去废弃作坊楼顶看海. 互联网浪潮早就开始了. 男主拿vc6搞工程感觉好厉害的样子(看到了各种恶心的win api) 手速被完暴了maya. (是不是关注点都跑偏了)\n","permalink":"/diary/c2b4cd/","summary":"高考还有63天. 好想回去扯这个整数啊.\n清明节. 呐, 请祝我节日快乐.\n又晕又烧还要做作业qwq\n尤其是做的还是生物作业. 生物作业还辣么多. 内容还是调节woc. 一边感受自己的下丘脑和各种腺体在抽搐一边做调节题的感觉真是太美妙了.\nczr似乎又造出了厉害的东西太强了orz. 然而我连打开终端的力气都没有. 我就是一个只pull不push的主感觉没救了.\nmaya一定是rp被守衡了.\nUpdate:\n晚上没事被完了一部电影叫_左耳_. 这, 原来别人的高三100天这么开心啊还可以去酒吧勾搭妹子还成天到处跑23333. 还有高考584的女主居然可以去一个北京的好大学? 别急女主你去上理是学什么专业的? 难道女主是搞oi的?\n原来我上小学那个年代的生活是那样的. 原来放学之后还可以去废弃作坊楼顶看海. 互联网浪潮早就开始了. 男主拿vc6搞工程感觉好厉害的样子(看到了各种恶心的win api) 手速被完暴了maya. (是不是关注点都跑偏了)","title":"20160404"},{"content":"NCEE64天.\n似乎生病了wtf.\n早上说晚点起然而还是起来做作业去了然而没做完.\nczr写的东西好神啊.\n下午去剪了个头发. 出去逛了一圈. 回家玩了一下steam上的某个有点像bf2的游戏.\n然后开始头痛了. 然后开始冷. 多穿了一层都还是冷. qaq\n这个冬天一场烧都没发过啊. 难道是要我还回来么?\n很怀疑是不是剪头发之后头部温度不正常导致下丘脑温觉感受器不正常了?\nsad.\nupdate\n一吐为快￣へ￣\n","permalink":"/diary/7da6ac/","summary":"NCEE64天.\n似乎生病了wtf.\n早上说晚点起然而还是起来做作业去了然而没做完.\nczr写的东西好神啊.\n下午去剪了个头发. 出去逛了一圈. 回家玩了一下steam上的某个有点像bf2的游戏.\n然后开始头痛了. 然后开始冷. 多穿了一层都还是冷. qaq\n这个冬天一场烧都没发过啊. 难道是要我还回来么?\n很怀疑是不是剪头发之后头部温度不正常导致下丘脑温觉感受器不正常了?\nsad.\nupdate\n一吐为快￣へ￣","title":"20160403"},{"content":"高考前65天.\n好无聊啊. 什么都不想干.\n早上ovo\n中午ovo\n下午考理综. 感觉题有点难. 感觉要爆炸了要被骂了. 然后就发答案了. ovoovoovo\n想玩ed然后发现好无聊wifi还不停地爆炸.\n没救了qwq\n","permalink":"/diary/a6f602/","summary":"高考前65天.\n好无聊啊. 什么都不想干.\n早上ovo\n中午ovo\n下午考理综. 感觉题有点难. 感觉要爆炸了要被骂了. 然后就发答案了. ovoovoovo\n想玩ed然后发现好无聊wifi还不停地爆炸.\n没救了qwq","title":"20160402"},{"content":"人工高考倒计时66天.\nApril fool! 本来想匿名去乱搞来着 = = 然后就搞忘了. 真是瞬间老了10岁.\n作业没做完qwq\n中午去拍花遇到adam. adam鼓励我下回进年级20. 这\u0026hellip; 当时觉得真是得寸进尺啊. 下次不出前200就烧高香了. 他说有目标就有动力? kidding?\n在学生节看到了嘉祥的校服. 本来想说熟悉来着再想想似乎不熟悉啊. 现在的校服样式是我走之后才换的我怎么会熟悉ovoovo\n下午注意力好差.\n于是总是会忘记我想写什么. qwq\n","permalink":"/diary/83b064/","summary":"人工高考倒计时66天.\nApril fool! 本来想匿名去乱搞来着 = = 然后就搞忘了. 真是瞬间老了10岁.\n作业没做完qwq\n中午去拍花遇到adam. adam鼓励我下回进年级20. 这\u0026hellip; 当时觉得真是得寸进尺啊. 下次不出前200就烧高香了. 他说有目标就有动力? kidding?\n在学生节看到了嘉祥的校服. 本来想说熟悉来着再想想似乎不熟悉啊. 现在的校服样式是我走之后才换的我怎么会熟悉ovoovo\n下午注意力好差.\n于是总是会忘记我想写什么. qwq","title":"20160401"},{"content":"离高考还有67天.\nday二诊出成绩.\n总分663, 年排42. 高中以从来没进过前100, 这还是第一回. happy. 我真是踩到狗noi了.\n数学居然被扣了7分过程分. 难得的ak机会从指间溜走了.\n物理各种黑幕然而最后一题居然把磁感应强度2B的周期忘了除二了qwqwqqq\n化学还是弱.\n语文年排似乎在从上到下若干人的每科单科和总排里数字都是最大的. 娘亲: 我看到你的语文就知道我没看错这是你的成绩了.\n总之考得似乎有点出乎意料. 虽然没有ball用.\n送自己一句话.\n举世誉之而不加劝 举世非之而不加沮\n另外想起想记下来_苍彼_完结感受一直都搞忘了来着.\n飞翔是窝从小向往的, 虽然从没实现也不大可能实现. 退役的男主最终也没有成功飞起来. 人总是要认命的. 以及最重要的是__百合大珐吼!__\n以及晚自习打蚊子去了qwq为啥蚊子那么多. 果然是春天来了啊. 其实是各种人赢在打击单身汪, 然而窝没有妹子sad.\nUpdate: 每天都会忘记要写什么qwq\n中午去逛学生节. 高一学生节, 我在305刷题. 高二学生节, 我在404玩steam. 高三学生节, 我想不去看看高中生活就不完整了. 然后发现我已经和这个世界格格不入了.\n晚上专程去闻七里香, 但是没有闻到丝毫香味. 黑暗的空气里一个人站在长廊里, 想起了他们讲的音乐厅事件, 然而更多的也许是羡慕? 细想, 春天是花开的季节, 也是花落的季节呢.\n","permalink":"/diary/899650/","summary":"离高考还有67天.\nday二诊出成绩.\n总分663, 年排42. 高中以从来没进过前100, 这还是第一回. happy. 我真是踩到狗noi了.\n数学居然被扣了7分过程分. 难得的ak机会从指间溜走了.\n物理各种黑幕然而最后一题居然把磁感应强度2B的周期忘了除二了qwqwqqq\n化学还是弱.\n语文年排似乎在从上到下若干人的每科单科和总排里数字都是最大的. 娘亲: 我看到你的语文就知道我没看错这是你的成绩了.\n总之考得似乎有点出乎意料. 虽然没有ball用.\n送自己一句话.\n举世誉之而不加劝 举世非之而不加沮\n另外想起想记下来_苍彼_完结感受一直都搞忘了来着.\n飞翔是窝从小向往的, 虽然从没实现也不大可能实现. 退役的男主最终也没有成功飞起来. 人总是要认命的. 以及最重要的是__百合大珐吼!__\n以及晚自习打蚊子去了qwq为啥蚊子那么多. 果然是春天来了啊. 其实是各种人赢在打击单身汪, 然而窝没有妹子sad.\nUpdate: 每天都会忘记要写什么qwq\n中午去逛学生节. 高一学生节, 我在305刷题. 高二学生节, 我在404玩steam. 高三学生节, 我想不去看看高中生活就不完整了. 然后发现我已经和这个世界格格不入了.\n晚上专程去闻七里香, 但是没有闻到丝毫香味. 黑暗的空气里一个人站在长廊里, 想起了他们讲的音乐厅事件, 然而更多的也许是羡慕? 细想, 春天是花开的季节, 也是花落的季节呢.","title":"20160331"},{"content":"高考还有68天.\n总觉得日期依然没对然而找不出bug来. 他们说今天这个数字很特殊呢.\n键盘没电了?\n二诊之后诸君一片呜呼哀哉然而感觉作业突然又变多了qwq.\n似乎也没发生啥.\n英语作文依然上不了20.\n利用数学课刷完了_哑舍_也是没救了.\n晚上顺手刷了一下lofter发现yjq表示要scoi了心里很虚?\n虽然yjq大概并不能在省选之前看到ovo我来随便扯两句.\n什么叫今年要紧张死了嘛. 一届届不都是这样过来的么. zhx高一也没进队嘛23333 我高一的时候都不知道进队是干什么的.\n反正今年mhy也不考scoi, 看看去年scoi时高一的人的水平也不虚了啊.\n实在不行就安慰自己_得之我幸, 失之我命_了呗. 大不了回来搞高考嘛. uestc其实挺不错的, 至少气候好.\n以及啊再不要脸一点想就算你故意暴0也有c类啊. 不就是10w大洋么钱又不是你出又不用还虚什么. 反正现在a队也就加5分并没ball用.\n以上. 来自scoi2015前一天没睡好的hja.\n总之祝您rank1. 不rank1请饭可好?\n","permalink":"/diary/5b9915/","summary":"高考还有68天.\n总觉得日期依然没对然而找不出bug来. 他们说今天这个数字很特殊呢.\n键盘没电了?\n二诊之后诸君一片呜呼哀哉然而感觉作业突然又变多了qwq.\n似乎也没发生啥.\n英语作文依然上不了20.\n利用数学课刷完了_哑舍_也是没救了.\n晚上顺手刷了一下lofter发现yjq表示要scoi了心里很虚?\n虽然yjq大概并不能在省选之前看到ovo我来随便扯两句.\n什么叫今年要紧张死了嘛. 一届届不都是这样过来的么. zhx高一也没进队嘛23333 我高一的时候都不知道进队是干什么的.\n反正今年mhy也不考scoi, 看看去年scoi时高一的人的水平也不虚了啊.\n实在不行就安慰自己_得之我幸, 失之我命_了呗. 大不了回来搞高考嘛. uestc其实挺不错的, 至少气候好.\n以及啊再不要脸一点想就算你故意暴0也有c类啊. 不就是10w大洋么钱又不是你出又不用还虚什么. 反正现在a队也就加5分并没ball用.\n以上. 来自scoi2015前一天没睡好的hja.\n总之祝您rank1. 不rank1请饭可好?","title":"20160330"},{"content":"高考倒计时69天.\n二诊day2.\n我确定时间不对然而没找出bug. qwq\n必需要吐槽物理这黑幕太吓人了. 然而我还是算错了最后一题怎么办qwq\n化学同分异构凭啥我那种就不行啊. 题又没给信息.\n然后感觉难度都集中到英语上了?\n念听力的时候感觉那俩人说的真是英语么??? 辣么慢语调还很奇怪. 然后阅读题又臭又长题还刁. 后面的玩意也不太开心.\n感觉我没救啦.\n然后发现数学的答案似乎都是对的? 题果然水然而为啥一堆人怨声载道呢?\n难道是我刷哑舍被老板附身了?\n唉没救.\n然而google又炸了. 每次炸都unhappy. 连google都上不了**还有什么希望.\n","permalink":"/diary/f71d28/","summary":"高考倒计时69天.\n二诊day2.\n我确定时间不对然而没找出bug. qwq\n必需要吐槽物理这黑幕太吓人了. 然而我还是算错了最后一题怎么办qwq\n化学同分异构凭啥我那种就不行啊. 题又没给信息.\n然后感觉难度都集中到英语上了?\n念听力的时候感觉那俩人说的真是英语么??? 辣么慢语调还很奇怪. 然后阅读题又臭又长题还刁. 后面的玩意也不太开心.\n感觉我没救啦.\n然后发现数学的答案似乎都是对的? 题果然水然而为啥一堆人怨声载道呢?\n难道是我刷哑舍被老板附身了?\n唉没救.\n然而google又炸了. 每次炸都unhappy. 连google都上不了**还有什么希望.","title":"20160329 二诊day2"},{"content":"高考倒计时70天. 怎么又觉得时间不对了呢.\n二诊day1. 忘记带手机去玩了ovo于是感觉一天都在睡觉.\n难度不会凭空产生也不会凭空消失, 只会从day1转移到day2, 或者从上午的考试转化为下午的考试.\n语文作文是啥鬼啊. 感觉不知道自己在写什么.\n中午在教室玩得好high. qwq\n谁说下午数学会很难来着.\n连我这个弱渣都能做完玩20min.\n公交车上好大一股脚臭味啊qwqwqqq\n终于有了翅膀. 然而是变形的翅膀, 飞起来各种不平衡sad. 只好打消了在rc里飞翔的念头. 作为民航的孩纸飞翔为什么总是只能是一个梦啊qwq\n唉唉没救啦. 明天理综肯定爆炸了sad.\n","permalink":"/diary/f61528/","summary":"高考倒计时70天. 怎么又觉得时间不对了呢.\n二诊day1. 忘记带手机去玩了ovo于是感觉一天都在睡觉.\n难度不会凭空产生也不会凭空消失, 只会从day1转移到day2, 或者从上午的考试转化为下午的考试.\n语文作文是啥鬼啊. 感觉不知道自己在写什么.\n中午在教室玩得好high. qwq\n谁说下午数学会很难来着.\n连我这个弱渣都能做完玩20min.\n公交车上好大一股脚臭味啊qwqwqqq\n终于有了翅膀. 然而是变形的翅膀, 飞起来各种不平衡sad. 只好打消了在rc里飞翔的念头. 作为民航的孩纸飞翔为什么总是只能是一个梦啊qwq\n唉唉没救啦. 明天理综肯定爆炸了sad.","title":"20160328 二诊day1"},{"content":"高考倒计时71天.\n因为没作业所以玩了一天, 都没拿过笔. 感觉明天会跪.\nrobocraft毒性也比较强qwqqqq. 好想飞啊.\n中午去打球, 感觉命中up之后比较爽. 然而其实命中还是low. 人生第一次转身成功ovo 若干次抢到板又送出去被对位的哥子怒斥qwq 我只是站在篮下命中太低qwq\n于是回家洗澡之后整个下午晚上都是一股虚弱感qwq\n颓到暴. zhx说找一个妹子很重要. 我qwqwqwqwqwqqwqwqwqwqwqwqwq\n没救啦.\nHistorical Comments Miles at 2016-03-27T19:31:45 高三了为什么还可以没作业unhappy\nlaekov at 2016-03-28T18:17:10 因为已经颓废了一周了啊. 今天二诊.\n","permalink":"/diary/0ff0ca/","summary":"高考倒计时71天.\n因为没作业所以玩了一天, 都没拿过笔. 感觉明天会跪.\nrobocraft毒性也比较强qwqqqq. 好想飞啊.\n中午去打球, 感觉命中up之后比较爽. 然而其实命中还是low. 人生第一次转身成功ovo 若干次抢到板又送出去被对位的哥子怒斥qwq 我只是站在篮下命中太低qwq\n于是回家洗澡之后整个下午晚上都是一股虚弱感qwq\n颓到暴. zhx说找一个妹子很重要. 我qwqwqwqwqwqqwqwqwqwqwqwqwq\n没救啦.\nHistorical Comments Miles at 2016-03-27T19:31:45 高三了为什么还可以没作业unhappy\nlaekov at 2016-03-28T18:17:10 因为已经颓废了一周了啊. 今天二诊.","title":"20160327"},{"content":"高考倒计时72天.\n还有辣么久昂qwqwqqq.\n早上感觉各科老师都在闲扯呢. 除了adam.\n于是中午打球就被盯到了qwq\n下午考理综做得飞快然后就错了6道选择题.\n晚上颓rc然后发现怎么wifi炸了啊unhappy. 然后使用移动路由器30cm的方法增强了信号. 感觉好神奇ovoovo然而在自己屋子里信号还是不行qwq\nsad\n","permalink":"/diary/732adc/","summary":"高考倒计时72天.\n还有辣么久昂qwqwqqq.\n早上感觉各科老师都在闲扯呢. 除了adam.\n于是中午打球就被盯到了qwq\n下午考理综做得飞快然后就错了6道选择题.\n晚上颓rc然后发现怎么wifi炸了啊unhappy. 然后使用移动路由器30cm的方法增强了信号. 感觉好神奇ovoovo然而在自己屋子里信号还是不行qwq\nsad","title":"20160326"},{"content":"高考前73天.\n颓废的好日子过完辣.\n然而被同桌拉进了坑.\n于是一天淦完一本半小说. 同桌表示窝看书好快. 窝表示窝可是看妖少的书长大的, 后来又看带鱼. 一天三百章的事都干过, 区区两百页何足挂齿ovovovovo\n然而后面还有一堆. 此坑略大. 为什么会被这种奇怪的小说缠住呢? 难道只是因为看到作者的照片觉得长得很像***.\n感觉好喜欢那个宫女啊ovoovo然后又想人生里的巧珍233333\n唉唉没救啦.\n二诊肯定爆炸了qwq\n","permalink":"/diary/37e89a/","summary":"高考前73天.\n颓废的好日子过完辣.\n然而被同桌拉进了坑.\n于是一天淦完一本半小说. 同桌表示窝看书好快. 窝表示窝可是看妖少的书长大的, 后来又看带鱼. 一天三百章的事都干过, 区区两百页何足挂齿ovovovovo\n然而后面还有一堆. 此坑略大. 为什么会被这种奇怪的小说缠住呢? 难道只是因为看到作者的照片觉得长得很像***.\n感觉好喜欢那个宫女啊ovoovo然后又想人生里的巧珍233333\n唉唉没救啦.\n二诊肯定爆炸了qwq","title":"20160325"},{"content":"离高考还有74天.\n水水水水水水水水水水.\n早上在和生物知识点做斗争. 然而选修教材好多东西好奇怪. 挖的空更奇怪.\n然后接着水水水水水.\n中午买的qbq晚上就看完了.\n中午打球满操场水.\n下午的数学考试感觉变简单了? 确实是简单了.\novoovo非学校老师出的题就是水.\n嗯a normal day.\n","permalink":"/diary/38bce8/","summary":"离高考还有74天.\n水水水水水水水水水水.\n早上在和生物知识点做斗争. 然而选修教材好多东西好奇怪. 挖的空更奇怪.\n然后接着水水水水水.\n中午买的qbq晚上就看完了.\n中午打球满操场水.\n下午的数学考试感觉变简单了? 确实是简单了.\novoovo非学校老师出的题就是水.\n嗯a normal day.","title":"20160324"},{"content":"离NCEE2016还有75天.\nday体检 = day颓废.\n早上做化学题错了5个选择什么鬼.\n中午一群人好急啊ovo明明只需要走15分钟嘛.\n见到了mhy. happy. mhy表示hja naive. hja表示yjq一定能拿scoi2016 rank1.\n听力那间屋好闷. 从没见过那么简陋的测度数的方法. 检查内科的时候太紧张结果自己抽筋了ovo\n下午回教室坐了两分钟就下大雨了.\n感觉什么也不想做.\n我的过去, 现在和未来都掩埋在春天的阴风和落花里了.\n教室很大, 然而教室真的很小.\n唉.\n然后_Tale of Two Cities_真的好难懂qwq.\n没救啦.\n","permalink":"/diary/24ffad/","summary":"离NCEE2016还有75天.\nday体检 = day颓废.\n早上做化学题错了5个选择什么鬼.\n中午一群人好急啊ovo明明只需要走15分钟嘛.\n见到了mhy. happy. mhy表示hja naive. hja表示yjq一定能拿scoi2016 rank1.\n听力那间屋好闷. 从没见过那么简陋的测度数的方法. 检查内科的时候太紧张结果自己抽筋了ovo\n下午回教室坐了两分钟就下大雨了.\n感觉什么也不想做.\n我的过去, 现在和未来都掩埋在春天的阴风和落花里了.\n教室很大, 然而教室真的很小.\n唉.\n然后_Tale of Two Cities_真的好难懂qwq.\n没救啦.","title":"20160323"},{"content":"高考倒计时76天.\n颓废++.\n早上因为没吃饭所以智商都不见了.\n然后被扎的时候似乎没找准血管. ju进去之后duo了至少半分钟才出血qwq\n然后早上吃多了于是中午晚上都不想吃饭.\n看完了欧亨利, 感觉好无语. 各种神结局还有教我做人ovo\n于是又去搞来一本书. 现在书都好贵啊qwq\n晚上在那做初中超班的题. 已经不会做初中平几了没救了qwq\n感觉要浪翻天了.\nqwq\n","permalink":"/diary/65ecab/","summary":"高考倒计时76天.\n颓废++.\n早上因为没吃饭所以智商都不见了.\n然后被扎的时候似乎没找准血管. ju进去之后duo了至少半分钟才出血qwq\n然后早上吃多了于是中午晚上都不想吃饭.\n看完了欧亨利, 感觉好无语. 各种神结局还有教我做人ovo\n于是又去搞来一本书. 现在书都好贵啊qwq\n晚上在那做初中超班的题. 已经不会做初中平几了没救了qwq\n感觉要浪翻天了.\nqwq","title":"20160322"},{"content":"离NCEE2016还有77天.\n看书ing(其实是在颓废)\n早上把手机摔地上了sad.\n睡过去了.\n去问化学老师问题然后发现自己ovo\n下午似乎还在睡.\n晚上接着睡.\n想起曾经自由度比现在大多了, 然而也没有睡过这么久. 果然是时代不同了呢.\n然而还要打作文.\n尝试用md而不是tex, 然后觉得丑哭了而且没有缩进有点难受. 难道我是tex中毒了?\nAdam为什么要把英文作文里的引号打成中文引号啊?\n真口怕.\n","permalink":"/diary/4e093a/","summary":"离NCEE2016还有77天.\n看书ing(其实是在颓废)\n早上把手机摔地上了sad.\n睡过去了.\n去问化学老师问题然后发现自己ovo\n下午似乎还在睡.\n晚上接着睡.\n想起曾经自由度比现在大多了, 然而也没有睡过这么久. 果然是时代不同了呢.\n然而还要打作文.\n尝试用md而不是tex, 然后觉得丑哭了而且没有缩进有点难受. 难道我是tex中毒了?\nAdam为什么要把英文作文里的引号打成中文引号啊?\n真口怕.","title":"20160321"},{"content":"高考还有78天.\n我有什么理由虚度时光? 我有什么理由不虚度时光?\nrobocraft好玩. 比当年服务器稳定性提高了, 而且玩法变化似乎挺大ovo\n科技树变成科技链了ovovovo\n飞起来加上plasma acc之后打轮式robot感觉好开心.\n然而一下午晚上都在扯ger. 感觉没救了.\n大概真的没救了.\n明天看书day1. 怎么玩啊qwq\n","permalink":"/diary/e5288c/","summary":"高考还有78天.\n我有什么理由虚度时光? 我有什么理由不虚度时光?\nrobocraft好玩. 比当年服务器稳定性提高了, 而且玩法变化似乎挺大ovo\n科技树变成科技链了ovovovo\n飞起来加上plasma acc之后打轮式robot感觉好开心.\n然而一下午晚上都在扯ger. 感觉没救了.\n大概真的没救了.\n明天看书day1. 怎么玩啊qwq","title":"20160320"},{"content":"在网页上写数学公式怎么少得了MathJax. 然而这玩意因为功能复杂所以比showdown之类的库要难配置一些.\n首先从Github上把它clone下来. 然后发现这玩意真的好大. 后来发现是有一堆迷之png.\n别人家的cdn的速度从我这来看都不怎么样, 所以还是只能扔到自已的server上.\n最简单的用法就是在html head里加一行\n\u0026lt;script src='xxx/MathJax.js?config=default'\u0026gt;\u0026lt;/script\u0026gt; 然后它就会用默认配置在网页加载的时候把那些玩意给转换了.\n这里有一个config的文件可以选择. 在unpacked里的default.js里有很详细的说明. (虽然是英文的)\n看上去能用了? 然后问题来了. 我的前端是先加载网页框架, 再用js去加载内容, 然而内容加载出来的时候MathJax已经把活干完歇菜了. 显然应该有什么控制单元能随时更新某个element. google了一下发现MathJax有个子类控制单元叫Hub. Hub有个方法叫Typeset, 能重新检查页面.\n于是这么写?\n$.post(\u0026quot;xxx\u0026quot;, {xx}, function(res) { $(\u0026quot;#xxx\u0026quot;).html(res.content); MathJax.Hub.Typeset(); }); 然而这样的话是不是我每加载一个listitem或者comment都要重新扫一遍整个页面啊? 卡死啦.\n于是加了个triggerCount. 麻烦死了.\n然后想想觉得没对, 肯定能直接改某个元素啊. 仔细看看document.\nTypeset([element[, callback]])\n对啊ovo可以直接指定element. 而且还各种类型都资瓷. 在类型这种问题上js比c高到不知道哪里去了.\n于是代码写成\n$.post(\u0026quot;xxx\u0026quot;, {xx}, functoin(res) { $(\u0026quot;#xxx\u0026quot;).html(res.content); MathJax.Hub.Typeset(getMyId()); }); 搞定啦.\n然后config里还可以指定是用$$还是$之类的玩意.\n然后似乎MathJax还自带Async一类的玩意?\n感觉很赞.\n","permalink":"/technical/7d45dd/","summary":"在网页上写数学公式怎么少得了MathJax. 然而这玩意因为功能复杂所以比showdown之类的库要难配置一些.\n首先从Github上把它clone下来. 然后发现这玩意真的好大. 后来发现是有一堆迷之png.\n别人家的cdn的速度从我这来看都不怎么样, 所以还是只能扔到自已的server上.\n最简单的用法就是在html head里加一行\n\u0026lt;script src='xxx/MathJax.js?config=default'\u0026gt;\u0026lt;/script\u0026gt; 然后它就会用默认配置在网页加载的时候把那些玩意给转换了.\n这里有一个config的文件可以选择. 在unpacked里的default.js里有很详细的说明. (虽然是英文的)\n看上去能用了? 然后问题来了. 我的前端是先加载网页框架, 再用js去加载内容, 然而内容加载出来的时候MathJax已经把活干完歇菜了. 显然应该有什么控制单元能随时更新某个element. google了一下发现MathJax有个子类控制单元叫Hub. Hub有个方法叫Typeset, 能重新检查页面.\n于是这么写?\n$.post(\u0026quot;xxx\u0026quot;, {xx}, function(res) { $(\u0026quot;#xxx\u0026quot;).html(res.content); MathJax.Hub.Typeset(); }); 然而这样的话是不是我每加载一个listitem或者comment都要重新扫一遍整个页面啊? 卡死啦.\n于是加了个triggerCount. 麻烦死了.\n然后想想觉得没对, 肯定能直接改某个元素啊. 仔细看看document.\nTypeset([element[, callback]])\n对啊ovo可以直接指定element. 而且还各种类型都资瓷. 在类型这种问题上js比c高到不知道哪里去了.\n于是代码写成\n$.post(\u0026quot;xxx\u0026quot;, {xx}, functoin(res) { $(\u0026quot;#xxx\u0026quot;).html(res.content); MathJax.Hub.Typeset(getMyId()); }); 搞定啦.\n然后config里还可以指定是用$$还是$之类的玩意.\n然后似乎MathJax还自带Async一类的玩意?\n感觉很赞.","title":"MathJax简单配置"},{"content":"离高考还有79天.\n爹唱歌:\n没有人能随随便便成攻\nmaya窝又污啦.\n今天是laekov暴走日. 中午走去七医院侦察地形. 下午回家跑了好几家五金店买灯泡, 然后被告知现在都不卖正常白炽灯灯泡了qwq当个灯泡这么难嘛.\n还有上午化学课因为昨天作业错了4道选被d了qwq明明就是昨天被付阿姨谈天之后做化学的时候心智crash了.\n为什么我的心还会跳啊ovo\n没救啦.\n搞了半天似乎成功地自建了mathJax的cdn然而还是不能成功地让页面正常地显示数学公式. 好伤心.\n大概窝没有使用正确的前端打开方式qwq.\nczr造的站太强辣. 唉唉窝这种弱鸡水平要没饭次啦好伤心.\n有一个悲伤的故事叫断网后打开流量忘关thunder. 流量瞬间没有了(幸好只有100M正好把流量花完)qwqwqwqwq\n","permalink":"/diary/0d03df/","summary":"离高考还有79天.\n爹唱歌:\n没有人能随随便便成攻\nmaya窝又污啦.\n今天是laekov暴走日. 中午走去七医院侦察地形. 下午回家跑了好几家五金店买灯泡, 然后被告知现在都不卖正常白炽灯灯泡了qwq当个灯泡这么难嘛.\n还有上午化学课因为昨天作业错了4道选被d了qwq明明就是昨天被付阿姨谈天之后做化学的时候心智crash了.\n为什么我的心还会跳啊ovo\n没救啦.\n搞了半天似乎成功地自建了mathJax的cdn然而还是不能成功地让页面正常地显示数学公式. 好伤心.\n大概窝没有使用正确的前端打开方式qwq.\nczr造的站太强辣. 唉唉窝这种弱鸡水平要没饭次啦好伤心.\n有一个悲伤的故事叫断网后打开流量忘关thunder. 流量瞬间没有了(幸好只有100M正好把流量花完)qwqwqwqwq","title":"20160319"},{"content":"高考倒计时\\(9^2-1\\)天.\n不会搞mathJax没救了. 周末有空再说qwq.\n九九归一掌~\n颓废的一天.\n出太阳了好开心. 中午打球被虐ovo\n听说高考要体验ovoovo要抽血还要饿一早上啊ovovoovo\n看到了奇怪的东西. 感觉世界好神奇. 好多东西是看不见的而且存在地如此真实.\n唉唉自作死不可活.\n","permalink":"/diary/eb9c96/","summary":"高考倒计时\\(9^2-1\\)天.\n不会搞mathJax没救了. 周末有空再说qwq.\n九九归一掌~\n颓废的一天.\n出太阳了好开心. 中午打球被虐ovo\n听说高考要体验ovoovo要抽血还要饿一早上啊ovovoovo\n看到了奇怪的东西. 感觉世界好神奇. 好多东西是看不见的而且存在地如此真实.\n唉唉自作死不可活.","title":"20160318"},{"content":"高考倒计时81天.\n严重警告oi现役的学弟们, noi都进队去. 除非你愿意从程序员变身为打字员.\n二模综排降了. 都是数学的锅.\n然而今天好颓废啊ovo.\n打作文去了ovo\n","permalink":"/diary/cf42ed/","summary":"高考倒计时81天.\n严重警告oi现役的学弟们, noi都进队去. 除非你愿意从程序员变身为打字员.\n二模综排降了. 都是数学的锅.\n然而今天好颓废啊ovo.\n打作文去了ovo","title":"20160317"},{"content":"高考倒计时82天.\n二模没救了啊啊啊.\n数学三道选择题直接再见. 然后最后一个大题的见鬼证法被老师法现了, 原因竟是最后一问求导求错了qwqwqqq.\n今天又考数学然后接着gg. 居然错了解几没救了.qwq. 感觉做题的时候心不在焉在焉在焉.\n物理似乎考得有点好. ovo然而只是因为见过原题ovo\n化学老师说有机题难然而我觉得有机题好简单实验题才是真的难ovoovovo然而还是错了一堆, 化学生物都没上平均分unhappy.\n英语居然错了一道听力不可饶恕. 错了四个完形好醉. 于是只有班平左右了qwq. 然后做完操阿老师专程叫住我, 对我说: \u0026ldquo;你要认真学习.\u0026rdquo; 当时心里真是有千万头羊驼在奔腾啊.\n语文大概没救肯定没救ovo\n唉没上平均分诶怎么办.\n反正我中考成绩低嘛23333333(小国獒是不是要哭瞎了)\n体育课打球, 中投命中0. maya怎么突然就gg了连机选的命中率都没有.\n没救啦.\n然而还是不想好好学习. 感觉做什么事情都没有意义. 真是的.\n","permalink":"/diary/055a36/","summary":"高考倒计时82天.\n二模没救了啊啊啊.\n数学三道选择题直接再见. 然后最后一个大题的见鬼证法被老师法现了, 原因竟是最后一问求导求错了qwqwqqq.\n今天又考数学然后接着gg. 居然错了解几没救了.qwq. 感觉做题的时候心不在焉在焉在焉.\n物理似乎考得有点好. ovo然而只是因为见过原题ovo\n化学老师说有机题难然而我觉得有机题好简单实验题才是真的难ovoovovo然而还是错了一堆, 化学生物都没上平均分unhappy.\n英语居然错了一道听力不可饶恕. 错了四个完形好醉. 于是只有班平左右了qwq. 然后做完操阿老师专程叫住我, 对我说: \u0026ldquo;你要认真学习.\u0026rdquo; 当时心里真是有千万头羊驼在奔腾啊.\n语文大概没救肯定没救ovo\n唉没上平均分诶怎么办.\n反正我中考成绩低嘛23333333(小国獒是不是要哭瞎了)\n体育课打球, 中投命中0. maya怎么突然就gg了连机选的命中率都没有.\n没救啦.\n然而还是不想好好学习. 感觉做什么事情都没有意义. 真是的.","title":"20160316"},{"content":"高考倒计时83天.\n二模day2. (唉哟afo了这么久了还是习惯用day1day2没救了)\n根据难度守衡定理, 一场考试的难度不能凭空产生也不能凭空消失, 只能从day1转移到day2, 或者从上午的科目转化成下午的科目.\n然而理综爆炸+中午突然反应过来数学爆炸+英语爆炸.\n理综做得飞快. 然后检查的时候发现有机题写错了一个方程和顺丁橡胶的结构简式感觉没救了. 写成了顺己橡胶ovo.\n英语完全无力了ovo多少年没错过听力了ovo\n晚上吃了饭打球转角遇到阿老师. 吃饭之后打球战斗力和弹硬币时候的皮哥一样啊.qwq. 然而好歹入帐一颗中.\n晚上练了一晚上英语字帖. 感觉.23333. 手要断了.\n唉唉都要高考了还这么颓没救了.\n","permalink":"/diary/d24135/","summary":"高考倒计时83天.\n二模day2. (唉哟afo了这么久了还是习惯用day1day2没救了)\n根据难度守衡定理, 一场考试的难度不能凭空产生也不能凭空消失, 只能从day1转移到day2, 或者从上午的科目转化成下午的科目.\n然而理综爆炸+中午突然反应过来数学爆炸+英语爆炸.\n理综做得飞快. 然后检查的时候发现有机题写错了一个方程和顺丁橡胶的结构简式感觉没救了. 写成了顺己橡胶ovo.\n英语完全无力了ovo多少年没错过听力了ovo\n晚上吃了饭打球转角遇到阿老师. 吃饭之后打球战斗力和弹硬币时候的皮哥一样啊.qwq. 然而好歹入帐一颗中.\n晚上练了一晚上英语字帖. 感觉.23333. 手要断了.\n唉唉都要高考了还这么颓没救了.","title":"20160315 二模day2"},{"content":"高考还有84天.\n萌萌哒二模day1.\n语文作文是关于社区街区化的. 恰好前两天才在zhihu上看了关于这个的帖子, 于是愉快地扯啊扯啊扯扯完还有40分钟然后 = = 差点被尿胀死.\n数学最后一题倒数第二问的证法可以证出调和级数是收敛的. 感觉自己强爆了. 然后随便听了两个不认识的人对答案发现自己似乎把立几做错了? omg\n在回家的公车上想通了为什么人多的时候不容易摔. 其实是因为人多所以加速度小了呐萌萌哒~ 以前一直觉得是人多挤得倒不下去来着. (可能也有这样的原因吧)\n站着玩电脑坚持了一个星期最终放弃了. 然后成了双屏2333. 膝盖好疼qwq\n目测某些小朋友想通了? 虽然窝当了回坏人不过感觉好开心ovo 不平行的直线何必相交. 希望懂了.\n二模要爆炸了qwq\n好久没打球了qwq\n","permalink":"/diary/f17ca7/","summary":"高考还有84天.\n萌萌哒二模day1.\n语文作文是关于社区街区化的. 恰好前两天才在zhihu上看了关于这个的帖子, 于是愉快地扯啊扯啊扯扯完还有40分钟然后 = = 差点被尿胀死.\n数学最后一题倒数第二问的证法可以证出调和级数是收敛的. 感觉自己强爆了. 然后随便听了两个不认识的人对答案发现自己似乎把立几做错了? omg\n在回家的公车上想通了为什么人多的时候不容易摔. 其实是因为人多所以加速度小了呐萌萌哒~ 以前一直觉得是人多挤得倒不下去来着. (可能也有这样的原因吧)\n站着玩电脑坚持了一个星期最终放弃了. 然后成了双屏2333. 膝盖好疼qwq\n目测某些小朋友想通了? 虽然窝当了回坏人不过感觉好开心ovo 不平行的直线何必相交. 希望懂了.\n二模要爆炸了qwq\n好久没打球了qwq","title":"20160314 二模day1"},{"content":"高考倒计时85天.\n颓废的一天.\n早上和床斗争依然失败.\n作业好少ovo生物卷子质量好差. 两道一样的选择题居然答案不一样ovo什么鬼喽.\n下午打ed晚上打ed. vulture一打三虽然对面很弱但是也打不过. 不就是双基rail gun么被我咬尾的还没有能逃掉的. 然而对面一cobra两eagle的配置就真的打不动了. 毕竟是团结的力量. 然而作为人类找个wing man真的很难qwq.\n最后玻璃破了最后一分钟冲回了空间站. 然后发现攒钱攒差不多了于是换了asp explorer. 终于要开启explorer生涯了不用再打来打去了好开心.\n要是能把行星做成棒棒糖该多好啊XD.\nmaya明天要考试我今天还在干这种事. 没救了.\n","permalink":"/diary/678774/","summary":"高考倒计时85天.\n颓废的一天.\n早上和床斗争依然失败.\n作业好少ovo生物卷子质量好差. 两道一样的选择题居然答案不一样ovo什么鬼喽.\n下午打ed晚上打ed. vulture一打三虽然对面很弱但是也打不过. 不就是双基rail gun么被我咬尾的还没有能逃掉的. 然而对面一cobra两eagle的配置就真的打不动了. 毕竟是团结的力量. 然而作为人类找个wing man真的很难qwq.\n最后玻璃破了最后一分钟冲回了空间站. 然后发现攒钱攒差不多了于是换了asp explorer. 终于要开启explorer生涯了不用再打来打去了好开心.\n要是能把行星做成棒棒糖该多好啊XD.\nmaya明天要考试我今天还在干这种事. 没救了.","title":"20160313"},{"content":"距高考还有86天.\n周五考理综周六就能出成绩, 而周六考理综要第二周三才出成绩.\n然而周六考数学当场就能出成绩, 因为是考完直接发答案自己对qwq.\n然而最后一题还是不会. 感觉这辈子也做不对最后一问了.\n然而解析也错了严重不开心ovo\n晚上打ed去揍一只170k的fdl结果被fdl打得屁混尿流. 然后跑的时候还被追着打要不是最后盾修好了撑了一会都进不了超空间就神作了. 最后又是1%逃掉好险呐. 没救了.\n然后把srk搬运到了新的服务器上. (其实是vps) 好贵啊好贵啊. 流量还要自己给钱求不炸qwq. 然而带宽很赞.\n然而为啥还要用php啊我真是佩服自己. 早知道直接拿nodejs写了真是的.\n伤心qwq.\n","permalink":"/diary/20c2fb/","summary":"距高考还有86天.\n周五考理综周六就能出成绩, 而周六考理综要第二周三才出成绩.\n然而周六考数学当场就能出成绩, 因为是考完直接发答案自己对qwq.\n然而最后一题还是不会. 感觉这辈子也做不对最后一问了.\n然而解析也错了严重不开心ovo\n晚上打ed去揍一只170k的fdl结果被fdl打得屁混尿流. 然后跑的时候还被追着打要不是最后盾修好了撑了一会都进不了超空间就神作了. 最后又是1%逃掉好险呐. 没救了.\n然后把srk搬运到了新的服务器上. (其实是vps) 好贵啊好贵啊. 流量还要自己给钱求不炸qwq. 然而带宽很赞.\n然而为啥还要用php啊我真是佩服自己. 早知道直接拿nodejs写了真是的.\n伤心qwq.","title":"20160312"},{"content":"高考倒计时87天.\n怎么觉得日期有点没对?\n周三数学考试最后一题没发现极限是零分之零型的直接得0了. 晕.\n今天理综做得好快ovo然而物理最后一题最后一问那么简单为啥要思考那么久啊ovo而且最后还忘了考虑周期性真是没治了.\n然后错了一道物理选一道生物选.\n蔗糖啊喵. 不能和Cu(OH)2反应的啊喵.\n然后化学那个还原剂太厉害了没想到.\n下周二模所以要搬书. 现在开始后悔开学的时候没把上学期的卷子搬运回家了. 然后转念一想反正现在发卷子的速度大概也不用分那么清23333.\n窝太弱啦qwq\n","permalink":"/diary/a08cfa/","summary":"高考倒计时87天.\n怎么觉得日期有点没对?\n周三数学考试最后一题没发现极限是零分之零型的直接得0了. 晕.\n今天理综做得好快ovo然而物理最后一题最后一问那么简单为啥要思考那么久啊ovo而且最后还忘了考虑周期性真是没治了.\n然后错了一道物理选一道生物选.\n蔗糖啊喵. 不能和Cu(OH)2反应的啊喵.\n然后化学那个还原剂太厉害了没想到.\n下周二模所以要搬书. 现在开始后悔开学的时候没把上学期的卷子搬运回家了. 然后转念一想反正现在发卷子的速度大概也不用分那么清23333.\n窝太弱啦qwq","title":"20160311"},{"content":"高考倒计时88天.\n确认昨天mathJax爆炸事件是因为上传表单中反斜杠被php搞成了两根反斜杠导致的. qwq\n今天发生了什么么?\n上午拿奇怪的数列去找数学老师2333.\n然后做做做做做.\n看到sf在看关于mc和mc编程的书. 然而那是给没有基础的10岁小朋友写的ovo. 然后被怒斥mc水平. 对不起嘛我弱嘛当年还没大规模颓mc就退役了qwq\n还是不打算接着玩mc.\n于是颓掉了好多时间啊不开心.\n晚上物理那个函数好醚. 导函数应该是单调的? 然而懒得画图了qwq\n然后啥在斜面上的运动时间算成了在平面上的运动时间, 算动能算成了速度. 没救了qwq\n","permalink":"/diary/b95388/","summary":"高考倒计时88天.\n确认昨天mathJax爆炸事件是因为上传表单中反斜杠被php搞成了两根反斜杠导致的. qwq\n今天发生了什么么?\n上午拿奇怪的数列去找数学老师2333.\n然后做做做做做.\n看到sf在看关于mc和mc编程的书. 然而那是给没有基础的10岁小朋友写的ovo. 然后被怒斥mc水平. 对不起嘛我弱嘛当年还没大规模颓mc就退役了qwq\n还是不打算接着玩mc.\n于是颓掉了好多时间啊不开心.\n晚上物理那个函数好醚. 导函数应该是单调的? 然而懒得画图了qwq\n然后啥在斜面上的运动时间算成了在平面上的运动时间, 算动能算成了速度. 没救了qwq","title":"20160310"},{"content":"公式: 一枚硬币扔一次有p的概率朝上, 扔n次, 朝上次数的方差为`n * p * (1-p)\\\\\\'.\n证明: 归纳法(增量证明)\n设D(n)表示扔n次时的方差. E(n)表示扔n次时的期望. P(n, i)表示扔n次, 朝上i次的概率.\n对于n=1的情况显然成立.\n对于n\u0026gt;1的情况\n$$D(i)=\\sum_{i=0}^{n}P(n,i)*(i-E(n))^2$$\n对于D(n+1)\n$$D(i+1)=\\sum_{i=0}^{n}P(n, i) * (p * (i + 1 - E(p) - p)^2 + (1-p) * (i - E(p) - p)^2)$$\n再两式相减, 式子有点麻烦, 但是可以巧妙地拆开然后用平方差化简.\n$$D(n+1) - D(n) = \\sum_{i=0}^{n}P(n, i) * p * (1-p)$$\n右边那坨是常数. 左边这坨和刚好为1.\n于是\n$$D(n+1) - D(n) = p * (1-p)$$\n搞定.\n数学考试遇到直接背公式就好. 可以记一个简单的结论是方差与n成正比. 不知道有没有奇怪的证明方法可以直接证这个来证上面那个公式.\n思考了好久才思考出这种证法ovo.\nmathJax还没搞定所以公式全是乱码qwq. 随便喂给一个TeX编译器应该都能看.\n推荐bestcoder的这个http://bestcoder.hdu.edu.cn/latex.php\n","permalink":"/random/47bc0e/","summary":"公式: 一枚硬币扔一次有p的概率朝上, 扔n次, 朝上次数的方差为`n * p * (1-p)\\\\\\'.\n证明: 归纳法(增量证明)\n设D(n)表示扔n次时的方差. E(n)表示扔n次时的期望. P(n, i)表示扔n次, 朝上i次的概率.\n对于n=1的情况显然成立.\n对于n\u0026gt;1的情况\n$$D(i)=\\sum_{i=0}^{n}P(n,i)*(i-E(n))^2$$\n对于D(n+1)\n$$D(i+1)=\\sum_{i=0}^{n}P(n, i) * (p * (i + 1 - E(p) - p)^2 + (1-p) * (i - E(p) - p)^2)$$\n再两式相减, 式子有点麻烦, 但是可以巧妙地拆开然后用平方差化简.\n$$D(n+1) - D(n) = \\sum_{i=0}^{n}P(n, i) * p * (1-p)$$\n右边那坨是常数. 左边这坨和刚好为1.\n于是\n$$D(n+1) - D(n) = p * (1-p)$$\n搞定.\n数学考试遇到直接背公式就好. 可以记一个简单的结论是方差与n成正比. 不知道有没有奇怪的证明方法可以直接证这个来证上面那个公式.\n思考了好久才思考出这种证法ovo.\nmathJax还没搞定所以公式全是乱码qwq. 随便喂给一个TeX编译器应该都能看.\n推荐bestcoder的这个http://bestcoder.hdu.edu.cn/latex.php","title":"二项分布方差公式证明"},{"content":"高考倒计时89天.\n各种颓废ovo\n家里似乎有迷一样的电磁信号屏蔽. 在某些位置wifi信号特别差qwq\n下午在雨中打球. 中远程打击命中率++. 感觉特别开心.\n考数学ovo. 数学没救了.\n理综因为没错选择题所以似乎吊打了yzy? 好开心.\n中午冒雨去买遥控板电池然而化学老师拒绝使用黑白反色. 不开心.\n尝试在srk里用mathJax. 总感觉这玩意是爆炸的啊ovo.\n真点难用qwq\n","permalink":"/diary/2b048f/","summary":"高考倒计时89天.\n各种颓废ovo\n家里似乎有迷一样的电磁信号屏蔽. 在某些位置wifi信号特别差qwq\n下午在雨中打球. 中远程打击命中率++. 感觉特别开心.\n考数学ovo. 数学没救了.\n理综因为没错选择题所以似乎吊打了yzy? 好开心.\n中午冒雨去买遥控板电池然而化学老师拒绝使用黑白反色. 不开心.\n尝试在srk里用mathJax. 总感觉这玩意是爆炸的啊ovo.\n真点难用qwq","title":"20160309"},{"content":"高考还有90天.\n有啥事要说来着.\n拿到了废旧显示器. 在家里也有外接显示器用啦.\n然而站立式摆放方案总觉得脚好酸. zhihu上的东西一定是在坑人qwq.\n显示器突然就变大了感觉眼睛好胀ovoovo.\n又忘了要说啥了ovo.\n晚自习的时候花了40分钟思考狭义相对论然而还是没有太搞清楚.\n知道其实就是把时间看作空间的第四根轴. 然而对那个火车上拍两下桌子的比喻还是觉得好醚.\n然而上周六的理综炸了. 物理第二个大题把电磁感应安培力的公式给背错了qwq生物错了一大堆一大堆一大堆.\n窝没救啦.\n今天苍彼更了happy.\n所以啊\u0026hellip;我还是too young.\nUpdate: 为什么在zhihu上老是被邀请去回答毫不相干的问题啊什么鬼喽?\n","permalink":"/diary/17a3cf/","summary":"高考还有90天.\n有啥事要说来着.\n拿到了废旧显示器. 在家里也有外接显示器用啦.\n然而站立式摆放方案总觉得脚好酸. zhihu上的东西一定是在坑人qwq.\n显示器突然就变大了感觉眼睛好胀ovoovo.\n又忘了要说啥了ovo.\n晚自习的时候花了40分钟思考狭义相对论然而还是没有太搞清楚.\n知道其实就是把时间看作空间的第四根轴. 然而对那个火车上拍两下桌子的比喻还是觉得好醚.\n然而上周六的理综炸了. 物理第二个大题把电磁感应安培力的公式给背错了qwq生物错了一大堆一大堆一大堆.\n窝没救啦.\n今天苍彼更了happy.\n所以啊\u0026hellip;我还是too young.\nUpdate: 为什么在zhihu上老是被邀请去回答毫不相干的问题啊什么鬼喽?","title":"20160308"},{"content":"高考倒计时91天.\n作业要做不完了qwq.\n早上升旗遇到了奇怪的事. 糊俑: 某些同学晚上在校园里游逛, 行为歪瓜劣枣瓜劣枣劣枣枣. 交往过密xxoxoxox. 普通话太差没听清.\n在七中混了这么多年了第一次听说学校要管这种事情.\n后来发现前面的小哥说了嘛\\\u0026quot;只是作秀\\\u0026quot;.\n晚上去跑步的时候发现操场上的二元组里fm的比例下降了, 然而出现了不少ff, fff, ffff啥的奇怪组合. 仔细一想这不是学校在鼓励同学们搞lgbt嘛. 我给0xff个赞.\n莫名想起初三的时候从成华调来的核肛也出过类似的规定\n男女生走在一起直接发违纪通知单.\n然后还记得她当天晚上看到我的时候感觉整个人脸都绿了. (后来发现似乎只是急着回寝室洗头?)2333333\n下午考英语的时候get了表白新技能.\n-你长得好像我的第五个女朋友啊.\n-你有过几个女朋友啊.\n-4个.\n好想哪天试一试啊.ovovovo想什么呢刘老师说了不要男女生交往过密呢. (yzy一定会笑晕在厕所)\n于是晚上同桌看小说被批是啥鬼. 顺带还把我婊了一顿.\n我觉得话说得太过份了.\n有本事你自己进国集别回来了啊.\n删掉了一段脏话. 不是不会骂或者不想骂. 真的很伤人. 然而还是那句话, 人在矮檐下, 不得不低头. 真觉得这辈子过得太wbvc窝囊了.\n然而生物作业还没做完.\novovovoovovo\n想起梁静茹的一句歌词.\n能重来那就好了.\n然而重来大概就只有reset了.\n唉ovo.\n噢对了@女生们 女生节快乐.\n","permalink":"/diary/ffa915/","summary":"高考倒计时91天.\n作业要做不完了qwq.\n早上升旗遇到了奇怪的事. 糊俑: 某些同学晚上在校园里游逛, 行为歪瓜劣枣瓜劣枣劣枣枣. 交往过密xxoxoxox. 普通话太差没听清.\n在七中混了这么多年了第一次听说学校要管这种事情.\n后来发现前面的小哥说了嘛\\\u0026quot;只是作秀\\\u0026quot;.\n晚上去跑步的时候发现操场上的二元组里fm的比例下降了, 然而出现了不少ff, fff, ffff啥的奇怪组合. 仔细一想这不是学校在鼓励同学们搞lgbt嘛. 我给0xff个赞.\n莫名想起初三的时候从成华调来的核肛也出过类似的规定\n男女生走在一起直接发违纪通知单.\n然后还记得她当天晚上看到我的时候感觉整个人脸都绿了. (后来发现似乎只是急着回寝室洗头?)2333333\n下午考英语的时候get了表白新技能.\n-你长得好像我的第五个女朋友啊.\n-你有过几个女朋友啊.\n-4个.\n好想哪天试一试啊.ovovovo想什么呢刘老师说了不要男女生交往过密呢. (yzy一定会笑晕在厕所)\n于是晚上同桌看小说被批是啥鬼. 顺带还把我婊了一顿.\n我觉得话说得太过份了.\n有本事你自己进国集别回来了啊.\n删掉了一段脏话. 不是不会骂或者不想骂. 真的很伤人. 然而还是那句话, 人在矮檐下, 不得不低头. 真觉得这辈子过得太wbvc窝囊了.\n然而生物作业还没做完.\novovovoovovo\n想起梁静茹的一句歌词.\n能重来那就好了.\n然而重来大概就只有reset了.\n唉ovo.\n噢对了@女生们 女生节快乐.","title":"20160307"},{"content":"高考倒计时92天.\n都要高考了还在玩.\n做了大半天作业. 最后发现物理卷子不可做. 夏老师过于没有诚意.\n前几天立了个cyl不会看我博客的flag来着, 今天就收了ovo. 明明就是自己作死告诉他我重新写了博客嘛.\n吐槽窝配色的人++.\n关于艺术楼五楼修机房这事似乎闹挺大? 虽然至今没看到除了yjq以外的竞赛党说话啊.\n其实这事窝去年这时候就知道了ovo. 窝倒是想赞叹学校的效率.\n其实把竞赛教室搬到租出去的那栋楼楼上多好, 以后买键盘直接对着楼下吼就行了都不用出校门.\n想当年305被文总管没收的时候, 我们从305搬书也搬了一节晚自习. 翻出了若干年前贾开学长还有更早的学长的书, 还有某年学长们写给张老的生日祝福本. 当时各种批判文总管至少也骂了一个星期. 生竞就是想一人一层楼的意思嘛你可以直说. 毕竟人在矮檐下, 不得不低头.\n所以说艺术生这种行为也可以理解. 毕竟那些人的脑子构造和你们竞赛党也不一样. 似乎不久之后就要scoi了你们也不要太过在意影响了心情. 说这么多, 自己的利益才是最重要的.\n另外如果有人上门撕x, 我给你们支一招.\nheader(“Location: laekov”); return; laekov这种闲人最喜欢和人撕x啦.\n校方来讲还不就一个字, 穷. 有什么好说的. 很庆幸还有不到100天就要毕业了. 就像当初很庆幸自己不是2018届的一样. 此时的七中已经不是三年前我所向往的那个七中了. 这件事发生的因素很复杂. 不过反正我懒得管了.\n同理也很庆幸再过半年就可以不再待在成都了. 成都是我见过最舒服的城市. 可惜了.\n晚上打ed本来打算再搞1m cr的结果不小心揍到了路人于是吃了wanted. 还没反应过来瞬间两只wing对着我一个人胖揍. 打完几艘大船无损的shield瞬间gg. 要不是反应快赶紧开fsd逃命今天就爆船了. rp--. qwq\n唉唉没救了.\n活在世上有什么意义啊.\n就像依然没有人搞清宇宙有什么意义一样.\nqwq\n","permalink":"/diary/e23a8e/","summary":"高考倒计时92天.\n都要高考了还在玩.\n做了大半天作业. 最后发现物理卷子不可做. 夏老师过于没有诚意.\n前几天立了个cyl不会看我博客的flag来着, 今天就收了ovo. 明明就是自己作死告诉他我重新写了博客嘛.\n吐槽窝配色的人++.\n关于艺术楼五楼修机房这事似乎闹挺大? 虽然至今没看到除了yjq以外的竞赛党说话啊.\n其实这事窝去年这时候就知道了ovo. 窝倒是想赞叹学校的效率.\n其实把竞赛教室搬到租出去的那栋楼楼上多好, 以后买键盘直接对着楼下吼就行了都不用出校门.\n想当年305被文总管没收的时候, 我们从305搬书也搬了一节晚自习. 翻出了若干年前贾开学长还有更早的学长的书, 还有某年学长们写给张老的生日祝福本. 当时各种批判文总管至少也骂了一个星期. 生竞就是想一人一层楼的意思嘛你可以直说. 毕竟人在矮檐下, 不得不低头.\n所以说艺术生这种行为也可以理解. 毕竟那些人的脑子构造和你们竞赛党也不一样. 似乎不久之后就要scoi了你们也不要太过在意影响了心情. 说这么多, 自己的利益才是最重要的.\n另外如果有人上门撕x, 我给你们支一招.\nheader(“Location: laekov”); return; laekov这种闲人最喜欢和人撕x啦.\n校方来讲还不就一个字, 穷. 有什么好说的. 很庆幸还有不到100天就要毕业了. 就像当初很庆幸自己不是2018届的一样. 此时的七中已经不是三年前我所向往的那个七中了. 这件事发生的因素很复杂. 不过反正我懒得管了.\n同理也很庆幸再过半年就可以不再待在成都了. 成都是我见过最舒服的城市. 可惜了.\n晚上打ed本来打算再搞1m cr的结果不小心揍到了路人于是吃了wanted. 还没反应过来瞬间两只wing对着我一个人胖揍. 打完几艘大船无损的shield瞬间gg. 要不是反应快赶紧开fsd逃命今天就爆船了. rp--. qwq\n唉唉没救了.\n活在世上有什么意义啊.\n就像依然没有人搞清宇宙有什么意义一样.\nqwq","title":"20160306"},{"content":"高考倒计时93天.\n早上起来没电于是吃了一顿烛光早餐. 原来我爹没听说过前烛, 然后还顺手把蜡油倒掉了ovovoovo\n人在矮檐下, 不得不低头. 没钱是一切罪恶的源泉.\n上午六节课感觉好长好长好长qwqqwq\n中午因为下午要考试都没人陪我打球了不开心qwqwqqwqwq\n投出了10中9的迷之罚球命中率. 虽然正式打的时候打死也投不进中投. 感觉自己没救了.\n下午考理综.\n考完和小国鳌对同分异构体计数.\n我: maya我少数了一种碳酸酯.\n小国鳌(指着我的草稿纸): 这种三酚苯环上只有一种氢不能算.qwqwqqwq\n我: 好高兴.\n(回家的公车上)\n我: 不对啊三酚本来就有4种. maya qwq\n回家运动完正要洗澡就, 停, 电, 了. 瞬间感觉自己走错路来到了NK.\n晚上打算去网吧来着然而被强行逼去了咖啡店. 不开心ovo\n正在考虑要不要把这个站搬到vps上去? 求advice.\novoovo\nbtw中国移动你也是够了连gravatar都要dns劫持. 你好歹给我找个能用的头像站啊.\n","permalink":"/diary/d0e7c0/","summary":"高考倒计时93天.\n早上起来没电于是吃了一顿烛光早餐. 原来我爹没听说过前烛, 然后还顺手把蜡油倒掉了ovovoovo\n人在矮檐下, 不得不低头. 没钱是一切罪恶的源泉.\n上午六节课感觉好长好长好长qwqqwq\n中午因为下午要考试都没人陪我打球了不开心qwqwqqwqwq\n投出了10中9的迷之罚球命中率. 虽然正式打的时候打死也投不进中投. 感觉自己没救了.\n下午考理综.\n考完和小国鳌对同分异构体计数.\n我: maya我少数了一种碳酸酯.\n小国鳌(指着我的草稿纸): 这种三酚苯环上只有一种氢不能算.qwqwqqwq\n我: 好高兴.\n(回家的公车上)\n我: 不对啊三酚本来就有4种. maya qwq\n回家运动完正要洗澡就, 停, 电, 了. 瞬间感觉自己走错路来到了NK.\n晚上打算去网吧来着然而被强行逼去了咖啡店. 不开心ovo\n正在考虑要不要把这个站搬到vps上去? 求advice.\novoovo\nbtw中国移动你也是够了连gravatar都要dns劫持. 你好歹给我找个能用的头像站啊.","title":"20160305"},{"content":"高考倒计时94天.\ncylcyl?cylcyl!\n因为昨天作死练深蹲于是今天腿脚酸痛.\n于是中午在教室和打印店之间练习折返跑qwq.\nwindows吞掉了我优盘上的文件, 于是只好重新跑回去再做一份. 于是laekov对ms的敌视++.\n下午看到高一高二的教室都空了. 想起了自己高一高二的时候最开心的时候就是星期五下午.\n我已经多久没玩过cf, bc, hiho, etc.了啊. 突然觉得好空虚.\n曾经一星期参加超过7场比赛/考试也不觉得累呢. 现在作业多点就觉得不开心了.\n果然是时代变了呢. 既已弃坑, 何苦为难自己.\novo\n晚上去跑步发现操场上的二元组中, ff和fm各占几乎一半. 只想说学弟学妹们真会玩.\n小说作者是准备弃坑了? 颓废项目\u0026ndash;. qwq.\n以上.\n","permalink":"/diary/15fcf5/","summary":"高考倒计时94天.\ncylcyl?cylcyl!\n因为昨天作死练深蹲于是今天腿脚酸痛.\n于是中午在教室和打印店之间练习折返跑qwq.\nwindows吞掉了我优盘上的文件, 于是只好重新跑回去再做一份. 于是laekov对ms的敌视++.\n下午看到高一高二的教室都空了. 想起了自己高一高二的时候最开心的时候就是星期五下午.\n我已经多久没玩过cf, bc, hiho, etc.了啊. 突然觉得好空虚.\n曾经一星期参加超过7场比赛/考试也不觉得累呢. 现在作业多点就觉得不开心了.\n果然是时代变了呢. 既已弃坑, 何苦为难自己.\novo\n晚上去跑步发现操场上的二元组中, ff和fm各占几乎一半. 只想说学弟学妹们真会玩.\n小说作者是准备弃坑了? 颓废项目\u0026ndash;. qwq.\n以上.","title":"20160304"},{"content":"高考倒计时95天.\n已经忘了多少天了ovo.\n昨天说cyl看来是我自己naive了ovo.\n于是laekov, 是, 弱, 鸡.\n咦我想说啥来着.\n似乎没啥说的啊就是刷刷刷玩玩玩.\n感觉自己好闲啊.\n感觉自己好忙啊.\n感觉自己要精分了. 不啊早就精分了.\n算了\u0026hellip;\n","permalink":"/diary/588231/","summary":"高考倒计时95天.\n已经忘了多少天了ovo.\n昨天说cyl看来是我自己naive了ovo.\n于是laekov, 是, 弱, 鸡.\n咦我想说啥来着.\n似乎没啥说的啊就是刷刷刷玩玩玩.\n感觉自己好闲啊.\n感觉自己好忙啊.\n感觉自己要精分了. 不啊早就精分了.\n算了\u0026hellip;","title":"20160303"},{"content":"高考倒计时96天.\n总是忘记白天想要说什么.\n上午要困死了怎么回事.\n坐在may旁边吃饭感觉好自卑qwq.\n下午打球好开心. 4打5正好空我不用防人233333.\n数学考试难得地做得足够快然后最后一问还是不会.\n数学作业总也没精神动qwq\nmaya连晚上在车上想起要写什么都搞忘了没救了.\ngg\nqwq\nUpdate\n似乎想起要说啥了。中午后知后觉地发现cyl似乎脱单了？还要再观察一下。真是一个脱单的好季节啊23333（然而和窝有毛关系qwq）如果是真的祝幸福orz.\n//反正cyl不看这窝可以自由自在地乱黑2333333\n","permalink":"/diary/96fd66/","summary":"高考倒计时96天.\n总是忘记白天想要说什么.\n上午要困死了怎么回事.\n坐在may旁边吃饭感觉好自卑qwq.\n下午打球好开心. 4打5正好空我不用防人233333.\n数学考试难得地做得足够快然后最后一问还是不会.\n数学作业总也没精神动qwq\nmaya连晚上在车上想起要写什么都搞忘了没救了.\ngg\nqwq\nUpdate\n似乎想起要说啥了。中午后知后觉地发现cyl似乎脱单了？还要再观察一下。真是一个脱单的好季节啊23333（然而和窝有毛关系qwq）如果是真的祝幸福orz.\n//反正cyl不看这窝可以自由自在地乱黑2333333","title":"20160302"},{"content":"高考倒计时97天.\n我要写啥来着.\n解几作业好多啊qwq\n感觉说英语考试可以碎觉是个巨型flag.\n唉又要颓废过去了qwq\n成都只要连续出太阳就会变成雾霾天\u0026ndash;hja定理qwq\ngg\n","permalink":"/diary/b121ef/","summary":"高考倒计时97天.\n我要写啥来着.\n解几作业好多啊qwq\n感觉说英语考试可以碎觉是个巨型flag.\n唉又要颓废过去了qwq\n成都只要连续出太阳就会变成雾霾天\u0026ndash;hja定理qwq\ngg","title":"20160301"},{"content":"高考倒计时98天.\n恭喜may进国家队orz. 祝痛虐全世界, 轻松拿冠军.\n借yzy的话说现在有两个国家队的人认识我了. 好开心. (然而Demi Guo真会记得我这只辣鸡?)\n百日誓师然而他们那段关于理想的演讲把我扯得更远了. 更觉得人生没有希望了怎么办.\n于是晚自习看同桌颓废ovo\n回家路上爹说shiruku对ms的浏览器不资瓷. 然后, 咦还有人用ms的浏览器? 强行把ms的浏览器ban掉好了哈哈哈.(还在写)\n唉唉没救了.\n","permalink":"/diary/95bd34/","summary":"高考倒计时98天.\n恭喜may进国家队orz. 祝痛虐全世界, 轻松拿冠军.\n借yzy的话说现在有两个国家队的人认识我了. 好开心. (然而Demi Guo真会记得我这只辣鸡?)\n百日誓师然而他们那段关于理想的演讲把我扯得更远了. 更觉得人生没有希望了怎么办.\n于是晚自习看同桌颓废ovo\n回家路上爹说shiruku对ms的浏览器不资瓷. 然后, 咦还有人用ms的浏览器? 强行把ms的浏览器ban掉好了哈哈哈.(还在写)\n唉唉没救了.","title":"20160229"},{"content":"高考倒计时99天.\n教室后面挂的倒计时牌子没有第0天差评.\n在这样一个奇特的日子里, 我, 在, 颓废ovo\n上午和床斗争失败9点钟才起床.\n然后花了一上午填昨天晚上挖的点赞的坑qwq效率=0\n然而mathJax还是处于爆炸状态真是要报警了.\n下午去图书馆淦作业+重拾高数. 看着极限那一章还挺开心的样子. 然而我真的在初三暑假刷过这本书?\n感觉当年一定是耳朵can蚊子去了.\n晚上花了2h打ed赚了2e6cr. vul的战斗力就是专门拿来打py的啊!!! 然而打ic就很吃力. cannon需要在对手相对静止地时候对准打比较有效. 然而总觉得打人的效率还是低. 另外发现sys全开撞人的伤害其实挺大(把自己当炮弹了2333). 只是高速追逐的时候根本撞不到. 于是把别人的pp打坏之后再撞很开心. 撞aspe一发10%血excited.\n噫颓炸了qwq\n没救啦. 三本大法吼, 窝想去没有冬天的地方上大学qwq\nUpdate\n晚上去搞过了码市的审核. 然而发现别人的develop和我的develop怎么不是一个概念啊ovo看来是奍不活自己了好伤心qwq还是只有好好学习啊qwq\n","permalink":"/diary/942045/","summary":"高考倒计时99天.\n教室后面挂的倒计时牌子没有第0天差评.\n在这样一个奇特的日子里, 我, 在, 颓废ovo\n上午和床斗争失败9点钟才起床.\n然后花了一上午填昨天晚上挖的点赞的坑qwq效率=0\n然而mathJax还是处于爆炸状态真是要报警了.\n下午去图书馆淦作业+重拾高数. 看着极限那一章还挺开心的样子. 然而我真的在初三暑假刷过这本书?\n感觉当年一定是耳朵can蚊子去了.\n晚上花了2h打ed赚了2e6cr. vul的战斗力就是专门拿来打py的啊!!! 然而打ic就很吃力. cannon需要在对手相对静止地时候对准打比较有效. 然而总觉得打人的效率还是低. 另外发现sys全开撞人的伤害其实挺大(把自己当炮弹了2333). 只是高速追逐的时候根本撞不到. 于是把别人的pp打坏之后再撞很开心. 撞aspe一发10%血excited.\n噫颓炸了qwq\n没救啦. 三本大法吼, 窝想去没有冬天的地方上大学qwq\nUpdate\n晚上去搞过了码市的审核. 然而发现别人的develop和我的develop怎么不是一个概念啊ovo看来是奍不活自己了好伤心qwq还是只有好好学习啊qwq","title":"20160228"},{"content":"造出了一个功能叫点赞qwq.\n想起上周和czr讨论点赞到底应不应该重新从后端获取数据.ovo\n然而这一部分的前端写得好丑啊. 然而后端水平进步了的感觉好开心. (虽然还是丑)\n主要是前端动态渲染的方式会让js各种回调于是很讨厌. 而且$.post的异步在这种时候确实会造成麻烦.\njquery里面一个element被clone之后要先加到document里才能再修饰它的属性, 不然会有奇怪的事情OvO.\n噢对laekov为了好玩允许一个人点0xf个赞. 为什么点赞只能点一个呢? 反正后端都写成这样了就多允许几个好了\u0026hellip;(其实可以调成0xff或者0x3f3f3f3f什么的23333)\n另外也受到了知乎的一些启发. 评论什么的东西其实都可以加这么一个玩意, 反正都写出了通用的接口, 只是多几个接入而已. 感觉这种通用性的思路很有价值.\n","permalink":"/technical/07f888/","summary":"造出了一个功能叫点赞qwq.\n想起上周和czr讨论点赞到底应不应该重新从后端获取数据.ovo\n然而这一部分的前端写得好丑啊. 然而后端水平进步了的感觉好开心. (虽然还是丑)\n主要是前端动态渲染的方式会让js各种回调于是很讨厌. 而且$.post的异步在这种时候确实会造成麻烦.\njquery里面一个element被clone之后要先加到document里才能再修饰它的属性, 不然会有奇怪的事情OvO.\n噢对laekov为了好玩允许一个人点0xf个赞. 为什么点赞只能点一个呢? 反正后端都写成这样了就多允许几个好了\u0026hellip;(其实可以调成0xff或者0x3f3f3f3f什么的23333)\n另外也受到了知乎的一些启发. 评论什么的东西其实都可以加这么一个玩意, 反正都写出了通用的接口, 只是多几个接入而已. 感觉这种通用性的思路很有价值.","title":"shiruku.点赞"},{"content":"手工高考倒计时 100 天. (其实是明天ovo)\n幸好睡觉之前看了一下qq才想起没更博客ovo 感谢 @Miles 提醒. (\u0008其实圈人的功能根本没做出来就强行用了ovo)\n今天晚上效率好低啊好低啊好低啊. 造前端烦死了. 为什么不让用户全部直接命令行file_get_content呢真是的.\n到最后都要疯了还是没写对qwq\n白天似乎发生了什么我想要写下来的事? 完了忘了qwq\n至于窝为啥被叫做何姥爷昂? 都是@czr 的锅!!! 为啥要把徐姥爷的称号clone一份给窝啊qwq 强行引领风尚了昂.\n下午窝还以为要考语文呢结局是做语文卷子ovo没有作文差评.\n还有啥晚上打ed被一只npc的vulture打爆了啊不开心qwq\nlaekov的脑子被僵尸吃了一半, 于是死机了qwq\nUpd: 窝想起昨天要说什么了ovo中午睡觉的时候梦到窝变成了一个有机物(看到了身上黑体的C和-), 于是窝伸出了-COOH, 握住了旁边的有机物的-OH, 然后就脱水成酯了qwq醒过来的时候感觉自己真是疯了23333\n","permalink":"/diary/447af1/","summary":"手工高考倒计时 100 天. (其实是明天ovo)\n幸好睡觉之前看了一下qq才想起没更博客ovo 感谢 @Miles 提醒. (\u0008其实圈人的功能根本没做出来就强行用了ovo)\n今天晚上效率好低啊好低啊好低啊. 造前端烦死了. 为什么不让用户全部直接命令行file_get_content呢真是的.\n到最后都要疯了还是没写对qwq\n白天似乎发生了什么我想要写下来的事? 完了忘了qwq\n至于窝为啥被叫做何姥爷昂? 都是@czr 的锅!!! 为啥要把徐姥爷的称号clone一份给窝啊qwq 强行引领风尚了昂.\n下午窝还以为要考语文呢结局是做语文卷子ovo没有作文差评.\n还有啥晚上打ed被一只npc的vulture打爆了啊不开心qwq\nlaekov的脑子被僵尸吃了一半, 于是死机了qwq\nUpd: 窝想起昨天要说什么了ovo中午睡觉的时候梦到窝变成了一个有机物(看到了身上黑体的C和-), 于是窝伸出了-COOH, 握住了旁边的有机物的-OH, 然后就脱水成酯了qwq醒过来的时候感觉自己真是疯了23333","title":"20160227"},{"content":"人工高考倒计时 101 天.\n开学考试明明进步了100名啊然后还被阿老师说没有认真学习(委屈脸).\n数学物理计算能力没救.\n中午被散步. 阿老师讲人要保持一种努力的状态, 如果颓废下来了再要回到那种状态就难了. 我觉得很有道理啊. 所以说一定得给自己找事情干绝对不能天天搞颓废. (已经颓废了一学期了怎么办qwq)\n似乎又忘了要写什么了ovo\n觉得如果高考前100天都坚持写日记还是挺有意思的一件事ovo\n","permalink":"/diary/79974c/","summary":"人工高考倒计时 101 天.\n开学考试明明进步了100名啊然后还被阿老师说没有认真学习(委屈脸).\n数学物理计算能力没救.\n中午被散步. 阿老师讲人要保持一种努力的状态, 如果颓废下来了再要回到那种状态就难了. 我觉得很有道理啊. 所以说一定得给自己找事情干绝对不能天天搞颓废. (已经颓废了一学期了怎么办qwq)\n似乎又忘了要写什么了ovo\n觉得如果高考前100天都坚持写日记还是挺有意思的一件事ovo","title":"20160226"},{"content":"人工高考倒计时 102 天.\n想到了2014年noip之前在305搞的那个不明觉厉的倒计时ovo.\n以及窝的画logo能力被cj众怒斥qwq.\n(要充分使用已有资源来放图片. 明明有voles虽然是残的但是也可以用好开心.)\n开学考试感到自己的计算能力捉鸡啊.\n做物理和数学大题的时候感觉好慌. 然后错了一堆.\n分数守衡定理: 分数不能凭空产生也不能凭空消失, 只能从一科的分数转化为另一科的分数, 或者从一个人的卷子上转移到另一个人的卷子上.\novo\n于是晚上说好的搞点代码的又不知道干什么过去了. ovo\n","permalink":"/diary/82ad0f/","summary":"人工高考倒计时 102 天.\n想到了2014年noip之前在305搞的那个不明觉厉的倒计时ovo.\n以及窝的画logo能力被cj众怒斥qwq.\n(要充分使用已有资源来放图片. 明明有voles虽然是残的但是也可以用好开心.)\n开学考试感到自己的计算能力捉鸡啊.\n做物理和数学大题的时候感觉好慌. 然后错了一堆.\n分数守衡定理: 分数不能凭空产生也不能凭空消失, 只能从一科的分数转化为另一科的分数, 或者从一个人的卷子上转移到另一个人的卷子上.\novo\n于是晚上说好的搞点代码的又不知道干什么过去了. ovo","title":"20160225"},{"content":"奇奇怪怪的开学第一天. 感觉会有一场血雨腥风qwq然而似乎考试终于要变多了感觉好开心.\n开学考试机选正确率迷之高. 难道是因为昨天积攒了rp?\n看完了姐姐送的成人礼物路遥的\u0026lt;人生\u0026gt;.\n这小说大概意思是不要去勾搭城里会玩的妹子, 要找个对自己死心塌地的隔壁村的王小花的意思? @王小花\n看科幻小说更多地是对世界的设定, 而这种东西更多的是时代, 人生, 什么的. 联想到\u0026lt;平凡的世界\u0026gt;, 在那种变革的时代里的各种奇奇怪怪的现象, 其实对现在也有一些可以借鉴的地方. 比如选择, 平静地面对一切. 失之我命, 得之我幸.\n总之窝太弱辣qwq\n又算错了解几感觉没救了qwq\nps 突然开了一个脑洞。窝要给shiruku加个点赞的功能要可以点16个赞23333\n","permalink":"/diary/f75b50/","summary":"奇奇怪怪的开学第一天. 感觉会有一场血雨腥风qwq然而似乎考试终于要变多了感觉好开心.\n开学考试机选正确率迷之高. 难道是因为昨天积攒了rp?\n看完了姐姐送的成人礼物路遥的\u0026lt;人生\u0026gt;.\n这小说大概意思是不要去勾搭城里会玩的妹子, 要找个对自己死心塌地的隔壁村的王小花的意思? @王小花\n看科幻小说更多地是对世界的设定, 而这种东西更多的是时代, 人生, 什么的. 联想到\u0026lt;平凡的世界\u0026gt;, 在那种变革的时代里的各种奇奇怪怪的现象, 其实对现在也有一些可以借鉴的地方. 比如选择, 平静地面对一切. 失之我命, 得之我幸.\n总之窝太弱辣qwq\n又算错了解几感觉没救了qwq\nps 突然开了一个脑洞。窝要给shiruku加个点赞的功能要可以点16个赞23333","title":"20160224"},{"content":"开学辣ovo\n感觉越发没有事干了呢. 是应该找点事情干了.\n回家的公车上遇到了奇怪的事. 感觉自己蠢哭了QwQ 所以毕竟窝还是太naive了. 也许是考炸了导致心不在焉?\n唉唉幸好包里没多少钱qwq\n然而总感觉怪怪的qwq\n以及似乎把高考倒计时搞丢了qwq\n没救了.\n","permalink":"/diary/0398a0/","summary":"开学辣ovo\n感觉越发没有事干了呢. 是应该找点事情干了.\n回家的公车上遇到了奇怪的事. 感觉自己蠢哭了QwQ 所以毕竟窝还是太naive了. 也许是考炸了导致心不在焉?\n唉唉幸好包里没多少钱qwq\n然而总感觉怪怪的qwq\n以及似乎把高考倒计时搞丢了qwq\n没救了.","title":"20160223"},{"content":"听说造了登陆之后就没人愿意来评论了. 于是窝决定去造个第三方登陆.\n于是花了一晚上造出了oauth组件. (其实有sdk的啊摔)\n于是有了github登陆. 其实还有企鹅啥的. 然而企鹅就是强行降低网站的逼格这怎么行呢. (其实是企鹅强行要求sdk懒得搞了)\noauth的登陆简单过程是酱的(有点三次握手的感觉)\n网站要去第三方申请一个application. 然后会得到client_id和client_secret. 然后把登陆的链接接到指定的页面去, 用get把client_id和泥要哪些数据传过去.\n网站会和用户交流人生(登陆). 然后会用get方式调用callback, 这个是在注册application的时候指定的. callback的get参数里有一种东西叫code. 这东西要用.\n用code来换access_token. 把code和client_id和client_secret一起当post参数传给第三方指定的第二个url. 如果没错会返回access_token, 这玩意是真正用来换数据的.\n用access_token再去第三方提供的第三个url来get用户的数据, 比如avatar_url什么的.\n那这和登陆有啥关系呢? 在第3步的时候如果泥得到了正确的access_token, 泥就可以认为用户正确登陆辣~\n然后就发生了一件鬼蓄的事情: 窝在去和github换数据的时候, 莫名其妙地就被403了. 大概就是酱(get为粟)\nfunction getData($url){ $opts = array(\\'http\\' =\u0026gt; array( \\'method\\' =\u0026gt; \\'GET\\' ) ); $context = stream_context_create($opts); $result = file_get_contents($url, false, $context); return $result; } 赶紧google了一下发现github会按照心情拒绝php发送的请求.\n于是窝假装窝不是php而是善良可爱的少年就好了啊2333.于是强行骗人.\nfunction getData($url){ $opts = array(\\'http\\' =\u0026gt; array( \\'method\\' =\u0026gt; \\'GET\\', \\\u0026quot;header\\\u0026quot; =\u0026gt; \\\u0026quot;User-Agent: Mozilla\\\u0026quot; ) ); $context = stream_context_create($opts); $result = file_get_contents($url, false, $context); return $result; } 假装窝叫Mozilla. 然后似乎github就不拒绝请求了. (妈妈说骗人是不好的5555)\n","permalink":"/technical/74c136/","summary":"听说造了登陆之后就没人愿意来评论了. 于是窝决定去造个第三方登陆.\n于是花了一晚上造出了oauth组件. (其实有sdk的啊摔)\n于是有了github登陆. 其实还有企鹅啥的. 然而企鹅就是强行降低网站的逼格这怎么行呢. (其实是企鹅强行要求sdk懒得搞了)\noauth的登陆简单过程是酱的(有点三次握手的感觉)\n网站要去第三方申请一个application. 然后会得到client_id和client_secret. 然后把登陆的链接接到指定的页面去, 用get把client_id和泥要哪些数据传过去.\n网站会和用户交流人生(登陆). 然后会用get方式调用callback, 这个是在注册application的时候指定的. callback的get参数里有一种东西叫code. 这东西要用.\n用code来换access_token. 把code和client_id和client_secret一起当post参数传给第三方指定的第二个url. 如果没错会返回access_token, 这玩意是真正用来换数据的.\n用access_token再去第三方提供的第三个url来get用户的数据, 比如avatar_url什么的.\n那这和登陆有啥关系呢? 在第3步的时候如果泥得到了正确的access_token, 泥就可以认为用户正确登陆辣~\n然后就发生了一件鬼蓄的事情: 窝在去和github换数据的时候, 莫名其妙地就被403了. 大概就是酱(get为粟)\nfunction getData($url){ $opts = array(\\'http\\' =\u0026gt; array( \\'method\\' =\u0026gt; \\'GET\\' ) ); $context = stream_context_create($opts); $result = file_get_contents($url, false, $context); return $result; } 赶紧google了一下发现github会按照心情拒绝php发送的请求.\n于是窝假装窝不是php而是善良可爱的少年就好了啊2333.于是强行骗人.\nfunction getData($url){ $opts = array(\\'http\\' =\u0026gt; array( \\'method\\' =\u0026gt; \\'GET\\', \\\u0026quot;header\\\u0026quot; =\u0026gt; \\\u0026quot;User-Agent: Mozilla\\\u0026quot; ) ); $context = stream_context_create($opts); $result = file_get_contents($url, false, $context); return $result; } 假装窝叫Mozilla.","title":"shiruku.第三方登陆"},{"content":"之前版本找list都是去硬盘里枚举一遍文件. 本地我有ssd速度还行. 传到服务器上就慢暴了. 因为有导入之前的博文加起来也有几百篇. 枚举一遍就要开将近1k个文件. 这里O(1000)和oi里的概念完全不一样啊ovo几乎就是要几秒的意思了.\n然后没有发现php怎么把东西常驻内存里. 于是灵机一动拿单个文件来存常用的数据. 然后就叫它伪缓存好了.\n按照时间和需要对缓存进行更新, 每次查询所有东西的list只需要开一个文件. 果然就快多了好感动23333.\n","permalink":"/technical/8059ec/","summary":"之前版本找list都是去硬盘里枚举一遍文件. 本地我有ssd速度还行. 传到服务器上就慢暴了. 因为有导入之前的博文加起来也有几百篇. 枚举一遍就要开将近1k个文件. 这里O(1000)和oi里的概念完全不一样啊ovo几乎就是要几秒的意思了.\n然后没有发现php怎么把东西常驻内存里. 于是灵机一动拿单个文件来存常用的数据. 然后就叫它伪缓存好了.\n按照时间和需要对缓存进行更新, 每次查询所有东西的list只需要开一个文件. 果然就快多了好感动23333.","title":"shiruku.缓存"},{"content":"\u0008这是 laekov 的博客, 曾经 proudly (并不) using laekov 高中的时候自己造的 shiruku 博客框架.\nlaekov 的身份包括但不限于:\n前 OIer @CDQZ. 前计算机系本科生 @Tsinghua 现高性能所博士生 @Tsinghua 一个对轮子和有轮子的东西感兴趣的人 ","permalink":"/about/","summary":"\u0008这是 laekov 的博客, 曾经 proudly (并不) using laekov 高中的时候自己造的 shiruku 博客框架.\nlaekov 的身份包括但不限于:\n前 OIer @CDQZ. 前计算机系本科生 @Tsinghua 现高性能所博士生 @Tsinghua 一个对轮子和有轮子的东西感兴趣的人 ","title":"About me"},{"content":"努力淦了几个月php, 终于在寒假结束前搞上线了. 开心.\n之前写的东西实在太丑不能忍了所以造了个新的. 但是又舍不得万网的免费空间. 其实还有很多东西没写. 页面底部有github链接跪求star.\n第三方登陆还没时间做. 私戳laekov得邀请码.\n以及laekov真的很认真的做了UI. 虽然最后的结局是laekov在报复社会. 事实上laekov不具有造出好看的页面的能力ovo\n于是可以愉快地log down一些其它的东西了好开心w. 虽然适配服务器有些周折ovo\n于是挺晚了呢\u0026hellip;明天再接着写ovo\n接着写\n原来的博客主要是写题解啊. 构架的时候就没想过要搞其它飞机. 于是后来就啥都干不了了. 想加个版块都挺痛苦.\n另外前端后端的代码夹杂在一起不开心.\n要api化(向czr学习). 以及把事情扔给前端做. (于是现在加载速度感人)\n强行把php当nodejs用是什么样一种体验? @我自己ovoovo\n反正每月10G的流量总用不完\u0026hellip;所以就加图好了. 然而丑哭了qwq怪我喽. (找一个做美工的妹子当女朋友是laekov的人生追求23333)\n","permalink":"/technical/19bc97/","summary":"努力淦了几个月php, 终于在寒假结束前搞上线了. 开心.\n之前写的东西实在太丑不能忍了所以造了个新的. 但是又舍不得万网的免费空间. 其实还有很多东西没写. 页面底部有github链接跪求star.\n第三方登陆还没时间做. 私戳laekov得邀请码.\n以及laekov真的很认真的做了UI. 虽然最后的结局是laekov在报复社会. 事实上laekov不具有造出好看的页面的能力ovo\n于是可以愉快地log down一些其它的东西了好开心w. 虽然适配服务器有些周折ovo\n于是挺晚了呢\u0026hellip;明天再接着写ovo\n接着写\n原来的博客主要是写题解啊. 构架的时候就没想过要搞其它飞机. 于是后来就啥都干不了了. 想加个版块都挺痛苦.\n另外前端后端的代码夹杂在一起不开心.\n要api化(向czr学习). 以及把事情扔给前端做. (于是现在加载速度感人)\n强行把php当nodejs用是什么样一种体验? @我自己ovoovo\n反正每月10G的流量总用不完\u0026hellip;所以就加图好了. 然而丑哭了qwq怪我喽. (找一个做美工的妹子当女朋友是laekov的人生追求23333)","title":"Initial Commit"},{"content":"手机写东西好蛋痛。补充一些flag学说的证据。\nYzy的物理考试 YZY:我半期物理连40分都考不到了。\n结局:Yzy得到了足够高的分数于是年级排名20+。\n星期三 卤素： niuzyi中午去打球!\n结局：中午gorge过生日。niuzyi孤独地和学弟玩耍。\n星期五 卤素：中午去打球！\nlaekov:今天没人过生日吧。\n结局：中午，下，雨，了。\n（未完待续）\n","permalink":"/random/dbimport_000/","summary":"手机写东西好蛋痛。补充一些flag学说的证据。\nYzy的物理考试 YZY:我半期物理连40分都考不到了。\n结局:Yzy得到了足够高的分数于是年级排名20+。\n星期三 卤素： niuzyi中午去打球!\n结局：中午gorge过生日。niuzyi孤独地和学弟玩耍。\n星期五 卤素：中午去打球！\nlaekov:今天没人过生日吧。\n结局：中午，下，雨，了。\n（未完待续）","title":"Proof for flag theory"},{"content":"寒假就要完了呐qwq化学练习册还没做完. 感觉之前说有机easy就是给自己立了个巨型flag.\nshiruku搞得差不多了. 然而感觉如果寒假结束之前release的话会有很多功能是残的很不开心.\nlist一下没写的东西\n第三方登陆. 这个等发上来再造也不迟 download模块. 这个玩意似乎挺简单. Fin. 抓头像. 我, 马, 上, 去, 写. 编辑器自带加图. 这个嘛不急嘛反正最近也不贴图. admin模块生成邀请码? 不急不急今天. Fin ui? 饶了我吧qwq 移动版界面. 这个巨坑暂时不填了. rss格式转换? 明天的事. 这么多东西好伤心qwq\n然而今天本来可以搞完有机的然而亲娘开大下午没去成图书馆于是打了一个下午的游戏打了一个晚上的游戏没救了qwq\n然而在游戏里终于遇到人类玩家了. 组队刷res效率就是高啊. 然后和外国友人文字交流的时候搞忘关麦对着老爹用中文报国籍感觉自己萌萌哒. 以后切记检查关麦qwq\n感觉不久之后就可以在博客里用md写东西了感觉棒棒哒~\n","permalink":"/diary/dbimport_111/","summary":"寒假就要完了呐qwq化学练习册还没做完. 感觉之前说有机easy就是给自己立了个巨型flag.\nshiruku搞得差不多了. 然而感觉如果寒假结束之前release的话会有很多功能是残的很不开心.\nlist一下没写的东西\n第三方登陆. 这个等发上来再造也不迟 download模块. 这个玩意似乎挺简单. Fin. 抓头像. 我, 马, 上, 去, 写. 编辑器自带加图. 这个嘛不急嘛反正最近也不贴图. admin模块生成邀请码? 不急不急今天. Fin ui? 饶了我吧qwq 移动版界面. 这个巨坑暂时不填了. rss格式转换? 明天的事. 这么多东西好伤心qwq\n然而今天本来可以搞完有机的然而亲娘开大下午没去成图书馆于是打了一个下午的游戏打了一个晚上的游戏没救了qwq\n然而在游戏里终于遇到人类玩家了. 组队刷res效率就是高啊. 然后和外国友人文字交流的时候搞忘关麦对着老爹用中文报国籍感觉自己萌萌哒. 以后切记检查关麦qwq\n感觉不久之后就可以在博客里用md写东西了感觉棒棒哒~","title":"20160218"},{"content":"噫又是很久没有写过东西了呢.\n其实是在过年以及赶作业以及撸shiruku.\n前端什么的最讨厌了\u0026hellip;又写得异常丑怎么办\u0026hellip;\n还有帮着搭elite dangerous简中的坛子.然而phpwind9是个什么鬼啊代码里全是class套class套class根本没法愉快地读代码嘛.\n然后nm渲染语言是html!???????报警了要.\n昨天被怒斥说写网站只是玩耍搞好高等数学和大学物理才是真理ovoovo然而我真的就是不想动脑子嘛.\n然后上小学五年级的妹表示学习鸭梨山大.maya我们真是一代人么?\n嗯然而在家里和过年的时候真的没有任何心情写作业啊摔.\n","permalink":"/diary/dbimport_110/","summary":"噫又是很久没有写过东西了呢.\n其实是在过年以及赶作业以及撸shiruku.\n前端什么的最讨厌了\u0026hellip;又写得异常丑怎么办\u0026hellip;\n还有帮着搭elite dangerous简中的坛子.然而phpwind9是个什么鬼啊代码里全是class套class套class根本没法愉快地读代码嘛.\n然后nm渲染语言是html!???????报警了要.\n昨天被怒斥说写网站只是玩耍搞好高等数学和大学物理才是真理ovoovo然而我真的就是不想动脑子嘛.\n然后上小学五年级的妹表示学习鸭梨山大.maya我们真是一代人么?\n嗯然而在家里和过年的时候真的没有任何心情写作业啊摔.","title":"20160212"},{"content":"终于**放寒假了.\n比信竞早放呢.似乎返校还比信竞晚.真是退役保平安诶好开心.(林先森真**丧病.想当初窝们把假放完不说还没作业23333\n于是eld的服务器开始打死连不上模式了.颓mc感觉自己没救了.好想去网吧ovo\n还是搬砖大法好.泡图书馆保平安.\n作业也没多少他们都快做完了然而我还没动qwq.\novo\n","permalink":"/diary/dbimport_109/","summary":"终于**放寒假了.\n比信竞早放呢.似乎返校还比信竞晚.真是退役保平安诶好开心.(林先森真**丧病.想当初窝们把假放完不说还没作业23333\n于是eld的服务器开始打死连不上模式了.颓mc感觉自己没救了.好想去网吧ovo\n还是搬砖大法好.泡图书馆保平安.\n作业也没多少他们都快做完了然而我还没动qwq.\novo","title":"20160204"},{"content":"原来还真有人盯着我的日记看啊.一个成天 xingerhuosai saibiandawang (用成都话念) 的高三颓废党的胡言乱语,文笔水平还为负,有啥好看的\u0026hellip;\n本来是觉得懒得同步数据了等shiruku造好了再说吧.然而现在看进度大概寒假完能不能造完都是个问题ovo然而前端什么的最讨厌了qwq\n毕竟这个站的代码实在太丑了点代码重用性太差了点维护太麻烦了点\u0026hellip;完全是不会造站的laekov造的站嘛.(想起了ojseven)\n最近似乎也没发生啥啊.寒假补课在家做作业效率真的好低比如现在作业还没动.\n听说wc上众集训队爷退役了yjq考炸了zms闪亮登场了啥的.似乎都已经没有什么感觉了呢.\n想想afo似乎和失恋是一个感受呢.念念不忘依依不舍觉得好后悔好遗憾.最初是很痛脑子里不停地回忆各种各种各种尤其是觉得自己拿衣服的地方然后什么的.然后后来慢慢地就只是一个符号了也就那样了.嗯没有像当年那样喝喝喝喝上一个月也算是一种进步了吧.(maya)\n然而mhy肯定不会是这样的感受啦.毕竟别人比我高到不知道哪里去了.\n然而发现我为什么要认真学习啊真是的.明明是自己努力换来的权力好么.突然有种被班主任和文化课老师欺骗了的感觉怎么办\u0026hellip;\n唉唉今天晚上看来是没有时间赶工了呢.shiruku君保重.作业君你好.\nUpd: 今天机选正确率有点高呢.明天大概会有不好的事发生.qwq\n以及那个俄罗斯发广告的服务器真是烦死了.\nHistorical Comments Unknown friend at 2016-01-31T21:52:06 @20160131: orz \u0026mdash;- zms_\n","permalink":"/diary/dbimport_108/","summary":"原来还真有人盯着我的日记看啊.一个成天 xingerhuosai saibiandawang (用成都话念) 的高三颓废党的胡言乱语,文笔水平还为负,有啥好看的\u0026hellip;\n本来是觉得懒得同步数据了等shiruku造好了再说吧.然而现在看进度大概寒假完能不能造完都是个问题ovo然而前端什么的最讨厌了qwq\n毕竟这个站的代码实在太丑了点代码重用性太差了点维护太麻烦了点\u0026hellip;完全是不会造站的laekov造的站嘛.(想起了ojseven)\n最近似乎也没发生啥啊.寒假补课在家做作业效率真的好低比如现在作业还没动.\n听说wc上众集训队爷退役了yjq考炸了zms闪亮登场了啥的.似乎都已经没有什么感觉了呢.\n想想afo似乎和失恋是一个感受呢.念念不忘依依不舍觉得好后悔好遗憾.最初是很痛脑子里不停地回忆各种各种各种尤其是觉得自己拿衣服的地方然后什么的.然后后来慢慢地就只是一个符号了也就那样了.嗯没有像当年那样喝喝喝喝上一个月也算是一种进步了吧.(maya)\n然而mhy肯定不会是这样的感受啦.毕竟别人比我高到不知道哪里去了.\n然而发现我为什么要认真学习啊真是的.明明是自己努力换来的权力好么.突然有种被班主任和文化课老师欺骗了的感觉怎么办\u0026hellip;\n唉唉今天晚上看来是没有时间赶工了呢.shiruku君保重.作业君你好.\nUpd: 今天机选正确率有点高呢.明天大概会有不好的事发生.qwq\n以及那个俄罗斯发广告的服务器真是烦死了.\nHistorical Comments Unknown friend at 2016-01-31T21:52:06 @20160131: orz \u0026mdash;- zms_","title":"20160131"},{"content":"下雪了呢.作为cd孩子表示好开心:-)\n这学期大概就完了吧.然而还要上两周课ovo(smg啊这哪能叫完)似乎oi党从wc回来窝们都还没上完课.\n嗯说到wc祝泥萌好运.\n以及mhy,发现半年来都木有和泥好好说过话ovo大概下面的东西泥也不会看到吧\u0026hellip;\n窝知道各有各的生活和目标.然而听到泥说不想进15人队的时候窝的内心真的是崩溃的.泥所嫌弃的就是我宁愿拿一切来换都换不来的...然而...毕竟您是队爷我是弱渣. 我知道把自己未竞的事情加到另一个人身上是不可取的\u0026hellip;所以总之加油,祝你好运.\n作为好朋(ji)友窝会默默为你祈祷的, forever.\n唉所以大概寒假能有时间把手里屯的东西都种出来?\n","permalink":"/diary/dbimport_107/","summary":"下雪了呢.作为cd孩子表示好开心:-)\n这学期大概就完了吧.然而还要上两周课ovo(smg啊这哪能叫完)似乎oi党从wc回来窝们都还没上完课.\n嗯说到wc祝泥萌好运.\n以及mhy,发现半年来都木有和泥好好说过话ovo大概下面的东西泥也不会看到吧\u0026hellip;\n窝知道各有各的生活和目标.然而听到泥说不想进15人队的时候窝的内心真的是崩溃的.泥所嫌弃的就是我宁愿拿一切来换都换不来的...然而...毕竟您是队爷我是弱渣. 我知道把自己未竞的事情加到另一个人身上是不可取的\u0026hellip;所以总之加油,祝你好运.\n作为好朋(ji)友窝会默默为你祈祷的, forever.\n唉所以大概寒假能有时间把手里屯的东西都种出来?","title":"20160122"},{"content":"唉唉\u0026hellip;解几虐窝千百遍,窝却待它如初恋= =\n同分异构老是看错题啊smg.\n高一高二就要开始期末考试了呢.\n发现自己完全不懂科学.看书都看不懂怎么办.\n造了一个qzone分享.原来这么简单= =试图造qq登录.\n然而架子过两天是要改了qwq感觉怎么去年写的代码都辣么丑\u0026hellip;怎么前端后端都糅在一起了\u0026hellip;\n一定是nodejs中毒了.\n","permalink":"/diary/dbimport_106/","summary":"唉唉\u0026hellip;解几虐窝千百遍,窝却待它如初恋= =\n同分异构老是看错题啊smg.\n高一高二就要开始期末考试了呢.\n发现自己完全不懂科学.看书都看不懂怎么办.\n造了一个qzone分享.原来这么简单= =试图造qq登录.\n然而架子过两天是要改了qwq感觉怎么去年写的代码都辣么丑\u0026hellip;怎么前端后端都糅在一起了\u0026hellip;\n一定是nodejs中毒了.","title":"20160119"},{"content":"下午在教室看到了mushroom开心.半年没见感觉变帅了ovo然而并不是来看窝的而是来抬xdw的smg啊伤心qwq还有鼓励窝好好学习是个smg.\n班会无限ym的fengd学长来分享人生经验感觉学长语速好快啊ovo然而似乎听了半天感觉似乎也木有解决窝的基本问题.唉算了不管.毕竟这是针对纯高考党的= =\n博客快一年终于有正常一点的回复了还是来打脸的.对不起退役太久根本不能愉快地想问题.还有啊匿名是smg看来窝要赶紧造blog2.0了.搞个评论邮箱验证或者啥帐号登录hhh\n唉唉= =\nHistorical Comments Unknown friend at 2016-01-19T10:50:42 @20150118: 标题是smg啊……时光倒流即视感 \u0026mdash;- \u0026gt;_\u0026lt;\nUnknown friend at 2016-01-19T10:50:42 @20150118: 标题是smg啊……时光倒流即视感 \u0026mdash;- \u0026gt;_\u0026lt;\nUnknown friend at 2016-01-19T22:23:00 @20150118: 唉唉手残没救 \u0026mdash;- laekov\nUnknown friend at 2016-01-19T22:23:00 @20150118: 唉唉手残没救 \u0026mdash;- laekov\n","permalink":"/diary/dbimport_001/","summary":"下午在教室看到了mushroom开心.半年没见感觉变帅了ovo然而并不是来看窝的而是来抬xdw的smg啊伤心qwq还有鼓励窝好好学习是个smg.\n班会无限ym的fengd学长来分享人生经验感觉学长语速好快啊ovo然而似乎听了半天感觉似乎也木有解决窝的基本问题.唉算了不管.毕竟这是针对纯高考党的= =\n博客快一年终于有正常一点的回复了还是来打脸的.对不起退役太久根本不能愉快地想问题.还有啊匿名是smg看来窝要赶紧造blog2.0了.搞个评论邮箱验证或者啥帐号登录hhh\n唉唉= =\nHistorical Comments Unknown friend at 2016-01-19T10:50:42 @20150118: 标题是smg啊……时光倒流即视感 \u0026mdash;- \u0026gt;_\u0026lt;\nUnknown friend at 2016-01-19T10:50:42 @20150118: 标题是smg啊……时光倒流即视感 \u0026mdash;- \u0026gt;_\u0026lt;\nUnknown friend at 2016-01-19T22:23:00 @20150118: 唉唉手残没救 \u0026mdash;- laekov\nUnknown friend at 2016-01-19T22:23:00 @20150118: 唉唉手残没救 \u0026mdash;- laekov","title":"20160118"},{"content":"(三天看完一本大刘的科幻小说集系列\n\u0026ldquo;上帝确实掷骰子.\u0026rdquo;\n那些可能性都真实存在.\n在另一根纤维,hja在2015年7月18号晚上复习了霍夫曼编码.\n在又另一根纤维,hja于2015年7月19日晚上,喝光用身上所有现金买的几箱啤酒之后,纵身跃入滚滚钱塘江.\n在又另一根纤维,hja在2013年初没有了解cdqz,果断留在jxfls,2013年11月再夺noip提高一等,功成身退,变身人赢.\n在又另一根纤维,hja于2013年4月某天深夜,坐在jxfls3号公寓604寝室1号铺,用一把平常用来削苹果的瑞士折叠刀割断了左手桡动脉.室友次日醒来才发现红色的血液染红了寝室的墙壁和天花板.\n在又另一根纤维,hja在2010年5月小升初考试时因为右手骨折未愈,用左手答题,未能考中.进入某街边初中.2016年1月13日晚上11点,hja亲手用手术刀切下了一手栽培自己的某黑老大的大腿,因失血过多,受害人准确地于3600秒后身亡.hja从此没有了人性,若干年后在外星人入侵时,果断摧毁了地球文明.\n\u0026hellip;\n从前只是存在于yy中的东西.突然想到其实它们都以某一种形式真实地存在.只是目前无法探测到.\n我的世界只有3.5维呢.\n也许哪一天就能摸到了呢.\n真开心\nHistorical Comments Unknown friend at 2016-01-21T23:02:01 @20160113_sifi: 考前留名 \u0026mdash;- Flaze\nUnknown friend at 2016-01-21T23:02:01 @20160113_sifi: 考前留名 \u0026mdash;- Flaze\n","permalink":"/random/dbimport_105/","summary":"(三天看完一本大刘的科幻小说集系列\n\u0026ldquo;上帝确实掷骰子.\u0026rdquo;\n那些可能性都真实存在.\n在另一根纤维,hja在2015年7月18号晚上复习了霍夫曼编码.\n在又另一根纤维,hja于2015年7月19日晚上,喝光用身上所有现金买的几箱啤酒之后,纵身跃入滚滚钱塘江.\n在又另一根纤维,hja在2013年初没有了解cdqz,果断留在jxfls,2013年11月再夺noip提高一等,功成身退,变身人赢.\n在又另一根纤维,hja于2013年4月某天深夜,坐在jxfls3号公寓604寝室1号铺,用一把平常用来削苹果的瑞士折叠刀割断了左手桡动脉.室友次日醒来才发现红色的血液染红了寝室的墙壁和天花板.\n在又另一根纤维,hja在2010年5月小升初考试时因为右手骨折未愈,用左手答题,未能考中.进入某街边初中.2016年1月13日晚上11点,hja亲手用手术刀切下了一手栽培自己的某黑老大的大腿,因失血过多,受害人准确地于3600秒后身亡.hja从此没有了人性,若干年后在外星人入侵时,果断摧毁了地球文明.\n\u0026hellip;\n从前只是存在于yy中的东西.突然想到其实它们都以某一种形式真实地存在.只是目前无法探测到.\n我的世界只有3.5维呢.\n也许哪一天就能摸到了呢.\n真开心\nHistorical Comments Unknown friend at 2016-01-21T23:02:01 @20160113_sifi: 考前留名 \u0026mdash;- Flaze\nUnknown friend at 2016-01-21T23:02:01 @20160113_sifi: 考前留名 \u0026mdash;- Flaze","title":"某奇怪科幻小说集的奇怪读后感"},{"content":"\u0026ldquo;慢慢没有感觉,慢慢心变成铁\u0026rdquo;\n似乎慢慢地厌烦键盘而更倾向于写字了.虽然字还是辣么丑.\n函数题真是没救了呢.最后一问反正也不会做qwq肯定骗不到一诊那么多的分.\n晚自习别人都把作业做完了的样子?Ovo其实晶体还蛮有意思呢只是窝的空间想像能力太捉鸡了.\n语文题又出现了一次有目标的人赢和没目标的人输那张表.突然意识到窝从前10%变成了后5%呢.挺好ovo\n飘雨呢好冷的说.想起曾经希望去一个没有冬天的地方,然而似乎挺难实现的呢= =\n然而用以颓废的科幻小说真的好贵的说.平均下来一天都10多块了qwq有木有更高端的方法呢撕烤熊qwq\n唉= =\n噫睡觉大法吼.\n","permalink":"/diary/dbimport_104/","summary":"\u0026ldquo;慢慢没有感觉,慢慢心变成铁\u0026rdquo;\n似乎慢慢地厌烦键盘而更倾向于写字了.虽然字还是辣么丑.\n函数题真是没救了呢.最后一问反正也不会做qwq肯定骗不到一诊那么多的分.\n晚自习别人都把作业做完了的样子?Ovo其实晶体还蛮有意思呢只是窝的空间想像能力太捉鸡了.\n语文题又出现了一次有目标的人赢和没目标的人输那张表.突然意识到窝从前10%变成了后5%呢.挺好ovo\n飘雨呢好冷的说.想起曾经希望去一个没有冬天的地方,然而似乎挺难实现的呢= =\n然而用以颓废的科幻小说真的好贵的说.平均下来一天都10多块了qwq有木有更高端的方法呢撕烤熊qwq\n唉= =\n噫睡觉大法吼.","title":"20160112"},{"content":"做了一天作业呢.连颓代码的时间都木有了.\n其实作业不多.效率炒鸡低ovo\n某小姑娘鼓励窝高考硬刚thu?谢谢好意.\n其实窝哪里是在为文化课郁闷啊\u0026hellip;泥萌怎么会懂.只能说请泥萌珍惜还有梦想的时光.\n某些想法于是真是越来越奇怪了呢\u0026hellip;\n嗯对在思考什么时候是应该把这个博客的架子改一改了呢.现在看起来把后端和前端代码混在一起写是多么的错误.等把voles种到差不多再说吧.\nlaekov是农业dog,而不是工业dog.\n唉窝果然是人格分裂了么ovo\n","permalink":"/diary/dbimport_102/","summary":"做了一天作业呢.连颓代码的时间都木有了.\n其实作业不多.效率炒鸡低ovo\n某小姑娘鼓励窝高考硬刚thu?谢谢好意.\n其实窝哪里是在为文化课郁闷啊\u0026hellip;泥萌怎么会懂.只能说请泥萌珍惜还有梦想的时光.\n某些想法于是真是越来越奇怪了呢\u0026hellip;\n嗯对在思考什么时候是应该把这个博客的架子改一改了呢.现在看起来把后端和前端代码混在一起写是多么的错误.等把voles种到差不多再说吧.\nlaekov是农业dog,而不是工业dog.\n唉窝果然是人格分裂了么ovo","title":"20160110"},{"content":"(Excuse my unreadable English, but I do not wanna my site to be shut down the next day for a sensitive word filter in Chinese\nAbout QVOD It took risk to make money. Now, it is time for it to pay its bills. Now that it benefitted from 18x videos which are forbidden by Chinese law, it is certainly to be punished one day.\nNevertheless, as a veteran who has been using P2P to seek for some unsuitable videos for years, I am surely unhappy about this. Though I do not use QVOD often, it is a simple way for those who are unfamiliar to computers to find videos that are illegal. It is a good software from the view of tech, after all.\nLaw Actually speaking, I do not think that we have to obey the laws that we do not find reasonable, including the ban of ML movies in the PRC. ML is the natural and basic demand of every normal person. What if one cannot find another to have a sex? Rape or go to a brothel? Unfortunately, these two are also forbidden in the PRC more strictly.\nHow can the CP, core of the Gov., deal with millions of single youngsters who are sexual active? It is true that people in China are always unwillingly to talk about sex, while behaving wild privately. This is not the reason why we can forbid such movies at all.\nFurther more, who decides what can be written into the laws? In my opinion, the laws does not reflect the desire of most people. Maybe, the PRC is not a country of the people. Those who make laws doesn\u0026rsquo;t care about this problem because they do not need them. The have their misses, perhaps. Nobody wants to make a change because it has no profit.\nOf course, those are unsuitable for teens if they get addicted. However, a simple and total ban is not the correct solution.\nIn the end, I do not want to say how bad the system is. Instead, the laws and the rules need improving.\nSomething more As is known, there is a wall. Why is there a wall? A simple answer can be, there are billions of legal sex movies on servers abroad, which are illegal in our yard. That comes to the question that does the web belong to any country? Is the announcement by Mr.Xi reasonable?\nThe wall is not claimed by the gov. up to now. Is it because there are still arguments.\nThe Chinese are willingly to build walls. Thousands years ago, Qin Shihuang built a great wall against enermies from the north. Nowadays, the PRC has built a wall against binary code abroad which they do not wanna us to know. As the history has proved, blocking can never be the final sollution. If you do not dredge it, the dam is sure to break up one day.\nPS Maybe this article is also illegal? Please let me know if there really exists someone called network police, for I have never seen any. And I really don\u0026rsquo;t mind being put into prison or heaven for what I\u0026rsquo;ve said.\n","permalink":"/random/dbimport_103/","summary":"(Excuse my unreadable English, but I do not wanna my site to be shut down the next day for a sensitive word filter in Chinese\nAbout QVOD It took risk to make money. Now, it is time for it to pay its bills. Now that it benefitted from 18x videos which are forbidden by Chinese law, it is certainly to be punished one day.\nNevertheless, as a veteran who has been using P2P to seek for some unsuitable videos for years, I am surely unhappy about this.","title":"About the case of QVOD -- Law and politics"},{"content":"等tex装字体ing.家里网连port好慢.\n发现自己居然对打字这种活有莫名其妙的热情.\n死人怎么会有热情呢.可笑.\n明明就是什么都不知道.\n如果时间是点,时间轴是≥2维空间的话,也许不会重合,但是可以相交呢.然而几率好小ovo\n也许维度限制了人类和人类世界的尺寸和物理常量?\n然而似乎没有办法去高维度的样子.谁叫窝这辈子是人呢.\n唉在想什么鬼啊.\n","permalink":"/diary/dbimport_101/","summary":"等tex装字体ing.家里网连port好慢.\n发现自己居然对打字这种活有莫名其妙的热情.\n死人怎么会有热情呢.可笑.\n明明就是什么都不知道.\n如果时间是点,时间轴是≥2维空间的话,也许不会重合,但是可以相交呢.然而几率好小ovo\n也许维度限制了人类和人类世界的尺寸和物理常量?\n然而似乎没有办法去高维度的样子.谁叫窝这辈子是人呢.\n唉在想什么鬼啊.","title":"20160107"},{"content":"都afo快半年了呢.\n一诊考得足够撇.似乎这是发生了很久的事情了?\n越发觉得活着好没有意思啊.要是现在站在足够高的楼顶上肯定就跳下去了.\n唉,想死都不容易.\n似乎真的成了僵尸呢.\n好像也挺好呢.\n","permalink":"/diary/dbimport_100/","summary":"都afo快半年了呢.\n一诊考得足够撇.似乎这是发生了很久的事情了?\n越发觉得活着好没有意思啊.要是现在站在足够高的楼顶上肯定就跳下去了.\n唉,想死都不容易.\n似乎真的成了僵尸呢.\n好像也挺好呢.","title":"20160106"},{"content":"2015年的最后一天了呢.\n这一年发生了好多事啊.\n从充满激情的有志青年变成了暮气沉沉的老人了么.\n现在的状态,可以概括为,失落,未知,迷惘,颓废.\n失去了看向远方的勇气和走好脚下的动力.\nmaya.\n颓颓颓.\n人生只是一场游戏而已.何必认真.\n","permalink":"/diary/dbimport_099/","summary":"2015年的最后一天了呢.\n这一年发生了好多事啊.\n从充满激情的有志青年变成了暮气沉沉的老人了么.\n现在的状态,可以概括为,失落,未知,迷惘,颓废.\n失去了看向远方的勇气和走好脚下的动力.\nmaya.\n颓颓颓.\n人生只是一场游戏而已.何必认真.","title":"20151231"},{"content":"题:给一张无向连通图.给每条边定向.要求有且仅有1号点入度为0.没有环.求极长链条数的max,min.\n做法:随便开个脑洞.已经不会想算法的我也不知道怎么解.\nps,有人知道杂做麻烦和窝说一声qwq\n","permalink":"/random/dbimport_280/","summary":"题:给一张无向连通图.给每条边定向.要求有且仅有1号点入度为0.没有环.求极长链条数的max,min.\n做法:随便开个脑洞.已经不会想算法的我也不知道怎么解.\nps,有人知道杂做麻烦和窝说一声qwq","title":"无向图定向计数最值脑洞"},{"content":"无聊的匹配 有个二分图,边价值∈(0,+∞).求一个匹配使得∏边价值最大.\n做法,把所有权值取个ln.\n变式,好学的lyzy同学问,能不能把权值范围扩展到R呢?\n窝怎么知道.\n无聊的证明 高三有一些班,一些物理老师,一些化学老师.每个老师教一或两个班.一个老师一个晚自习只能给一个班上.\n求证:对于两个晚自习,一定存在一种安排方案使得每个班恰好一样一节.\n证法,窝怎么知道.\n随便口糊一个,班当点,物理老师当蓝边,化学老师当红边.肯定没奇环?(雾\nHistorical Comments Unknown friend at 2015-11-26T22:43:53 @20151124_bhonbig: 2333 \u0026mdash;- laekov\nUnknown friend at 2015-11-26T22:43:53 @20151124_bhonbig: 2333 \u0026mdash;- laekov\n","permalink":"/random/dbimport_093/","summary":"无聊的匹配 有个二分图,边价值∈(0,+∞).求一个匹配使得∏边价值最大.\n做法,把所有权值取个ln.\n变式,好学的lyzy同学问,能不能把权值范围扩展到R呢?\n窝怎么知道.\n无聊的证明 高三有一些班,一些物理老师,一些化学老师.每个老师教一或两个班.一个老师一个晚自习只能给一个班上.\n求证:对于两个晚自习,一定存在一种安排方案使得每个班恰好一样一节.\n证法,窝怎么知道.\n随便口糊一个,班当点,物理老师当蓝边,化学老师当红边.肯定没奇环?(雾\nHistorical Comments Unknown friend at 2015-11-26T22:43:53 @20151124_bhonbig: 2333 \u0026mdash;- laekov\nUnknown friend at 2015-11-26T22:43:53 @20151124_bhonbig: 2333 \u0026mdash;- laekov","title":"俩无聊的图"},{"content":"一点闲话 感觉这题好弱啊.应该有一堆神犇能秒吧.\n取模是为了避免输出long long的问题.不知道有没有人中间就取模了2333.\n这题的idea源于wc2015的k小割.考场上写了良久最后mle.\n于是我决定这题既不卡空间也不卡时间.\n是不是感觉我的题比ioi和zyf的题都良心啊hhh\n测试点1-6 这六个点的权值和非常小.于是可以树形dp.用fi,j表示以i为根的子树中权值和为j的方案总数.于是可以dp一下就得到答案.\n测试点7-8 接下来的点都是大数据了,然而还是有一些部分分.\n比如这个.\n没有题的一条链情况比这个题更简单了吧ovo\n测试点9-10 这是最简单的菊花图ovo似乎就是k小割的弱化版啊.做法比较多喽.\n介绍一个叫做学姐二分的方法.二分一个答案,然后强行dfs方案.如果总方案数大于k就直接结束.这样是可以保证复杂度的TAT\n测试点11-12 一条链变成两条链了.一样的二分答案然后枚举一边二分另一边嘛.\n剩下的测试点 这些点没办法用奇怪的方法了吧?有人用奇怪方法黑过去的和我说一声ovo\n考虑当前如果已选的某个点集S,我们也把它叫做一个状态.\nS可以向S中任意点的没有在S中的儿子扩展.设扩展后的状态叫S\u0026rsquo;.(它可能有很多个)\n不难想到,已知前k小的状态S1 .. Sk后,第k+1小的状态一定是S\u0026rsquo;1 .. S\u0026rsquo;k中权值和最小的一个.\n于是我们就是要维护当前所有状态的可扩展的状态.\n对于每一个状态,用一个可持久化堆来记录它能扩展到的所有点,然后取其中最小的一个加上它本身的权值和扔进外层的堆里.\n那么每次外层堆里的最小值就是第k+1小的状态.\n那么找到k+1小状态后,就要将这条边从原状态中删除.然后对于新扩展出来的状态,把新扩展出来的原树上的点的所有儿子也扔到这个状态的堆里就好了.注意有的点的度数会很大,所以每个点的儿子本身就要用可合并堆来存.\n然后直接找下去直到扩展出第k小的状态就行了.\n以上所有操作的时间复杂度都是O(log(n))的,所以总复杂度是O(k*log(n))的.\n另一种思路 上面提到过的\u0026quot;学姐二分\u0026quot;也可以应用到这里.因为我也没写过所以不作重点介绍了.大家可以自行思考一下.\n劼司机的思路 (苣蒻的出题人并不能理解这种做法,你可以去找劼司机本人讨论ovo)\n就是把树画到平面上。。\n然后建个对偶图\n对偶图里每条边的边权为他子树里边权和\n也就是。。\n在对偶图里走过一条边，等于把这条边下面的子树砍掉。。\n然后就没了。。。\n吉利就是这么虐人的！\n松爷好强!\n","permalink":"/oi/dbimport_270/","summary":"一点闲话 感觉这题好弱啊.应该有一堆神犇能秒吧.\n取模是为了避免输出long long的问题.不知道有没有人中间就取模了2333.\n这题的idea源于wc2015的k小割.考场上写了良久最后mle.\n于是我决定这题既不卡空间也不卡时间.\n是不是感觉我的题比ioi和zyf的题都良心啊hhh\n测试点1-6 这六个点的权值和非常小.于是可以树形dp.用fi,j表示以i为根的子树中权值和为j的方案总数.于是可以dp一下就得到答案.\n测试点7-8 接下来的点都是大数据了,然而还是有一些部分分.\n比如这个.\n没有题的一条链情况比这个题更简单了吧ovo\n测试点9-10 这是最简单的菊花图ovo似乎就是k小割的弱化版啊.做法比较多喽.\n介绍一个叫做学姐二分的方法.二分一个答案,然后强行dfs方案.如果总方案数大于k就直接结束.这样是可以保证复杂度的TAT\n测试点11-12 一条链变成两条链了.一样的二分答案然后枚举一边二分另一边嘛.\n剩下的测试点 这些点没办法用奇怪的方法了吧?有人用奇怪方法黑过去的和我说一声ovo\n考虑当前如果已选的某个点集S,我们也把它叫做一个状态.\nS可以向S中任意点的没有在S中的儿子扩展.设扩展后的状态叫S\u0026rsquo;.(它可能有很多个)\n不难想到,已知前k小的状态S1 .. Sk后,第k+1小的状态一定是S\u0026rsquo;1 .. S\u0026rsquo;k中权值和最小的一个.\n于是我们就是要维护当前所有状态的可扩展的状态.\n对于每一个状态,用一个可持久化堆来记录它能扩展到的所有点,然后取其中最小的一个加上它本身的权值和扔进外层的堆里.\n那么每次外层堆里的最小值就是第k+1小的状态.\n那么找到k+1小状态后,就要将这条边从原状态中删除.然后对于新扩展出来的状态,把新扩展出来的原树上的点的所有儿子也扔到这个状态的堆里就好了.注意有的点的度数会很大,所以每个点的儿子本身就要用可合并堆来存.\n然后直接找下去直到扩展出第k小的状态就行了.\n以上所有操作的时间复杂度都是O(log(n))的,所以总复杂度是O(k*log(n))的.\n另一种思路 上面提到过的\u0026quot;学姐二分\u0026quot;也可以应用到这里.因为我也没写过所以不作重点介绍了.大家可以自行思考一下.\n劼司机的思路 (苣蒻的出题人并不能理解这种做法,你可以去找劼司机本人讨论ovo)\n就是把树画到平面上。。\n然后建个对偶图\n对偶图里每条边的边权为他子树里边权和\n也就是。。\n在对偶图里走过一条边，等于把这条边下面的子树砍掉。。\n然后就没了。。。\n吉利就是这么虐人的！\n松爷好强!","title":"ovoo solution"},{"content":"上厕所的时候的脑洞.\nhja面前有一排无穷多个包间,门都是关的.每个门独立地以p的几率里面有人.\nhja挨个拉门直到拉开一个没人的包间.\n求拉门次数的期望.(似乎还可以平方的期望,立方的期望,k次方的期望ovo)\n做法:差比数列求和加极限.水.\n如果出成oi题似乎很容易被卡精度水?那就剩余系吧.(剩余系似乎是解决有理数精度问题的神器)\n唉已经弱到不行了.\n然后吃晚饭的时候.\noyrs表示,你拉上50个门,前50个门里的人还不出来?\nlyzy表示,cyl同学不是要把cs底坐穿么?\nhja表示,%_%今天作业好多啊.\nbtw发现∑i*Cni可以除一个2n变成期望问题ovo也许有前途?\n唉窝太弱辣.力学没救了.立几没救了.怎么办.\n","permalink":"/random/dbimport_098/","summary":"上厕所的时候的脑洞.\nhja面前有一排无穷多个包间,门都是关的.每个门独立地以p的几率里面有人.\nhja挨个拉门直到拉开一个没人的包间.\n求拉门次数的期望.(似乎还可以平方的期望,立方的期望,k次方的期望ovo)\n做法:差比数列求和加极限.水.\n如果出成oi题似乎很容易被卡精度水?那就剩余系吧.(剩余系似乎是解决有理数精度问题的神器)\n唉已经弱到不行了.\n然后吃晚饭的时候.\noyrs表示,你拉上50个门,前50个门里的人还不出来?\nlyzy表示,cyl同学不是要把cs底坐穿么?\nhja表示,%_%今天作业好多啊.\nbtw发现∑i*Cni可以除一个2n变成期望问题ovo也许有前途?\n唉窝太弱辣.力学没救了.立几没救了.怎么办.","title":"期望题"},{"content":"满世界的人生赢家呢。似乎已经被打击得体无完肤了。每次都嚷着要是我也 个人赢该多好，也就限于无事yy一下而已。\n某君一语中地，只是没有tend罢了。站在那里被兔子撞的概率太小。曾经那件事真的是天上掉的馅饼。怎么可能again。\n然而真的没有力气呢。唉。不知是懒还是放弃了治疗。连自己在干什么都不知道。\n","permalink":"/diary/dbimport_097/","summary":"满世界的人生赢家呢。似乎已经被打击得体无完肤了。每次都嚷着要是我也 个人赢该多好，也就限于无事yy一下而已。\n某君一语中地，只是没有tend罢了。站在那里被兔子撞的概率太小。曾经那件事真的是天上掉的馅饼。怎么可能again。\n然而真的没有力气呢。唉。不知是懒还是放弃了治疗。连自己在干什么都不知道。","title":"20151216"},{"content":"听说ljw被补进队了?\n反正又不是窝激动个毛.\n不过还是要恭喜的.\n是不是要@iwtwiioi 赶紧祈祷oi集训队再进几个mo集训队放弃wc的.\n嗯以上.\n想想那个结还是打不开呢.不过又有什么关系呢.毕竟已经是死人一个了.随它去好了.哪天机会合适就早点reboot吧多好.\n","permalink":"/diary/dbimport_096/","summary":"听说ljw被补进队了?\n反正又不是窝激动个毛.\n不过还是要恭喜的.\n是不是要@iwtwiioi 赶紧祈祷oi集训队再进几个mo集训队放弃wc的.\n嗯以上.\n想想那个结还是打不开呢.不过又有什么关系呢.毕竟已经是死人一个了.随它去好了.哪天机会合适就早点reboot吧多好.","title":"20151210"},{"content":"0\n知乎上看到的脑洞.感觉不错玩一玩.\n1\n\u0026ldquo;我不在江湖,江湖也没有我的传说.\u0026rdquo;\n雷已隐居在贫困山边缘这片叫做教室的森林里,大概有一百年了.这里到处长满了叫做卷子的东西.也许在另一个世界里它们叫做树吧.\n雷是一个修真者.修真者是不会老的.然而这些年里,雷却没有动用过丝毫真气,也没有用过修真者的武器,键盘.雷只是日复一日地用笔把一种叫做题的物质从那一棵棵的卷子上砍下来,吃掉,或者拿出去make a deal.\n这一天,雷又砍倒了一棵长满了圆锥曲线的树,他脏得已经看不出人样的脸上露出了一个比哭还难看的笑.\n突然,他破旧的衣服口袋里的什么东西震动了起来.那\u0026hellip;雷低下头,眼神中有些许光彩,又包含了痛苦,忧愁,悲伤.\n那是七帮的卷轴.一百年前,雷被踢出七帮的时候,七帮的舵主给了他这个玩意.雷也不知道有什么用.他很想把它扔进教室外的墨池里.\n然而感到里面似乎有金属.\u0026ldquo;也许吃不起饭的时候还能把它拆了卖钱吧.\u0026ldquo;雷最后还是带它一起去了教室.\n雷用有些生硬的动作摸出了那个已经被灰尘包裹的卷轴.此刻它竟然在发光.光芒中隐隐有几个汉字,\u0026ldquo;风云突变,狼烟四起.吾七危急,速来支援.\u0026rdquo;\n雷有些奇怪,摇了摇头.回到自己用砍废的卷子搭的小屋里去了.\n2\n七天后.\n雷背上一个到处都是线头的背包,用墨池里黑得发蓝的水,尽力地把脸洗得有了点人样,然后朝七帮的方向走去.\n\u0026ldquo;毕竟还是不能忘啊.\u0026rdquo;\n如果不是遇到了七帮的长老,那个没有亲人的小男孩,恐怕在一千年前那个风雪交加,tcp包乱飞的寒夜,就变成一具尸骨了.\n雷也不知道七帮为什么叫七帮.为什么他没有听说过一帮二帮三帮四帮五帮六帮八帮.\n雷在边远贫困山区深处的七帮长大,成为了修真者,学会了功法,为七帮南征北战,然后被七帮一脚踢出了大门.\n3\n七帮正殿.\n\u0026ldquo;舵主,我预感这次炼试异常凶险.是否让各分舵修习fft神力,以应不测?\u0026rdquo;\n\u0026ldquo;舵主,昨日二堂的兄弟在与野兽战斗时又遇到了toptree.\u0026rdquo;\n\u0026ldquo;舵主,西方的北海门送来战书,扬言这次炼试要占领这个大陆的所有一等修炼者名额.\u0026rdquo;\n\u0026ldquo;舵主\u0026hellip;\u0026rdquo;\n炼试,是修真届每三百年一次的比拼.各门各帮的修炼者均要出动,一起和一个叫恩偶爱.皮的强大势力战斗.按照修炼者在战斗中的贡献来决定等次.这也成为了各门派间比拼实力和招引新人的重要资本.\n七帮向来开放.雷没有受到丝毫阻拦,来往的门徒的面孔,对于雷来说都是陌生的.而他们个个行色匆匆,雷觉得自己像是空气.\n\u0026ldquo;舵主,我们向雷师兄发去的卷轴始终没有回复,是否\u0026hellip;\u0026rdquo;\n雷看到七帮弟子正在按照所属的堂列队.\n一堂那些年轻的修炼者脸上浮现出愉快的神色,似乎正在激烈地讨论最短路神功的不同出招方法.\n二堂的修炼者稍年长些,显然都进入了思考人生的阶段.有几个人还在读功法卷轴.雷隐隐看到\u0026quot;数据结构\u0026quot;的大字.雷隐约记得有几个人叫小y,小z来着.雷离开的时候他们还是小孩子的模样,现在已经俨然成为七帮的中流砥柱了.\n三堂.只有一个孤独的身影,显露出苍老的形态来,他的背囊中的卷轴几乎要掉出来了,上面还写着\u0026quot;集训队作业\u0026rdquo;.那就是三堂主,挠.几百年前,就是他和雷一起,去外大陆闯荡,去和恩偶爱战斗.雷也想起自己离开七帮,他目送自己离开时,那种复杂的神情.\n\u0026ldquo;你来了.\u0026ldquo;挠示意雷站到自己身边.似乎有很多话要说.\n突然人群安静下来.一个比雷和挠都苍老几十倍的身影出现在上空.\u0026ldquo;舵主!\u0026ldquo;众人齐声道.\n舵主微微点头示意.扫了一眼人群,在雷的脸上多停了几秒钟.\n\u0026ldquo;此番与恩偶爱.皮的战斗将会格外惨烈.希望你们都准备好了.\u0026rdquo;\n雷知道,近几次,恩偶爱.皮的战斗力确实在不断提高.但是随着修炼者实力的提升,更多的功法被创造出来.恩偶爱.皮表面上看是越来越经不起攻击了.然而这样,对那些刚进入修真届的新人来说,并不是什么好事.\n\u0026ldquo;战斗吧.\u0026rdquo;\n七帮的修真者们一起释放出强大的真气威压,附近荒野里的电路板似乎都跟着振动起来.\n4\n本大陆上,参加炼试的修真者都要集中到贫困山脚下的科大园.\n雷一行人因为离得近,所以到得晚.\n雷看到下战书的北海派的弟子.在雷的印象中,那是个独裁的封闭的门派.\n雷曾经觉得北海派是很强大的敌人,如果他们统一这个大陆,必将带来无尽的黑暗.\n后来雷认识了北海派的一些人.雷发现他们也是有血有肉的人.加之当时来自其他大陆的威胁,雷也就不再那样想了.\n这些都是前话.雷觉得自己一定程度上讲已经不是修真者了.\n一位老者认出了雷,向雷招了招手.雷也点头回应.\n那是高七帮的老者.高七帮的创始人就来自七帮.后来虽然他们去了贫困山的另一边发展,但依然和七帮保持了不错的关系.他们掌握了强大的点分功法,雷一直十分敬佩那位创造点分功法的老者,也就是面前这位.\n突然雷眼前一亮.虽然早已麻木,不过十分稀缺的女修还是能引起雷的注意的.同在贫困山中的泥屋门就是女修稀缺现象的反例.不仅女修多,而且大半都十分漂亮.泥屋门是个从远古传承下来的门派,传说创始人修了一间泥屋,在屋中招收学徒,因此得名.虽然泥屋门近来因为有强者叛逃去了北海派,而显得有些颓势,然而他们拥有很多不为人知的秘法,总是很神秘莫测.\n这些势力,在与恩偶爱.皮战斗时,应该可以看作是朋友,然而争那几个一等名额的时候,却又成了不共戴天的敌人.修真界,没有永恒的朋友,也没有永恒的敌人,只有永恒的排名.\n5\n\u0026ldquo;都准备好了吗?战斗吧.\u0026rdquo;\n周围的空气都被搅动起来.黑色的烟尘挡住了众人的视线.不参加试炼的舵主等老者都赶紧退到安全的地方.一串字符流中,恩偶爱.皮,又一次露出了一张表格状的狰狞的面孔.\n\u0026ldquo;又送炮灰来了,真好啊哈哈哈哈哈哈.\u0026rdquo;\n恩偶爱.皮发出诡异的笑声,空气都跟着波动,显示出它强大的能量来.\n虽然挠这等强者拥有强大的真气,但也无法以一人之力与对手抗衡.然而修真界就是这么残酷.\n\u0026ldquo;幻方,大模拟,给我爆!\u0026ldquo;恩偶爱.皮显然是饥渴难耐了,上来就使出了有些迷惑性的一招.\n一些明显是新人的家伙,很快就被迷倒了.不过多数修真者还是识破了敌人的诡计,掏出键盘,开始与之对抗.\n此刻雷的眼睛里却充满了鄙夷.也不掏出键盘,只是随手一行printf,就化解了打向自己的能量.\n雷身边的几个修真者应该也是身经百战了,纷纷化解了这道攻击.\n这时不远处有人发出一声呻吟,然后无力地倒在了自己的键盘上.雷疑惑地看去,发现那人使用了scanf,但是在打向能量前,却忘记了freopen.最终攻击能量没有打向敌人,却打趴了自己.\n双方都是使用了试探性的能量.但是在一些等级较低的修炼者眼中,这样的能量差距已经是不可逾越的了.有些修炼者选择了投降.这倒也简单,只要走出那到黑色的烟瘴,出于规则的限制,恩偶爱.皮也会就此罢手.\n\u0026ldquo;嘿嘿,小伙子们还不错嘛.等着.\u0026rdquo;\n恩偶爱.皮显然对这道攻击的效果还算满意,嘿嘿笑着,显露出一丝杀气.\n6\n雷摸了摸下巴.这是他多年前向一位老前辈学来的习惯.\n\u0026ldquo;就知道欺负弱者.\u0026ldquo;雷心里嘀咕.\n空气中的PM2.5似乎被对手聚集起来了,恩偶爱.皮略一酝酿,再次一声大呵,\u0026ldquo;图论,找圈.出.\u0026rdquo;\n顿时,那些颗粒变成了肉眼可见的大小,显现出一些顶点和有向边的形状来.\n\u0026ldquo;每个顶点有且仅有一条出边.基环内向树.qio之即可.\u0026ldquo;雷心中默念,也不加功法,拿出一个数组,一道memset打出,顿时周围的空间都清明起来.那些零乱的边纷纷找到了正确的方向,在雷的能量控制下服帖起来.\n不远处,一位身上带着北海派标志的男修也好像看出了些什么,吼道,\u0026ldquo;bfs,攻.\u0026ldquo;双手在自己的键盘上一阵狂舞.一股代码朝着那些无序的边的顶点涌去.最终竟也制服了它们.\n雷看向身后,一位七帮一堂的小师妹显然是没有那么强大的真气,双眼跟着那些边,不断地转动着,想要从中找出些什么规律来,却只是徒劳.她是被这混乱的有向图迷住了,失去了思考的能力.双手放在键盘上,却什么键也没按.\n只是在一瞬间,雷心中竟然有一丝上去帮那位小师妹的冲动,然而也只是一个念头罢了.没有人可以在战斗的时候帮助别人.这不仅是炼试的规矩,也是修真界的规矩.\n7\n看到这么多人撑过第二招,恩偶爱.皮似乎有些不耐烦了.\n\u0026ldquo;一招之内,打不废你们,我今天就不打了.\u0026ldquo;他似乎是在给自己立flag.\n一些人已经在身边布下了扫雷型防御阵.虽然恩偶爱.皮的攻击不能再对他们产生什么实质性的伤害,但是他们也没有办法再攻击了.\n\u0026ldquo;切,就这么放弃了?\u0026ldquo;那位北海派的男修嘴角露出一丝不屑,瞟了一眼雷.雷见惯风雨似的笑了笑,没有说话.\n\u0026ldquo;打土豪,分田地.农业题,斗地主!\u0026ldquo;恩偶爱.皮这一次算是出强招了.\n也许是觉得这还不够,恩偶爱.皮又加了一句,\u0026ldquo;神魂攻击,题意不清!\u0026rdquo;\n听见这样的招式名称,又有不少修者选择了扫雷阵,也招致不少强者的白眼.\n霎时间,雷等没有进入扫雷阵的人,都被卷入了一个由扑克牌构成的幻境中.\n雷猛一抬头,只见面前有一对三.雷顺手摸出一个数组,运起真气,将它们收了进去.然而三后面,又是一对王,还有三个四.雷眉头一皱,觉得事情没有那么简单.雷看出那两张王中的一张隐隐透着飘渺的气息.\n雷嘴角一勾,\u0026ldquo;题意,去死吧.\u0026ldquo;随即甩出一行if,把那张虚幻的王炸得消失在虚空中.\u0026ldquo;三带王,收.\u0026ldquo;四张牌又被雷收进了数组里.\n雷的额角渗出一行汗,\u0026ldquo;这样下去,再收一万年也收不完啊.\u0026ldquo;无奈之下,雷只好赌一把了.\u0026ldquo;暴搜之力,dfs,炸!\u0026ldquo;顿时滔天的能量在雷周围翻涌起来,慢慢地开始腐蚀周围的牌阵.\n\u0026ldquo;还是太慢了.\u0026ldquo;雷对这样的效果并不满意.抚摸着下巴,雷发现自己综合性真气的某一部分蠢蠢欲动.\u0026ldquo;辅助性真气,剪枝.出.\u0026ldquo;雷终于掏出了键盘,看似随意地拨弄了几下.一道不起眼的能量被了上去.只见原先的dfs能量就像看到漂亮的女修了一样,变得干劲十足,速度瞬间快了(ans!)倍.不到半秒,那无边无际的扑克牌阵就烟消云散了.阳光让雷眯起了眼睛.\n雷看到刚才那位北海派的男修还在努力地左右砍杀.雷觉得也许他们北海派的战书,只是为了提升士气吧.\n瞬间,雷又听到挠有些绝望的声音,\u0026ldquo;黑暗秘法,卡时.\u0026rdquo;\n\u0026ldquo;都用卡秘法了,挠你难道不知道恩偶爱.皮的招式里,有着缓慢结界?\u0026ldquo;雷有些平静地心中还是泛起了一层涟漪.不过他并不能做什么.\n雷只好打开了扫雷阵.等待别人战胜自己的敌人.\n8\n不知过了多久,天空中传来了恩偶爱.皮那不人不鬼的声音,\u0026ldquo;够了.你们太弱了.召唤,监考老师,考试结束.\u0026rdquo;\n雷面前的扫雷阵也跟着消失了.雷又看见了阳光下的科大园.恩偶爱.皮的声音却没有远去,\u0026ldquo;今天就打到这吧.你们这群蒟蒻还是去养肥了再来挑战我吧.我也该去吃些初级修炼者补充能量了.嘿嘿嘿.\u0026rdquo;\n\u0026ldquo;噢对了,补充一句,你们中的某些人啊,还是先接受半期考试的审判吧.\u0026rdquo;\n雷心中一惊,想起那没有砍完的半张卷子.\n雷没有注意到,天空中的怒火正在向科大园集结,很快聚集在雷的头顶上.\n\u0026ldquo;语文,炸!\u0026ldquo;\u0026ldquo;英语,炸!\u0026ldquo;\u0026ldquo;数学,炸!\u0026ldquo;\u0026ldquo;理综,炸!\u0026rdquo;\n四道雷劫同时劈向雷.\u0026ldquo;终于,还是,来了,么?\u0026ldquo;雷很平静,已经视死如归了.\n\u0026ldquo;轰!\u0026ldquo;\u0026ldquo;轰轰!\u0026ldquo;\u0026ldquo;轰轰轰!\u0026ldquo;怒火包围了雷,看不见里面的情况.就连见惯生死的舵主,也睁大了眼睛.从未离开过七帮地盘的那些涉世未深修炼者,更是吓得张大了嘴巴.\n雷的方向,还在不断地传来尖锐的爆鸣声,但是也渐渐减弱.怒火燃烧产生的二氧化碳,二氧化氮,二氧化硫,水蒸汽,还有不知道哪里来的氦气,最终让怒火与空气隔绝.熄灭了.已经被烧得一丝不挂地雷,手里还拿着两个试管.这是从教室走出来的时候,忘记从包里拿出来的氯化铝溶液和碳酸氢钠溶液.正是铝离子和碳酸氢根双水解产生的二氧化碳救了雷,让他没有被怒火烧死.\n\u0026ldquo;虽然你今天没有打好,明天一定能反弹的!\u0026ldquo;舵主熟悉而陌生的flag声飘进雷的耳朵.\u0026ldquo;这爱立flag的本性还没改变啊.\u0026ldquo;雷想起了很久之前,发现了flag原理的科学家,雷过去的好基友,直.\n\u0026ldquo;那是修真界最伟大的科学发现了吧.也许你的名字会在修真界会永远留传吧.\u0026ldquo;雷在心中默默地祝福着早已在另一片教室隐居的直.\n9\n一夜过去.\n昨天的众人又聚集在了科大园,等待决战.\n\u0026ldquo;还是这么喧闹啊.\u0026ldquo;雷收敛气息.他没有注意别人的表情,别人也没有注意雷的存在.\n恩偶爱.皮带着那股阴气,如期而至.\u0026ldquo;今天你们没人能活着走出去.哈哈哈.\u0026ldquo;雷觉得恩偶爱.皮一定是没有听说过flag理论.\n雷注意到,恩偶爱.皮那张表格脸上有AMD的字样.早已看穿一切的雷心头一紧.\n恩偶爱.皮今天显得格外直白.\u0026ldquo;智商压制,跳石头.起.\u0026ldquo;风起云涌,众修炼者被困在了水流之中.\n\u0026ldquo;小船渡河!?\u0026ldquo;雷想起了昨天雷劫中的物理的味道.\u0026ldquo;求导?单调性.二分!\u0026ldquo;雷都没有思考,凭着直觉一坨能量轰出.这次,恩偶爱.皮的攻击显得太过单薄,直接被雷的反击撞碎.雷的能量继续朝恩偶爱.皮涌去.恩偶爱.皮连忙补上一招,\u0026ldquo;神魂之术,范围迷惑!\u0026ldquo;才终于化解了被反噬的危机.\n\u0026ldquo;你小子还不错嘛.看你能不能撑下下一招.\u0026ldquo;恩偶爱.皮终于注意到了不起眼的雷.\n雷没有理会对手.看向四周.那位北海派的师兄也是轻松地化解了这招试探.倒是七帮的小师妹再次被困住了.\u0026ldquo;妳啊,还是太年轻.\u0026ldquo;雷觉得自己像个活了几万岁的老不死似的.\n10\n\u0026ldquo;你们这些小子还不错啊.逼得我要出强招了.你们可要撑住啊.\u0026rdquo;\n\u0026ldquo;你少装蒜了.有招便使.我还等着回家砍题呢.\u0026ldquo;雷终于忍不住骂了一句.\n\u0026ldquo;计数论,子串模型.爆.\u0026ldquo;恩偶爱.皮没有再废话.\n很多修炼者面露惧色.其中不少人都选择了转身逃跑或者布上扫雷阵.\n雷看着四周的空间瞬间被无数的字符串填满,想起了百年前的那场旷世大战.恩偶爱.皮的本体,恩偶爱,也使出过这样的一招.雷虽然看出了其中的玄机,却晚出手一步,功亏一篑.最后导致\u0026hellip;\n雷又一思索,摆弄键盘,打出一招,\u0026ldquo;动态规划\u0026rdquo;.顿时能量翻涌起来.看到能量略显单薄,雷又想起了什么,又连出两招,\u0026ldquo;空间性真气,滚动数组!\u0026rdquo;,\u0026ldquo;时间性真气,取模优化!\u0026quot;.几道浅浅的代码包裹着之前的动态规划,冲向那些字符串.这次的能量干净利索,直接把那些字符都给清干净了.\n\u0026ldquo;综合性真气!你小子还真是让人刮目相看啊.然而你以为你能过得了我最后一招吗?哇哈哈哈哈!\u0026ldquo;雷听到恩偶爱.皮令人头皮发麻的声音里好像带着一丝耐人寻味的阴笑.\n11\n\u0026ldquo;乱七八糟压轴题,像树形动规,像数据结构,像贪心,像三分,什么都像!\u0026ldquo;不得不说,恩偶爱.皮这最后一招的名字真长.\n顿时,雷感到了真气威压.离开修真界这么久了,雷有种熟悉到想哭的感觉.但眼前的问题是要先解决这只恩偶爱.皮!\n\u0026ldquo;神魂攻击,可以二分!\u0026ldquo;恩偶爱.皮显然是改变了之前打一招就等着对手接招的习惯,主动地接二连三地攻击起来.\n还在发神的雷连忙催动复杂度分析羽翼,闪过了这一道攻击.\n雷突然想到了一门许久没有用过的功法,\u0026ldquo;乱搞神功,均摊复杂度!\u0026rdquo;\n雷终于抽出了键盘,用真气固定在眼前的虚空中,撸起袖管,手指开始飞舞.只听见一阵啪啪啪啪啪的声音,周围的虚空都跟着一起震动起来.不少修真者都忘记了还击,呆呆地看着雷.就连打来的能量也好像进入了减速结界一样.\n\u0026ldquo;边表\u0026rdquo;,\u0026ldquo;bfs建树\u0026rdquo;,\u0026ldquo;ST之LCA\u0026rdquo;,雷不断地打出各种各样的能量,和恩偶爱.皮打出的能量对撞起来.最后,雷抬起右手,手腕发力,一道\u0026quot;可删堆\u0026quot;在一阵绿光中出现.\n雷的脸都被这光映绿,像极了两百年前,雷修途中最辉煌的时刻,就是用一道\u0026quot;堆\u0026rdquo;,漂亮地击杀了一个叫艾皮.艾欧的强者.\n两边的能量对撞,摩擦生热,代码能转化为内能.整个科大园都像是地震一样.\n雷转过身,像一个做了好事的幼儿园孩子在等待老师的表扬一样.\n身后能量相冲,几近抵消.雷能量中的主力,堆上,却出现了一条被称作bug的裂缝!\n高手过招,成败就在一瞬间!\n一道裂缝,瞬间扩大了数十倍.闪着锑黄色的恩偶爱.皮的能量,顷刻间淹没了雷.\n也许是怕雷没有死,恩偶爱.皮又加上了一道强招,\u0026ldquo;补刀神器,卡常数!\u0026rdquo;\n雷再也承受不住,喷出一口鲜血.在这一刻,雷的脑海中竟然听到了直的声音,\u0026ldquo;雷,你一定能漂亮地击杀恩偶爱.皮的!\u0026rdquo;\n一阵蜂鸣器乱响中,雷的身躯飞出了黑色的边界.科大园里,还是那样的阳光普照.\n12\n雷看到了直,还有直的男朋友.他们把肢体都已经残破不全的雷带回了教室森林,用从组合题中加热蒸发浓缩冷却结晶得到的结构化学晶体为雷疗伤.\n闻到熟悉的本大陆卷的味道,雷终于睁开了眼睛.\n雷说的第一句话是,\u0026ldquo;这些年,我少砍了多少题?\u0026rdquo;\n13\n三十年后.教室.\n七帮二堂的小师弟,y,找到了雷.\n\u0026ldquo;虽然这样你还是拿到了一等修炼者的资格.\u0026rdquo;\n\u0026ldquo;哦.\u0026ldquo;雷把几篇古文题粉碎以大其与空气之接触面积,生了堆火.\n\u0026ldquo;我对付最后一招的时候,差点就打出了数据结构log式.然而对拍性真气里有bug,于是只好用暴力性真气补上,最后失败了.\u0026rdquo;\n\u0026ldquo;哦.\u0026rdquo;\n\u0026ldquo;最后我的队友小z成功地击杀了那只恩偶爱.皮.\u0026rdquo;\n\u0026ldquo;哦.\u0026ldquo;雷继续砍题.\n\u0026ldquo;可是他用的那招是黑暗秘法.\u0026rdquo;\n\u0026ldquo;哦.\u0026rdquo;\n\u0026ldquo;你旁边那个北海派的男修,被那最后一招打得直接魂飞破散.\u0026rdquo;\n\u0026ldquo;哦.\u0026ldquo;雷把一道长满了双曲线的题扔进了垃圾堆.\n\u0026ldquo;北海派出了个很厉害的女修.这一轮的女修大比北海派肯定是要拿第一了.\u0026rdquo;\n\u0026ldquo;哦.\u0026rdquo;\n\u0026ldquo;泥屋门又出了新的秘法.这回他们可是重新崛起了.\u0026rdquo;\n\u0026ldquo;嗯.\u0026ldquo;雷把几棵生态题一起扔进了嘴里.\n\u0026ldquo;还有挠,他在第一轮的最后一招中玩火,结果受了严重的内伤.\u0026rdquo;\n\u0026ldquo;嗯.嗯?\u0026ldquo;雷一顿.\n\u0026ldquo;别担心.他自从百年前战胜了恩偶爱,就拥有了队格.有队格的修者,与恩偶爱.皮的战斗都是虚拟的,并没有什么实质性的伤害.\u0026rdquo;\n\u0026ldquo;哦.\u0026rdquo;\n\u0026ldquo;啊对不起我不该提起这些事的.\u0026rdquo;\n\u0026ldquo;嗯.\u0026ldquo;雷抬头看到走来的直和被直搂着的直的男朋友.沟壑纵横的脸上露出一丝羡慕.\n\u0026ldquo;今年的定额任务,砍完从负三价到正五价的氮,你砍了多少了?\u0026rdquo;\n\u0026ldquo;啊失陪.我去砍氮了.\u0026rdquo;\nHistorical Comments Unknown friend at 2015-11-30T22:53:18 @oimagicnovel: mathematica不知道比matlab高到哪里去了 \u0026mdash;- redstar\nUnknown friend at 2015-11-30T22:53:18 @oimagicnovel: mathematica不知道比matlab高到哪里去了 \u0026mdash;- redstar\nUnknown friend at 2015-12-01T22:01:22 @oimagicnovel: orzorzorz \u0026mdash;- zms_\nUnknown friend at 2015-12-01T22:01:22 @oimagicnovel: orzorzorz \u0026mdash;- zms_\nUnknown friend at 2015-12-05T11:53:46 @oimagicnovel: %%%%%%%%%%%%%%% \u0026mdash;- 炸成灰灰的Flaze\nUnknown friend at 2015-12-05T11:53:46 @oimagicnovel: %%%%%%%%%%%%%%% \u0026mdash;- 炸成灰灰的Flaze\nUnknown friend at 2015-12-05T19:08:14 @oimagicnovel: !!!!!%%%%%%%%%%% \u0026mdash;- ziliuziliu\nUnknown friend at 2015-12-05T19:08:14 @oimagicnovel: !!!!!%%%%%%%%%%% \u0026mdash;- ziliuziliu\n","permalink":"/random/dbimport_268/","summary":"0\n知乎上看到的脑洞.感觉不错玩一玩.\n1\n\u0026ldquo;我不在江湖,江湖也没有我的传说.\u0026rdquo;\n雷已隐居在贫困山边缘这片叫做教室的森林里,大概有一百年了.这里到处长满了叫做卷子的东西.也许在另一个世界里它们叫做树吧.\n雷是一个修真者.修真者是不会老的.然而这些年里,雷却没有动用过丝毫真气,也没有用过修真者的武器,键盘.雷只是日复一日地用笔把一种叫做题的物质从那一棵棵的卷子上砍下来,吃掉,或者拿出去make a deal.\n这一天,雷又砍倒了一棵长满了圆锥曲线的树,他脏得已经看不出人样的脸上露出了一个比哭还难看的笑.\n突然,他破旧的衣服口袋里的什么东西震动了起来.那\u0026hellip;雷低下头,眼神中有些许光彩,又包含了痛苦,忧愁,悲伤.\n那是七帮的卷轴.一百年前,雷被踢出七帮的时候,七帮的舵主给了他这个玩意.雷也不知道有什么用.他很想把它扔进教室外的墨池里.\n然而感到里面似乎有金属.\u0026ldquo;也许吃不起饭的时候还能把它拆了卖钱吧.\u0026ldquo;雷最后还是带它一起去了教室.\n雷用有些生硬的动作摸出了那个已经被灰尘包裹的卷轴.此刻它竟然在发光.光芒中隐隐有几个汉字,\u0026ldquo;风云突变,狼烟四起.吾七危急,速来支援.\u0026rdquo;\n雷有些奇怪,摇了摇头.回到自己用砍废的卷子搭的小屋里去了.\n2\n七天后.\n雷背上一个到处都是线头的背包,用墨池里黑得发蓝的水,尽力地把脸洗得有了点人样,然后朝七帮的方向走去.\n\u0026ldquo;毕竟还是不能忘啊.\u0026rdquo;\n如果不是遇到了七帮的长老,那个没有亲人的小男孩,恐怕在一千年前那个风雪交加,tcp包乱飞的寒夜,就变成一具尸骨了.\n雷也不知道七帮为什么叫七帮.为什么他没有听说过一帮二帮三帮四帮五帮六帮八帮.\n雷在边远贫困山区深处的七帮长大,成为了修真者,学会了功法,为七帮南征北战,然后被七帮一脚踢出了大门.\n3\n七帮正殿.\n\u0026ldquo;舵主,我预感这次炼试异常凶险.是否让各分舵修习fft神力,以应不测?\u0026rdquo;\n\u0026ldquo;舵主,昨日二堂的兄弟在与野兽战斗时又遇到了toptree.\u0026rdquo;\n\u0026ldquo;舵主,西方的北海门送来战书,扬言这次炼试要占领这个大陆的所有一等修炼者名额.\u0026rdquo;\n\u0026ldquo;舵主\u0026hellip;\u0026rdquo;\n炼试,是修真届每三百年一次的比拼.各门各帮的修炼者均要出动,一起和一个叫恩偶爱.皮的强大势力战斗.按照修炼者在战斗中的贡献来决定等次.这也成为了各门派间比拼实力和招引新人的重要资本.\n七帮向来开放.雷没有受到丝毫阻拦,来往的门徒的面孔,对于雷来说都是陌生的.而他们个个行色匆匆,雷觉得自己像是空气.\n\u0026ldquo;舵主,我们向雷师兄发去的卷轴始终没有回复,是否\u0026hellip;\u0026rdquo;\n雷看到七帮弟子正在按照所属的堂列队.\n一堂那些年轻的修炼者脸上浮现出愉快的神色,似乎正在激烈地讨论最短路神功的不同出招方法.\n二堂的修炼者稍年长些,显然都进入了思考人生的阶段.有几个人还在读功法卷轴.雷隐隐看到\u0026quot;数据结构\u0026quot;的大字.雷隐约记得有几个人叫小y,小z来着.雷离开的时候他们还是小孩子的模样,现在已经俨然成为七帮的中流砥柱了.\n三堂.只有一个孤独的身影,显露出苍老的形态来,他的背囊中的卷轴几乎要掉出来了,上面还写着\u0026quot;集训队作业\u0026rdquo;.那就是三堂主,挠.几百年前,就是他和雷一起,去外大陆闯荡,去和恩偶爱战斗.雷也想起自己离开七帮,他目送自己离开时,那种复杂的神情.\n\u0026ldquo;你来了.\u0026ldquo;挠示意雷站到自己身边.似乎有很多话要说.\n突然人群安静下来.一个比雷和挠都苍老几十倍的身影出现在上空.\u0026ldquo;舵主!\u0026ldquo;众人齐声道.\n舵主微微点头示意.扫了一眼人群,在雷的脸上多停了几秒钟.\n\u0026ldquo;此番与恩偶爱.皮的战斗将会格外惨烈.希望你们都准备好了.\u0026rdquo;\n雷知道,近几次,恩偶爱.皮的战斗力确实在不断提高.但是随着修炼者实力的提升,更多的功法被创造出来.恩偶爱.皮表面上看是越来越经不起攻击了.然而这样,对那些刚进入修真届的新人来说,并不是什么好事.\n\u0026ldquo;战斗吧.\u0026rdquo;\n七帮的修真者们一起释放出强大的真气威压,附近荒野里的电路板似乎都跟着振动起来.\n4\n本大陆上,参加炼试的修真者都要集中到贫困山脚下的科大园.\n雷一行人因为离得近,所以到得晚.\n雷看到下战书的北海派的弟子.在雷的印象中,那是个独裁的封闭的门派.\n雷曾经觉得北海派是很强大的敌人,如果他们统一这个大陆,必将带来无尽的黑暗.\n后来雷认识了北海派的一些人.雷发现他们也是有血有肉的人.加之当时来自其他大陆的威胁,雷也就不再那样想了.\n这些都是前话.雷觉得自己一定程度上讲已经不是修真者了.\n一位老者认出了雷,向雷招了招手.雷也点头回应.\n那是高七帮的老者.高七帮的创始人就来自七帮.后来虽然他们去了贫困山的另一边发展,但依然和七帮保持了不错的关系.他们掌握了强大的点分功法,雷一直十分敬佩那位创造点分功法的老者,也就是面前这位.\n突然雷眼前一亮.虽然早已麻木,不过十分稀缺的女修还是能引起雷的注意的.同在贫困山中的泥屋门就是女修稀缺现象的反例.不仅女修多,而且大半都十分漂亮.泥屋门是个从远古传承下来的门派,传说创始人修了一间泥屋,在屋中招收学徒,因此得名.虽然泥屋门近来因为有强者叛逃去了北海派,而显得有些颓势,然而他们拥有很多不为人知的秘法,总是很神秘莫测.\n这些势力,在与恩偶爱.皮战斗时,应该可以看作是朋友,然而争那几个一等名额的时候,却又成了不共戴天的敌人.修真界,没有永恒的朋友,也没有永恒的敌人,只有永恒的排名.\n5\n\u0026ldquo;都准备好了吗?战斗吧.\u0026rdquo;\n周围的空气都被搅动起来.黑色的烟尘挡住了众人的视线.不参加试炼的舵主等老者都赶紧退到安全的地方.一串字符流中,恩偶爱.皮,又一次露出了一张表格状的狰狞的面孔.\n\u0026ldquo;又送炮灰来了,真好啊哈哈哈哈哈哈.\u0026rdquo;\n恩偶爱.皮发出诡异的笑声,空气都跟着波动,显示出它强大的能量来.\n虽然挠这等强者拥有强大的真气,但也无法以一人之力与对手抗衡.然而修真界就是这么残酷.\n\u0026ldquo;幻方,大模拟,给我爆!\u0026ldquo;恩偶爱.皮显然是饥渴难耐了,上来就使出了有些迷惑性的一招.\n一些明显是新人的家伙,很快就被迷倒了.不过多数修真者还是识破了敌人的诡计,掏出键盘,开始与之对抗.\n此刻雷的眼睛里却充满了鄙夷.也不掏出键盘,只是随手一行printf,就化解了打向自己的能量.\n雷身边的几个修真者应该也是身经百战了,纷纷化解了这道攻击.\n这时不远处有人发出一声呻吟,然后无力地倒在了自己的键盘上.雷疑惑地看去,发现那人使用了scanf,但是在打向能量前,却忘记了freopen.最终攻击能量没有打向敌人,却打趴了自己.\n双方都是使用了试探性的能量.但是在一些等级较低的修炼者眼中,这样的能量差距已经是不可逾越的了.有些修炼者选择了投降.这倒也简单,只要走出那到黑色的烟瘴,出于规则的限制,恩偶爱.皮也会就此罢手.\n\u0026ldquo;嘿嘿,小伙子们还不错嘛.等着.\u0026rdquo;\n恩偶爱.皮显然对这道攻击的效果还算满意,嘿嘿笑着,显露出一丝杀气.\n6\n雷摸了摸下巴.这是他多年前向一位老前辈学来的习惯.\n\u0026ldquo;就知道欺负弱者.\u0026ldquo;雷心里嘀咕.\n空气中的PM2.5似乎被对手聚集起来了,恩偶爱.皮略一酝酿,再次一声大呵,\u0026ldquo;图论,找圈.出.\u0026rdquo;","title":"风住尘香"},{"content":"考了一场月考.嗯.这么水的题还是没上600啊摔.最近特别喜欢摔.\n数学稀撇.1选1填一堆大题.啥必要不充分没有搞清楚啥的.函数题过程炸糊被发现了扣得unexpected.最后一题最后一问辣么容易居然没做粗来啊摔.都是做解析几何算了半个小时还算错了的锅啊摔.\n物理强行错了俩选择题一个实验题不然窝就是年级rank1.时间留够了加上大题比较水于是233.\n化学大概正常偏下吧居然没错选择题.然而大题挺惨的.各种平衡啥的没学好啊摔.\n生物惨.开场错三道选择题不然总分能上600昂.窝太zz了.\n英语似乎又是恰好被班平骑啊摔.完型最后检查的时候把整整三个正确答案改成错的了.爽.\n作文强行偏题了摔ovo.窝坐飞机就是喜欢坐头等舱窝就是没有社会地位泥不服?然后主观题啥的死一片.\n于是yzy就年级rank2了跪烂.\n于是窝还是太弱辣.\n","permalink":"/diary/dbimport_095/","summary":"考了一场月考.嗯.这么水的题还是没上600啊摔.最近特别喜欢摔.\n数学稀撇.1选1填一堆大题.啥必要不充分没有搞清楚啥的.函数题过程炸糊被发现了扣得unexpected.最后一题最后一问辣么容易居然没做粗来啊摔.都是做解析几何算了半个小时还算错了的锅啊摔.\n物理强行错了俩选择题一个实验题不然窝就是年级rank1.时间留够了加上大题比较水于是233.\n化学大概正常偏下吧居然没错选择题.然而大题挺惨的.各种平衡啥的没学好啊摔.\n生物惨.开场错三道选择题不然总分能上600昂.窝太zz了.\n英语似乎又是恰好被班平骑啊摔.完型最后检查的时候把整整三个正确答案改成错的了.爽.\n作文强行偏题了摔ovo.窝坐飞机就是喜欢坐头等舱窝就是没有社会地位泥不服?然后主观题啥的死一片.\n于是yzy就年级rank2了跪烂.\n于是窝还是太弱辣.","title":"20151202"},{"content":"乐学七中的二项式证明题ovo没救了.\n求证64|32n+2-8n-9(n∈N*).\n这么无语的题居然想了半个小时.\n证明.\nn=1时显然成立.\nn\u0026gt;1时\n原式=(8+1)n+1-8n-9 原式≡1+8(n+1)-8n-9≡0(mod 64) 证毕.\nHistorical Comments Unknown friend at 2016-01-18T23:27:56 @20151128_binomial: Orz \u0026mdash;- ommy\nUnknown friend at 2016-01-18T23:27:56 @20151128_binomial: Orz \u0026mdash;- ommy\n","permalink":"/random/dbimport_094/","summary":"乐学七中的二项式证明题ovo没救了.\n求证64|32n+2-8n-9(n∈N*).\n这么无语的题居然想了半个小时.\n证明.\nn=1时显然成立.\nn\u0026gt;1时\n原式=(8+1)n+1-8n-9 原式≡1+8(n+1)-8n-9≡0(mod 64) 证毕.\nHistorical Comments Unknown friend at 2016-01-18T23:27:56 @20151128_binomial: Orz \u0026mdash;- ommy\nUnknown friend at 2016-01-18T23:27:56 @20151128_binomial: Orz \u0026mdash;- ommy","title":"乐学七中的二项式定理证明题"},{"content":"手机写东西好蛋痛。补充一些flag学说的证据。\nYzy的物理考试 YZY:我半期物理连40分都考不到了。\n结局:Yzy得到了足够高的分数于是年级排名20+。\n星期三 卤素： niuzyi中午去打球!\n结局：中午gorge过生日。niuzyi孤独地和学弟玩耍。\n星期五 卤素：中午去打球！\nlaekov:今天没人过生日吧。\n结局：中午，下，雨，了。\n（未完待续）\n","permalink":"/random/dbimport_272/","summary":"手机写东西好蛋痛。补充一些flag学说的证据。\nYzy的物理考试 YZY:我半期物理连40分都考不到了。\n结局:Yzy得到了足够高的分数于是年级排名20+。\n星期三 卤素： niuzyi中午去打球!\n结局：中午gorge过生日。niuzyi孤独地和学弟玩耍。\n星期五 卤素：中午去打球！\nlaekov:今天没人过生日吧。\n结局：中午，下，雨，了。\n（未完待续）","title":"Proof for flag theory"},{"content":"Flag学简介 flag，是如今的新型学说，最初起源于二次元，现在已普遍运用于游戏，编程，到学生们的日常生活中。 flag最初是某种游戏中的专有词汇。这里就不说了。 什么是flag呢？我们举出几个日常生活中的实例。 案例一：今天第五节课没有拖堂，我激动地大喊：”今天一定能抢到饭！“到了食堂时，目测平均队列长度\u0026gt;10m； 案例二：HJA说：”我这次一定要AC！“五分钟后，通过率降低10%； 案例三： HJA说：”这个题特别难写。“五分钟后，一次AC0ms; 通过这些例子，我们可以得出一些结论。 一个完整的”flag事件“，是由发生背景、flag以及结果3个部分构成的。在第一个事件中，”第五节课没有拖堂“是发生背景；”今天一定能抢到饭“是flag的内容；”没抢到饭“是结果；”我“是立flag的人（stander，或译为do-dier)。为了让大家熟悉这几个定义，我们把案例二，三的分析留作习题。 在案例一，二中，我们可以看出，flag大多表达的是立flag的人的美好希望，而这样的希望是建立在”发生背景“给出的暗示上的。然而，结果使得这样的美好希望破灭了。因此，这样的flag叫正flag。 而在案例三中，”发生背景“给stander的暗示是“这题很难”。而结果却出人意料，HJA秒过了。这类结局美好的flag叫反flag。 可见，flag的结果是与flag内容相反的。这也是flag的定义。 下面给出flag基本原理（墨菲定律）：事情如果有变坏的可能，不管这种可能性有多小，它总会发生。 以及基本原理的另一种阐述形式，分为4个定理：\n1、任何事都没有表面看起来那么简单； 2、所有的事都会比你预计的时间长； 3、会出错的事总会出错； 4、如果你担心某种情况发生，那么它就更有可能发生。 所以，结果往往与flag内容往往相反。 那么，我们要如何避免这样的flag呢？笔者在这里给出一些建议。 首先，刷题时一定要闭嘴，不要提到任何有可能成为flag的内容，最好想都不要想。根据不可靠的情报，flag的根本原因是因为当你告诉自己“我一定不会失败”时，你会想象自己失败的场景，因而将事情的发展导向失败。其次，当你已经无意间立下flag的时候，要马上放弃不切实际的想法，可以调节情绪，做一些其他事情，等待flag失效。另外，RP学说与Flag学说有密切联系。在平常应多做攒RP的事情，比如请本文作者吃饭（当然，这对本人来说是掉RP的，不过我为了大家着想不在意这点RP）。 最后，介绍一种高超的方法：反立flag。 既然flag内容往往与结果相反，那么我们可以通过立下内容不好的flag，让结果向好的一方面发生。如案例三，HJA运用反立flag技巧AC了。 但这个方法的使用有几点注意事项：1、反flag成功之后RP必定大减。这个时候更容易陷入一个正flag中。所以当你反flag成功时，务必不要得意忘形，因为会有更大的flag等着你去立；2、反flag的成功率一般远低于正flag的成功率，不要有太大希望；3、最重要的一点，不要抱着“立flag”的心态立反flag。心理因素是影响flag成功率的关键。要做到“自己都不知道自己在立flag\u0026quot;，这样的反flag成功率才能增高。正所谓“天人合一“”物我两忘“，达到这样的境界，便能将反flag运用到极致。这样带来的惊喜也更大，且RP不易减少。 给大家几个反flag： 1、我tyvj永远刷不过100道题；\n2、我学不会最小费用最大流和KM；\n3、我下次要出年级前50；\n4、没有下一篇flag介绍了。\n就是这样。大家可以在日常生活中适量的尝试反flag的使用并注意提高RP（见上文）。\n最后注意，本方法对于某些特定人群并不适用，如ADAM让你写的总结最好还是认真写。\n_A0A0的粉丝（一种高效的转移手法，使RP降低的效果转移到_A0A0身上） 作于2014.9.5 附录：对于一些术语的解释：（好的态度+RP）\nAC：accepted，通过了一道题目（就是满分了）\n通过率：在一些网站上的AC题目数/总提交次数\ntyvj：某一刷题网站\nHJA：某牛牪犇\nKM：二分图带权匹配的算法\n_A0A0： A0A0是黑暗世界的核心，暴力的保护神，强剪枝的朋友，随机数据的敌人，所有的光明算法出题者视A0A0为眼中钉\nADAM：超过_A0A0的存在，无视一切flag的效果，附带精神压力（所以要认真写他要求的东西）\nFlag的作用机制 在这一节，我们将重点放在flag的作用机制上。因为flag学方兴未艾，目前对它的作用机制只有一些猜想。 flag的实质是一个事件，而对这个事件产生影响的主要是flag的内容。但我们知道，只有“有质量的物体”才能做功，一句话，或一个想法中的信息是不可能直接对现实世界产生影响的（除非你是_A0A0)。这样看来，flag极有可能是通过信息对立flag者本人产生某种影响，进而导致flag的结局。（这么看来，flag似乎不是一种反射，这学期大家做生物选择题是要注意） 我们再次通过实例来说明。 今天笔者对HJA打比赛提供了一些精神援助。对于他想要打表的意愿，我表示支持。然而发送信息后我突然发现这是一个flag。事实证明，HJA没有写起那道题（TLE）。这么看来，flag似乎也能对别人起作用效果。 如果你还不清楚上一篇中的几个定义，请分析这个实例，笔者又把它留作习题（虽然没有习题答案，不过反正你们不会认真做） 另外，机房某人很久以前说过：“期望的题千千万，但都是逗比题。”这句话对全机房人都产生了深远的影响。当然，不是influence,是affect. 这么说来，我们可以定义一个flag场：在flag的周围会产生这样一种物质，对处在其中的人产生“作用”。这里的作用不只是力。“周围”的定义也很广泛，不仅仅是能通过空间传播，也能直接作用于被flag描述的人，甚至通过网络无限制的传播。这么看来，flag场真是大大的可怕。 对于具体的一个人是怎样起作用的呢？作者还需要构思一个奇葩的答案。不过有一点是肯定的：相信这是一个flag的人，比不太相信flag与不知情的人受到的影响要大。 公式如下：F (flag作用强度) ∝ b (相信程度） F∝1/(s^2)（传播距离） 因此笔者给出一个猜测：F=f*b/(s^2)，f为“flag常数”，实验值为2.333.但具体的量度方法笔者还需保密。 不过flag也有失效的时候。据观察，主要有以下几种情况。 1、在flag场内的人与描述内容无关。比如，楼主不会受到机房众人的flag影响，因为他不写程序。（说不定是下一种情况） 2、在flag场内的人拥有碾压立flag者的实力。如钟神、HJA几乎不受机房众人影响。（楼主说不定是世外高手） 3、在flag场内的人拥有极其强大的心理素质，心如止水，屏蔽外界干扰。 对于这一类特例的解释，笔者认为，是否受到flag影响的根本原因是是否相信flag。如果相信，正如上一节所说的，你很容易想象到失败的场景并把它导向现实；如果不相信，便能否定它的效果。以上三种情况均是由于强大的心理素质才能反抗flag场的强大作用。根据公式也能推出这个结论。 因此，对于正flag，不要悲伤，不要心急。锻炼心理素质，为善去恶，格物致知，回归本心，自然不受flag场影响。对于反flag，要善加利用，给自己正确的心理暗示，造福人类。 在下一节中，笔者会试图证明flag与平方反比定律的相似性，以及楞次定律，勒夏特列原理等与flag学说的共同之处。（笔者要试图反抗flag场，果断正立flag) P.S.如果你对自己的心理素质不抱信心，可以请笔者吃饭增加RP。（毕竟充足的体力才能继续写作） 附注： TLE：超时 机房某人：就是那个笑起来特别有喜感整个曦园都听得见的那位胖子 钟神：HJA都要orz的存在，与_A0A0斗争的领导人 楼主：隐居在科技楼二楼的老者，仙风道骨，窥破天机。 HJA：他不是_A0A0. Flag与其他学科的联系与总结 这大概是Flag介绍的完结了。 在上一节最后，我们提到了一些乱七八糟的东西。 楞次定律：感应电流的磁场总要阻碍引起感应电流的磁通量的变化。 勒夏特列原理：如果改变可逆反应的条件（如浓度、压强、温度等），化学平衡就被破坏，并向减弱这种改变的方向移动。 这两个定理可以简单地说成一句话，就是自然定律总是跟你对着干。 如果把flag姑且算作一个自然原理的话，那么它似乎也满足这一条件：总是毁掉你美好的愿望，让你觉得自己naive，并且反flag难以成功。 例如作者今天上午的考试，笔者的发挥非同一般。感觉每道题都见过，但调了很久，还是交的暴力。（作者还远没有达到HJA那种虐场的实力）\n对于这样杯具的情况，作者只能说：“假如flag欺骗了你，不要悲伤，不要心急。”虽然普希金本人也是冲冠一怒为红颜，死在了黑暗的封建势力的阴谋下（只是一种说法不可全信）。如果他知道主体思想还怕什么。 为了和flag斗争，学习主体思想也是很有必要的（高能注意）。它告诉我们：人才是自己命运的主人。flag什么的都是浮云。作者看样子要向oyrs，tf（不是boy）以及zyr等学习刷题技巧与经验了。 最后是实验过程：对flag常数的计算。 实验1：HJA对我说hiho这周是水题。我交了六次，三WA两CE（点成了gcc)一AC。 平均得分21.67.事实证明我在wiki上曾经做过这个，pascal秒切。 flag场传播距离：HJA to me。作用效果：得分降低78.33. 但HJA具体离我多远呢？作者也不清楚。 实验2：据聊天记录显示，HJA昨天打某比赛时立了一个rank1的flag。结果下来他是rank11. flag场传播距离：同上；作用效果：鉴于赛制的不同，我们把ACM中每道题记为100分。最终HJA平均得分为42.857；而rank1平均得分为80.即得分降低（80-42.857）*4=148.572. 这样看上去，真是毫无联系。不过作者相信这是因为受到了过多外界因素的干扰。在以后或许会有flag扭秤之类的实验道具能够准确的计算出flag常数。 对于flag的介绍就完了。下次再找其他内容。 关于自然规律和人对着干这点，再说几句。（作者切换文理模式了） 其实不是自然规律和人对着干，而是人和自然规律对着干。老子认为，道”生而不有，为而不恃，长而不宰“，而”人法地，地法天，天法道，道法自然“，人和自然不知道差了多少个档次，还妄想”人定胜天“，真是naive. flag说起来也像是有点迷信的东西，也有的点心理暗示的味道。不管怎么说，”心“才是”身“的主宰。接受他人的意见，但保留本心；相信自己的意志，但有所敬畏。 大概明天你们又能听到我讲这些。 附注： oyrs,tf,zyr：代表作分别是”刷题*“，”偶像“，”她，在刷题“ rank：排名 ACM：全称ACM-ICPC，一种比赛 扭秤：上古神器，据传卡文迪许曾用它计算出了一个神秘的值：6.67428±（0.00067）*10^-11 From lyzy.\n","permalink":"/random/dbimport_255/","summary":"Flag学简介 flag，是如今的新型学说，最初起源于二次元，现在已普遍运用于游戏，编程，到学生们的日常生活中。 flag最初是某种游戏中的专有词汇。这里就不说了。 什么是flag呢？我们举出几个日常生活中的实例。 案例一：今天第五节课没有拖堂，我激动地大喊：”今天一定能抢到饭！“到了食堂时，目测平均队列长度\u0026gt;10m； 案例二：HJA说：”我这次一定要AC！“五分钟后，通过率降低10%； 案例三： HJA说：”这个题特别难写。“五分钟后，一次AC0ms; 通过这些例子，我们可以得出一些结论。 一个完整的”flag事件“，是由发生背景、flag以及结果3个部分构成的。在第一个事件中，”第五节课没有拖堂“是发生背景；”今天一定能抢到饭“是flag的内容；”没抢到饭“是结果；”我“是立flag的人（stander，或译为do-dier)。为了让大家熟悉这几个定义，我们把案例二，三的分析留作习题。 在案例一，二中，我们可以看出，flag大多表达的是立flag的人的美好希望，而这样的希望是建立在”发生背景“给出的暗示上的。然而，结果使得这样的美好希望破灭了。因此，这样的flag叫正flag。 而在案例三中，”发生背景“给stander的暗示是“这题很难”。而结果却出人意料，HJA秒过了。这类结局美好的flag叫反flag。 可见，flag的结果是与flag内容相反的。这也是flag的定义。 下面给出flag基本原理（墨菲定律）：事情如果有变坏的可能，不管这种可能性有多小，它总会发生。 以及基本原理的另一种阐述形式，分为4个定理：\n1、任何事都没有表面看起来那么简单； 2、所有的事都会比你预计的时间长； 3、会出错的事总会出错； 4、如果你担心某种情况发生，那么它就更有可能发生。 所以，结果往往与flag内容往往相反。 那么，我们要如何避免这样的flag呢？笔者在这里给出一些建议。 首先，刷题时一定要闭嘴，不要提到任何有可能成为flag的内容，最好想都不要想。根据不可靠的情报，flag的根本原因是因为当你告诉自己“我一定不会失败”时，你会想象自己失败的场景，因而将事情的发展导向失败。其次，当你已经无意间立下flag的时候，要马上放弃不切实际的想法，可以调节情绪，做一些其他事情，等待flag失效。另外，RP学说与Flag学说有密切联系。在平常应多做攒RP的事情，比如请本文作者吃饭（当然，这对本人来说是掉RP的，不过我为了大家着想不在意这点RP）。 最后，介绍一种高超的方法：反立flag。 既然flag内容往往与结果相反，那么我们可以通过立下内容不好的flag，让结果向好的一方面发生。如案例三，HJA运用反立flag技巧AC了。 但这个方法的使用有几点注意事项：1、反flag成功之后RP必定大减。这个时候更容易陷入一个正flag中。所以当你反flag成功时，务必不要得意忘形，因为会有更大的flag等着你去立；2、反flag的成功率一般远低于正flag的成功率，不要有太大希望；3、最重要的一点，不要抱着“立flag”的心态立反flag。心理因素是影响flag成功率的关键。要做到“自己都不知道自己在立flag\u0026quot;，这样的反flag成功率才能增高。正所谓“天人合一“”物我两忘“，达到这样的境界，便能将反flag运用到极致。这样带来的惊喜也更大，且RP不易减少。 给大家几个反flag： 1、我tyvj永远刷不过100道题；\n2、我学不会最小费用最大流和KM；\n3、我下次要出年级前50；\n4、没有下一篇flag介绍了。\n就是这样。大家可以在日常生活中适量的尝试反flag的使用并注意提高RP（见上文）。\n最后注意，本方法对于某些特定人群并不适用，如ADAM让你写的总结最好还是认真写。\n_A0A0的粉丝（一种高效的转移手法，使RP降低的效果转移到_A0A0身上） 作于2014.9.5 附录：对于一些术语的解释：（好的态度+RP）\nAC：accepted，通过了一道题目（就是满分了）\n通过率：在一些网站上的AC题目数/总提交次数\ntyvj：某一刷题网站\nHJA：某牛牪犇\nKM：二分图带权匹配的算法\n_A0A0： A0A0是黑暗世界的核心，暴力的保护神，强剪枝的朋友，随机数据的敌人，所有的光明算法出题者视A0A0为眼中钉\nADAM：超过_A0A0的存在，无视一切flag的效果，附带精神压力（所以要认真写他要求的东西）\nFlag的作用机制 在这一节，我们将重点放在flag的作用机制上。因为flag学方兴未艾，目前对它的作用机制只有一些猜想。 flag的实质是一个事件，而对这个事件产生影响的主要是flag的内容。但我们知道，只有“有质量的物体”才能做功，一句话，或一个想法中的信息是不可能直接对现实世界产生影响的（除非你是_A0A0)。这样看来，flag极有可能是通过信息对立flag者本人产生某种影响，进而导致flag的结局。（这么看来，flag似乎不是一种反射，这学期大家做生物选择题是要注意） 我们再次通过实例来说明。 今天笔者对HJA打比赛提供了一些精神援助。对于他想要打表的意愿，我表示支持。然而发送信息后我突然发现这是一个flag。事实证明，HJA没有写起那道题（TLE）。这么看来，flag似乎也能对别人起作用效果。 如果你还不清楚上一篇中的几个定义，请分析这个实例，笔者又把它留作习题（虽然没有习题答案，不过反正你们不会认真做） 另外，机房某人很久以前说过：“期望的题千千万，但都是逗比题。”这句话对全机房人都产生了深远的影响。当然，不是influence,是affect. 这么说来，我们可以定义一个flag场：在flag的周围会产生这样一种物质，对处在其中的人产生“作用”。这里的作用不只是力。“周围”的定义也很广泛，不仅仅是能通过空间传播，也能直接作用于被flag描述的人，甚至通过网络无限制的传播。这么看来，flag场真是大大的可怕。 对于具体的一个人是怎样起作用的呢？作者还需要构思一个奇葩的答案。不过有一点是肯定的：相信这是一个flag的人，比不太相信flag与不知情的人受到的影响要大。 公式如下：F (flag作用强度) ∝ b (相信程度） F∝1/(s^2)（传播距离） 因此笔者给出一个猜测：F=f*b/(s^2)，f为“flag常数”，实验值为2.333.但具体的量度方法笔者还需保密。 不过flag也有失效的时候。据观察，主要有以下几种情况。 1、在flag场内的人与描述内容无关。比如，楼主不会受到机房众人的flag影响，因为他不写程序。（说不定是下一种情况） 2、在flag场内的人拥有碾压立flag者的实力。如钟神、HJA几乎不受机房众人影响。（楼主说不定是世外高手） 3、在flag场内的人拥有极其强大的心理素质，心如止水，屏蔽外界干扰。 对于这一类特例的解释，笔者认为，是否受到flag影响的根本原因是是否相信flag。如果相信，正如上一节所说的，你很容易想象到失败的场景并把它导向现实；如果不相信，便能否定它的效果。以上三种情况均是由于强大的心理素质才能反抗flag场的强大作用。根据公式也能推出这个结论。 因此，对于正flag，不要悲伤，不要心急。锻炼心理素质，为善去恶，格物致知，回归本心，自然不受flag场影响。对于反flag，要善加利用，给自己正确的心理暗示，造福人类。 在下一节中，笔者会试图证明flag与平方反比定律的相似性，以及楞次定律，勒夏特列原理等与flag学说的共同之处。（笔者要试图反抗flag场，果断正立flag) P.S.如果你对自己的心理素质不抱信心，可以请笔者吃饭增加RP。（毕竟充足的体力才能继续写作） 附注： TLE：超时 机房某人：就是那个笑起来特别有喜感整个曦园都听得见的那位胖子 钟神：HJA都要orz的存在，与_A0A0斗争的领导人 楼主：隐居在科技楼二楼的老者，仙风道骨，窥破天机。 HJA：他不是_A0A0.","title":"Introduction to Flag by LYZY"},{"content":"(本来应该是昨天写点东西的然而昨天在测noip)\nlaekov就这样18岁辣.\nlaekov终于可以自豪地走进网吧扔下身份证开机子了.\nlaekov在之前的18年里也不知道干了些什么.\n(偷偷地表示laekov在18岁前干了很多18岁前不准干的事\n曾经似乎是一个有梦想的少年然而后来发现梦想是梦想现实是现实真相是真相.然后也不知道该干什么了于是变成了行尸走肉.\nlaekov也不知道这种情况要持续多久.\n总之laekov今年高三了.laekov觉得还是应该好好学习的.\nbtw,laekov发现记得自己生日的同学除了mhy以外都是妹纸于是有一点感动.233333\n","permalink":"/diary/dbimport_092/","summary":"(本来应该是昨天写点东西的然而昨天在测noip)\nlaekov就这样18岁辣.\nlaekov终于可以自豪地走进网吧扔下身份证开机子了.\nlaekov在之前的18年里也不知道干了些什么.\n(偷偷地表示laekov在18岁前干了很多18岁前不准干的事\n曾经似乎是一个有梦想的少年然而后来发现梦想是梦想现实是现实真相是真相.然后也不知道该干什么了于是变成了行尸走肉.\nlaekov也不知道这种情况要持续多久.\n总之laekov今年高三了.laekov觉得还是应该好好学习的.\nbtw,laekov发现记得自己生日的同学除了mhy以外都是妹纸于是有一点感动.233333","title":"20151116"},{"content":"// Source code from laekov at noip 2015 day2 #define PRID \u0026ldquo;transport\u0026rdquo; #include #include #include #include using namespace std;\nconst int maxn = 300003; const int maxl = 21;\nconst int buf_len = 45678; char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0), neg(0); while (!isdigit(*bufb)) { if (*bufb == \u0026lsquo;-\u0026rsquo;) neg = 1; readBuf(); } do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); if (neg) x = -s; else x = s; }\nstruct edge { int t, l; edge *ne; };\nstruct path { int u, v, a, l; }; inline bool cmpPath(const path\u0026amp; a, const path\u0026amp; b) { return a. l \u0026gt; b. l; }\nstruct heapM { int n, a[maxn]; heapM() { n = 0; } inline void push(int x) { a[n] = x; push_heap(a, a + (++ n)); } inline int top() { return n ? a[0] : -1; } inline void pop() { if (n) pop_heap(a, a + (n \u0026ndash;)); } };\nstruct setR { heapM a, r; inline void insert(int x) { a. push(x); } inline void remove(int x) { r. push(x); } int query() { while (a. n \u0026amp;\u0026amp; a. top() == r. top()) { a. pop(); r. pop(); } return a. top(); } };\nint n, m; int ut[maxn][maxl], d[maxn], df[maxn], dr[maxn]; path a[maxn]; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf(ebuf_arr), *head[maxn]; setR rs;\ninline void addEdge(int u, int v, int w) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; l = w; ebuf-\u0026gt; ne = head[u]; head[u] = ebuf ++; }\nvoid buildBFS() { static int q[maxn]; int hd(0), tl(1); memset(d, 0, sizeof(d)); d[0] = 0; d[q[hd] = 1] = 1; dr[1] = df[1] = 0; for (int i = 0; i \u0026lt; maxl; ++ i) ut[0][i] = ut[1][i] = 0; while (hd \u0026lt; tl) { int p(q[hd ++]); for (int i = 1; i \u0026lt; maxl; ++ i) ut[p][i] = ut[ut[p][i - 1]][i - 1]; for (edge *e = head[p]; e; e = e-\u0026gt; ne) if (!d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; ut[e-\u0026gt; t][0] = p; df[e-\u0026gt; t] = e-\u0026gt; l; dr[e-\u0026gt; t] = dr[p] + e-\u0026gt; l; q[tl ++] = e-\u0026gt; t; } } }\nint LCA(int u, int v) { if (d[u] \u0026lt; d[v]) swap(u, v); for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (d[ut[u][i]] \u0026gt;= d[v]) u = ut[u][i]; if (u == v) return u; for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (ut[u][i] ^ ut[v][i]) { u = ut[u][i]; v = ut[v][i]; } return ut[u][0]; }\ninline bool onPath(int u, const path\u0026amp; p) { return LCA(u, p. a) == p. a \u0026amp;\u0026amp; (LCA(u, p. u) == u || LCA(u, p. v) == u); }\nint dqEnum() { static int q[maxn]; int hd(0), tl(d[a[0]. u] + d[a[0]. v] - d[a[0]. a] * 2 + 1); int ans; for (int i = 0, u = a[0]. u; u != a[0]. a; ++ i, u = ut[u][0]) { q[i] = u; rs. insert(df[u]); } q[d[a[0]. u] - d[a[0]. a]] = a[0]. a; for (int j = tl - 1, v = a[0]. v; v != a[0]. a; \u0026ndash; j, v = ut[v][0]) { q[j] = v; rs. insert(df[v]); } a[m]. l = 0; if (!a[0]. l) return 0; ans = max(a[1]. l, a[0]. l - rs. query()); for (int i = 1; i \u0026lt; m \u0026amp;\u0026amp; hd + 1 \u0026lt; tl; ++ i) { while (hd \u0026lt; tl \u0026amp;\u0026amp; !onPath(q[hd], a[i])) { if (hd + 1 \u0026lt; tl) { if (d[q[hd]] \u0026gt; d[q[hd + 1]]) rs. remove(df[q[hd]]); else rs. remove(df[q[hd + 1]]); } ++ hd; } while (hd \u0026lt; tl \u0026amp;\u0026amp; !onPath(q[tl - 1], a[i])) { if (hd + 1 \u0026lt; tl) { if (d[q[tl - 1]] \u0026gt; d[q[tl - 2]]) rs. remove(df[q[tl - 1]]); else rs. remove(df[q[tl - 2]]); } \u0026ndash; tl; } if (hd + 1 \u0026lt; tl) ans = min(ans, max(a[0]. l - rs. query(), a[i + 1]. l)); } return ans; }\nint main() { freopen(PRID \u0026ldquo;.in\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); freopen(PRID \u0026ldquo;.out\u0026rdquo;, \u0026ldquo;w\u0026rdquo;, stdout);\nmemset(head, 0, sizeof(head)); readInt(n); readInt(m); for (int i = 1; i \u0026lt; n; ++ i) { int u, v, w; readInt(u); readInt(v); readInt(w); addEdge(u, v, w); addEdge(v, u, w); } buildBFS(); for (int i = 0; i \u0026lt; m; ++ i) { readInt(a[i]. u); readInt(a[i]. v); a[i]. a = LCA(a[i]. u, a[i]. v); a[i]. l = dr[a[i]. u] + dr[a[i]. v] - dr[a[i]. a] * 2; } sort(a, a + m, cmpPath); printf(\u0026quot;%d\\n\u0026quot;, dqEnum()); }\n","permalink":"/code/dbimport_261/","summary":"// Source code from laekov at noip 2015 day2 #define PRID \u0026ldquo;transport\u0026rdquo; #include #include #include #include using namespace std;\nconst int maxn = 300003; const int maxl = 21;\nconst int buf_len = 45678; char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0), neg(0); while (!isdigit(*bufb)) { if (*bufb == \u0026lsquo;-\u0026rsquo;) neg = 1; readBuf(); } do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); if (neg) x = -s; else x = s; }","title":"noip2015_transport.cc"},{"content":"唯一一道有点麻烦的题.似乎是Picks出的?orz.于是窝就90辣.\n据说可以链剖然而退役的laekov已经搞忘了那是啥.\nlaekov思考了五分钟.\n把所有链按长度排序.答案必定是这个路径序列的某个前缀的并集上的最长边.\n然后并集只会减小不会增大.于是暴力判断当前并集端点是否在下一条路径上就可以了.\n于是会被卡常数ovo窝也不知道怎么破.在uoj上加了个读入优化炸糊过去了.\n然后窝程序在最长路径长度为0的时候会因为数据结构写丑而死循环ovo\n反正还是挺水的啊.noip的压轴题怎么能这么水.\n","permalink":"/oi/dbimport_267/","summary":"唯一一道有点麻烦的题.似乎是Picks出的?orz.于是窝就90辣.\n据说可以链剖然而退役的laekov已经搞忘了那是啥.\nlaekov思考了五分钟.\n把所有链按长度排序.答案必定是这个路径序列的某个前缀的并集上的最长边.\n然后并集只会减小不会增大.于是暴力判断当前并集端点是否在下一条路径上就可以了.\n于是会被卡常数ovo窝也不知道怎么破.在uoj上加了个读入优化炸糊过去了.\n然后窝程序在最长路径长度为0的时候会因为数据结构写丑而死循环ovo\n反正还是挺水的啊.noip的压轴题怎么能这么水.","title":"noip2015 transport"},{"content":"// Source code from laekov at noip 2015 day2 #define PRID \u0026ldquo;substring\u0026rdquo; #include #include #include using namespace std;\nconst int maxa = 2003; const int maxb = 203; const int mod = 1e9 + 7;\nint n, m, l, f[2][maxb][maxb][2]; char a[maxa], b[maxb];\n#define mInc(a,b) { a += b; if (a \u0026gt;= mod) a -= mod; }\nint main() { freopen(PRID \u0026ldquo;.in\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); freopen(PRID \u0026ldquo;.out\u0026rdquo;, \u0026ldquo;w\u0026rdquo;, stdout);\nscanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;n, \u0026amp;m, \u0026amp;l); scanf(\u0026quot;%s%s\u0026quot;, a, b); memset(f, 0, sizeof(f)); int cur(0), prv(1); f[cur][0][0][0] = 1; for (int i = 0; i \u0026lt; n; ++ i) { swap(cur, prv); memset(f[cur], 0, sizeof(f[cur])); for (int j = 0; j \u0026lt;= m; ++ j) { for (int k = 0; k \u0026lt;= j \u0026amp;\u0026amp; k \u0026lt;= l; ++ k) { if (f[prv][j][k][0]) mInc(f[cur][j][k][0], f[prv][j][k][0]); if (f[prv][j][k][1]) mInc(f[cur][j][k][0], f[prv][j][k][1]); } if (j \u0026lt; m \u0026amp;\u0026amp; a[i] == b[j]) { for (int k = 0; k \u0026lt;= j \u0026amp;\u0026amp; k \u0026lt;= l; ++ k) { if (f[prv][j][k][0] \u0026amp;\u0026amp; k \u0026lt; l) mInc(f[cur][j + 1][k + 1][1], f[prv][j][k][0]); if (f[prv][j][k][1]) { if (k \u0026lt; l) mInc(f[cur][j + 1][k + 1][1], f[prv][j][k][1]); mInc(f[cur][j + 1][k][1], f[prv][j][k][1]); } } } } } printf(\u0026quot;%d\\n\u0026quot;, (f[cur][m][l][0] + f[cur][m][l][1])% mod); }\n","permalink":"/code/dbimport_260/","summary":"// Source code from laekov at noip 2015 day2 #define PRID \u0026ldquo;substring\u0026rdquo; #include #include #include using namespace std;\nconst int maxa = 2003; const int maxb = 203; const int mod = 1e9 + 7;\nint n, m, l, f[2][maxb][maxb][2]; char a[maxa], b[maxb];\n#define mInc(a,b) { a += b; if (a \u0026gt;= mod) a -= mod; }\nint main() { freopen(PRID \u0026ldquo;.in\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); freopen(PRID \u0026ldquo;.out\u0026rdquo;, \u0026ldquo;w\u0026rdquo;, stdout);\nscanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;n, \u0026amp;m, \u0026amp;l); scanf(\u0026quot;%s%s\u0026quot;, a, b); memset(f, 0, sizeof(f)); int cur(0), prv(1); f[cur][0][0][0] = 1; for (int i = 0; i \u0026lt; n; ++ i) { swap(cur, prv); memset(f[cur], 0, sizeof(f[cur])); for (int j = 0; j \u0026lt;= m; ++ j) { for (int k = 0; k \u0026lt;= j \u0026amp;\u0026amp; k \u0026lt;= l; ++ k) { if (f[prv][j][k][0]) mInc(f[cur][j][k][0], f[prv][j][k][0]); if (f[prv][j][k][1]) mInc(f[cur][j][k][0], f[prv][j][k][1]); } if (j \u0026lt; m \u0026amp;\u0026amp; a[i] == b[j]) { for (int k = 0; k \u0026lt;= j \u0026amp;\u0026amp; k \u0026lt;= l; ++ k) { if (f[prv][j][k][0] \u0026amp;\u0026amp; k \u0026lt; l) mInc(f[cur][j + 1][k + 1][1], f[prv][j][k][0]); if (f[prv][j][k][1]) { if (k \u0026lt; l) mInc(f[cur][j + 1][k + 1][1], f[prv][j][k][1]); mInc(f[cur][j + 1][k][1], f[prv][j][k][1]); } } } } } printf(\u0026quot;%d\\n\u0026quot;, (f[cur][m][l][0] + f[cur][m][l][1])% mod); }","title":"noip2015_substring.cc"},{"content":"水水的dp.压一维状态表示上一个字母到底有没有被用就可以算出子串数了.\n然后会mle就滚一维呗.有高一小朋友不知道2333.\n似乎会卡常数23333.\n","permalink":"/oi/dbimport_266/","summary":"水水的dp.压一维状态表示上一个字母到底有没有被用就可以算出子串数了.\n然后会mle就滚一维呗.有高一小朋友不知道2333.\n似乎会卡常数23333.","title":"noip2015 substring"},{"content":"// Source code from laekov at noip 2015 day2 #define PRID \u0026ldquo;stone\u0026rdquo; #include #include #include using namespace std;\nconst int maxn = 50003;\nint n, m, l, a[maxn];\nint checkStone(int lt) { int s(0), po(0); for (int i = 0; i \u0026lt; n; ++ i) if (a[i] - po \u0026gt;= lt) po = a[i]; else ++ s; if (l - po \u0026lt; lt) ++ s; return s; }\nint main() { freopen(PRID \u0026ldquo;.in\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); freopen(PRID \u0026ldquo;.out\u0026rdquo;, \u0026ldquo;w\u0026rdquo;, stdout);\nscanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;l, \u0026amp;n, \u0026amp;m); for (int i = 0; i \u0026lt; n; ++ i) scanf(\u0026quot;%d\u0026quot;, a + i); int le(0), re(l); while (le \u0026lt; re) { int md((le + re + 1) \u0026gt;\u0026gt; 1); if (checkStone(md) \u0026gt; m) re = md - 1; else le = md; } printf(\u0026quot;%d\\n\u0026quot;, le); }\n","permalink":"/code/dbimport_259/","summary":"// Source code from laekov at noip 2015 day2 #define PRID \u0026ldquo;stone\u0026rdquo; #include #include #include using namespace std;\nconst int maxn = 50003;\nint n, m, l, a[maxn];\nint checkStone(int lt) { int s(0), po(0); for (int i = 0; i \u0026lt; n; ++ i) if (a[i] - po \u0026gt;= lt) po = a[i]; else ++ s; if (l - po \u0026lt; lt) ++ s; return s; }\nint main() { freopen(PRID \u0026ldquo;.","title":"noip2015_stone.cc"},{"content":"水水的二分答案.\n想四年前classroom还属于思考题.现在就已经沦落到开场题的地步了.oi界发展迅速啊.\n然而真的不是3分钟搞定?\n","permalink":"/oi/dbimport_265/","summary":"水水的二分答案.\n想四年前classroom还属于思考题.现在就已经沦落到开场题的地步了.oi界发展迅速啊.\n然而真的不是3分钟搞定?","title":"noip2015 stone"},{"content":"// Source code from laekov at noip 2015 day1 #define PRID \u0026ldquo;landlords\u0026rdquo; #include #include #include using namespace std;\nconst int maxn = 17;\nint t, n, a[maxn], ans, c;\nint readCard() { int x, y; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;x, \u0026amp;y); if (x == 0) return 12 + y; else if (x == 1) return 11; else if (x == 2) return 12; else return x - 3; }\nvoid checkCtn(int, int, int, int);\nvoid DFS(int cu, int lm) { if (lm == 13) { if (a[13] || a[14]) ans = min(ans, cu + 1); else ans = min(ans, cu); return; } if (cu + c \u0026lt; ans) ans = cu + c; if (cu \u0026gt;= ans) return; if (!a[lm]) { DFS(cu, lm + 1); return; } if (a[lm] \u0026gt;= 1) checkCtn(lm, 1, 5, cu); if (a[lm] \u0026gt;= 2) checkCtn(lm, 2, 3, cu); if (a[lm] \u0026gt;= 3) checkCtn(lm, 3, 2, cu); if (a[lm] \u0026gt;= 4) { c -= 4; a[lm] -= 4; for (int i = lm; i \u0026lt; 15; ++ i) { if (a[i] \u0026gt;= 2) { a[i] -= 2, c -= 2; DFS(cu + 1, lm); a[i] += 2, c += 2; for (int j = i + 1; j \u0026lt; 15; ++ j) if (a[j] \u0026gt;= 2) { a[i] -= 2, a[j] -= 2, c -= 4; DFS(cu + 1, lm); a[i] += 2, a[j] += 2, c += 4; } } if (a[i] \u0026gt;= 1) { for (int j = i + 1; j \u0026lt; 15; ++ j) if (a[j] \u0026gt;= 1) { a[i] -= 1, a[j] -= 1, c -= 2; DFS(cu + 1, lm); a[i] += 1, a[j] += 1, c += 2; } } } DFS(cu + 1, lm); c += 4; a[lm] += 4; } if (a[lm] \u0026gt;= 3) { c -= 3; a[lm] -= 3; for (int i = lm + 1; i \u0026lt; 15; ++ i) { if (a[i] \u0026gt;= 2) { a[i] -= 2, c -= 2; DFS(cu + 1, lm); a[i] += 2, c += 2; } if (a[i] \u0026gt;= 1) { a[i] -= 1, c -= 1; DFS(cu + 1, lm); a[i] += 1, c += 1; } } DFS(cu + 1, lm); c += 3; a[lm] += 3; } if (a[lm] \u0026gt;= 2) { c -= 2; a[lm] -= 2; for (int i = lm + 1; i \u0026lt; 13; ++ i) { if (a[i] \u0026gt;= 3) { a[i] -= 3, c -= 3; DFS(cu + 1, lm); a[i] += 3, c += 3; } if (a[i] \u0026gt;= 4) { a[i] -= 4, c -= 4; for (int j = lm + 1; j \u0026lt; 13; ++ j) if (a[j] \u0026gt;= 2) { a[j] -= 2, c -= 2; DFS(cu + 1, lm); a[j] += 2, c += 2; } DFS(cu + 1, lm); a[i] += 4, c += 4; } } DFS(cu + 1, lm); c += 2; a[lm] += 2; } if (a[lm] \u0026gt;= 1) { c -= 1; a[lm] -= 1; for (int i = lm + 1; i \u0026lt; 13; ++ i) { if (a[i] \u0026gt;= 3) { a[i] -= 3, c -= 3; DFS(cu + 1, lm); a[i] += 3, c += 3; } if (a[i] \u0026gt;= 4) { a[i] -= 4, c -= 4; for (int j = lm + 1; j \u0026lt; 13; ++ j) if (a[j] \u0026gt;= 1) { a[j] -= 1, c -= 1; DFS(cu + 1, lm); a[j] += 1, c += 1; } a[i] += 4, c += 4; } } DFS(cu + 1, lm); c += 1; a[lm] += 1; } }\nvoid checkCtn(int lm, int cnt, int lt, int cu) { if (lm + lt - 1 \u0026gt;= 12) return; int ep(lm); for (ep = lm; ep \u0026lt; 12; ++ ep) { if (a[ep] \u0026lt; cnt) break; c -= cnt; a[ep] -= cnt; if (ep - lm + 1 \u0026gt;= lt) DFS(cu + 1, lm); } for (int i = lm; i \u0026lt; ep; ++ i) a[i] += cnt; c += (ep - lm) * cnt; }\nint main() { freopen(PRID \u0026ldquo;.in\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); freopen(PRID \u0026ldquo;.out\u0026rdquo;, \u0026ldquo;w\u0026rdquo;, stdout);\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;t, \u0026amp;n); while (t --) { memset(a, 0, sizeof(a)); c = n; for (int i = 0; i \u0026lt; n; ++ i) ++ a[readCard()]; ans = n; DFS(0, 0); printf(\u0026quot;%d\\n\u0026quot;, ans); } }\n","permalink":"/code/dbimport_256/","summary":"// Source code from laekov at noip 2015 day1 #define PRID \u0026ldquo;landlords\u0026rdquo; #include #include #include using namespace std;\nconst int maxn = 17;\nint t, n, a[maxn], ans, c;\nint readCard() { int x, y; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;x, \u0026amp;y); if (x == 0) return 12 + y; else if (x == 1) return 11; else if (x == 2) return 12; else return x - 3; }\nvoid checkCtn(int, int, int, int);","title":"noip2015_landlords.cc"},{"content":"day1考的农业题.据说可以状压然而退役的laekov已经不会写状压了(雾.\n于是直接dfs就好了啊23333\n每次搜索的时候强制把当前点数最小的牌出掉至少一张.这样时间复杂度/=答案!.然后就完辣.\n","permalink":"/oi/dbimport_262/","summary":"day1考的农业题.据说可以状压然而退役的laekov已经不会写状压了(雾.\n于是直接dfs就好了啊23333\n每次搜索的时候强制把当前点数最小的牌出掉至少一张.这样时间复杂度/=答案!.然后就完辣.","title":"noip2015 landlords"},{"content":"// Source code from laekov at noip 2015 day1 #define PRID \u0026ldquo;message\u0026rdquo; #include #include #include using namespace std;\nconst int maxn = 200003;\nint ans, n, t[maxn], d[maxn], v[maxn];\nint walk(int po) { if (d[po]) return n; int p(po); d[p] = 1; v[p] = po; while (p) if (!d[t[p]]) { d[t[p]] = d[p] + 1; v[t[p]] = po; p = t[p]; } else if (v[t[p]] == po) return d[p] - d[t[p]] + 1; else return n; return n; }\nint main() { freopen(PRID \u0026ldquo;.in\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); freopen(PRID \u0026ldquo;.out\u0026rdquo;, \u0026ldquo;w\u0026rdquo;, stdout);\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); for (int i = 1; i \u0026lt;= n; ++ i) scanf(\u0026quot;%d\u0026quot;, t + i); memset(v, 0, sizeof(v)); memset(d, 0, sizeof(d)); ans = n; for (int i = 1, g; i \u0026lt;= n; ++ i) if ((g = walk(i)) \u0026lt; ans) ans = g; printf(\u0026quot;%d\\n\u0026quot;, ans); }\n","permalink":"/code/dbimport_258/","summary":"// Source code from laekov at noip 2015 day1 #define PRID \u0026ldquo;message\u0026rdquo; #include #include #include using namespace std;\nconst int maxn = 200003;\nint ans, n, t[maxn], d[maxn], v[maxn];\nint walk(int po) { if (d[po]) return n; int p(po); d[p] = 1; v[p] = po; while (p) if (!d[t[p]]) { d[t[p]] = d[p] + 1; v[t[p]] = po; p = t[p]; } else if (v[t[p]] == po) return d[p] - d[t[p]] + 1; else return n; return n; }","title":"noip2015_message.cc"},{"content":"依然是水水的题.\n基环内向树.从任意点开走要么是o型环要么是ρ型环.\n那些写bfs的是啥心态.非要展示代码能力么.\n以及谁说没考数论的?这题不就是\u0026quot;泼辣的肉\u0026quot;的推广(雾.\n","permalink":"/oi/dbimport_264/","summary":"依然是水水的题.\n基环内向树.从任意点开走要么是o型环要么是ρ型环.\n那些写bfs的是啥心态.非要展示代码能力么.\n以及谁说没考数论的?这题不就是\u0026quot;泼辣的肉\u0026quot;的推广(雾.","title":"noip2015 message"},{"content":"// Source code from laekov at noip 2015 day1 #define PRID \u0026ldquo;magic\u0026rdquo; #include #include #include using namespace std;\nconst int maxn = 41;\nint n, a[maxn][maxn], px[maxn * maxn], py[maxn * maxn];\nint main() { freopen(PRID \u0026ldquo;.in\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); freopen(PRID \u0026ldquo;.out\u0026rdquo;, \u0026ldquo;w\u0026rdquo;, stdout);\nmemset(a, -1, sizeof(a)); scanf(\u0026quot;%d\u0026quot;, \u0026amp;n); px[1] = 1; py[1] = (n + 1) \u0026gt;\u0026gt; 1; a[px[1]][py[1]] = 1; for (int i = 2; i \u0026lt;= n * n; ++ i) { if (px[i - 1] == 1 \u0026amp;\u0026amp; py[i - 1] \u0026lt; n) px[i] = n, py[i] = py[i - 1] + 1; else if (py[i - 1] == n \u0026amp;\u0026amp; px[i - 1] \u0026gt; 1) px[i] = px[i - 1] - 1, py[i] = 1; else if (px[i - 1] == 1 \u0026amp;\u0026amp; py[i - 1] == n) px[i] = 2, py[i] = n; else if (a[px[i - 1] - 1][py[i - 1] + 1] == -1) px[i] = px[i - 1] - 1, py[i] = py[i - 1] + 1; else px[i] = px[i - 1] + 1, py[i] = py[i - 1]; a[px[i]][py[i]] = i; } for (int i = 1; i \u0026lt;= n; ++ i) for (int j = 1; j \u0026lt;= n; ++ j) printf(\u0026quot;%d%c\u0026quot;, a[i][j], (j == n) ? 10 : 32); }\n","permalink":"/code/dbimport_257/","summary":"// Source code from laekov at noip 2015 day1 #define PRID \u0026ldquo;magic\u0026rdquo; #include #include #include using namespace std;\nconst int maxn = 41;\nint n, a[maxn][maxn], px[maxn * maxn], py[maxn * maxn];\nint main() { freopen(PRID \u0026ldquo;.in\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); freopen(PRID \u0026ldquo;.out\u0026rdquo;, \u0026ldquo;w\u0026rdquo;, stdout);\nmemset(a, -1, sizeof(a)); scanf(\u0026quot;%d\u0026quot;, \u0026amp;n); px[1] = 1; py[1] = (n + 1) \u0026gt;\u0026gt; 1; a[px[1]][py[1]] = 1; for (int i = 2; i \u0026lt;= n * n; ++ i) { if (px[i - 1] == 1 \u0026amp;\u0026amp; py[i - 1] \u0026lt; n) px[i] = n, py[i] = py[i - 1] + 1; else if (py[i - 1] == n \u0026amp;\u0026amp; px[i - 1] \u0026gt; 1) px[i] = px[i - 1] - 1, py[i] = 1; else if (px[i - 1] == 1 \u0026amp;\u0026amp; py[i - 1] == n) px[i] = 2, py[i] = n; else if (a[px[i - 1] - 1][py[i - 1] + 1] == -1) px[i] = px[i - 1] - 1, py[i] = py[i - 1] + 1; else px[i] = px[i - 1] + 1, py[i] = py[i - 1]; a[px[i]][py[i]] = i; } for (int i = 1; i \u0026lt;= n; ++ i) for (int j = 1; j \u0026lt;= n; ++ j) printf(\u0026quot;%d%c\u0026quot;, a[i][j], (j == n) ?","title":"noip2015_magic.cc"},{"content":"noip成绩终于出来辣可以水水地写个题解辣.假装窝还是在更新窝的网站嘛.\n\u0026ldquo;这么水的题还要写题解?\u0026rdquo;\n\u0026ldquo;对不起嘛,laekov是noi才ag弱渣嘛.\u0026rdquo;\n3分钟题ovo.\n","permalink":"/oi/dbimport_263/","summary":"noip成绩终于出来辣可以水水地写个题解辣.假装窝还是在更新窝的网站嘛.\n\u0026ldquo;这么水的题还要写题解?\u0026rdquo;\n\u0026ldquo;对不起嘛,laekov是noi才ag弱渣嘛.\u0026rdquo;\n3分钟题ovo.","title":"noip2015 magic"},{"content":"这东西是写给jxfls的学弟学妹们的.cdqz众好好听毛教授的话就行了不要管窝.\n写这个的目的是窝作为一个过来人对于泥萌进省队或者拿noi的Au给一点建议.(然而窝也没有noi的Au,所以泥也可以当窝是在口糊)\n首先要明确一下这有什么好处.如果进了省队且noi至少拿了Cu(70%诶,sc算是中强省所以会有不少人垫背的),那么会有学校和泥签约.比如考上一本就可以被某校录取.某校嘛好点的比如pku,thu,sjtu,fdu,再有uestc,zju之类的.然后如果拿了Au(即前50),就可以被点招,高考0分上thu(或者泥愿意去pku啥的也行).\n毕竟是jxfls出来的.在jxfls若干年也没有见过进省队的.窝想如果jxfls出现至少一个省队,那oi在学校里的地位也许就不一样了.说不定就能进入某种良性循环.如果能出noi的Au,规律是有一就有二,然后有三.毕竟Au爷可以不用高考,而是可以把精力放在冲国家队和提携后辈身上.如此往复.也许这要等很多届.也许永远也不能成功.不过这也算是窝曾经的心愿了吧.这篇文就算是窝尽一点绵薄之力了吧.\n其实这件事在jxfls这种难以停课的地方并不容易.cdqz众多半从高二开学就不上文化课了.经过若干个月全力以赴的oi学习,水平自然是不同的.所以泥萌更要抓紧时间.\n首先泥要意识到泥有多弱.noip在省选中占30%.泥可以把noip里高三的刨开之后看一看泥在能进省队的人里排在什么位置.也许很多人曾经以为noip一等就是终点.其实它是起点.所以说不要认为自己很厉害.省内,在cdqz,在南山,在绵中\u0026hellip;在省外\u0026hellip;有很多比泥萌厉害得多的人.他们中也有一部分很乐于与泥萌交流.要把握这样的机会,去和强者交流.\n另外泥萌也要明白一点,教练不考noi.所以自己的路还得自己走.仅仅跟着教练是得不到好成绩的.个人经验,oi就是靠题目堆出来的.在不停地想题写题中找到不会的算法和数据结构,然后不断完善.\n针对省选和noi做题推荐bzoj,又称lydsy.虽然分类什么的比较乱但是题目质量和数量都比较好.而且刷的人多.窝在高二省选时似乎有700道.窝认为如果泥能刷400+道非水题的话省选就能比较有底气了.至于不会的题也不一定要去硬纠结.去网上搜一搜别人博客里的题解,提高一下知识水平,再去敲敲练练代码能力也是极好的.至于哪些题可做的话可以每页按通过人数排序,或者找个前辈的记录跟着做.有些题的确是没法做的.至于bestcoder啊codeforces啊这样的在线比赛如果有时间也可以多参加一下,很能培养参加比赛的感觉.反正自己要努力就好了.\n顺便提一下建议多使用linux.我指的是命令行.在bash里完成一切操作,用vim(或者emacs,nano啥的,反正我是vim党)写代码,用g++编译.虽然看上去没啥不同也许最初还会很不适应,但是这对养成好的编程习惯和未来参加noi有好处.\n然后考试的时候也别太关注别人在干什么(比如窝在泥旁边打扫雷),干好自己的事就行了.\n以上.总之祝你们好运.\n再另外虽然窝是一只高三党,窝还是很乐于与泥萌交流的.\n","permalink":"/oi/dbimport_112/","summary":"这东西是写给jxfls的学弟学妹们的.cdqz众好好听毛教授的话就行了不要管窝.\n写这个的目的是窝作为一个过来人对于泥萌进省队或者拿noi的Au给一点建议.(然而窝也没有noi的Au,所以泥也可以当窝是在口糊)\n首先要明确一下这有什么好处.如果进了省队且noi至少拿了Cu(70%诶,sc算是中强省所以会有不少人垫背的),那么会有学校和泥签约.比如考上一本就可以被某校录取.某校嘛好点的比如pku,thu,sjtu,fdu,再有uestc,zju之类的.然后如果拿了Au(即前50),就可以被点招,高考0分上thu(或者泥愿意去pku啥的也行).\n毕竟是jxfls出来的.在jxfls若干年也没有见过进省队的.窝想如果jxfls出现至少一个省队,那oi在学校里的地位也许就不一样了.说不定就能进入某种良性循环.如果能出noi的Au,规律是有一就有二,然后有三.毕竟Au爷可以不用高考,而是可以把精力放在冲国家队和提携后辈身上.如此往复.也许这要等很多届.也许永远也不能成功.不过这也算是窝曾经的心愿了吧.这篇文就算是窝尽一点绵薄之力了吧.\n其实这件事在jxfls这种难以停课的地方并不容易.cdqz众多半从高二开学就不上文化课了.经过若干个月全力以赴的oi学习,水平自然是不同的.所以泥萌更要抓紧时间.\n首先泥要意识到泥有多弱.noip在省选中占30%.泥可以把noip里高三的刨开之后看一看泥在能进省队的人里排在什么位置.也许很多人曾经以为noip一等就是终点.其实它是起点.所以说不要认为自己很厉害.省内,在cdqz,在南山,在绵中\u0026hellip;在省外\u0026hellip;有很多比泥萌厉害得多的人.他们中也有一部分很乐于与泥萌交流.要把握这样的机会,去和强者交流.\n另外泥萌也要明白一点,教练不考noi.所以自己的路还得自己走.仅仅跟着教练是得不到好成绩的.个人经验,oi就是靠题目堆出来的.在不停地想题写题中找到不会的算法和数据结构,然后不断完善.\n针对省选和noi做题推荐bzoj,又称lydsy.虽然分类什么的比较乱但是题目质量和数量都比较好.而且刷的人多.窝在高二省选时似乎有700道.窝认为如果泥能刷400+道非水题的话省选就能比较有底气了.至于不会的题也不一定要去硬纠结.去网上搜一搜别人博客里的题解,提高一下知识水平,再去敲敲练练代码能力也是极好的.至于哪些题可做的话可以每页按通过人数排序,或者找个前辈的记录跟着做.有些题的确是没法做的.至于bestcoder啊codeforces啊这样的在线比赛如果有时间也可以多参加一下,很能培养参加比赛的感觉.反正自己要努力就好了.\n顺便提一下建议多使用linux.我指的是命令行.在bash里完成一切操作,用vim(或者emacs,nano啥的,反正我是vim党)写代码,用g++编译.虽然看上去没啥不同也许最初还会很不适应,但是这对养成好的编程习惯和未来参加noi有好处.\n然后考试的时候也别太关注别人在干什么(比如窝在泥旁边打扫雷),干好自己的事就行了.\n以上.总之祝你们好运.\n再另外虽然窝是一只高三党,窝还是很乐于与泥萌交流的.","title":"Something for JXFLSers"},{"content":"结束了.嗯.\n人生中的最后一次noip,如从前所盼望那样结束了.\n前两题就那么敲一敲就好了.很久没有写过的动态规划呵呵哒.第三题第一反应是O(n*log3n)的二分答案套树链剖分,虽然显然会死.很奇怪afo这么久了还是没有忘记这些东西.敲邻接表和倍增lca的时候似乎找到了一点从前当码农的感觉.虽然day2第三题的码农属性并没有day1强.然而,呵呵哒.\n于是今天做完的时间似乎比昨天还早了一点点.随便乱拍一下就算了虽然发现写出了bug也不知道最后交上去的程序到底有没有把bug改掉.看到旁边的hht似乎还在思考,看到已经有人离场.于是,终于还是鼓起勇气走出去了.\n门外,阳光正好.\n于是在别人还在打代码和扫雷的时候窝就去uestc校园里闲逛.发现uestc有20+个网球场以及不知道多少个篮球场还有若干足球场.连游泳池都有至少3个.有地又有钱,壕无人性.真想搬几个回cdqz.这样中午打球班主任都找不到你在哪个场.呵呵哒.\n唉嗯于是诶.做作业大法好.\nHistorical Comments Unknown friend at 2016-01-04T21:40:46 @20151108: ss \u0026mdash;- lk_\nUnknown friend at 2016-01-04T21:40:46 @20151108: ss \u0026mdash;- lk_\n","permalink":"/diary/dbimport_091/","summary":"结束了.嗯.\n人生中的最后一次noip,如从前所盼望那样结束了.\n前两题就那么敲一敲就好了.很久没有写过的动态规划呵呵哒.第三题第一反应是O(n*log3n)的二分答案套树链剖分,虽然显然会死.很奇怪afo这么久了还是没有忘记这些东西.敲邻接表和倍增lca的时候似乎找到了一点从前当码农的感觉.虽然day2第三题的码农属性并没有day1强.然而,呵呵哒.\n于是今天做完的时间似乎比昨天还早了一点点.随便乱拍一下就算了虽然发现写出了bug也不知道最后交上去的程序到底有没有把bug改掉.看到旁边的hht似乎还在思考,看到已经有人离场.于是,终于还是鼓起勇气走出去了.\n门外,阳光正好.\n于是在别人还在打代码和扫雷的时候窝就去uestc校园里闲逛.发现uestc有20+个网球场以及不知道多少个篮球场还有若干足球场.连游泳池都有至少3个.有地又有钱,壕无人性.真想搬几个回cdqz.这样中午打球班主任都找不到你在哪个场.呵呵哒.\n唉嗯于是诶.做作业大法好.\nHistorical Comments Unknown friend at 2016-01-04T21:40:46 @20151108: ss \u0026mdash;- lk_\nUnknown friend at 2016-01-04T21:40:46 @20151108: ss \u0026mdash;- lk_","title":"20151108 noip2015 day2"},{"content":"noip诶.按照古老的习惯写点啥.\n早上看到了好多人.然而.\n最大的感受是uestc也被成都市区感染了.变成大工地了.印象中从窝出生开始成都市就是到处都是施工那个围墙的样子QwQ\n考试之前表示yjq一定能ak第一题一定是水题.\n然后进去之后发现自己好歹还是能打代码的虽然手速巨慢还不停地出错.\n旁边是hht感觉鸭梨山大.背后是hqy于是有一种窝会把学妹带坏的负罪感.\n前两题加起来不到18min.第三题想了一会开始敲然后开始找bug感觉自己萌萌哒.因为敲太快以及正确率太低结果把中括号和表达式打反了QwQ.\n试了下大样例试了下10组23张牌好像都没出事.于是决定弃疗.10点.比yjq晚了整整一个小时.真是所谓长江后浪推前浪,hja死在沙滩上.\n然后打扫雷俄罗斯方块贪吃蛇蜘蛛纸牌.事后被hqy怒斥.\n然后顺便研究了一下物理老师讲的塞贝尔曲线.必需两个都是sin否则是抛物线.把玩了一下参数方程然而没多大意思.然后图像有几层和x和y的sin的周期的lcm有关.试了一下大了之后可以画出迷之花纹.画出来的图美美哒.然而好像除了窝以外没有人注意这件事.\n然后就结束辣去年的老师用去年的口气劝窝们这种进来打游戏的人早点滚粗去.\n下午去学校.萌萌哒yzy帮窝改理综和数学.然后发现应该也许大概数学还不错.理科老师没批窝真是奇迹.\n然后英语彻底gg语文直接gg.\n然后听说yzy排名20+.窝坚定了再也不要听信yzy说自己考差了QwQ.\n于是晚上毫无做作业的动力QwQ\n泥萌明天加油.\n","permalink":"/diary/dbimport_090/","summary":"noip诶.按照古老的习惯写点啥.\n早上看到了好多人.然而.\n最大的感受是uestc也被成都市区感染了.变成大工地了.印象中从窝出生开始成都市就是到处都是施工那个围墙的样子QwQ\n考试之前表示yjq一定能ak第一题一定是水题.\n然后进去之后发现自己好歹还是能打代码的虽然手速巨慢还不停地出错.\n旁边是hht感觉鸭梨山大.背后是hqy于是有一种窝会把学妹带坏的负罪感.\n前两题加起来不到18min.第三题想了一会开始敲然后开始找bug感觉自己萌萌哒.因为敲太快以及正确率太低结果把中括号和表达式打反了QwQ.\n试了下大样例试了下10组23张牌好像都没出事.于是决定弃疗.10点.比yjq晚了整整一个小时.真是所谓长江后浪推前浪,hja死在沙滩上.\n然后打扫雷俄罗斯方块贪吃蛇蜘蛛纸牌.事后被hqy怒斥.\n然后顺便研究了一下物理老师讲的塞贝尔曲线.必需两个都是sin否则是抛物线.把玩了一下参数方程然而没多大意思.然后图像有几层和x和y的sin的周期的lcm有关.试了一下大了之后可以画出迷之花纹.画出来的图美美哒.然而好像除了窝以外没有人注意这件事.\n然后就结束辣去年的老师用去年的口气劝窝们这种进来打游戏的人早点滚粗去.\n下午去学校.萌萌哒yzy帮窝改理综和数学.然后发现应该也许大概数学还不错.理科老师没批窝真是奇迹.\n然后英语彻底gg语文直接gg.\n然后听说yzy排名20+.窝坚定了再也不要听信yzy说自己考差了QwQ.\n于是晚上毫无做作业的动力QwQ\n泥萌明天加油.","title":"20151107 noip2015 day1"},{"content":"明天就noip了呢.最后一年了.酱油.给后辈们以及曾经的战友们祈个福吧.\n一年又一年,血雨腥风还在轮回,我已然不是当初的我.只能搁浅在这结束了的沙滩上,默默地目送你们.\n难得一次走进科技楼,一楼刺鼻的化学药品味突然变得很好闻.相似的气氛,不一样的人.那是你们的世界,不是我的.\nmaya.唉,其实这些和窝又有什么关系呢.\n唉作为一个长者给泥萌讲点人生经验吧.uestc的win7稳定性不行常常会拍死机其实还是linux大法好虽然是虚拟机.然后少带点吃的多穿点衣服不要感冒了不然挺惨的.以及那句老话vim党不要随便按d.\n总之泥萌加油.yjq一定会ak的.\n对窝来说,重要的还是半期考试吧.尤其是数学啥的还是想翻个身啊.常年不考试怎么行呢?应该有周考才好哒233\n语文,感觉还不错,然后发现大家的选择题都不一样.\n数学,终于把所有题的所有问都做出来了对不对就不得而知了.然后只check了一个题只错了一个题,嘛.\n半期day1和day2的画风都变了.\n理综使用了科学的做题顺序.生物比预计快了5min,化学慢了5min,物理被选择题卡了以至于大题没时间了QwQ于是第一个大题掉进了R的陷阱了啊v0不是*2啊QwQ打铃的时候还在解最后一题的方程啊wdc\n英语.Adam says, it is so easy!机选的确so easy.然而好多搭配啥的都只能靠语感猜了,paraphrase题表示无力了QwQ\n于是半期要跪了昂.yzy似乎要数次喂窝吃noi了啊真是excited.\nmaya要是给Adam的总结就写这熊东西就hhhhh\n","permalink":"/diary/dbimport_089/","summary":"明天就noip了呢.最后一年了.酱油.给后辈们以及曾经的战友们祈个福吧.\n一年又一年,血雨腥风还在轮回,我已然不是当初的我.只能搁浅在这结束了的沙滩上,默默地目送你们.\n难得一次走进科技楼,一楼刺鼻的化学药品味突然变得很好闻.相似的气氛,不一样的人.那是你们的世界,不是我的.\nmaya.唉,其实这些和窝又有什么关系呢.\n唉作为一个长者给泥萌讲点人生经验吧.uestc的win7稳定性不行常常会拍死机其实还是linux大法好虽然是虚拟机.然后少带点吃的多穿点衣服不要感冒了不然挺惨的.以及那句老话vim党不要随便按d.\n总之泥萌加油.yjq一定会ak的.\n对窝来说,重要的还是半期考试吧.尤其是数学啥的还是想翻个身啊.常年不考试怎么行呢?应该有周考才好哒233\n语文,感觉还不错,然后发现大家的选择题都不一样.\n数学,终于把所有题的所有问都做出来了对不对就不得而知了.然后只check了一个题只错了一个题,嘛.\n半期day1和day2的画风都变了.\n理综使用了科学的做题顺序.生物比预计快了5min,化学慢了5min,物理被选择题卡了以至于大题没时间了QwQ于是第一个大题掉进了R的陷阱了啊v0不是*2啊QwQ打铃的时候还在解最后一题的方程啊wdc\n英语.Adam says, it is so easy!机选的确so easy.然而好多搭配啥的都只能靠语感猜了,paraphrase题表示无力了QwQ\n于是半期要跪了昂.yzy似乎要数次喂窝吃noi了啊真是excited.\nmaya要是给Adam的总结就写这熊东西就hhhhh","title":"20151106"},{"content":"有事干就是爽.\n然而精神drug依然厉害.\n然而彼长此消不是什么好现象ovo\n也只能走一步算一步吧.\n唉唉.成天都在想什么呢.\n过两天似乎就要半期了似乎又要noip.高三就quarter了.\nnoip么,少年们加油.\n又想起了无聊的时候的某些assumption.hhhh.\n唉唉.\n","permalink":"/diary/dbimport_088/","summary":"有事干就是爽.\n然而精神drug依然厉害.\n然而彼长此消不是什么好现象ovo\n也只能走一步算一步吧.\n唉唉.成天都在想什么呢.\n过两天似乎就要半期了似乎又要noip.高三就quarter了.\nnoip么,少年们加油.\n又想起了无聊的时候的某些assumption.hhhh.\n唉唉.","title":"20151028"},{"content":"终于达成成就,撕下一张高考倒计时.然后就被窝用来打草稿了.\n化学进度好快,有时候有点根不上节奏.下课之后需要多思考一下.\n物理要开始复习电场了么?\n生物的预习计划有点空昂.\n三角函数题好难算.\n英语三生有幸地被赶出了分推班.然而其实窝的英语并不好.所以窝还是too young.\n晚自习下课发现某人赢于是受到成吨打击.然而最近V窝≈V打击.所以.\n唉ovo\n","permalink":"/diary/dbimport_087/","summary":"终于达成成就,撕下一张高考倒计时.然后就被窝用来打草稿了.\n化学进度好快,有时候有点根不上节奏.下课之后需要多思考一下.\n物理要开始复习电场了么?\n生物的预习计划有点空昂.\n三角函数题好难算.\n英语三生有幸地被赶出了分推班.然而其实窝的英语并不好.所以窝还是too young.\n晚自习下课发现某人赢于是受到成吨打击.然而最近V窝≈V打击.所以.\n唉ovo","title":"20151014"},{"content":"终于学会了三角函数积化和差和差化积感觉自己萌萌哒.\n然后就算错了一堆东西.数学分推被某cj和某ysy怒嘲讽.\n物理动能那个卷子几乎全错影响心情昂.然后发现做得太急以至于没有考虑任何细节.\n都没啥时间做化学作业了QwQ.\n然后在不知情的情况下被走上了补课这条路.某\u0026quot;窝萌不管泥学习上的事\u0026quot;的势力反正还是露出了马脚虽然早就看穿了.\n唉闲着也是闲着补补课也挺好总比吸食精神drug有用.\n唉所以窝啊,还是young.\n","permalink":"/diary/dbimport_086/","summary":"终于学会了三角函数积化和差和差化积感觉自己萌萌哒.\n然后就算错了一堆东西.数学分推被某cj和某ysy怒嘲讽.\n物理动能那个卷子几乎全错影响心情昂.然后发现做得太急以至于没有考虑任何细节.\n都没啥时间做化学作业了QwQ.\n然后在不知情的情况下被走上了补课这条路.某\u0026quot;窝萌不管泥学习上的事\u0026quot;的势力反正还是露出了马脚虽然早就看穿了.\n唉闲着也是闲着补补课也挺好总比吸食精神drug有用.\n唉所以窝啊,还是young.","title":"20151013"},{"content":"想想连上七天课也就是连上六天课多一天.\n物理卷子神马的.居然能把题算出来了虽然不知道有木有算对.突然对动能守衡有了一点点信心.\n周末作业还没碰明天有noip初赛.祝我平安.\n晚上某s老师啊不窝应该叫s奶奶对窝进行思想教育.考一本没有那么容易.其实窝一直知道这件事只是总是不愿意承认QwQ\n老师表示窝应该重点加强物理和数学.数学要上135理综至少240.其实没有多次的考试窝还真没有什么感觉.不过反正月考的数学和理综绝对是不满意的.\n化学生物英语啥啊还是要有自信.虽然缺的知识点啥的都应该认真对待.至于语文嘛这个暂时抓不出啥分来QwQ.\n然后知识上应该会有一些漏洞,所以顺便安利窝思考是否去补课.老师相当用心相当敬业相当佩服.然而补课也是做题讲题窝倒是觉得找到不会的东西然后直接刷然后对答案比较有效.当然这是oi的经验也不一定对.\n还有上课听讲的问题.唉这似乎是上高中之后比较痛的事.也许初中就有点趋势了?试图认真听课吧.\n另外关于时间安排窝的确是太浪了一些啊.以后要少碰电脑反正也没干啥正事.然后也要考虑额外多做一些题毕竟缺的东西不能仅以完成作业为限度.其实说放弃一切只盯高考这句话也是有一定道理的.另一方面窝似乎除了高考也没事可做啊.嗯所以晚上做数学题这件事就这么定了.然后晚上回家少和娘亲摆点龙门阵.\n再另外就是那八个字了,目标,现状,计划,落实.说起来简单做起来还需要努力.\n至于oi失利啥的其实也差不多想通了吧.反正也是和我没有关系的事情了.想它作甚.\n再然后高考考的什么?技巧,实力,应变,心态.不过现在也不是应考的阶段.虽然要盯着高考不过心态不能太功利.一口吃不成胖子.还得慢慢来.\n唉唉居然写了这么多.反正还是要拿分数说话才是硬道理啊.要有尊严地进入大学QwQ.\n唉唉窝太弱了.\n","permalink":"/diary/dbimport_085/","summary":"想想连上七天课也就是连上六天课多一天.\n物理卷子神马的.居然能把题算出来了虽然不知道有木有算对.突然对动能守衡有了一点点信心.\n周末作业还没碰明天有noip初赛.祝我平安.\n晚上某s老师啊不窝应该叫s奶奶对窝进行思想教育.考一本没有那么容易.其实窝一直知道这件事只是总是不愿意承认QwQ\n老师表示窝应该重点加强物理和数学.数学要上135理综至少240.其实没有多次的考试窝还真没有什么感觉.不过反正月考的数学和理综绝对是不满意的.\n化学生物英语啥啊还是要有自信.虽然缺的知识点啥的都应该认真对待.至于语文嘛这个暂时抓不出啥分来QwQ.\n然后知识上应该会有一些漏洞,所以顺便安利窝思考是否去补课.老师相当用心相当敬业相当佩服.然而补课也是做题讲题窝倒是觉得找到不会的东西然后直接刷然后对答案比较有效.当然这是oi的经验也不一定对.\n还有上课听讲的问题.唉这似乎是上高中之后比较痛的事.也许初中就有点趋势了?试图认真听课吧.\n另外关于时间安排窝的确是太浪了一些啊.以后要少碰电脑反正也没干啥正事.然后也要考虑额外多做一些题毕竟缺的东西不能仅以完成作业为限度.其实说放弃一切只盯高考这句话也是有一定道理的.另一方面窝似乎除了高考也没事可做啊.嗯所以晚上做数学题这件事就这么定了.然后晚上回家少和娘亲摆点龙门阵.\n再另外就是那八个字了,目标,现状,计划,落实.说起来简单做起来还需要努力.\n至于oi失利啥的其实也差不多想通了吧.反正也是和我没有关系的事情了.想它作甚.\n再然后高考考的什么?技巧,实力,应变,心态.不过现在也不是应考的阶段.虽然要盯着高考不过心态不能太功利.一口吃不成胖子.还得慢慢来.\n唉唉居然写了这么多.反正还是要拿分数说话才是硬道理啊.要有尊严地进入大学QwQ.\n唉唉窝太弱了.","title":"20151010"},{"content":"又练迷之操.槽点略多.\n于是继续颓没救了.\n把柜子的锁随便搞了个密码然后就搞忘了byebye\n没救了.\n","permalink":"/diary/dbimport_084/","summary":"又练迷之操.槽点略多.\n于是继续颓没救了.\n把柜子的锁随便搞了个密码然后就搞忘了byebye\n没救了.","title":"20151009"},{"content":"ovoovooovoovoovovoovovoovo\n月考无故英语成绩被吃成缺考.英语年排528总分年排501.爽.英语可是窝得分最多的一门学科了.\n于是光荣倒数rank1还被单列粗来了.闷声wdc.\n加上英语的分算起来似乎能上一本线了.然而听说一起退役的hobo和lyx的成绩之后感觉窝还是太naïve了.毕竟窝是天天颓别人是天天补课.\n反正就这样辣也没啥希望也没机会搞啥全省前5.\n倒是数学物理得努把力不然颜面何存.\n早上a老师痛批,现在发展最撇的就是当初中考640+的那些人.躺枪*1.\n晚自习某些人跑出教室去浪被a老师水表,a老师表示jxfls众发展不好.躺枪*2.\n反正就是窝太弱所以要多背锅.\n","permalink":"/diary/dbimport_083/","summary":"ovoovooovoovoovovoovovoovo\n月考无故英语成绩被吃成缺考.英语年排528总分年排501.爽.英语可是窝得分最多的一门学科了.\n于是光荣倒数rank1还被单列粗来了.闷声wdc.\n加上英语的分算起来似乎能上一本线了.然而听说一起退役的hobo和lyx的成绩之后感觉窝还是太naïve了.毕竟窝是天天颓别人是天天补课.\n反正就这样辣也没啥希望也没机会搞啥全省前5.\n倒是数学物理得努把力不然颜面何存.\n早上a老师痛批,现在发展最撇的就是当初中考640+的那些人.躺枪*1.\n晚自习某些人跑出教室去浪被a老师水表,a老师表示jxfls众发展不好.躺枪*2.\n反正就是窝太弱所以要多背锅.","title":"20151008"},{"content":"唉唉.\n深感数学物理渣的悲伤.\n生物II卷很惨.虽然勉强理综上了200.化学劳苦功高.完全没想到会考必修3.植物激素生态系统跪跪跪.抵抗力稳定性写成抗力稳定性,吲哚乙酸写成引哚,遗传题直接炸.唉.\n\u0026ldquo;你已经差到和平行班的普通学生一个水平了\u0026rdquo;.才意识到我似乎是实验班的.\n语文反正就是那样感觉阅读给分给得比较良心.\n于是总分似乎骑在了线上.(要是线是meizi该多好)\n毕竟窝太弱啦.天天颓颓颓QwQ\n","permalink":"/diary/dbimport_082/","summary":"唉唉.\n深感数学物理渣的悲伤.\n生物II卷很惨.虽然勉强理综上了200.化学劳苦功高.完全没想到会考必修3.植物激素生态系统跪跪跪.抵抗力稳定性写成抗力稳定性,吲哚乙酸写成引哚,遗传题直接炸.唉.\n\u0026ldquo;你已经差到和平行班的普通学生一个水平了\u0026rdquo;.才意识到我似乎是实验班的.\n语文反正就是那样感觉阅读给分给得比较良心.\n于是总分似乎骑在了线上.(要是线是meizi该多好)\n毕竟窝太弱啦.天天颓颓颓QwQ","title":"20151007"},{"content":"出了一些成绩 ovoovo\n数学物理qwq暴了.sf狂虐窝啊.窝是要被批斗的节奏啊.毕竟sf太强了窝太弱了.\n数学是各种不会然后发现自己沙比了.物理也差不多.\n英语作文作big死ovoovo感觉自己已经不会写英文了.\n语文阅读各种爽.反正都是那样以后有空去练练呗.\n下午练广场大妈群魔乱街舞啦啦横飞操合的音乐比较233.倒是引来了众人围观.\n唉唉太颓了qwq\n","permalink":"/diary/dbimport_081/","summary":"出了一些成绩 ovoovo\n数学物理qwq暴了.sf狂虐窝啊.窝是要被批斗的节奏啊.毕竟sf太强了窝太弱了.\n数学是各种不会然后发现自己沙比了.物理也差不多.\n英语作文作big死ovoovo感觉自己已经不会写英文了.\n语文阅读各种爽.反正都是那样以后有空去练练呗.\n下午练广场大妈群魔乱街舞啦啦横飞操合的音乐比较233.倒是引来了众人围观.\n唉唉太颓了qwq","title":"20151006"},{"content":"月考考完了.考得那么少好无聊.很想念初中的周考啊.\n某些科目似乎还是有那么一点点的进步的.不过考的内容比较局限.很多漏洞并没有暴露出来.\n化学似乎改得略水.不过窝也可以拿成绩鄙视人了真开心昂.\n理综时间还是不够ovoovo\n中午打篮球奇迹般地没有受伤.\n下午继续去排列鬼畜的啦啦操(窝又不是lala为啥要窝跳lala操ovoovo)动作各种羞耻.老师说会有白手套的时候窝第一反应是会穿公主裙.jiecao尽失QwQ.\n反正英语作文窝写的是In my opinion, such performances are completely foolish.不管嘛反正窝不在乎分.虽然英语很捉急.诶诶一向以为英语是强项的.错觉.\nyjq众在不远处打排球.唉ovo泥萌加油.\n反正窝太弱了ovo\n","permalink":"/diary/dbimport_080/","summary":"月考考完了.考得那么少好无聊.很想念初中的周考啊.\n某些科目似乎还是有那么一点点的进步的.不过考的内容比较局限.很多漏洞并没有暴露出来.\n化学似乎改得略水.不过窝也可以拿成绩鄙视人了真开心昂.\n理综时间还是不够ovoovo\n中午打篮球奇迹般地没有受伤.\n下午继续去排列鬼畜的啦啦操(窝又不是lala为啥要窝跳lala操ovoovo)动作各种羞耻.老师说会有白手套的时候窝第一反应是会穿公主裙.jiecao尽失QwQ.\n反正英语作文窝写的是In my opinion, such performances are completely foolish.不管嘛反正窝不在乎分.虽然英语很捉急.诶诶一向以为英语是强项的.错觉.\nyjq众在不远处打排球.唉ovo泥萌加油.\n反正窝太弱了ovo","title":"20151005"},{"content":"精神drug的破防能力是强啊.\n虽然后天是10月1号然而要月考.\n不过想到某些竞赛党似乎只休息一天就感觉休息三天真的好开心啊.\nCH3COOH的电离好神奇.廖老讲省10-3那段好后悔没录下来\n唉唉\n","permalink":"/diary/dbimport_079/","summary":"精神drug的破防能力是强啊.\n虽然后天是10月1号然而要月考.\n不过想到某些竞赛党似乎只休息一天就感觉休息三天真的好开心啊.\nCH3COOH的电离好神奇.廖老讲省10-3那段好后悔没录下来\n唉唉","title":"20150929"},{"content":"pho的人回来了一些.窝们班似乎进了俩.于是不算cho不算未定的mo一共已经有11个省队了.膝盖已烂.\n然而个人还是那个(noi)样子.比如周末忘了把化学作业带回家.\n溶液中的离子平衡似乎不太好玩.\nsh的pho省队太吓人了.hsefz的物理好丧心病狂啊.\n运动会似乎得跑长跑呢然而毫无练的动力和时间.\n唉唉ovo\n","permalink":"/diary/dbimport_078/","summary":"pho的人回来了一些.窝们班似乎进了俩.于是不算cho不算未定的mo一共已经有11个省队了.膝盖已烂.\n然而个人还是那个(noi)样子.比如周末忘了把化学作业带回家.\n溶液中的离子平衡似乎不太好玩.\nsh的pho省队太吓人了.hsefz的物理好丧心病狂啊.\n运动会似乎得跑长跑呢然而毫无练的动力和时间.\n唉唉ovo","title":"20150928"},{"content":"诶诶最近颓废得没边了.精神drug啊.\n必需得好好睡觉ovo必需limit.\n然而没事干啥?\n淦.\n不用左手小指打字好奇怪.\n","permalink":"/diary/dbimport_077/","summary":"诶诶最近颓废得没边了.精神drug啊.\n必需得好好睡觉ovo必需limit.\n然而没事干啥?\n淦.\n不用左手小指打字好奇怪.","title":"20150927"},{"content":"白天似乎在上课和自习(和吃饭).\n下象棋下到手机没电都没赢过一盘.\n发现很多时候还是做事太水了啊.如果认真一点会比较好.\n晚上看新闻各种神.\n反正不要想造个big news.\n","permalink":"/diary/dbimport_076/","summary":"白天似乎在上课和自习(和吃饭).\n下象棋下到手机没电都没赢过一盘.\n发现很多时候还是做事太水了啊.如果认真一点会比较好.\n晚上看新闻各种神.\n反正不要想造个big news.","title":"20150924"},{"content":"上学期的综合素质评价忘填了ovo于是一晚上强行写三篇.\n在手机上搞了个中国象棋,然后被新手难度ai虐了.果然是(智商)\u0026rsquo;\u0026lt;0.\n晚上向同桌学习如何转笔.一定是化学老师的话产生了负作用.不过develop一种新的转笔姿势的确需要不少时间ovo\n唉.\n","permalink":"/diary/dbimport_075/","summary":"上学期的综合素质评价忘填了ovo于是一晚上强行写三篇.\n在手机上搞了个中国象棋,然后被新手难度ai虐了.果然是(智商)\u0026rsquo;\u0026lt;0.\n晚上向同桌学习如何转笔.一定是化学老师的话产生了负作用.不过develop一种新的转笔姿势的确需要不少时间ovo\n唉.","title":"20150923"},{"content":"晚上睡觉的时候想到了一个词叫尊严.how to 有尊严地活着?思考熊.\n今天语文作业正好是孔雀东南飞,挺有感触的ovo\n还有啥安全教育平台,智障都能做出更好的网站.zf教育系统的东西总是最差的.\n唉窝还是太云依了.\n","permalink":"/diary/dbimport_074/","summary":"晚上睡觉的时候想到了一个词叫尊严.how to 有尊严地活着?思考熊.\n今天语文作业正好是孔雀东南飞,挺有感触的ovo\n还有啥安全教育平台,智障都能做出更好的网站.zf教育系统的东西总是最差的.\n唉窝还是太云依了.","title":"20150922"},{"content":"窝不适合打篮球啊.前天打球被班主任水表今天打球一跤滑倒差点没把手摔断ovoovo晚上回家擦I2的CH3COOH溶液不知道为啥那么痛ovoovo\n然后愉快地水作业.数学求导的部分还是挺难的ovo重点是不想算以及想不到\u0026hellip;\n天体运动似乎也许大概找到点感觉了?当年停了两周课然后变成白痴的经历还历历在目\u0026hellip;\n诶诶碎觉大法好.\n","permalink":"/diary/dbimport_073/","summary":"窝不适合打篮球啊.前天打球被班主任水表今天打球一跤滑倒差点没把手摔断ovoovo晚上回家擦I2的CH3COOH溶液不知道为啥那么痛ovoovo\n然后愉快地水作业.数学求导的部分还是挺难的ovo重点是不想算以及想不到\u0026hellip;\n天体运动似乎也许大概找到点感觉了?当年停了两周课然后变成白痴的经历还历历在目\u0026hellip;\n诶诶碎觉大法好.","title":"20150921"},{"content":"国耻诶.\n关于量子态的遗传问题si bi了一天昂.\n最后晚上放弃了做化学作业说服了cj.\n好疯啊.\n今天才星期五昂.\n","permalink":"/diary/dbimport_072/","summary":"国耻诶.\n关于量子态的遗传问题si bi了一天昂.\n最后晚上放弃了做化学作业说服了cj.\n好疯啊.\n今天才星期五昂.","title":"20150918"},{"content":"偶惊悉mhy在看窝的diary?诚惶诚恐.\n中午在教室造新闻的时候看到了mhyoj.\n看上去挺不错的.界面比窝的好看(TAT)也实现了我没写的problemset之类的功能.大概构架比hjaoj优越到不知道哪里去了.(hjaoj有过构架这种东西?)\n不过似乎有些地方有hjaoj的影子.(对窝就是在吐槽bbs)\n似乎还有挺多地方需要写昂(反正不是窝写2333).论嘴巴选手的优越性.\nhja的经验是一定要规划好接口.否则在已有的代码里面插东西会灰常痛苦.希望mhy考虑到了这一点.\n也很开心看到了粘贴交代码和stdio.窝之前一直坚持fileio的oj的原因是让大家养成随时文件输入输出的习惯.不过反正mhy也没这习惯ovo\n晚上的时候看到noip报名表.高三众还蛮有热情的开心.\n嗯然后晚上又玩晚了ovo\n噢对昂再加一句.点下面这个东西可以去评论区\u0026hellip;因为窝懒所以没有把评论粘到文章下面QwQ\n| click here\nv\n","permalink":"/diary/dbimport_071/","summary":"偶惊悉mhy在看窝的diary?诚惶诚恐.\n中午在教室造新闻的时候看到了mhyoj.\n看上去挺不错的.界面比窝的好看(TAT)也实现了我没写的problemset之类的功能.大概构架比hjaoj优越到不知道哪里去了.(hjaoj有过构架这种东西?)\n不过似乎有些地方有hjaoj的影子.(对窝就是在吐槽bbs)\n似乎还有挺多地方需要写昂(反正不是窝写2333).论嘴巴选手的优越性.\nhja的经验是一定要规划好接口.否则在已有的代码里面插东西会灰常痛苦.希望mhy考虑到了这一点.\n也很开心看到了粘贴交代码和stdio.窝之前一直坚持fileio的oj的原因是让大家养成随时文件输入输出的习惯.不过反正mhy也没这习惯ovo\n晚上的时候看到noip报名表.高三众还蛮有热情的开心.\n嗯然后晚上又玩晚了ovo\n噢对昂再加一句.点下面这个东西可以去评论区\u0026hellip;因为窝懒所以没有把评论粘到文章下面QwQ\n| click here\nv","title":"20150917"},{"content":"another plain day.\nstruggling without destination.\nmost familiar things are none of my business.\nwhat is my direction?\ngoodbye world.\n","permalink":"/diary/dbimport_070/","summary":"another plain day.\nstruggling without destination.\nmost familiar things are none of my business.\nwhat is my direction?\ngoodbye world.","title":"20150916"},{"content":"别人家的服务器有解析防护?\n数竞的某些同学回来了.突然觉得自己已经有点见惯生死的味道了.\n晚饭吃得很急.估计明天午饭也很惨烈.\nsmg.mssdj.\n","permalink":"/diary/dbimport_069/","summary":"别人家的服务器有解析防护?\n数竞的某些同学回来了.突然觉得自己已经有点见惯生死的味道了.\n晚饭吃得很急.估计明天午饭也很惨烈.\nsmg.mssdj.","title":"20150914"},{"content":"诶诶晚上越颓越晚了.要取消颓的计划了.\n下午去找奖状看到mhy在给高一上课.\nNothing belongs to the loser.\n数理化竞的同学羡慕我已经早早地签了.我羡慕他们还有chance.\n大概是因为竞赛对每个人的意义不太一样吧.反正早就和我没啥关系了.好好学习冲刺高考.\n物理分推,正确率还是一如既往的低.\n猛然发现自己应该做点进度之外的事?这些内容都是第二次过.\n唉我太弱了所以睡觉比较重要.\n","permalink":"/diary/dbimport_068/","summary":"诶诶晚上越颓越晚了.要取消颓的计划了.\n下午去找奖状看到mhy在给高一上课.\nNothing belongs to the loser.\n数理化竞的同学羡慕我已经早早地签了.我羡慕他们还有chance.\n大概是因为竞赛对每个人的意义不太一样吧.反正早就和我没啥关系了.好好学习冲刺高考.\n物理分推,正确率还是一如既往的低.\n猛然发现自己应该做点进度之外的事?这些内容都是第二次过.\n唉我太弱了所以睡觉比较重要.","title":"20150911"},{"content":"教师节快乐~(maya写这会有老师看么)\na plain day.\n晚上的时候给老师们发短信,收到的回复比较\u0026hellip;\n电解池比原电池有难度ovo\n发现课都听得懂反而有种惶恐.\n英语卷子不知是不是题太水错得少得不正常.\n晚上又颓osu没救了.\n世界晚安.\n","permalink":"/diary/dbimport_067/","summary":"教师节快乐~(maya写这会有老师看么)\na plain day.\n晚上的时候给老师们发短信,收到的回复比较\u0026hellip;\n电解池比原电池有难度ovo\n发现课都听得懂反而有种惶恐.\n英语卷子不知是不是题太水错得少得不正常.\n晚上又颓osu没救了.\n世界晚安.","title":"20150910"},{"content":"又把作业做完了.只求速度不求质量QwQ\n坐位体前曲开挂般地拿了32cm.一定是机子放水了.\n想给自己找点事干.除了写代码和玩.撕烤熊.\n","permalink":"/diary/dbimport_066/","summary":"又把作业做完了.只求速度不求质量QwQ\n坐位体前曲开挂般地拿了32cm.一定是机子放水了.\n想给自己找点事干.除了写代码和玩.撕烤熊.","title":"20150909"},{"content":"今天居然把作业做完了.分推功不可没.\n作业正确率趋于0.\n现在我就是班上最差的学生.从前还真没体验过这样的感觉呢.依然是那句,债多不愁.\n有点像两年前初三的时候那种行尸走肉(雾)的生活.虽然早就时殊世异了.\nmark.\n","permalink":"/diary/dbimport_065/","summary":"今天居然把作业做完了.分推功不可没.\n作业正确率趋于0.\n现在我就是班上最差的学生.从前还真没体验过这样的感觉呢.依然是那句,债多不愁.\n有点像两年前初三的时候那种行尸走肉(雾)的生活.虽然早就时殊世异了.\nmark.","title":"20150908"},{"content":"唉每天无聊就写点日记好了.虽然是乱七八糟sai bian da wang的东西.\n居然被老师表扬学习认真.想想也就是不想让自己闲下来吧.唉.\n反应热各种神清气爽,似乎反应热和原电池感觉还好?雾.\n反正就是感觉东西各种还能接受,然而做题挺捉鸡的.\n毕竟还年轻,还要好好学习.\n","permalink":"/diary/dbimport_064/","summary":"唉每天无聊就写点日记好了.虽然是乱七八糟sai bian da wang的东西.\n居然被老师表扬学习认真.想想也就是不想让自己闲下来吧.唉.\n反应热各种神清气爽,似乎反应热和原电池感觉还好?雾.\n反正就是感觉东西各种还能接受,然而做题挺捉鸡的.\n毕竟还年轻,还要好好学习.","title":"20150907"},{"content":"在学校做完作业,没能做到.似乎是第一次呢.几乎已经忘记作业是何物了.\n高三果然压力还是挺大.这还只是beginning呢.\n半年前被拉回来上课的时候也觉得压力挺大,烦得都要崩溃了.现在想起来,那时候,呵.生存状况异也.\n数理化生都在讲能听懂的内容,尚且如此狼狈.\n惊现现在cdqz有至少两个进程在写oj,还在同一天向我问了相同的问题.\n想起曾经说如果noi没退役就重写ojseven呢hhh\n语文课的时候付老问觉得没有成功美不美.几乎.\n唉通过作文课倒是明白了,不要老是把自己看得太高.人是利己的.也许坦率地承认会更好呢.虽然我缺的就是坦率.\n唉我成天都在想些啥啊.好好睡觉好好上课重要.\n","permalink":"/diary/dbimport_063/","summary":"在学校做完作业,没能做到.似乎是第一次呢.几乎已经忘记作业是何物了.\n高三果然压力还是挺大.这还只是beginning呢.\n半年前被拉回来上课的时候也觉得压力挺大,烦得都要崩溃了.现在想起来,那时候,呵.生存状况异也.\n数理化生都在讲能听懂的内容,尚且如此狼狈.\n惊现现在cdqz有至少两个进程在写oj,还在同一天向我问了相同的问题.\n想起曾经说如果noi没退役就重写ojseven呢hhh\n语文课的时候付老问觉得没有成功美不美.几乎.\n唉通过作文课倒是明白了,不要老是把自己看得太高.人是利己的.也许坦率地承认会更好呢.虽然我缺的就是坦率.\n唉我成天都在想些啥啊.好好睡觉好好上课重要.","title":"20150906"},{"content":"开学辣.\n入学考试意料之中地垫底.似乎本科线都悬.前路惨兮漫漫长.\n高三动员大会在我听来倒像是批斗hja大会.\n一年多来第一次在教室上晚自习.\n想到一个比喻.曾经是一堆愉快燃烧的干柴.在一盆水浇来的时候,没有成功地把让它们汽化.于是现在只能静静地等待着腐朽.\n想得更多的的倒不是高考而是未来.cst,现在看来s这条路我是走不下去的.t这种东西烂大街是必定的趋势.\n眼高手低.完全没有目标感.心里一片混乱,何谈前进.\n唉.\n","permalink":"/diary/dbimport_062/","summary":"开学辣.\n入学考试意料之中地垫底.似乎本科线都悬.前路惨兮漫漫长.\n高三动员大会在我听来倒像是批斗hja大会.\n一年多来第一次在教室上晚自习.\n想到一个比喻.曾经是一堆愉快燃烧的干柴.在一盆水浇来的时候,没有成功地把让它们汽化.于是现在只能静静地等待着腐朽.\n想得更多的的倒不是高考而是未来.cst,现在看来s这条路我是走不下去的.t这种东西烂大街是必定的趋势.\n眼高手低.完全没有目标感.心里一片混乱,何谈前进.\n唉.","title":"20150901"},{"content":"明天就开学了呢.不再有oier的特权,得去face everything.\n这个地方似乎充满了oi的东西,总有种让我伤心的气氛.唉,花了七年做一个梦.然后梦醒了.\n倒是保留下来些东西,比如这个网站.虽然退役后重新开通了qzone,但是已经不喜欢在qzone上发东西了.虽然没有人会care这里,但总归是自己家的感觉.\n暑假似乎就浪过去了.懒懒地待在家里补课和做作业.半路上就打开电脑开始颓或者倒在床上睡大觉,总也睡不够.虽然心里觉得不踏实,但也无能为力.恐怕这样的假期也就是最后一个了吧.\n最终因为各种事,还是被czr拉下了js这个坑.不再搞oi不再想算法了神清气爽,觉得世界这么大干点别的什么不好.却发现自己除了打代码似乎对啥都提不起兴趣.\n关于js,这种东西的确比lamp神奇,比如一个前端的脚本居然可以作为后端的回调函数.或者说之前搞php的时候完全没有回调这种概念.web开发原来可以这样.\n暑假就浑浑噩噩地过去了.开学后的日子我猜会比想象中的更苦吧.对于现在的我来说一本这个目标还是挺challenging的.要是考不上的话就去个二本三本专科啥的学校其实也挺好,不过恐怕除了我自己没人会这么想.\n唉不过注定要面对.时间被禁锢了,不好好利用就浪费了.也罢.权当是在满足自己的妄想症和强迫症吧.\n怎么就像获取新生了一样.还有点幻想能发生些有趣的事,幻想能打工赚钱,幻想脱离猿类苦海变身人赢.虽然,都是幻想.我相信none of them will come true.人格分裂了.一边给自己制造泡沫,一边用针把它们刺破.\n心情挺复杂的.管它去死.\n","permalink":"/diary/dbimport_061/","summary":"明天就开学了呢.不再有oier的特权,得去face everything.\n这个地方似乎充满了oi的东西,总有种让我伤心的气氛.唉,花了七年做一个梦.然后梦醒了.\n倒是保留下来些东西,比如这个网站.虽然退役后重新开通了qzone,但是已经不喜欢在qzone上发东西了.虽然没有人会care这里,但总归是自己家的感觉.\n暑假似乎就浪过去了.懒懒地待在家里补课和做作业.半路上就打开电脑开始颓或者倒在床上睡大觉,总也睡不够.虽然心里觉得不踏实,但也无能为力.恐怕这样的假期也就是最后一个了吧.\n最终因为各种事,还是被czr拉下了js这个坑.不再搞oi不再想算法了神清气爽,觉得世界这么大干点别的什么不好.却发现自己除了打代码似乎对啥都提不起兴趣.\n关于js,这种东西的确比lamp神奇,比如一个前端的脚本居然可以作为后端的回调函数.或者说之前搞php的时候完全没有回调这种概念.web开发原来可以这样.\n暑假就浑浑噩噩地过去了.开学后的日子我猜会比想象中的更苦吧.对于现在的我来说一本这个目标还是挺challenging的.要是考不上的话就去个二本三本专科啥的学校其实也挺好,不过恐怕除了我自己没人会这么想.\n唉不过注定要面对.时间被禁锢了,不好好利用就浪费了.也罢.权当是在满足自己的妄想症和强迫症吧.\n怎么就像获取新生了一样.还有点幻想能发生些有趣的事,幻想能打工赚钱,幻想脱离猿类苦海变身人赢.虽然,都是幻想.我相信none of them will come true.人格分裂了.一边给自己制造泡沫,一边用针把它们刺破.\n心情挺复杂的.管它去死.","title":"20150829 写在新学期前面"},{"content":"laekov曾经是一个oier.\nlaekov认为自己的失败经验可以作为一个成功的反面教材.\nlaekov似乎是小学五年级下半学期开始接触oi的,然而因为年代太久远所以记不清什么事情了.\nlaekov是被小学的计算机老师拉入坑的.她告诉laekov有一个叫noip普及组的编程比赛,比当时laekov从事的电子制作更有前途.于是laekov找妈妈代购了一本pascal语法书开始搞oi.\nlaekov最初是有一个小伙伴的.laekov比较喜欢叫他f.laekov清楚地记得看完pascal书第二章后f告诉laekov他还没看完第一章.于是laekov决定停下来等f.过了几天laekov发现f已经看完第三章了.悲恸之下laekov学到了oi路上的第一课,你永远不能等谁.\n差不多看完了语法然后觉得自己很厉害的laekov又去买了一本c++的语法书来看.然而laekov并没有很成功地看懂c++.不过至少能看网上各种c++的程序了laekov感到十分高兴.\n然后老师告诉laekov和f有一个叫做vijos的网站.你可以在上面刷题.如果你刷得多还可以向初中的教练炫耀.laekov很开心地拥有了第一和第二个id分别叫jiaao430和ais35.\n至于它们是为什么?法拉利430是曾经喜欢汽车的laekov最喜欢的一款车.至于ais35,这是人脑随机.\n一句后话是laekov直到小学毕业在oj上的刷题量也不超过20道.\n然后大概就到了noip2009.感觉自己萌萌哒laekov和小伙伴f一起去川大江安校区考试.当年的noip还可以使用自己的草稿纸,当年的noip还是当天就可以知道成绩的.然后不知机器密码的laekov进考场就重启机器3次,于是监考老师亲切地抚摸着laekov的头说,小朋友,你怎么又重启呢?此句后流为佳话.\n记得当时的签到题是给出多项式的系数,输出多项式.然而萌萌哒laekov根本不知道多项式是什么,遂弃疗.第二题似乎是水水哒模拟.laekov于是敲之,过之.当然这里指的是样例因为laekov根本不知道什么是对拍.第三题似乎需要高精?然而laekov当时连gcd都不会不知道写了些啥.然后第四题随便写了个贪心感觉是对的啊呵呵哒.\n于是估分,f认为自己能拿300.laekov说少估点200.结局是f暴0,laekov倒是拿了30.\n然后又是一段无聊的时光然后又有一个啥cd市小学生编程比赛?听说全市设两个一等奖?好啊好啊搞啊搞啊.考试似乎是在科协一个老得掉牙的机房里.然后身边的f考试中间一脚踢断了laekov机子的电源呵呵哒.还记得有个题是求fib数列的第k项当然是在int范围里ovo然后还记得一直在调一个日期的题没搞出来.当时还有一个人居然用的是c++感觉那人屌暴了.然后想起当时的机子上似乎只有turble c?似乎连dev都没有?呵呵哒.\n另外laekov毕业前似乎被低一届的数学老师拉去搞了一个选题的软件.也就是从一堆题目里随机选k道题出来.然后用pascal写了个没有ui的程序自我感觉良好.还获了一个奇怪的奖ovo\n然后laekov就去上初中啦.laekov选择初中的方式很简单,翻出noip2009普及组获奖名单,去rank1同学的学校.于是laekov去了jxfls.然后令laekov印象深刻的是考数学的时候以为自己做完了于是玩了良久,最后几分钟才发现还有一面漏做了.然后因此没有奖学金还被老妈怒d至今.\n初中是寄宿的于是发生了很多有趣的故事.比如别人中午都得回寝室午休而laekov则可以在机房浪.因为小学有基础所以laekov强行和初二一起玩.laekov至今唯一能记得的就是上过一次排列组合课.当时觉得好神奇啊.\n然后noip之前停了一个星期的晚自习去做套题.当年的套题其实就是前几年的noip原题啦.然而当年的laekov并不会去oj上刷题所以感觉萌萌哒.\n然后就是初一的noip喽.地点改到uestc.机房变挤了啊差评.然后还拿走了别人的打印版试题ovo然后考试的时候并没有什么大新闻.还记得把第二题写丑了.然后第三题直接错误的贪心40第四题直接dfs居然有50.当年可是根本不会时间复杂度分析的啊.\n然后那年laekov以210分刚好比分数线高10分的成绩拿了普及一等.当年唯一一个初一的哦.还因此被写在了展板上.\n于是接下来的一年都在各种浪啊浪啊浪.似乎oj上的总刷题量也不超过10道题?\n然后就到了noip2011?然后laekov发现咦怎么停课集训题去年就见过啊呵呵哒随手ak几发好了.\n于是laekov决定noip2011同时挑战普及和提高.那年提高正好改成了两试六题而且挪到了cdqz高新校区.day1的时候laekov一直在写那个奇怪的mayan游戏最后还是直接输出-1走人.然后因为上午吃巧克力过多所以下午状态特别不好.最后回家的车上差点吐出来.第二天也受了一些影响于是gg.\n那次似乎当天没有出结果.laekov是星期一才知道的.提高组180+0了.如果day2正常一点说不定都能一等oov.然后普及只有100分光荣了.原因似乎是第二题行末判成了chr(13),第三题只会冒泡排序全部tle完.第四题根本不知道在写什么ovooovo\n于是初一就拿了一等的laekov感觉十分不开心.当天晚上为了能睡好吞了整整一盒感冒药.也许这也是为什么现在的laekov智商严重不足的原因之一.\n于是laekov决定不要再浪下去了.于是laekov也许刷了更多的题吧.然后laekov似乎被年级组长抓去用excel统计分数段分布?原来年级组长之前都是靠眼睛看的?laekov表示不服.于是laekov一怒之下写了一个pascal的程序来搞这种事情.然后使用过程中发现了一堆bug让laekov十分汗颜.\nlaekov在初二寒假的时候决心转cpp.因为之前有看过cpp的语法基础所以并没有多大的困难.只是后来才知道iostream.h早就被淘汰了十分的ovo.\n然后就是一个天天打游戏的暑假和noip2012.\n这年似乎做了一些模拟题.也记得高三的某学长在电阅用笔记本做出了去年的mayan.当时感觉他好厉害啊.这年的模拟题终于不是noip陈题而改成了noi导刊.感觉很赞啊.于是laekov的成绩炸掉了ovo\n然后也是在这个时候laekov终于明白了dp是什么东西.当时还天真地认为dp和动态规划是两个东西ovoovo当时还养成了一个laekov到退役还没有改掉的习惯,用f作为dp数组而不是dp.\n然后就到了noip时节.似乎laekov吸取了去年的教训坚决不吃巧克力.似乎noip刚好是laekov的生日于是laekov考完day2回家过生日.btw当年的laekov依然不会复杂度分析.\n然后laekov就上考场了.似乎noip2012提高组并没有dp.然而普及组第三题居然是dp?于是laekov十分愉快地打了第三题.然而当年的laekov仍然不会对拍于是愉快地把输出最后一个格子变成了输出最后一列的和然后再见0分.另外普及第二题因为没有考虑第一层楼要走所以也0分了.于是laekov凭借第一题和忘剪枝的60分的第四题拿了普及一等.\n然后提高似乎因为奇怪的得分加上奇怪的一等线政策laekov也是一等.然后就被拉去年级运动会当旗手了这是smg.\n于是初三了laekov与oi暂别一段然而还是天天中午去机房,不过项目变成了cs.\nlaekov因为noip考得还不错于是去了scoi2013.然后发现cdqz的人好多啊而且还偷拍结果不小心偷拍下了l老师,这张照片在一年后被l老师看见了大家都觉得十分神奇.\n然而当年依然不会复杂度分析也不会线段树,而且只会用邻接矩阵存图只会用floyd跑最短路的laekov当然只能拿40分走人了.居然有40分啊好感人啊.嗯当年的laekov似乎还和老妈闹翻了也是神奇.\n那段时间感觉自己特别叛逆.晚上在寝室偷偷drink.于是直到现在也习惯在不开心的时候喝几瓶比如写这段文字的时候laekov的手边就有若干瓶纯生.\nbtw直到初中毕业laekov在tyvj上的刷题量也不过60+.在bzoj上恰好过掉了1000(这是题号不是题数啊).\n然后laekov就去中考了.\n中考似乎并不是重点.那年似乎数学比较难于是laekov比正常成绩少了10多分.不过还是上了cdqz的招生线.于是成为了cdqz的学生.\n然后就放暑假了.cdqz的教头z老让laekov去跟着正要去noi的14届的学长训练.当时laekov正要坐火车去西安,z老给laekov介绍了一个叫mhy的小伙伴.他大概也和laekov一样对oi感兴趣得比较早然后也进了cdqz.于是和mhy联系了一下之后laekov感觉不错.\n从西安坐火车回来之后laekov有了自己的第二台笔记本.之前那台vista时代的又厚又慢的富士通笔记本早就被弃置了ovo\n这个是一台lenovo的s400.laekov选电脑的第一要意是要轻,要薄.第二是要便宜ovo\n那台电脑的确足够便宜于是预装的似乎是linux?直接把linux删掉装win7是laekov至今后悔的事.\n然后就去了cdqz训练.当年的laekov还不太会用noilinux.同为新手的mhy也差不多.第一次考试的时候似乎机智的laekov骗到了80分感觉还不错,那次mhy拿了40呵呵哒.后来又有一天似乎过掉了一道水水的bfs题然后被z老师狠狠地表扬了一下,laekov感觉自己都要飞起来了.\nlaekov听说14届有一个很厉害的人叫钟神?\n虽然没有报同步赛更没有进省队,不过因为noi刚好在uestc于是laekov就去围观noi2013了.围观的具体方法是等教练在教练会议上拿到题给laekov和mhy,然后laekov和mhy去教练的宾馆在笔记本上写题然后下午等别人看成绩的时候把数据拷出来在cena上测.没错当年的laekov还不会用linux.\nlaekov可是连线段树都不会写的,noi题当然也只有写暴力和写暴力和弃疗.其实树的计数那题laekov似乎已经想到了一个关键点不过因为太弱所以直到退役也没有做出那个题.\n因为和cdqzsc的时间冲了所以laekov就在城南的cdqz高新和城北的uestc之间不停的做简谐运动?雾.laekov清楚地记得从茶店子坐地铁到世纪城的痛苦感觉.\ncdqzsc倒也的确是个好东西.认识了不少很厉害的人.然后还知道了有codeforces这么个神奇的网站.\n于是这个暑假laekov开始认真地学oi.(意思是laekov从前的寒暑假即使想学oi也变成了打游戏)laekov当年还不知道vim当年还在用dev,还把背景调成了看上去很厉害的黑色.\nlaekov还从mhy那里学来了一种好像很厉害的数据结构叫做线段树.初中时laekov根本不敢碰关于树和二叉树的东西.于是laekov感觉自己现在变得好厉害啊.咦不对,应该是mhy好厉害啊.\nlaekov也是从那个暑假开始打cf的.当年的laekov的id还不叫laekov而叫aoao.这里面是有故事的,然而到底为啥呢你猜啊.\nlaekov打的第一场cf是一场正常的11:30场.laekov当时决定晚上8点先去睡到11点再起来打.然后laekov发现醒来之后脑子就像坏掉了一样啊.第一题是smg不会打啊.第二题咦似乎可做?敲敲敲交交交挖挖挖.于是整整一场比赛laekov都在试图做div2的b题,终不过.第二天早上起来发现一个十分愚蠢的错误laekov表示十分ovo\nlaekov打的第二场cf是和网球俱乐部一起去峨眉山的时候打的.住在宾馆里晚上11点半起来high.然后室友根本没回来但是laekov居然没注意到.于是laekov灯都没开坐在床上码题,现在想想也是醉啊.s400可没有键盘背光,而且laekov似乎还借着屏幕的光打了草稿?那场好歹有题能过于是第一次涨了rating非常的开心啊.\n暑假结束去军训之前laekov和小伙伴zt和louis去昆明玩.然后居然又有cf然而laekov没有带电脑.幸好小伙伴们都有带电脑于是laekov十分开心.\n呃然后就是公布分班去军训.laekov被分到了12班听说是高考实验班?逗呢?laekov高考成绩那么烂也能扔这?然而并没有什么跳的办法.\n军训的时候好热啊7天洗了2次澡.而且洗完澡走回来又出一身汗.洁癖的laekov感觉根本受不了于是后来洁癖更重了.当时认识了一个叫hbw的同学也要搞oi觉得很开心.\n回来之后发现mhy没有进实验班.于是在ovo的人的ovo的努力下laekov和mhy集体跳班.laekov去了15而mhy去了隔壁14.感觉很开心.\nbtw因为跳班所以laekov是15班唯一一个同桌是女生的男生,这是一件十分有趣的事.然而因为这与主题无关所以就折叠掉了.laekov还认识了15班的另一些oier分别是lyzy,cyl,jh.laekov初中一起学oi的ymw也在15然而他后来转行去了物理.\n在cdqz的生活比在jxfls自由许多.有很多自己安排的时间.然后中午和晚上也没有硬性的什么要求.于是laekov去了一个叫做305的oi自习教室.当时在这里的有14届唯一一个noi au选手zhx也就是暑假时候听说的钟神.还有若干noisy的高三物理众.\n305有两种桌子.一种是课桌,另一种是有点像美术教室用的那种比较大的比较像办公桌的桌子.laekov发现所以大桌子都被占了,于是只好可怜地在角落里找了一张课桌ovo\nlaekov提着电脑去305开始写代码之后zhx就来围观.然后怒斥laekov这种dev选手.于是laekov从那时起开始学习使用vim.\n那段时间laekov似乎特别naive.什么都不会还感觉自己特别厉害.暑假快结束的时候在mhy的怂恿下laekov去出了一套给本年级的入学考试题.后来再回想,那就是一个笑话23333\nlaekov到那时终于发现s400的笔记本键盘一点也不舒服.然而手边也没有其它的键盘.于是laekov去买了一条ps2转usb的线,拿一把305的不知道哪里来的键盘接上.从此开始了外接键盘的不归路.\nlaekov对接下来的两个月干了啥已经没有印象了.似乎noip前停了一周的课.那几天laekov窝在机房上午考试下午乱玩.laekov发现可以用hdmi转vga线把笔记本的屏幕转到学校破机子的比较大的显示器上,于是十分开心.因为学校机房的机子,实在太差了.\nlaekov那时候还在使用一种奇怪的方式存图.既把所有边按起点排序然后xxxx.每次遇到图的题,laekov的代码都又臭又长还常常错.laekov倒是学会了使用stl的sort和priority_queue,于是也学会了dijkstra+heap.\n当时laekov的小学低一届的学弟yjq也来cdqz参加noip的训练.多年不见yjq也变厉害了.\n然后就是noip2013了.考场还是在cdqz的高新校区.day1的时候laekov感觉不错?当年的laekov似乎没有写过总结那就补一个好了.\n第一题快速幂啊.当时的laekov还不太会用位运算.快速幂还要开一个数组存2的幂一个数组存底数的幂.一个快速幂要写二三十行.\n第二题嗯首先高度要对应嘛.然后how to交换和整理?laekov认为应该是找圈吧.然后每一个圈只需要交换大小减1个两两顺序.嗯然后答案是圈的所有距离和-最长的距离?咦过样例了.请注意这时的laekov依然不会对拍.\n第三题不太会做啊?似乎用dijkstra可以处理一个点到其它点的最大最小承重?laekov并没有意识到这是prim.于是跑n遍dijkstra就行了啊.\nday2的时候laekov又感觉自己萌萌哒.\n第一题似乎可以直接拿set维护一下搞过去?laekov是会用set的男人!laekov后来十分骄傲地告诉大家自己写了红黑树.\n第二题直接dp有70分啊.laekov发现这个dp似乎可以像lis一样用单调队列?好写写写炸炸炸.laekov其实根本没有写过那样的单调队列.而且后来才知道那根本不是单调队列.到最后十分钟laekov发现写不出来了于是只好弃疗,70就70吧.\n因为写第二题而且感觉第三题挺麻烦所以就弃了.直接输出无解骗分.\n若干周后,老师拿到了山寨数据和代码.测出来,laekov应该是100多分.\n100多分?laekov听说这个消息的时候是在计算机课上.当时就趴下了.下课之后拿bat写了个while 1 echo f*** noip的脚本就走了,把老师吓了一跳.\n揭密一下laekov是怎么挂的.\nday1第一题laekov的快速幂开数组的时候下标是1而不是0.(这都能过样例?醉醉醉)\nday1第二题直接想错了很明显吧.\nday1第三题不知道写得有多丑就得了10分.\nday2第一题虽然常数很紧不过过掉了.\nday2第二题最后交之前在定义变量那行打了dd还没发现就wq了.直接ce.当时真想说dame vim.\nday2第三题骗到5分.\n于是从入学一直厉害到noip的laekov蔫掉了.这是laekov在oi里最重要的第二课,少说话,多写题.\n那时laekov在305终于找到了一张大桌子.然后不久之后jason_yu众从四楼搬来三楼,于是laekov被赶去守门.\nnoip完了之后虽然没有机会停课了不过laekov还是各种水作业水活动搞oi.于是laekov在学习网络流的时候终于学会了用链表存图.laekov还学会了写重量平衡树.laekov最初写的是指针版的平衡树,于是就普通平衡树就写了一天,又调了若干天.最后交上去的代码还没有maintain.\nlaekov就是从这个时候开始入坑linux的.laekov在笔记本上分了20GB的区装上了ubuntu12.04lts.\n考了一个还将就的期末考试之后就放寒假了.laekov的除夕活动依然是cf.不再是crossfire而是codeforces.laekov当时还照了一张照片.后来发现,用的依然是windows.\nlaekov因为noip分太低所以连去wc的机会都没有.不过laekov还是厚着脸皮跑去了北京.善良的贾老师给了laekov一个坐在隔壁教室用自己笔记本考wc的机会.laekov发现第二题可以拿开心的30分.laekov发现答案提交题非常好玩.于是laekov的wc拿了83分,感觉还不错.虽然没人给laekov颁奖.\n回来之后那段时间laekov比较喜欢写网络流的题.这是为啥呢思考熊.\n然后是4月的scoi.laekov考前停了2周课.停课第一天花了半个上午过掉了二逼平衡树.\n印象深刻的另一件事情是某场考试laekov用朴素加剪枝秒掉数据结构标算.从此被贴上了\u0026quot;黑暗星球统治者\u0026quot;这样神奇的标签.\nscoi考得一如既往的差.毕竟在sc基本没有高一进省队的机会.又一次回到育才考省选让laekov有点感慨.\nscoi第一试,laekov猜对了第一题的结论,然而认为是错的,于是写了10分的靠这个结论搞出来的dp,却没有优化.第二题是laekov最擅长的ds题,花了四个多小时.然后的数组少开一倍.\n二试似乎对于当时的laekov没有什么可做的题.\n于是laekov就拿着比noip高40分的分数回家了.似乎laekov是scoi中高一的rank1.不加noip.\nlaekov于是十分愉快地做了两个月文化爷.z老给了laekov一个noi2014的d类,于是不用去宾馆做题了.laekov试图报thusc,于是被坚定地拒绝了.\n期间laekov试图给自己的电脑升级到ubuntu14.04lts.一不小心点成了use entire disk.于是laekov电脑上为数巨大的照片数据文档等等都化为量子态了.\n考完文理分科的期末考试后laekov终于可以回来愉快地搞oi了.各种noip到noi难度的训练.最后一天欢乐赛laekov拿了rank3,老师发给laekov一个风扇.\n也是这时laekov入手了第一把机械键盘.狼蛛的鬼王.\nlaekov于是去了深圳.去报道前一天晚上和上一届的学长们去海滩,对着大海嚎歌.laekov唱了一首郑智化的水手.\nnoi2014给laekov的感觉就是不明觉厉.不知不觉中就考了一试考了二试.然后学长们就进队的进队退役的退役了.当时laekov还在百度空间里认真地写了日记.不过laekov不太想再说一遍.只是对当年mushroom那种难以描述的表情印象特别深刻,也带着些许不解.当时也没想到一年后laekov几乎完美地体验了他当时的感受.噢那回laekov写错了最简单的day1第一题于是光荣地拿了个银牌100多名.zhx对laekov表示十分不满.\n回成都之后laekov跑到学校去赶作业顺便和zhx一起玩耍顺便去和yjq等新来的学弟玩.似乎还是有一两个学妹的不过laekov没太注意.\n时隔一年laekov又找了一份给学弟出题的工作.于是laekov自认为不naive之后第一次出题,全场暴零.laekov是找人验过题的数据是对的.\nlaekov当时还把yjq婊了一顿.laekov真的认为那都是非常简单的题.\n后来laekov又出了一套题开始放水和出原题233.laekov后来认为自己完美演绎了一个出题人从认真出题到放水的全过程.\n一周后学弟们军训去了laekov回家接着补作业.\n然后就开学了.\nlaekov认为小学加初中将近5年的东西高中一个月就能学完.后来laekov发现自己高一花了一年学来的东西,有很多人在高二只花一个月就赶了上来.\nlaekov一直都听说高二就可以尽情地停课了.laekov十分激动.\nlaekov计划中要等到10月再停课.然而laekov发现班上数竞众围坐在身边实在是太吵了.上课的内容laekov也不怎么听得进去.于是乎,在上课两周后,laekov愉快地完全停课了.\n最初laekov停课的时候很多小伙伴都没有停课,于是考试基本上都在晚上.然后本年级主教练去美国交换了于是laekov这个年级的训练由z老师负责.z老师比较开心于是让laekov负责每次收代码和评测.laekov最初感觉接了个不错的差使萌萌哒.每次拿ftp收好东西之后拷到305的服务器上去用lemon测.\n后来laekov就感觉烦了.每次先得在机房喊若干分钟才也不一定能把代码收齐.还有若干人不用ftp而是用优盘拷啊拷掉了怎么办拷错了怎么办怪laekov喽?laekov有种找点啥东西来代工的想法了.\n让laekov几乎要崩溃的是九月完了之后要开家长会.老师让laekov给每个人做张成绩折线图.laekov的内心几乎是崩溃地一个一个粘进excel表做出了丑暴的统计图.laekov认为是时候做些什么了.虽然laekov的php水平还为eps.\n老师为了促进学习,在oi队里搞3人学习小组,还能兼营acm.虽然只玩过一次acm还因为题逗而无果.laekov指使mhy随机分组,结果laekov就被分给了俩妹子,cj和用word写代码的ljy.laekov和cj脑洞大开地把发的彩色宣传纸折成了蘑菇的形状.laekov还记得那天晚上去买油漆笔的时候cj一脚踢到了校园里的lai ge bao的场景2333\n后来十月也就是在各种上课白天刷题晚上考试的模式里过去了.期间似乎有个运动会laekov自行do big die去跑1500和3000,结果还不错.\n那段时间做了不少已经在thu茶园的zhx出的题.zhx的题难度比noip高而且比较坑,结果后来众人听说是zhx的题就怨声载道233\n然后教练几经争取,重新激活了404.404是间废弃的办公室,曾经和305是一个地位.只是在laekov高一寒假的时候因为不明的原因而被学校查封了.jason_yu因为怀念高一时的幸福时光而选择搬回404.laekov和mhy也跟着搬了上去.laekov至今后悔不懂事地选择了mhy对面的位置.\nlaekov的oj也在十月末左右开张了.这个东西laekov也算是投入了很大的心血吧.那时候多数人也差不多停课了,考试挪到了白天,每次都能凑上30来人.\n最初的oj是个非常简陋的东西.只支持提交代码.评测啥的还是用的lemon.而且因为laekov完全没有资源,所以是在机房的一台老爷机上装上ubuntu架的服务器.多几个人刷新都会卡.而且因为初学php,所以手忙脚乱甚至完全没有美工,整个界面非常非常丑.不过好歹走出了第一步,laekov还是挺开心的.中间几个下一届的学弟也很有兴致地来帮laekov找bug.laekov才意识到自己写程序是多么容易出事,尤其是php这种东西.\nlaekov赶在noip前最后一轮的时候把自己写的acejudge移植到了自己的oj上.laekov的评测和网页服务器是不分家的.评测都得靠后台命令来跑.特别恶心.laekov直到退役也没有研究出如何让评测机也成为一种客户端.\n再后来没过多久就noip了.\n这年的noip终于从cdqz高新搬到了uestc清水,laekov第二次考noip的地方.据说是头年sc省组委会犯错导致初赛题提前泄漏,所以这年的组委会变成了uestc.终于从xp换成了win7,laekov其实挺高兴.\n那时的日记在lofter上.laekov是个喜欢换博客的人,直到自己写出网站.\nday1的时候因为天气不好就感冒了,还不敢和娘亲说怕她担心.day2出来就赶紧吃药.\n那场noip似乎特别简单.除了最后一题.每个人都感觉自己的得分应该是500+最后一题.\n等成绩的时候顺便回班上去考半期考试.laekov似乎全学科崩溃,好几科都是30+分.laekov认为这不重要.\nlaekov还记得看到结局的时候是星期一的下午.最后一节课是班会.吃完饭回404的时候,看到大家都围着jason_yu.因为拿到了代码和山寨数据,所以大概也知道了结果.laekov的day1第三题挂了.其它还好.仔细一看发现这题挂在没有柱子的情况了.laekov有个性地扔掉了送给不会这题的人的分.\n正式结果不久也出来了.和山寨数据差不多.day1第三题用除法被amd的cpu给卡了,于是又少了15分.day2第三题倒是比省上其他人都高点,拿了80.于是总分535不好也不坏,和jason_yu一样.mhy和hobo都拿了570,并列全省rank1.之前都没怎么注意到hobo.\nlaekov明白了另一条道理,别人的努力不一定要让你知道.\n从noip开始,每一场都是残酷的淘汰赛.老的团队里,cj和ycy都在这里再见了.拿到了noip省一的fjm也因为未知的原因走掉了.laekov一直觉得fjm走掉很可惜.\nnoip和laekov和生日总是一起的.laekov的亲爹送了laekov一把青轴彩色背光的ducky.后来lxh认为laekov把这把ducky当成了自己的妹子.\n人走了但是训练还得继续.\n这时对laekov的oj发生了一件重要的事.另一个年级的教练Mr.Lin决定转让一台服务器给laekov来跑oj.当时laekov得到了两个选择,一个是机房里闲置的hp工作站,一个是中心机房里的刀片服务器.当年的laekov还不知世事险恶,其实是没有想到ssh.为了方便就选择了前者,一台工作站抱回404.然而404晚上是要断电的.为此也收获了不少抱怨.而在cdqz连公网就不要想了.laekov在这种事上,只想尽情地表扬一下\u0026quot;领导\u0026quot;的祖宗十八代.\nlaekov在noip结束下一轮训练还没开始的时候学会了两样当时觉得很厉害的东西,cdq和kdtree.\n不久之后是jason_yu的集训队thu集训.于是laekov和mhy陪jason_yu练相应难度的题.第一轮是zhx和zcwwzdjn出的题.第一套的时候出了一道kdtree把laekov乐坏了.而jason_yu把nth_element的顺序写反了倒是没有laekov高.颇得意.后来几套题也是laekov和jason_yu交替拿rank1而mhy垫了四场底.毕竟三个人的比赛2333.倒是这四场都在laekov写的oj上跑.laekov的oj写得比较丑所以直接按名次算rating.结局是mhy在后来相当长的时间里无以翻身.laekov对这件事非常抱歉但是一直懒得把rating的计算公式改得更复杂.\n另一件比较有趣的事情是某天zcwwzdjn出的提答题居然是汉字分词.laekov曾经在matrix67的书里看过这个东西.不过在花费若干个小时研究如何读入之后laekov选择放弃治疗.\n第二轮的题在xjoi上.再一次体验到了xj那种等级森严的管理体系.laekov也决心在自己这加些东西.不过它的实现还要等很久.\n然后jason_yu就去帝都了,而laekov众也去了帝都不过是在八十中.laekov很开心的是lyzy也去了.\n在帝都发生了很多事.那段时间似乎cdqz里爆发啥奇怪的病毒.于是lyzy去的时候就不舒服.然后所有人轮流发烧.吓得laekov的爹都飞了一趟帝都.暖气把人烤得要炸了,出去又冷得掉渣.也是那次认识了jiry,虽然他还是不认识laekov.也发现原来在帝都搞oi的都是初中生,高中生都在忙着不知道干啥.\n最后一天去了thu和jason_yu汇合.大家分头去逛thu.laekov试图走到紫荆然而没到一半就被叫回去了.lyzy去了教材中心买教材,果然是要做学霸王的男人(这只是在随机乱黑).说好了zhx请客吃饭的.然而mhy和lxh走到不知道哪里去了.于是时间不够没吃成就赶飞机去了.\nlaekov还记得那个出着太阳但是还是很冷的冬日里,第一次走在thu的校园里,心里默默地发誓,以后要到这个地方来读大学.也许吸引了laekov的并不是园子有多美,也不是天气有多好,只是thu这三个字母而已吧.\n回cdqz复习会考,当日下午,班主任曰,按照年级安排,全体竞赛生都得回班上去复习然后会考和考期末考试.laekov差点当场骂出来.之前大半个学期都没上过课回去就是do die.然而班主任气场太强,laekov不得不从.后惊闻mhy班上并没有这样的要求.mhy也没回班上上课.\n很久之后看来当年班主任的决定其实是正确的.laekov在发现几乎所有东西都不会的绝望的时候,那一点学过虽然不精的东西也能给laekov带来惊喜和可观的score.\n那一个月也充满了痛苦,作业都不会还要先补一些新课.不做作业还是会出事.正是那个时候开始laekov心里开始对高考产生了抵触.laekov不想高考,而搞oi就会有这样的机会.\n那段时间laekov在放弃治疗的时候,把自家oj的ui给改进了一下.换上了彩虹旗主题.虽然很多人还是认为很丑.\n期末考试依然很糟糕.laekov从年级500+变成了470+.嗯也是进步了呢.\n期末考完之后终于重回oi,laekov感觉已经不会做题了.在学校做的最后一场zhx出的wc训练题,laekov惊奇地发现zhx搬运过来的lct.\n然后就飞去了遥远的hz市,在xjhs和各路神牛扎堆训练.\nlaekov还记得第一次考试的时候一道kdtree题因为少写一个根号而丧心病狂地优化了很久的常数,最后还是和朴素一个分.那时laekov的内心真是崩溃的ovo\nlaekov那时认识了demi guo.laekov想这样一个女孩子在bzoj上刷题比自己多到不知道哪里去了.佩服得五体投地.也感觉她的ds好强而且智商好高orz.\n后来也就是听课考试听课考试.中途有一天休息的时候laekov和mhy和lxh组团去了西湖骑车玩.其实对于当电灯泡这件事laekov本是拒绝的.不过怪laekov喽?\nlaekov还伙同mhy搞出一套bestcoder的题目.\n虽然纬度差不多但是hz比cd冷好多呢.\n然后就是wc2015了.hzxjhs的志愿者还是相当热情的.\n讲课依然不可听,呼呼大睡而过.laekov在去xj之前下了一部名为angel beats的番.原因是zhx曾以这个名字作为一道仙人掌的题目英文名.laekov这才知道世界上还有番这种东西.然后laekov趁wc晚上没网不好玩就把这番补完了.最后被小奏和音无感动得稀里哗啦的.然后hbw同学一边向laekov剧透一边用mbp鄙视laekov的lenovo低端机的电池.\nwc最有激情的时间就是抢饭时间了.不过印象中wc2015比2014短许多,就考试了.\nlaekov旁边坐了一个看上去挺奇怪的山东人.当年laekov还不知道那是qmqmqm.laekov只是很想吐槽他为啥把吃的全部堆在laekov的鼠标上了?欺负laekov不会用鼠标么?wc考试的时候laekov花了四个多小时去写第一题50分的持久化数据结构.最后终于调出来了开个动态空间就上了也没管.laekov试图举手找监考的花神要水然后被告知没有水.接近结束的时候laekov的嗓子已经痛得不行了.\n下午去看成绩,50分mle成了20分.提答题也就是40+.好像旁边那个奇怪的人(就是qmqmqm)考得比laekov高得多.laekov顿时感觉人生没有了希望.于是跑到xj的操场上去思考人生.几分钟过后教练一通电话把laekov赶回机房才知道laekov是cdqz除了集训队的jason_yu以外最高的.\n然而jason_yu也无缘15人队了.\nwc最坑的地方在于当天不知道分数线.讲题的时候发现那天是2.13.\n晚上的时候,laekov惊喜地发现,自己发烧了.\n2月14号几百号单身男及少量couple涌进西湖景区.发着烧的laekov裹着衣服默默地走在人群边上思念(前一天约laekov在214出来玩的)yyy.\n那天西湖似乎在举办啥情侣赛跑.laekov表示真是雪上加霜加雾啊.\n下午颁奖.laekov居然惊险地拿到了au.laekov感觉自己考得那么糟一定是胸牌回家了来着.\nwc回家的飞机上挤满了人和行李.在飞机下面拉了好几车才找到laekov的箱子.\n回cd的第二天就是除夕了.laekov萌萌哒某亲姨表示要送laekov一点礼物.于是laekov升级成了mbp党.\nlaekov当场试图在mbp上装gdb结果把osx的bsd内核搞崩了.laekov试图在mbp上装openSUSE然后因为没有驱动以及kde对retina屏不友好所以放弃了.laekov在mbp上装win8.1发现依然没有无线网卡驱动而mbp没有网线插口.laekov抱着才买几天的mbp去apple店重装系统.\n年过完就开学了.不久之后就是scoi了所以laekov的学校训练安排得比较紧.好处是躲过了开学考试.\njason_yu下定决心回班上上文化课.laekov笑等他回来然后没有等到.然后idy也从高新跑来和laekov众一起玩.\nlaekov听学弟tyh说wanwang在放送免费空间于是去申请了一个.没想到在天朝备案居然如此神烦.当场有点想去炸某部.\n不久之后laekov出的bestcoder就面世了.laekov因为出数据太水出题太奇怪所以被婊了一通.laekov在自己is-programmer的博客上写了一大段文章来记录这段经历.laekov不想当文章的搬运工了.\n开学之后训了不久就被拉去hnsdfz了.楼下众似乎不太想去于是去的只有三个人,mhy,hbw和laekov.laekov临走之前把自家的oj和植物托付给了lxh.\n在hnsdfz的日子过得很充实.即使上午是考试下午也会讲一些内容一直到五点半.不像cdqz上午考试下午就可以耍了.\n不过hnsdfz提供的住宿条件实在不敢恭维.红楼宾馆二号楼重要的问题是潮湿.被子就像没晒干一样.laekov洗了衣服也干不了.那段时间又是雨季,天天下雨.laekov的mbp坐在房间里还不能成功地连上wifi,得走到过道去还被前来视察的cdqz某领导批判了一翻.感觉各种神烦而同室的mhy感觉毫无问题每天游哉悠哉地刷bzoj.适逢idy成天开树点分的坑.laekov每天晚上只好坐在奇怪的房间里在mbp手感比敲桌子好不了多少的键盘上敲ds题ovo.\nlaekov在那里才知道qmqmqm在wc的时候就坐laekov旁边而且还是个天天虐场型的人物.令人印象深刻的是他某天听课讲thu集训某题顺手就去uoj上把唯二过那题的demi guo给hack了.\nlaekov印象中每天都看到前面那排某哥们在玩一个接白色方块的游戏.(那是osu的ctb不要吐槽为啥是白色方块).后来才知道那是tkd.\nlaekov走之后cdqz的第一场考试oj就坏了.laekov想起是走之前改了一个地方应该改丑了.cdqz的oj是没有外网的前面说过.于是laekov找idy先用qq远程协助连到内网,再开linux虚拟机,用虚拟机ssh到服务器上改php代码.laekov很佩服自己当时的想像力.\nlaekov在hnsdfz的时候空间终于过审核了.第一次看到自己写的网页在公网上挂出来感觉萌萌哒.\nlaekov听说自己在hn的时候cdqz众被下一届虐了.回cd先在家休息一天顺便远程拿cdqz题远程提交拿了个rank1刷一下存在.\n又混了两周就是scoi了.因为noip换主办方所以scoi也变成了uestc主办.laekov听说uestc各种神奇laekov感觉会坑.\nuestc为了刷存在决定组织一场scoi前集训.地点uestc外某传销公司大楼.\n其实不是传销公司而是培训组织.不过宿舍条件太差管理也神烦.laekov众去看了一眼就果断去楼下住酒店了.\n关于那场培训必需多吐槽一下.2800大洋管4天,每天有效时间顶多6小时,还尽讲些毫无营养的东西.uestc明明强行让选手用win7,还从thu找个人来讲linux使用技巧.骗小孩呢?然后官方住宿条件一副bird样,伙食也值不了两个钱.总之就是uestc组委会专业坑钱.\nlaekov那次认识了一个叫萌O3的妹子.不过可惜一个星期后她就退役了.\nuestc培训考了两场小考一场大考.laekov大考的时候神奇地拿了rank1于是被发了500大洋奖金.感觉rp要败光了.\n然后就是scoi2015了.laekov发现自己竟然考过3次scoi了.\nscoi之前家长围了一堆.laekov住进了uestc大门对面的酒店.然后发现mz众和ns众和dc众都在同一家酒店真是开心.\n晚上发现还是有点睡不着有点紧张唉.\nday1的时候laekov预测自己会x+100+100结果100+100+20.第二题难道不是usaco的原题?laekov真觉得uestc找的那个thu的人是来坑钱的.laekov去申诉,试图要数据结果被uestc acm队教练给臭骂一顿.从此laekov对uestc的印象更差了.\nday2的时候laekov还是有点紧张.thu爷出的题又是搞笑的.第二题写了很久才搞定.最后发现理解错题意了.其实也只需要改一点点不过慌了神去改朴素于是浪费了宝贵的时间.于是只拿到100分.\n所以laekov只拿到了rank3被zhx怒斥.hobo过掉了day2第一题成功翻盘rank4进a队.mhy虽然两试都不太好但也不太坏进了b队.idy进队了很开心.lyx被卡在了1/3不过还好有个c类.cyl在lyx前面.jh就只有去高考了.yzy连课都没停两节当然没有机会进队.倒是女队暴冷ysy以一名之差把lxh干掉了.萌O3再见了.laekov发现lxh大考常常会出发挥问题.\nrank1和2都是ns的其中一个还高一.不过cdqz好歹进了3个a类是去年的3倍也比较开心了.sc省队15人来自4所学校还真是整齐啊.\nscoi好歹还是进了a队laekov比较开心.\n之前在hnsdfz认识的tkd把laekov拉进了一个奇妙的群.tkd众似乎是要把hub省队胡测变成\u0026quot;弱\u0026quot;省胡测.laekov当然资瓷啦就去报名啦.然后laekov就有了两个队友ioi和zyf.他们都表示没出过题laekov汗了一脸.laekov好歹还是给下一届出过那么几道题的.\n这回半期考试可以正大光明地不参加了laekov挺开心.\n再过不久就去帝都ctsc和apio了.\n这回半期考试可以正大光明地不参加了laekov挺开心.\n再过不久就去帝都ctsc和apio了.mhy和lxh被众人推去当两场闭幕式的主持人2333.萌O3居然也要去apio而且也被拉去当主持人了.她还向laekov吐槽说ccf一定是想吃四川火锅了才拉了俩四川妹子去2333.\n那两场都在人大.住在那啥宾馆.laekov分到一间套房四人间laekov去得最晚只好睡客厅加床.\n因为之前在群上有约好所以ctsc是胡测面基大会.laekov认识了好多以前只闻其名的人.laekov被之前只在群上聊过的czr邀请去pkuacm.laekov刚好想换队友玩玩就答应了.结果cdqz众犯拖延症错过了报名时间没有去成233.\nctsc没有发生什么事.day1的时候laekov因为把zhx的题的题意理解得有点问题所以没有ac.day2交之前3分钟给第一题加卡时然后gg,事后删掉卡时可过.laekov就这样扔掉两道ac之后还是险拿au.laekov甚至都担心会把自己的rp给败光.事实也正是这样.\n国家集训队答辩laekov只是觉得很神也没听懂多少.最后6人英文自述的时候lyy的经历教会laekov结果没有出来之前不能弃疗.\n下午去国博回来的路上和ioi讨论他的胡测题.感觉他好像对于ac自动机这种东西的性质的理解比laekov更深刻orz.然后ioi出题太毒瘤了,总想把其他东西都卡掉.相比之下laekov这种从不卡时间也不卡空间的出题人真是良心.\napio报道那天laekov一个人去了园明圆.然后徒步去thu找zhx结果zhx不在.\nlaekov在回人大的地铁上发现一个和mhy撞包的挺漂亮的帝都妹子233.话说妹子穿着外套不觉得热么?啊为啥那校服如此像hnsdfz的校服.laekov捂脸ing.\napio居然有讲课环节还有两天.第一天先是zhx讲塞边打网的数学,讲之前还让laekov在名单上圈名字不知道是在干啥233.zhx讲完之后把衣服忘在台上了,于是派laekov去回答问题顺便拿衣服.laekov还真拿衣服地去拿衣服了ovo.\napio后来的课似乎都不好玩于是laekov就坐后面和tkd众玩去了.试机的时候发现noilinux老旧的firefox打不开apio的网站.laekov一脸坏笑.\n后来laekov听说firefox直接去下二进制包就能用.laekov又听说root的密码是123456.于是233.\napio居然是早上9点开始的5个小时.laekov感觉会饿死.不过apio的赛制laekov在自家oj上已经练过若干遍了,感觉对laekov这样的选手应该是有优势的.\n结局是laekov花了不到3个小时就ak掉了,出来正好吃饭.听说劼司机比laekov早一会出去.laekov真是运气好,第一题连条件都没看对.第二题卡常过.第三题猜结论.233.\napio下午别人还在考试而laekov在233.据说现场也有不少人上qq的.laekov十分费解为啥都这样了还是只有7个人ak.laekov还发现宾馆网速其实非常快,只是用的人太多了所以慢得不成样子了.laekov玩了一下bop觉得玩不动就放弃了.\n第二天的pku校赛下雨TT.rausen和czr居然一人背了个键盘233.\npku发了三大包吃的非常开心.pku的电脑居然是winxp的还好有vim.czr的黑轴,而laekov是惯用青轴的.至于rausen的巧克力键盘其实还不错.\nlaekov水掉了2道不是ds的类ds题,一道一血一道rejudge前是一血.czr和rausen则搞掉了两道数学和思考题.加上一道签到题排到了5题rank1.一度就是rank1.不过最后被几支有苦开挂的队给干下去了.加上rejudge的缘故排到了rank5.不过也没有高中队比laekov三人厉害了.laekov不得不感叹队友好才是真的好.\n现场还看到了萌O3和一个汉子.他们是全场唯一一个过掉银色气球思考题的队233.apio那几天看萌O3都在认真准备主持的事.于是laekov和萌O3在现实中没有说过一句话TAT.\n从pku回来去吃麦当劳的时候laekov众遇到了杜教,陈老师和vfk.laekov众心里默喊,就是他们抢走了就要到手的money!\n于是laekov抱着俩au回家了.在这个赛季laekov拿的还全都是最高奖项呢.呢.呢.\nlxh因为apio考得不错于是下定决定搞来一个noi的d.\n回去之后laekov明显感觉懒癌发作都不太想写题.反正不久之后就是thusc所以laekov除了学校考试就是颓.\nlaekov那场的胡测,zyf最后几天才拼出一题.ioi倒是出了很久的数据.然后结果就是popoqqq太强了www.\n五月飞了两次帝都.第二次是去thusc.thusc很直白第一天报道第二天考试第三天面试然后再见.报道那天laekov坐早班飞机,然后在宾馆大厅玩了一下baidu之星然后进了复赛感觉自己萌萌哒.\nthusc考试laekov直接就崩溃了.第一题数组开小第二题不会第三题不会.下来被zhx批判了一番.laekov感觉自己会跪得很惨.晚上别人都跑不见了只有rausen陪laekov吃饭.\n面试的时候组号很大.听说组是按成绩编号的.面试的时候就随便问了一些问题.专业性问题都挺简单的.laekov倒是把自家的oj当作亮点介绍了一下.这大半年的工业算是没白费.\n毕竟考试才是重点.果然,二档协议.\n回去之后laekov更颓了.laekov决定去bzoj上攒一波题于是也不用每天至少一道bzoj了.然后没事就对着vjudge上的一堆东西发呆.其实是没有什么没事的时间的.学校训练比较密集,还有政治和通用会考这种麻烦事.\nlaekov率领cdqz众毅然拒绝了uestc提出的sc省队集训.反正laekov再也不愿意相信uestc这种坑了.于是laekov和cdqz众再次去hnsdfz.那回要去noi的本届只有lxh没去.\n飞hn之前laekov向yjq交待了关于404的所有东西.laekov感觉自己可能不会有机会回到404了.可能性还不小.唉.\n在hnsdfz依然是颓.wulala给laekov推荐了一款游戏叫4399ssjj.于是laekov再也没从此坑里爬起来.czr和rausen过了两天也去了hnsdfz.于是他俩也被laekov拖进了此坑.然后czr在推angelbeats的游戏而rausen天天在手机上淦舰.\n这回laekov和czr合住红楼一号楼.而cdqz众则听mhy的意见去了二号楼.然后当天晚上hobo众就来找laekov说二号楼不太能住233.\nhn的天气挺热而且是像蒸笼一样的湿热.laekov觉得还是cd风水好哪都比不了.\n从hn回来玩了两天,考了一场信心题laekov拿了个乒乓球拍.\n然后就去hzxj了.laekov发现自己2015年的行程是回文的.hz-\u0026gt;cs-\u0026gt;bj-\u0026gt;bj-\u0026gt;cs-\u0026gt;hz.\n在hzxj主要是熟悉场地.noilinux不带支持lenovo一体机的显卡驱动于是强行在1600900的屏幕上显示800600好烦.\n中间遇到刮台风然后宾馆停电.于是不敢狠玩手机的cdqz众聚到一起玩谁是卧底.\n后来czr也来了.某天晚上laekov突发脑洞和czr和dxq去打台球.laekov突然发现自己好久都不打台球了手痒起来了.\nnoi报道前一天在同一间宾馆遇到了rausen大爷.他们居然住laekov隔壁.\n然后noi就报道了.\n然后noi就笔试了.laekov都没啥感觉就过了.笔试完了之后laekov和czr跑去打台球掉rp.\n然后noi就day1了.前两题是noip的节奏.第三题laekov强行把自己引到了vfk的集合反演上.于是没有想出来.只有60.不过也比大众分高了一点.晚上的时候laekov的双亲也到了hz.\n社会实践那天下暴雨诶.先是天好热天好热然后是雨好大雨好大.\n然后noi就day2了.\n第一题似乎是huffman?laekov知道这是个贪心不过最终也没想出来是啥贪心.肯定别人都做出来了laekov没救了.\n第二题是sa然后用线段树维护一下啥东西?感觉全场人都会做.\n第三题是smg只会40分后面乱猜好了.40分明明可以直接记录从哪转移过来的.然后脑子生锈的laekov非要求两遍判必需.差不多的代码写了好几遍都要吐了时间也用得差不多了.\n最后laekov盯着大屏幕上的倒计时,目送自己oi生涯的最后30秒从指缝间流走.\n走出xj的体育馆,laekov已经不是oier而是nceeer.\n中午,坐在xj宿舍的床上,laekov开始堆这遍文章.laekov的文笔还停留在小学低年级流水帐水平.不过laekov觉得有些东西应该记下来.\nlaekov曾经是一个oier.\n","permalink":"/random/dbimport_278/","summary":"laekov曾经是一个oier.\nlaekov认为自己的失败经验可以作为一个成功的反面教材.\nlaekov似乎是小学五年级下半学期开始接触oi的,然而因为年代太久远所以记不清什么事情了.\nlaekov是被小学的计算机老师拉入坑的.她告诉laekov有一个叫noip普及组的编程比赛,比当时laekov从事的电子制作更有前途.于是laekov找妈妈代购了一本pascal语法书开始搞oi.\nlaekov最初是有一个小伙伴的.laekov比较喜欢叫他f.laekov清楚地记得看完pascal书第二章后f告诉laekov他还没看完第一章.于是laekov决定停下来等f.过了几天laekov发现f已经看完第三章了.悲恸之下laekov学到了oi路上的第一课,你永远不能等谁.\n差不多看完了语法然后觉得自己很厉害的laekov又去买了一本c++的语法书来看.然而laekov并没有很成功地看懂c++.不过至少能看网上各种c++的程序了laekov感到十分高兴.\n然后老师告诉laekov和f有一个叫做vijos的网站.你可以在上面刷题.如果你刷得多还可以向初中的教练炫耀.laekov很开心地拥有了第一和第二个id分别叫jiaao430和ais35.\n至于它们是为什么?法拉利430是曾经喜欢汽车的laekov最喜欢的一款车.至于ais35,这是人脑随机.\n一句后话是laekov直到小学毕业在oj上的刷题量也不超过20道.\n然后大概就到了noip2009.感觉自己萌萌哒laekov和小伙伴f一起去川大江安校区考试.当年的noip还可以使用自己的草稿纸,当年的noip还是当天就可以知道成绩的.然后不知机器密码的laekov进考场就重启机器3次,于是监考老师亲切地抚摸着laekov的头说,小朋友,你怎么又重启呢?此句后流为佳话.\n记得当时的签到题是给出多项式的系数,输出多项式.然而萌萌哒laekov根本不知道多项式是什么,遂弃疗.第二题似乎是水水哒模拟.laekov于是敲之,过之.当然这里指的是样例因为laekov根本不知道什么是对拍.第三题似乎需要高精?然而laekov当时连gcd都不会不知道写了些啥.然后第四题随便写了个贪心感觉是对的啊呵呵哒.\n于是估分,f认为自己能拿300.laekov说少估点200.结局是f暴0,laekov倒是拿了30.\n然后又是一段无聊的时光然后又有一个啥cd市小学生编程比赛?听说全市设两个一等奖?好啊好啊搞啊搞啊.考试似乎是在科协一个老得掉牙的机房里.然后身边的f考试中间一脚踢断了laekov机子的电源呵呵哒.还记得有个题是求fib数列的第k项当然是在int范围里ovo然后还记得一直在调一个日期的题没搞出来.当时还有一个人居然用的是c++感觉那人屌暴了.然后想起当时的机子上似乎只有turble c?似乎连dev都没有?呵呵哒.\n另外laekov毕业前似乎被低一届的数学老师拉去搞了一个选题的软件.也就是从一堆题目里随机选k道题出来.然后用pascal写了个没有ui的程序自我感觉良好.还获了一个奇怪的奖ovo\n然后laekov就去上初中啦.laekov选择初中的方式很简单,翻出noip2009普及组获奖名单,去rank1同学的学校.于是laekov去了jxfls.然后令laekov印象深刻的是考数学的时候以为自己做完了于是玩了良久,最后几分钟才发现还有一面漏做了.然后因此没有奖学金还被老妈怒d至今.\n初中是寄宿的于是发生了很多有趣的故事.比如别人中午都得回寝室午休而laekov则可以在机房浪.因为小学有基础所以laekov强行和初二一起玩.laekov至今唯一能记得的就是上过一次排列组合课.当时觉得好神奇啊.\n然后noip之前停了一个星期的晚自习去做套题.当年的套题其实就是前几年的noip原题啦.然而当年的laekov并不会去oj上刷题所以感觉萌萌哒.\n然后就是初一的noip喽.地点改到uestc.机房变挤了啊差评.然后还拿走了别人的打印版试题ovo然后考试的时候并没有什么大新闻.还记得把第二题写丑了.然后第三题直接错误的贪心40第四题直接dfs居然有50.当年可是根本不会时间复杂度分析的啊.\n然后那年laekov以210分刚好比分数线高10分的成绩拿了普及一等.当年唯一一个初一的哦.还因此被写在了展板上.\n于是接下来的一年都在各种浪啊浪啊浪.似乎oj上的总刷题量也不超过10道题?\n然后就到了noip2011?然后laekov发现咦怎么停课集训题去年就见过啊呵呵哒随手ak几发好了.\n于是laekov决定noip2011同时挑战普及和提高.那年提高正好改成了两试六题而且挪到了cdqz高新校区.day1的时候laekov一直在写那个奇怪的mayan游戏最后还是直接输出-1走人.然后因为上午吃巧克力过多所以下午状态特别不好.最后回家的车上差点吐出来.第二天也受了一些影响于是gg.\n那次似乎当天没有出结果.laekov是星期一才知道的.提高组180+0了.如果day2正常一点说不定都能一等oov.然后普及只有100分光荣了.原因似乎是第二题行末判成了chr(13),第三题只会冒泡排序全部tle完.第四题根本不知道在写什么ovooovo\n于是初一就拿了一等的laekov感觉十分不开心.当天晚上为了能睡好吞了整整一盒感冒药.也许这也是为什么现在的laekov智商严重不足的原因之一.\n于是laekov决定不要再浪下去了.于是laekov也许刷了更多的题吧.然后laekov似乎被年级组长抓去用excel统计分数段分布?原来年级组长之前都是靠眼睛看的?laekov表示不服.于是laekov一怒之下写了一个pascal的程序来搞这种事情.然后使用过程中发现了一堆bug让laekov十分汗颜.\nlaekov在初二寒假的时候决心转cpp.因为之前有看过cpp的语法基础所以并没有多大的困难.只是后来才知道iostream.h早就被淘汰了十分的ovo.\n然后就是一个天天打游戏的暑假和noip2012.\n这年似乎做了一些模拟题.也记得高三的某学长在电阅用笔记本做出了去年的mayan.当时感觉他好厉害啊.这年的模拟题终于不是noip陈题而改成了noi导刊.感觉很赞啊.于是laekov的成绩炸掉了ovo\n然后也是在这个时候laekov终于明白了dp是什么东西.当时还天真地认为dp和动态规划是两个东西ovoovo当时还养成了一个laekov到退役还没有改掉的习惯,用f作为dp数组而不是dp.\n然后就到了noip时节.似乎laekov吸取了去年的教训坚决不吃巧克力.似乎noip刚好是laekov的生日于是laekov考完day2回家过生日.btw当年的laekov依然不会复杂度分析.\n然后laekov就上考场了.似乎noip2012提高组并没有dp.然而普及组第三题居然是dp?于是laekov十分愉快地打了第三题.然而当年的laekov仍然不会对拍于是愉快地把输出最后一个格子变成了输出最后一列的和然后再见0分.另外普及第二题因为没有考虑第一层楼要走所以也0分了.于是laekov凭借第一题和忘剪枝的60分的第四题拿了普及一等.\n然后提高似乎因为奇怪的得分加上奇怪的一等线政策laekov也是一等.然后就被拉去年级运动会当旗手了这是smg.\n于是初三了laekov与oi暂别一段然而还是天天中午去机房,不过项目变成了cs.\nlaekov因为noip考得还不错于是去了scoi2013.然后发现cdqz的人好多啊而且还偷拍结果不小心偷拍下了l老师,这张照片在一年后被l老师看见了大家都觉得十分神奇.\n然而当年依然不会复杂度分析也不会线段树,而且只会用邻接矩阵存图只会用floyd跑最短路的laekov当然只能拿40分走人了.居然有40分啊好感人啊.嗯当年的laekov似乎还和老妈闹翻了也是神奇.\n那段时间感觉自己特别叛逆.晚上在寝室偷偷drink.于是直到现在也习惯在不开心的时候喝几瓶比如写这段文字的时候laekov的手边就有若干瓶纯生.\nbtw直到初中毕业laekov在tyvj上的刷题量也不过60+.在bzoj上恰好过掉了1000(这是题号不是题数啊).\n然后laekov就去中考了.\n中考似乎并不是重点.那年似乎数学比较难于是laekov比正常成绩少了10多分.不过还是上了cdqz的招生线.于是成为了cdqz的学生.\n然后就放暑假了.cdqz的教头z老让laekov去跟着正要去noi的14届的学长训练.当时laekov正要坐火车去西安,z老给laekov介绍了一个叫mhy的小伙伴.他大概也和laekov一样对oi感兴趣得比较早然后也进了cdqz.于是和mhy联系了一下之后laekov感觉不错.\n从西安坐火车回来之后laekov有了自己的第二台笔记本.之前那台vista时代的又厚又慢的富士通笔记本早就被弃置了ovo\n这个是一台lenovo的s400.laekov选电脑的第一要意是要轻,要薄.第二是要便宜ovo\n那台电脑的确足够便宜于是预装的似乎是linux?直接把linux删掉装win7是laekov至今后悔的事.\n然后就去了cdqz训练.当年的laekov还不太会用noilinux.同为新手的mhy也差不多.第一次考试的时候似乎机智的laekov骗到了80分感觉还不错,那次mhy拿了40呵呵哒.后来又有一天似乎过掉了一道水水的bfs题然后被z老师狠狠地表扬了一下,laekov感觉自己都要飞起来了.\nlaekov听说14届有一个很厉害的人叫钟神?\n虽然没有报同步赛更没有进省队,不过因为noi刚好在uestc于是laekov就去围观noi2013了.围观的具体方法是等教练在教练会议上拿到题给laekov和mhy,然后laekov和mhy去教练的宾馆在笔记本上写题然后下午等别人看成绩的时候把数据拷出来在cena上测.没错当年的laekov还不会用linux.\nlaekov可是连线段树都不会写的,noi题当然也只有写暴力和写暴力和弃疗.其实树的计数那题laekov似乎已经想到了一个关键点不过因为太弱所以直到退役也没有做出那个题.\n因为和cdqzsc的时间冲了所以laekov就在城南的cdqz高新和城北的uestc之间不停的做简谐运动?雾.laekov清楚地记得从茶店子坐地铁到世纪城的痛苦感觉.\ncdqzsc倒也的确是个好东西.认识了不少很厉害的人.然后还知道了有codeforces这么个神奇的网站.\n于是这个暑假laekov开始认真地学oi.(意思是laekov从前的寒暑假即使想学oi也变成了打游戏)laekov当年还不知道vim当年还在用dev,还把背景调成了看上去很厉害的黑色.\nlaekov还从mhy那里学来了一种好像很厉害的数据结构叫做线段树.初中时laekov根本不敢碰关于树和二叉树的东西.于是laekov感觉自己现在变得好厉害啊.咦不对,应该是mhy好厉害啊.\nlaekov也是从那个暑假开始打cf的.当年的laekov的id还不叫laekov而叫aoao.这里面是有故事的,然而到底为啥呢你猜啊.\nlaekov打的第一场cf是一场正常的11:30场.laekov当时决定晚上8点先去睡到11点再起来打.然后laekov发现醒来之后脑子就像坏掉了一样啊.第一题是smg不会打啊.第二题咦似乎可做?敲敲敲交交交挖挖挖.于是整整一场比赛laekov都在试图做div2的b题,终不过.第二天早上起来发现一个十分愚蠢的错误laekov表示十分ovo\nlaekov打的第二场cf是和网球俱乐部一起去峨眉山的时候打的.住在宾馆里晚上11点半起来high.然后室友根本没回来但是laekov居然没注意到.于是laekov灯都没开坐在床上码题,现在想想也是醉啊.s400可没有键盘背光,而且laekov似乎还借着屏幕的光打了草稿?那场好歹有题能过于是第一次涨了rating非常的开心啊.\n暑假结束去军训之前laekov和小伙伴zt和louis去昆明玩.然后居然又有cf然而laekov没有带电脑.幸好小伙伴们都有带电脑于是laekov十分开心.\n呃然后就是公布分班去军训.laekov被分到了12班听说是高考实验班?逗呢?laekov高考成绩那么烂也能扔这?然而并没有什么跳的办法.\n军训的时候好热啊7天洗了2次澡.而且洗完澡走回来又出一身汗.洁癖的laekov感觉根本受不了于是后来洁癖更重了.当时认识了一个叫hbw的同学也要搞oi觉得很开心.\n回来之后发现mhy没有进实验班.于是在ovo的人的ovo的努力下laekov和mhy集体跳班.laekov去了15而mhy去了隔壁14.感觉很开心.\nbtw因为跳班所以laekov是15班唯一一个同桌是女生的男生,这是一件十分有趣的事.然而因为这与主题无关所以就折叠掉了.laekov还认识了15班的另一些oier分别是lyzy,cyl,jh.laekov初中一起学oi的ymw也在15然而他后来转行去了物理.\n在cdqz的生活比在jxfls自由许多.有很多自己安排的时间.然后中午和晚上也没有硬性的什么要求.于是laekov去了一个叫做305的oi自习教室.当时在这里的有14届唯一一个noi au选手zhx也就是暑假时候听说的钟神.还有若干noisy的高三物理众.\n305有两种桌子.一种是课桌,另一种是有点像美术教室用的那种比较大的比较像办公桌的桌子.laekov发现所以大桌子都被占了,于是只好可怜地在角落里找了一张课桌ovo\nlaekov提着电脑去305开始写代码之后zhx就来围观.然后怒斥laekov这种dev选手.于是laekov从那时起开始学习使用vim.\n那段时间laekov似乎特别naive.什么都不会还感觉自己特别厉害.暑假快结束的时候在mhy的怂恿下laekov去出了一套给本年级的入学考试题.后来再回想,那就是一个笑话23333\nlaekov到那时终于发现s400的笔记本键盘一点也不舒服.然而手边也没有其它的键盘.于是laekov去买了一条ps2转usb的线,拿一把305的不知道哪里来的键盘接上.从此开始了外接键盘的不归路.\nlaekov对接下来的两个月干了啥已经没有印象了.似乎noip前停了一周的课.那几天laekov窝在机房上午考试下午乱玩.laekov发现可以用hdmi转vga线把笔记本的屏幕转到学校破机子的比较大的显示器上,于是十分开心.因为学校机房的机子,实在太差了.\nlaekov那时候还在使用一种奇怪的方式存图.既把所有边按起点排序然后xxxx.每次遇到图的题,laekov的代码都又臭又长还常常错.laekov倒是学会了使用stl的sort和priority_queue,于是也学会了dijkstra+heap.\n当时laekov的小学低一届的学弟yjq也来cdqz参加noip的训练.多年不见yjq也变厉害了.\n然后就是noip2013了.考场还是在cdqz的高新校区.day1的时候laekov感觉不错?当年的laekov似乎没有写过总结那就补一个好了.","title":"Story of laekov"},{"content":"还记得初中每次考完试都有讲卷,唯独中考卷从未讲过.\n高中两年写了不少diary和summary,可是不会有最后一篇了.\n","permalink":"/diary/dbimport_060/","summary":"还记得初中每次考完试都有讲卷,唯独中考卷从未讲过.\n高中两年写了不少diary和summary,可是不会有最后一篇了.","title":"20150719 noi2015 diary 2"},{"content":"昨天是day1,明天是day2,所以今天是day√2.\n去了ali,听了一下技术方面的演讲.发现ali是资瓷开源的很开心啊.然后发现其实data science挺有意思的啊.\n然后去西溪.唯二的感觉是热和挤.于是也成功地没有寻到宝ovo\n然后就回来浪了.明天就可以退役了哈哈哈哈好开心.\n所以我还是太年轻了.\n","permalink":"/diary/dbimport_059/","summary":"昨天是day1,明天是day2,所以今天是day√2.\n去了ali,听了一下技术方面的演讲.发现ali是资瓷开源的很开心啊.然后发现其实data science挺有意思的啊.\n然后去西溪.唯二的感觉是热和挤.于是也成功地没有寻到宝ovo\n然后就回来浪了.明天就可以退役了哈哈哈哈好开心.\n所以我还是太年轻了.","title":"20150718 noi2015 diary√2"},{"content":"最后一次noi的day1.似乎没有想象中的隆重,也没有想象中的紧张.倒是有一点像做梦一样的麻木.\n考场上依然是倒扣的试题和食物和水.每次看到水就想到让监考老师再拿一瓶.今天我也的确这么做了23333\n旁边是lxh背后是ysy真是好神奇ovo瞄了一眼发现lxh在配vim我才想起要配vim于是赶紧去配vim然后再看题.\n第一题咦这是在逗我么?水水水敲敲敲5分钟完事.\n第二题第一眼我以为是dag呢原来是树那不是直接无脑链剖就完了么搞搞搞敲敲敲.咦最近怎么这么喜欢用三个同样的字.\n第三题然后就卡住了.首先肯定大于n/2的素数可以直接乘嘛.然后怎么做50分呢?想了一想似乎可以3k过掉50分?算了一算发现不对诶.然后想了想可以22k过掉?然后可以枚举子集?咦子集那不是可以用vfk的子集反演?咦推推推推于是终于推出了k*2k的感觉了.咦那是不是可以试试200?啊啊跑不过啊ovoovoovo算了算了当骗分了吧.\n于是考完一句话没说吃饭睡觉.睡到2:30老师突然很激动地打电话过来说赶紧来可以查成绩了ovo一脸没睡醒地过去了.然后跪着看成绩,还好100+100+60前两题没跪第三题m/2是闭区间.唉.\n然后萌萌哒爹妈终于来了于是晚上睡觉之前可以找个有网有电有床的地方玩了好开心啊ovoovo\n于是窝还是太弱啦已经排到30+了呢.大概day2会炸炸炸了吧.唉.\n","permalink":"/diary/dbimport_058/","summary":"最后一次noi的day1.似乎没有想象中的隆重,也没有想象中的紧张.倒是有一点像做梦一样的麻木.\n考场上依然是倒扣的试题和食物和水.每次看到水就想到让监考老师再拿一瓶.今天我也的确这么做了23333\n旁边是lxh背后是ysy真是好神奇ovo瞄了一眼发现lxh在配vim我才想起要配vim于是赶紧去配vim然后再看题.\n第一题咦这是在逗我么?水水水敲敲敲5分钟完事.\n第二题第一眼我以为是dag呢原来是树那不是直接无脑链剖就完了么搞搞搞敲敲敲.咦最近怎么这么喜欢用三个同样的字.\n第三题然后就卡住了.首先肯定大于n/2的素数可以直接乘嘛.然后怎么做50分呢?想了一想似乎可以3k过掉50分?算了一算发现不对诶.然后想了想可以22k过掉?然后可以枚举子集?咦子集那不是可以用vfk的子集反演?咦推推推推于是终于推出了k*2k的感觉了.咦那是不是可以试试200?啊啊跑不过啊ovoovoovo算了算了当骗分了吧.\n于是考完一句话没说吃饭睡觉.睡到2:30老师突然很激动地打电话过来说赶紧来可以查成绩了ovo一脸没睡醒地过去了.然后跪着看成绩,还好100+100+60前两题没跪第三题m/2是闭区间.唉.\n然后萌萌哒爹妈终于来了于是晚上睡觉之前可以找个有网有电有床的地方玩了好开心啊ovoovo\n于是窝还是太弱啦已经排到30+了呢.大概day2会炸炸炸了吧.唉.","title":"20150717 noi2015 diary 1"},{"content":"明天就是day1了,所以今天是day0.(咦是不是一年前我写过这句话)\n早上是合照和ovo的开幕式似乎杜主席讲的东西比较,励志?不知道how to 形容.\n下午笔试.感觉经历过一次之后,那种悬的感觉冲淡了许多.虽然还是认真地检查了不过总有一种麻木.这可不太对啊.\n笔试完还很早.深刻了解xj的接待水平之后决定出去浪于是和czr打了半个下午的台球.比较惊讶mhy不会打.其间各种++rp和\u0026ndash;rp的事件发生.倒是感觉noi完了之后自己会台球上瘾ovo感觉美式台球比snooker有成就感一些虽然被czr虐了好几盘.\n咦noi day1之前居然去颓台球是不是会跪啊.\n咦明天就day1了?终于走到了这一天,然时势异也.也许这就是最后一次在oi的赛场上战斗了呢.心态什么的总有些波动.不过,唉,反正不要给自己的青春留下遗憾吧,fighting.\n","permalink":"/diary/dbimport_057/","summary":"明天就是day1了,所以今天是day0.(咦是不是一年前我写过这句话)\n早上是合照和ovo的开幕式似乎杜主席讲的东西比较,励志?不知道how to 形容.\n下午笔试.感觉经历过一次之后,那种悬的感觉冲淡了许多.虽然还是认真地检查了不过总有一种麻木.这可不太对啊.\n笔试完还很早.深刻了解xj的接待水平之后决定出去浪于是和czr打了半个下午的台球.比较惊讶mhy不会打.其间各种++rp和\u0026ndash;rp的事件发生.倒是感觉noi完了之后自己会台球上瘾ovo感觉美式台球比snooker有成就感一些虽然被czr虐了好几盘.\n咦noi day1之前居然去颓台球是不是会跪啊.\n咦明天就day1了?终于走到了这一天,然时势异也.也许这就是最后一次在oi的赛场上战斗了呢.心态什么的总有些波动.不过,唉,反正不要给自己的青春留下遗憾吧,fighting.","title":"20150716 noi2015 diary 0"},{"content":"想起了去年的这个时候,坐在深圳外国语学校的电子阅览室里写相同的东西.那时候还没有doa.那时候还在用百度空间.ovoovo\n这里不得不比较一下今年和去年的noi招待条件ovo去年是6住3,今年是5住4.更郁闷的是洗个澡还得下两层楼ovoovo然后嘛,电子阅览室,根本,不够用嘛.周围站了很多人啊要不是我来得早也没电充了(虽然已经在机房充满了TT然后发现这些人我怎么都不认识)学校这么小想散个步都没处去虽然热得也不想动ovo寝室也热死还不开空调是闹哪样.\n嗯毫无疑问地颓废了一天的cross fire而不是codeforces.感觉我没救了.根本不想写题,笔试已经背了很多遍了.然后也复习不进去.想起zhx说过的,今年也许是心态变了吧.\n然后,嗯,水ovoovo热\n","permalink":"/diary/dbimport_056/","summary":"想起了去年的这个时候,坐在深圳外国语学校的电子阅览室里写相同的东西.那时候还没有doa.那时候还在用百度空间.ovoovo\n这里不得不比较一下今年和去年的noi招待条件ovo去年是6住3,今年是5住4.更郁闷的是洗个澡还得下两层楼ovoovo然后嘛,电子阅览室,根本,不够用嘛.周围站了很多人啊要不是我来得早也没电充了(虽然已经在机房充满了TT然后发现这些人我怎么都不认识)学校这么小想散个步都没处去虽然热得也不想动ovo寝室也热死还不开空调是闹哪样.\n嗯毫无疑问地颓废了一天的cross fire而不是codeforces.感觉我没救了.根本不想写题,笔试已经背了很多遍了.然后也复习不进去.想起zhx说过的,今年也许是心态变了吧.\n然后,嗯,水ovoovo热","title":"20150715 noi2015 diary -1"},{"content":"last training day before noi. 闻到了退役的味道.\n第一题只想到kd-tree doing big die.想到可以持久化一维来降低复杂度不过炸了.\n第二题居然mle了ovo看来size和自己写的judge都不靠谱.arbiter才是王道.\n答案提交题ovoovoovo好神啊想了一堆东西.不过太不切实际了ovo\n所以窝还是太弱辣!准备退役啦!\n","permalink":"/diary/dbimport_055/","summary":"last training day before noi. 闻到了退役的味道.\n第一题只想到kd-tree doing big die.想到可以持久化一维来降低复杂度不过炸了.\n第二题居然mle了ovo看来size和自己写的judge都不靠谱.arbiter才是王道.\n答案提交题ovoovoovo好神啊想了一堆东西.不过太不切实际了ovo\n所以窝还是太弱辣!准备退役啦!","title":"20150713"},{"content":"咦今天712了.离noi还有2天ovo浪浪浪.\n听说今天题会比较难?\n第一题矩阵水过.似乎省选的时候qian qiao有讲过.\n第二题容斥套容斥ovo出题人怎么想的ovoovo然后被卡常是smg.\n第三题是pa原题啊.然而不会.下来看发现只有jcvb一个人过了那玩啥啊.然后网络流水过了40分还被卡了一个点的常woc然后就被水过去了ovo数据出丑了.\n然后晚上去打台球发现自己已经毁了ovoovo\n我太弱啦.\n","permalink":"/diary/dbimport_054/","summary":"咦今天712了.离noi还有2天ovo浪浪浪.\n听说今天题会比较难?\n第一题矩阵水过.似乎省选的时候qian qiao有讲过.\n第二题容斥套容斥ovo出题人怎么想的ovoovo然后被卡常是smg.\n第三题是pa原题啊.然而不会.下来看发现只有jcvb一个人过了那玩啥啊.然后网络流水过了40分还被卡了一个点的常woc然后就被水过去了ovo数据出丑了.\n然后晚上去打台球发现自己已经毁了ovoovo\n我太弱啦.","title":"20150712"},{"content":"在杭州的round 1.感觉今年noi的赛场没有去年高大上ovo尤其是显示器分辨率非常不开心.\n考试的时候出了些奇怪的差错23333\n第一题感觉像是dp分开搞一搞优化一下头好晕拍过了咦过了.\n第二题咦有点像同构咦答案要容斥一下不想拍了交好像过了.\n提答题把朴素写错了ovoovovoovoovo\n所以我还是太弱辣!\n","permalink":"/diary/dbimport_053/","summary":"在杭州的round 1.感觉今年noi的赛场没有去年高大上ovo尤其是显示器分辨率非常不开心.\n考试的时候出了些奇怪的差错23333\n第一题感觉像是dp分开搞一搞优化一下头好晕拍过了咦过了.\n第二题咦有点像同构咦答案要容斥一下不想拍了交好像过了.\n提答题把朴素写错了ovoovovoovoovo\n所以我还是太弱辣!","title":"20150710"},{"content":"#include \u0026lt;bits/stdc++.h\u0026gt;\nusing namespace std;\nconst int maxn = 203; const int maxstr = 1003;\nint n, ted[maxn], tec; char g[maxstr], sq[maxn][maxstr], sa[maxn][maxstr];\nvoid setcol(int c) { printf(\u0026quot;\\33[%dm\u0026quot;, c); }\nvoid init() { FILE* ipf(fopen(\u0026ldquo;bstk.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;)); n = 0; while (fgets(g, sizeof(g), ipf), !feof(ipf)) { char* p; p = strstr(g, \u0026ldquo;\u0026mdash;\u0026rdquo;); if (!p) continue; *p = 0; strcpy(sq[n], g); strcpy(sa[n], p + strlen(\u0026quot;\u0026mdash;\u0026quot;)); ++ n; } fclose(ipf); printf(\u0026quot;%d problems loaded\\n\u0026quot;, n); }\nbool anscmp(char* a, char* b) { for (; *a \u0026amp;\u0026amp; *b; ++ a, ++ b) { if (islower(*a)) *a -= 32; if (islower(*b)) *b -= 32; if (*b == 10) break; else if (*a != *b) return 1; } return 0; }\nint main() { init(); srand(time(0)); int cc(0), ct(0); memset(ted, 0, sizeof(ted)); tec = 0; while (1) { int x; do { x = rand() % n; } while (ted[x] \u0026gt; tec / n); ++ ted[x], ++ tec; char gs[maxstr]; setcol(34); puts(sq[x]); setcol(37); fgets(gs, sizeof(gs), stdin); setcol(32); fprintf(stdout, sa[x]); if (!anscmp(gs, sa[x])) { ++ cc; } ++ ct; fprintf(stderr, \u0026ldquo;\\33[31m%d/\\33[35m%d\\n\u0026rdquo;, cc, ct); } }\n","permalink":"/code/dbimport_273/","summary":"#include \u0026lt;bits/stdc++.h\u0026gt;\nusing namespace std;\nconst int maxn = 203; const int maxstr = 1003;\nint n, ted[maxn], tec; char g[maxstr], sq[maxn][maxstr], sa[maxn][maxstr];\nvoid setcol(int c) { printf(\u0026quot;\\33[%dm\u0026quot;, c); }\nvoid init() { FILE* ipf(fopen(\u0026ldquo;bstk.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;)); n = 0; while (fgets(g, sizeof(g), ipf), !feof(ipf)) { char* p; p = strstr(g, \u0026ldquo;\u0026mdash;\u0026rdquo;); if (!p) continue; *p = 0; strcpy(sq[n], g); strcpy(sa[n], p + strlen(\u0026quot;\u0026mdash;\u0026quot;)); ++ n; } fclose(ipf); printf(\u0026quot;%d problems loaded\\n\u0026quot;, n); }","title":"recite.cc"},{"content":"最后一天在学校训练了呢.也许再也没有机会回机房了.好开心ovo(咦画风没对)\n上午考试一副把noi的rp都用完的节奏.然后看到mhy达叶两小时ak走人整个人都吓傻了.\n第一题不会不过打表水过.\n第二题用了两次判别式其实没那么复杂.\n第三题原题ovoovoovo\n下午的时候又是颁奖ovoovo想起了去年发给我的风扇.一年过去了.感慨ing\n然后oj7也完成使命了.唉,虽然写得要多丑有多丑不过还是凑合过了将近一年ovoovo\n然后才成都没四天又走了ovoovo这回是真正踏上不归路了.The fork.\n唉我还是太弱了.\n","permalink":"/diary/dbimport_052/","summary":"最后一天在学校训练了呢.也许再也没有机会回机房了.好开心ovo(咦画风没对)\n上午考试一副把noi的rp都用完的节奏.然后看到mhy达叶两小时ak走人整个人都吓傻了.\n第一题不会不过打表水过.\n第二题用了两次判别式其实没那么复杂.\n第三题原题ovoovoovo\n下午的时候又是颁奖ovoovo想起了去年发给我的风扇.一年过去了.感慨ing\n然后oj7也完成使命了.唉,虽然写得要多丑有多丑不过还是凑合过了将近一年ovoovo\n然后才成都没四天又走了ovoovo这回是真正踏上不归路了.The fork.\n唉我还是太弱了.","title":"20150708"},{"content":"七月七号，七七事变？\n说好的信心题不见了。\n第一题正解的根本不会。然后打表ovo\n第二题还好听了那么几节数学课。\n第三题 啥东西啊ovooovooovo\n所以我太弱了。\n","permalink":"/diary/dbimport_051/","summary":"七月七号，七七事变？\n说好的信心题不见了。\n第一题正解的根本不会。然后打表ovo\n第二题还好听了那么几节数学课。\n第三题 啥东西啊ovooovooovo\n所以我太弱了。","title":"20150707"},{"content":"在黄花机场写最后一篇总结.\n最近两天考得都很逗.虽然昨天晚上强行解烧,不过今天早上显然没好全于是2小时写完代码开始颓.感觉好对不起人民啊.\n第一题不是和昨天晚上bc的b题很像么.三元环的数目是O(m1.5)的.于是随便思考了一个感觉不太会错的算法就交了.然后居然能过.然后居然把1和2看反了扔掉60分.我没救了.\n第二题错误的三分居然能拿80.然而,O2直接全输出0是什么情况啊.不知道喽.\n第三题正好复习一下manacher.正解肯定当时想不出来ovo我太弱了.\n身体各种不资瓷啊.据说是流感?好吓人.\n于是再总结一下这回在外面待的10天吧.\n考试来讲看上去还不错,不过问题其实比较大.常常把朴素算法或者正解写错.然后很多题也想不到正解.然而正解其实不难.noi的时候需要注意的是把该写好的东西写好,检查对.要不就亏了.\n然后听讲的效率还是蛮低啊.感觉上高中之后这一直是个很困扰我的问题.当然做笔记是个好办法不过有时候如果听不下去了也要及时止损.\n还有这回和czr还有rause两位大爷交流得比较多.感觉人家上海人就是会玩!在数学和思维这两方面的确和别人有差距.然后别人家的学校和cdqz,唉.可能也是因为人家经济发达所以教育资源比较充足吧.我们这个西部贫困小山村的井底之蛙学校,没救没救.\n还有yyy.感谢妳能在我最感觉坚持不下去的时候及时给我希望和动力.我不会辜负妳的.\n嗯,我还是太弱了.noi要加油.\n","permalink":"/diary/dbimport_050/","summary":"在黄花机场写最后一篇总结.\n最近两天考得都很逗.虽然昨天晚上强行解烧,不过今天早上显然没好全于是2小时写完代码开始颓.感觉好对不起人民啊.\n第一题不是和昨天晚上bc的b题很像么.三元环的数目是O(m1.5)的.于是随便思考了一个感觉不太会错的算法就交了.然后居然能过.然后居然把1和2看反了扔掉60分.我没救了.\n第二题错误的三分居然能拿80.然而,O2直接全输出0是什么情况啊.不知道喽.\n第三题正好复习一下manacher.正解肯定当时想不出来ovo我太弱了.\n身体各种不资瓷啊.据说是流感?好吓人.\n于是再总结一下这回在外面待的10天吧.\n考试来讲看上去还不错,不过问题其实比较大.常常把朴素算法或者正解写错.然后很多题也想不到正解.然而正解其实不难.noi的时候需要注意的是把该写好的东西写好,检查对.要不就亏了.\n然后听讲的效率还是蛮低啊.感觉上高中之后这一直是个很困扰我的问题.当然做笔记是个好办法不过有时候如果听不下去了也要及时止损.\n还有这回和czr还有rause两位大爷交流得比较多.感觉人家上海人就是会玩!在数学和思维这两方面的确和别人有差距.然后别人家的学校和cdqz,唉.可能也是因为人家经济发达所以教育资源比较充足吧.我们这个西部贫困小山村的井底之蛙学校,没救没救.\n还有yyy.感谢妳能在我最感觉坚持不下去的时候及时给我希望和动力.我不会辜负妳的.\n嗯,我还是太弱了.noi要加油.","title":"20150705"},{"content":"昨天晚上太晕都没写总结ovo\nyjq问我考得好有啥奖励,于是我就发烧了TAT\n昨天考试题感觉还能看啊,然后就gg.\n第一题原来直接for也能50然而我自作多情写了个边界判断还写丑了TT\n第二题的不会.\n第三题想了想数据应该是随机的就直接硬上了居然过了好开心ovo然而好久没写lct了心里略虚.\n所以我还是太弱了.noi挂定了.\n","permalink":"/diary/dbimport_049/","summary":"昨天晚上太晕都没写总结ovo\nyjq问我考得好有啥奖励,于是我就发烧了TAT\n昨天考试题感觉还能看啊,然后就gg.\n第一题原来直接for也能50然而我自作多情写了个边界判断还写丑了TT\n第二题的不会.\n第三题想了想数据应该是随机的就直接硬上了居然过了好开心ovo然而好久没写lct了心里略虚.\n所以我还是太弱了.noi挂定了.","title":"20150703"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32\ndefine lld \u0026ldquo;%I64d\u0026rdquo; #else\ndefine lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct kdnode { int p[2], r[2][2], v; dint h; kdnode *ch[2]; inline void update(); }; struct candy { int a[2], v; void read() { scanf(\u0026quot;%d%d%d\u0026quot;, a, a + 1, \u0026amp;v); } };\ntypedef struct biobj { double x, y; biobj() {} biobj(double xo, double yo) { x = xo, y = yo; } } point, vect; inline biobj operator +(const biobj\u0026amp; a, const biobj\u0026amp; b) { return biobj(a. x + b. x, a. y + b. y); } inline biobj operator -(const biobj\u0026amp; a, const biobj\u0026amp; b) { return biobj(a. x - b. x, a. y - b. y); } inline double operator *(const biobj\u0026amp; a, const biobj\u0026amp; b) { return a. x * b. y - a. y * b. x; }\nconst double eps = 1e-7; inline int sgn(const double x) { return (x \u0026gt; eps) - (x \u0026lt; -eps); }\nconst int maxn = 50003;\nint n, m, ki; dint qs; candy p[maxn]; point pa; vect pv; kdnode knbuf_arr[maxn], *knbuf(knbuf_arr), *krt;\ninline bool kCmp(const candy\u0026amp; a, const candy\u0026amp; b) { if (a. a[ki] == b. a[ki]) return a. a[ki ^ 1] \u0026lt; b. a[ki ^ 1]; else return a. a[ki] \u0026lt; b. a[ki]; }\n#define upMin(a,b) { if (a \u0026gt; b) a = b; } #define upMax(a,b) { if (a \u0026lt; b) a = b; }\ninline void kdnode :: update() { r[0][0] = r[0][1] = p[0]; r[1][0] = r[1][1] = p[1]; h = v; if (ch[0]) { upMin(r[0][0], ch[0]-\u0026gt; r[0][0]); upMin(r[1][0], ch[0]-\u0026gt; r[1][0]); upMax(r[0][1], ch[0]-\u0026gt; r[0][1]); upMax(r[1][1], ch[0]-\u0026gt; r[1][1]); h += ch[0]-\u0026gt; h; } if (ch[1]) { upMin(r[0][0], ch[1]-\u0026gt; r[0][0]); upMin(r[1][0], ch[1]-\u0026gt; r[1][0]); upMax(r[0][1], ch[1]-\u0026gt; r[0][1]); upMax(r[1][1], ch[1]-\u0026gt; r[1][1]); h += ch[1]-\u0026gt; h; } }\nkdnode* kdBuild(int l, int r) { if (l \u0026gt;= r) return 0; ki ^= 1; int md((l + r) \u0026raquo; 1); nth_element(p + l, p + md, p + r, kCmp); kdnode* u(knbuf ++); u-\u0026gt; p[0] = p[md]. a[0], u-\u0026gt; p[1] = p[md]. a[1], u-\u0026gt; v = p[md]. v; u-\u0026gt; ch[0] = kdBuild(l, md), u-\u0026gt; ch[1] = kdBuild(md + 1, r); u-\u0026gt; update(); ki ^= 1; return u; }\nvoid kdQry(kdnode* p) { if (!p) return; int s00(sgn((point(p-\u0026gt; r[0][0], p-\u0026gt; r[1][0]) - pa) * pv)); int s01(sgn((point(p-\u0026gt; r[0][0], p-\u0026gt; r[1][1]) - pa) * pv)); int s10(sgn((point(p-\u0026gt; r[0][1], p-\u0026gt; r[1][0]) - pa) * pv)); int s11(sgn((point(p-\u0026gt; r[0][1], p-\u0026gt; r[1][1]) - pa) * pv)); if (s00 \u0026gt; 0 \u0026amp;\u0026amp; s01 \u0026gt; 0 \u0026amp;\u0026amp; s10 \u0026gt; 0 \u0026amp;\u0026amp; s11 \u0026gt; 0) { qs += p-\u0026gt; h; } else if (s00 \u0026lt;= 0 \u0026amp;\u0026amp; s01 \u0026lt;= 0 \u0026amp;\u0026amp; s10 \u0026lt;= 0 \u0026amp;\u0026amp; s11 \u0026lt;= 0) { return; } else { if (sgn((point(p-\u0026gt; p[0], p-\u0026gt; p[1]) - pa) * pv) \u0026gt; 0) qs += p-\u0026gt; v; kdQry(p-\u0026gt; ch[0]), kdQry(p-\u0026gt; ch[1]); } }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); for (int i = 0; i \u0026lt; n; ++ i) p[i]. read(); ki = 0; krt = kdBuild(0, n); while (m --) { int a, b, c; scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;a, \u0026amp;b, \u0026amp;c); if (a || b) { if (b == 0) pa = point((double)c / a, 0); else pa = point(0, (double)c / b); pv = vect(b, -a); qs = 0; kdQry(krt); } else qs = (c \u0026gt; 0) ? krt-\u0026gt; h : 0; printf(lld \u0026quot;\\n\u0026quot;, qs); } }\n","permalink":"/code/dbimport_164/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32\ndefine lld \u0026ldquo;%I64d\u0026rdquo; #else\ndefine lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct kdnode { int p[2], r[2][2], v; dint h; kdnode *ch[2]; inline void update(); }; struct candy { int a[2], v; void read() { scanf(\u0026quot;%d%d%d\u0026quot;, a, a + 1, \u0026amp;v); } };\ntypedef struct biobj { double x, y; biobj() {} biobj(double xo, double yo) { x = xo, y = yo; } } point, vect; inline biobj operator +(const biobj\u0026amp; a, const biobj\u0026amp; b) { return biobj(a.","title":"bzoj2850.cc"},{"content":"rausen大爷太强辣!\n嗯看到这个东西,咦,直线某一边的点的权值和?kd-tree上上上.\n于是就开敲kd-tree.敲到一半弃emacs换vim.\n然后就wa了.然后发现double的精度太高了ovoovo\n于是rausen跑得好快啊.\n","permalink":"/oi/dbimport_165/","summary":"rausen大爷太强辣!\n嗯看到这个东西,咦,直线某一边的点的权值和?kd-tree上上上.\n于是就开敲kd-tree.敲到一半弃emacs换vim.\n然后就wa了.然后发现double的精度太高了ovoovo\n于是rausen跑得好快啊.","title":"bzoj2850 巧克力王国"},{"content":"终于阴天了好开心.在成都都是盼着晴天的ovo\n上午似乎是镇海众的考试ovo感觉他们好强啊ovo于是两道高精ovo\n第一题其实不想写了不过反正第二题直接写了fft所以就粘过来了.感觉分治乘的思路还是比较好想的就是fft卡卡常数而已Ovo\n第二题嗯啊好像没啥.高精开根写过啊虽然都快两年了.\n第三题只会写朴素30分还把输出的顺序给搞反了ovoovo真是**.然后居然是道论文题.思路就是把一个不靠谱的复杂度证明成只含有一个n的式子.感觉好神.如果Noi考场上遇到这种题的话还是只求不把输出格式搞错QwQ\n其实第三题本来可以多想一想的,不过上午把很多时间花在研究emacs上了所以就没有认真研究ovo感觉emacs这个东西和vim完全是两种风格不过都挺厉害.\n下午难得听了一回课虽然过一会就发呆去了ovoovo\n所以我还是太年轻了.\n","permalink":"/diary/dbimport_048/","summary":"终于阴天了好开心.在成都都是盼着晴天的ovo\n上午似乎是镇海众的考试ovo感觉他们好强啊ovo于是两道高精ovo\n第一题其实不想写了不过反正第二题直接写了fft所以就粘过来了.感觉分治乘的思路还是比较好想的就是fft卡卡常数而已Ovo\n第二题嗯啊好像没啥.高精开根写过啊虽然都快两年了.\n第三题只会写朴素30分还把输出的顺序给搞反了ovoovo真是**.然后居然是道论文题.思路就是把一个不靠谱的复杂度证明成只含有一个n的式子.感觉好神.如果Noi考场上遇到这种题的话还是只求不把输出格式搞错QwQ\n其实第三题本来可以多想一想的,不过上午把很多时间花在研究emacs上了所以就没有认真研究ovo感觉emacs这个东西和vim完全是两种风格不过都挺厉害.\n下午难得听了一回课虽然过一会就发呆去了ovoovo\n所以我还是太年轻了.","title":"20150701"},{"content":"今天是一个很特别的日子,嗯.虽然,其实也没发生什么.\n上午考试Ovo杜教题ovo\n第一题思考了一下给出了关于flag概率的结论.但是比较纠结是不是对的,于是抱着弃疗的心态写了50分的高消就没管了.其实如果仔细观察一下方程说不定都能发现是怎么回事的.\n于是把时间花第二题上了.一直在想能不能数据结构硬刚.然后结局是正解是贪心TT感觉自己不会再爱了.虽然最后靠乱搞多拿10分不过并没啥用.\n第三题比较正常地想到了60分的dp.不过感觉再往下想是件非常麻烦的事情于是就放弃了.\n于是睡了很久ovo不能怪题太强,只能怪自己太懒ovo\n果然最近是懒癌发作了ovo真伤心.\n试图学学emacs不过比较无果.\n晚上居然花了将近3个小时去看一个mc的贴,怎么就把时间花在这种地方了TT\n所以我还是太年轻了.看来noi是要跪了.\n","permalink":"/diary/dbimport_047/","summary":"今天是一个很特别的日子,嗯.虽然,其实也没发生什么.\n上午考试Ovo杜教题ovo\n第一题思考了一下给出了关于flag概率的结论.但是比较纠结是不是对的,于是抱着弃疗的心态写了50分的高消就没管了.其实如果仔细观察一下方程说不定都能发现是怎么回事的.\n于是把时间花第二题上了.一直在想能不能数据结构硬刚.然后结局是正解是贪心TT感觉自己不会再爱了.虽然最后靠乱搞多拿10分不过并没啥用.\n第三题比较正常地想到了60分的dp.不过感觉再往下想是件非常麻烦的事情于是就放弃了.\n于是睡了很久ovo不能怪题太强,只能怪自己太懒ovo\n果然最近是懒癌发作了ovo真伤心.\n试图学学emacs不过比较无果.\n晚上居然花了将近3个小时去看一个mc的贴,怎么就把时间花在这种地方了TT\n所以我还是太年轻了.看来noi是要跪了.","title":"20150628"},{"content":"镇海题\u0026hellip;考试的时候内心的绝望ovo\n第一题只想到了朴素的做法.完全没想到网络流那边去.没想到启发了半天骗来80还是挺开心的.但是居然花了那么多时间在debug上比较郁闷.\n第二题最初根本没有思路啊.最后1小时的时候突然发现,咦,基环内向树?那直接判断在不在一个连通块里就行了吧?整体二分+并查集?写写写.40分钟的时候,写完辣,咦过不到样例?maya哪是内向树是外向树.应该是判祖先关系啊.然后?整体二分+ett?去noi吧半小时肯定写不完.后来听说其实根本不用整体二分啊\u0026hellip;所以可以搞成静态的啊\u0026hellip;撞死ing\u0026hellip;听上去也不难写嘛\u0026hellip;更奇妙的是居然我那个错误的内向树写法交上去60\u0026hellip;\n剩下的时间都在想第三题了\u0026hellip;然后发现一个式子似乎可以推一推构造答案?咦似乎能过?然后证明\u0026hellip;我想的和标解根本不是一个东西\u0026hellip;(咦今天为啥那么喜欢打\\dots)转化成基环树(又是基环树wtf)的做法好神奇好开心.\n于是因为奇怪的数据我就不小心拿了rank1整个人都是虚的ovo\n下午讲题好快于是留了几乎2个小时来颓,然后只过了1个题好无语.\n晚上更颓更无语ovoovo\n毕竟我还是太年轻了.这个样子怎么考noi啊不开心TT\n","permalink":"/diary/dbimport_046/","summary":"镇海题\u0026hellip;考试的时候内心的绝望ovo\n第一题只想到了朴素的做法.完全没想到网络流那边去.没想到启发了半天骗来80还是挺开心的.但是居然花了那么多时间在debug上比较郁闷.\n第二题最初根本没有思路啊.最后1小时的时候突然发现,咦,基环内向树?那直接判断在不在一个连通块里就行了吧?整体二分+并查集?写写写.40分钟的时候,写完辣,咦过不到样例?maya哪是内向树是外向树.应该是判祖先关系啊.然后?整体二分+ett?去noi吧半小时肯定写不完.后来听说其实根本不用整体二分啊\u0026hellip;所以可以搞成静态的啊\u0026hellip;撞死ing\u0026hellip;听上去也不难写嘛\u0026hellip;更奇妙的是居然我那个错误的内向树写法交上去60\u0026hellip;\n剩下的时间都在想第三题了\u0026hellip;然后发现一个式子似乎可以推一推构造答案?咦似乎能过?然后证明\u0026hellip;我想的和标解根本不是一个东西\u0026hellip;(咦今天为啥那么喜欢打\\dots)转化成基环树(又是基环树wtf)的做法好神奇好开心.\n于是因为奇怪的数据我就不小心拿了rank1整个人都是虚的ovo\n下午讲题好快于是留了几乎2个小时来颓,然后只过了1个题好无语.\n晚上更颓更无语ovoovo\n毕竟我还是太年轻了.这个样子怎么考noi啊不开心TT","title":"20150627"},{"content":"之前感觉是sg函数.不过不会.在wulala神犇的指点下找来题解看了一下.太神辣.自己肯定想不出来\u0026hellip;\n设以点u为根的子树的局面的sg值为sgu.设以u为根的子树中先手先hack掉v后的sg函数为gu,v.\n那么gu,v = f[v] xor ∑ fu到v路径上所有点的非主干儿子.\n然后fu = mex{gu,v}\n这个转移得转移是O(n2)的样子吧.\n然后发现某棵子树的g其实每次都是异或了一个相同的值.而且会合并.\n咦可以用trie来优化一下.打下标记啥的.然后根据主席的论文这个东西是O(log n)的?虽然感觉复杂度证明没有说清楚啊ovoovo\n然后就在trie树标记上卡了好久啊火冒三丈ing\n","permalink":"/oi/dbimport_246/","summary":"之前感觉是sg函数.不过不会.在wulala神犇的指点下找来题解看了一下.太神辣.自己肯定想不出来\u0026hellip;\n设以点u为根的子树的局面的sg值为sgu.设以u为根的子树中先手先hack掉v后的sg函数为gu,v.\n那么gu,v = f[v] xor ∑ fu到v路径上所有点的非主干儿子.\n然后fu = mex{gu,v}\n这个转移得转移是O(n2)的样子吧.\n然后发现某棵子树的g其实每次都是异或了一个相同的值.而且会合并.\n咦可以用trie来优化一下.打下标记啥的.然后根据主席的论文这个东西是O(log n)的?虽然感觉复杂度证明没有说清楚啊ovoovo\n然后就在trie树标记上卡了好久啊火冒三丈ing","title":"bzoj4134 ljw和lzr的hack比赛"},{"content":"#include #include #include using namespace std;\nstruct edge { int t; edge *ne; };\nstruct node { int sz, rv; node *ch[2]; };\nconst int maxn = 100003; const int maxnd = maxn * 46; const int maxl = 19;\nint n, vo[maxn], f[maxn], sp[maxn], tsp; node nbuf_arr[maxnd], *nbuf(nbuf_arr), *rt[maxn]; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf(ebuf_arr), *head[maxn];\n#define szof(p) (p?p-\u0026gt;sz:0)\ninline void pushDown(node* q, int l) { if ((q-\u0026gt; rv \u0026raquo; l) \u0026amp; 1) swap(q-\u0026gt; ch[0], q-\u0026gt; ch[1]); if (q-\u0026gt; ch[0]) q-\u0026gt; ch[0]-\u0026gt; rv ^= q-\u0026gt; rv; if (q-\u0026gt; ch[1]) q-\u0026gt; ch[1]-\u0026gt; rv ^= q-\u0026gt; rv; q-\u0026gt; rv = 0; }\nnode* trieIns(int v) { node s(nbuf ++), p(s); for (int i = maxl; i \u0026gt;= 0; \u0026ndash; i) { int d((v \u0026raquo; i)\u0026amp; 1); p-\u0026gt; sz = 1, p-\u0026gt; rv = 0; p-\u0026gt; ch[d ^ 1] = 0; p-\u0026gt; ch[d] = nbuf ++; p = p-\u0026gt; ch[d]; } p-\u0026gt; sz = 1; return s; } node trieMerge(node p, node* q, int l, int x) { if (!p) { if (q) q-\u0026gt; rv ^= x; return q; } else if (!q) { return p; } node r(nbuf ++); if (l == -1) { r-\u0026gt; ch[0] = r-\u0026gt; ch[1] = 0; r-\u0026gt; sz = 1, r-\u0026gt; rv = 0; } else { int d((x \u0026raquo; l) \u0026amp; 1); pushDown(p, l); pushDown(q, l); r-\u0026gt; ch[0] = trieMerge(p-\u0026gt; ch[0], q-\u0026gt; ch[d], l - 1, x); r-\u0026gt; ch[1] = trieMerge(p-\u0026gt; ch[1], q-\u0026gt; ch[d ^ 1], l - 1, x); r-\u0026gt; sz = szof(r-\u0026gt; ch[0]) + szof(r-\u0026gt; ch[1]); } return r; } int trieMex(node p) { int ans(0); for (int i = maxl; i \u0026gt;= 0 \u0026amp;\u0026amp; p; \u0026ndash; i) { pushDown(p, i); if (szof(p-\u0026gt; ch[0]) == (1 \u0026laquo; i)) { p = p-\u0026gt; ch[1]; ans |= 1 \u0026laquo; i; } else p = p-\u0026gt; ch[0]; } return ans; }\nvoid triePrint(node* p, int l, int v) { if (l == -1) { fprintf(stderr, \u0026ldquo;%d \u0026ldquo;, v); } else { pushDown(p, l); if (p-\u0026gt; ch[0]) triePrint(p-\u0026gt; ch[0], l - 1, v); if (p-\u0026gt; ch[1]) triePrint(p-\u0026gt; ch[1], l - 1, v | (1 \u0026laquo; l)); } }\nvoid sgDFS(int p, int fr) { rt[p] = 0; int xs(0); for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (e-\u0026gt; t != fr) { sgDFS(e-\u0026gt; t, p); xs ^= f[e-\u0026gt; t]; } if (!vo[p]) rt[p] = trieIns(xs); for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (e-\u0026gt; t != fr) rt[p] = trieMerge(rt[p], rt[e-\u0026gt; t], maxl, xs ^ f[e-\u0026gt; t]); f[p] = trieMex(rt[p]); }\nvoid ansDFS(int p, int fr, int xf) { int xs(0); for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (e-\u0026gt; t != fr) xs ^= f[e-\u0026gt; t]; if (vo[p] == 0 \u0026amp;\u0026amp; (xs ^ xf) == 0) sp[tsp ++] = p; for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (e-\u0026gt; t != fr) ansDFS(e-\u0026gt; t, p, xf ^ xs ^ f[e-\u0026gt; t]); }\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; ne = head[u]; head[u] = ebuf ++; }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); for (int i = 1; i \u0026lt;= n; ++ i) scanf(\u0026quot;%d\u0026quot;, vo + i); memset(head, 0, sizeof(head)); for (int i = 1; i \u0026lt; n; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); addEdge(u, v); addEdge(v, u); } sgDFS(1, 0); if (f[1]) { tsp = 0; ansDFS(1, 0, 0); sort(sp, sp + tsp); for (int i = 0; i \u0026lt; tsp; ++ i) printf(\u0026quot;%d%c\u0026quot;, sp[i], 10); } else puts(\u0026quot;-1\u0026quot;); }\n","permalink":"/code/dbimport_245/","summary":"#include #include #include using namespace std;\nstruct edge { int t; edge *ne; };\nstruct node { int sz, rv; node *ch[2]; };\nconst int maxn = 100003; const int maxnd = maxn * 46; const int maxl = 19;\nint n, vo[maxn], f[maxn], sp[maxn], tsp; node nbuf_arr[maxnd], *nbuf(nbuf_arr), *rt[maxn]; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf(ebuf_arr), *head[maxn];\n#define szof(p) (p?p-\u0026gt;sz:0)\ninline void pushDown(node* q, int l) { if ((q-\u0026gt; rv \u0026raquo; l) \u0026amp; 1) swap(q-\u0026gt; ch[0], q-\u0026gt; ch[1]); if (q-\u0026gt; ch[0]) q-\u0026gt; ch[0]-\u0026gt; rv ^= q-\u0026gt; rv; if (q-\u0026gt; ch[1]) q-\u0026gt; ch[1]-\u0026gt; rv ^= q-\u0026gt; rv; q-\u0026gt; rv = 0; }","title":"bzoj4134.cc"},{"content":"#include #include #include using namespace std;\nstruct mov { int x, y, d; mov() { x = y = d = 0; } void rot(); };\nconst int maxl = 33;\nint le[maxl], t; mov a[maxl], b[maxl];\nvoid mov :: rot() { int xo(x), yo(y); y = xo, x = -yo; d = (d + 1) \u0026amp; 3; }\nmov operator +(mov a, mov b) { mov r; for (int i = 0; i \u0026lt; a. d; ++ i) b. rot(); r. x = a. x + b. x, r. y = a. y + b. y; r. d = b. d; return r; }\nvoid pre() { a[0]. x = 1, a[0]. y = 0, a[0]. d = 1; b[0]. x = 1, b[0]. y = 0, b[0]. d = 3; le[0] = 1; for (int i = 1; le[i - 1] \u0026lt; 1e9; t = ++ i) { le[i] = le[i - 1] * 2 + 1; a[i] = a[i - 1] + a[0] + b[i - 1]; b[i] = a[i - 1] + b[0] + b[i - 1]; } }\nmov ans;\nvoid DFS(int l, int x, int r) { if (!l) { if (!r) ans = ans + a[0]; else ans = ans + b[0]; } else if (x \u0026lt;= le[l - 1]) { DFS(l - 1, x, 0); } else if (x \u0026gt;= le[l - 1] + 1) { if (!r) ans = ans + a[l - 1] + a[0]; else ans = ans + a[l - 1] + b[0]; if (x \u0026gt; le[l - 1] + 1) DFS(l - 1, x - le[l - 1] - 1, 1); } }\nvoid calc(int x) { if (x) { ans = mov(); DFS(t, x, 0); printf(\u0026quot;(%d,%d)\\n\u0026quot;, ans. x, ans. y); } else puts(\u0026quot;(0,0)\u0026quot;); }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nint x; pre(); while (scanf(\u0026quot;%d\u0026quot;, \u0026amp;x), x != -1) calc(x); }\n","permalink":"/code/dbimport_158/","summary":"#include #include #include using namespace std;\nstruct mov { int x, y, d; mov() { x = y = d = 0; } void rot(); };\nconst int maxl = 33;\nint le[maxl], t; mov a[maxl], b[maxl];\nvoid mov :: rot() { int xo(x), yo(y); y = xo, x = -yo; d = (d + 1) \u0026amp; 3; }\nmov operator +(mov a, mov b) { mov r; for (int i = 0; i \u0026lt; a.","title":"bzoj2781.cc"},{"content":"上课题.之前只有5个人过5个人交.我成功地拉低了这题的通过率yeah.\n其实就是考虑Si序列走完之后对x和y的贡献以及对方向的改变就好了.\n比较烦的是中间那一个东西是哪个方向.然后发现如果在上一层的左边就是1否则是0.和更上层没有关系不能直接异或往下传.\n代码越写越丑了TAT\n","permalink":"/oi/dbimport_159/","summary":"上课题.之前只有5个人过5个人交.我成功地拉低了这题的通过率yeah.\n其实就是考虑Si序列走完之后对x和y的贡献以及对方向的改变就好了.\n比较烦的是中间那一个东西是哪个方向.然后发现如果在上一层的左边就是1否则是0.和更上层没有关系不能直接异或往下传.\n代码越写越丑了TAT","title":"bzoj2781 机器人走步"},{"content":"hn集训day1\u0026hellip;感觉炎热的天气要把我的智商烧焦了\u0026hellip;所有题都没想到啊ovovo\n早上考试\u0026hellip;第一题根本没想到高消那边去.于是直接欺负随机数据居然就过了ovovoovo\n第二题嘛\u0026hellip;昨天在飞机上还在思考vfk的论文来着.但是还没吃透所以就gg了.然后也没有想到变换之后可以直接找根.\n第三题比较ovo想到的启发式合并的思路几乎是对的.然而sbt里插入的时候没有给当前点的size++导致了一场悲剧.撞死的心都有了\u0026hellip;然后当时的我居然还傻傻地以为是做法的复杂度没算对于是就弃疗了ovovo\n所以我还是太弱了然后跪ak爷mhy\u0026hellip;\n下午听讲似乎没啥事\u0026hellip;中午看sdfz几个同学在研究4399的flash版cf.只想说黑得漂亮啊.然而空间站这图重力调回去之后就不好玩了啊\u0026hellip;\n然后下午讲题也就那样呗ovoovo感觉还比较能听\u0026hellip;\n晚上发现一个人在房间里会更颓啊ovovo\n所以我还是太年轻了.\n","permalink":"/diary/dbimport_045/","summary":"hn集训day1\u0026hellip;感觉炎热的天气要把我的智商烧焦了\u0026hellip;所有题都没想到啊ovovo\n早上考试\u0026hellip;第一题根本没想到高消那边去.于是直接欺负随机数据居然就过了ovovoovo\n第二题嘛\u0026hellip;昨天在飞机上还在思考vfk的论文来着.但是还没吃透所以就gg了.然后也没有想到变换之后可以直接找根.\n第三题比较ovo想到的启发式合并的思路几乎是对的.然而sbt里插入的时候没有给当前点的size++导致了一场悲剧.撞死的心都有了\u0026hellip;然后当时的我居然还傻傻地以为是做法的复杂度没算对于是就弃疗了ovovo\n所以我还是太弱了然后跪ak爷mhy\u0026hellip;\n下午听讲似乎没啥事\u0026hellip;中午看sdfz几个同学在研究4399的flash版cf.只想说黑得漂亮啊.然而空间站这图重力调回去之后就不好玩了啊\u0026hellip;\n然后下午讲题也就那样呗ovoovo感觉还比较能听\u0026hellip;\n晚上发现一个人在房间里会更颓啊ovovo\n所以我还是太年轻了.","title":"20150626"},{"content":"在家里的windows上用机械键盘的感觉真不一样呢。\n于教授的题，教我做人orz。\n第一题没有想到利用向量加减和相对速度。于是想了一些奇怪的自适应算法去骗分。然而效果不怎么理想。\n第二题是ommy老师的题，于是比较开心地很快过掉了。其实一年前zhx就出过此题的弱化版ovovoo\n第三题一直在想能不能转成线性的。最后居然是个玩矩阵的题啊太神了。想过高消自由元不过没想到会有那么神。看来我还是太弱了一点啊。\n下午讨论的时候发现为啥sf那么多问题ovovovo\n走的时候收拾了东西。把显示器还给学校。把机械键盘背回家。也许以后就没有机会回来了呢。唉。若干年的oi生涯走到了一个分水岭。Fight for dream or beg for survival? All on myself.\n所以啊，我还是太弱了ovovoo\n明天还要会考啊ovovov感觉啥都不会啊一股要跪的感觉。\n","permalink":"/diary/dbimport_044/","summary":"在家里的windows上用机械键盘的感觉真不一样呢。\n于教授的题，教我做人orz。\n第一题没有想到利用向量加减和相对速度。于是想了一些奇怪的自适应算法去骗分。然而效果不怎么理想。\n第二题是ommy老师的题，于是比较开心地很快过掉了。其实一年前zhx就出过此题的弱化版ovovoo\n第三题一直在想能不能转成线性的。最后居然是个玩矩阵的题啊太神了。想过高消自由元不过没想到会有那么神。看来我还是太弱了一点啊。\n下午讨论的时候发现为啥sf那么多问题ovovovo\n走的时候收拾了东西。把显示器还给学校。把机械键盘背回家。也许以后就没有机会回来了呢。唉。若干年的oi生涯走到了一个分水岭。Fight for dream or beg for survival? All on myself.\n所以啊，我还是太弱了ovovoo\n明天还要会考啊ovovov感觉啥都不会啊一股要跪的感觉。","title":"20150624"},{"content":"原来是yali的题\u0026hellip;我一看到fft就想到魏总\u0026hellip;\n第一题原来是那样做的\u0026hellip;感觉我的做法没啥不好只是常数大了点,嘛.\n第二题fft不过之前一直不知道它自带了多项式取模.毕竟我还是naive\n第三题神题啊ovoovo\n所以我还是太 弱了.\n","permalink":"/diary/dbimport_043/","summary":"原来是yali的题\u0026hellip;我一看到fft就想到魏总\u0026hellip;\n第一题原来是那样做的\u0026hellip;感觉我的做法没啥不好只是常数大了点,嘛.\n第二题fft不过之前一直不知道它自带了多项式取模.毕竟我还是naive\n第三题神题啊ovoovo\n所以我还是太 弱了.","title":"20150623"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxl = 103;\nint bi[maxl], le; dint f[maxl], g[maxl][2];\ndint digDP(dint n) { le = 0; for (; n; n \u0026raquo;= 1, ++ le) bi[le] = n \u0026amp; 1; bi[le ++] = 0; memset(f, 0, sizeof(f)); memset(g, 0, sizeof(g)); g[0][0] = g[0][1] = 1; for (int i = 1; i \u0026lt; le; ++ i) { g[i][0] = g[i - 1][0] + g[i - 1][1]; g[i][1] = g[i - 1][0]; } f[0] = 1; for (int i = 1; i \u0026lt; le; ++ i) if (bi[i] == 1) { if (bi[i - 1] == 1) f[i] = g[i - 1][0]; else f[i] = f[i - 1]; } else { if (bi[i - 1] == 1) f[i] = f[i - 1] + g[i - 1][0]; else f[i] = f[i - 1]; } return f[le - 1] - 1; }\nconst int mod = 1e9 + 7; struct matrix { static const int n = 2; int a[n][n]; inline void clr() { memset(a, 0, sizeof(a)); } matrix() { clr(); } void setOne() { clr(); for (int i = 0; i \u0026lt; n; ++ i) a[i][i] = 1; } void mul(const matrix\u0026amp; b) { static int s[n][n]; memset(s, 0, sizeof(s)); for (int k = 0; k \u0026lt; n; ++ k) for (int i = 0; i \u0026lt; n; ++ i) for (int j = 0; j \u0026lt; n; ++ j) s[i][j] = (s[i][j] + _l a[i][k] * b. a[k][j]) % mod; memcpy(a, s, sizeof(a)); } };\nint matDP(dint n) { matrix a, s; a. clr(); a. a[0][0] = a. a[0][1] = a. a[1][0] = 1; s. setOne(); for (; n; n \u0026raquo;= 1, a. mul(a)) if (n \u0026amp; 1) s. mul(a); int ans((_l s. a[0][0] + s. a[0][1]) % mod); return ans; }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nint t; dint n; scanf(\u0026quot;%d\u0026quot;, \u0026amp;t); while (t --) { scanf(lld, \u0026amp;n); printf(lld \u0026quot;\\n\u0026quot;, digDP(n)); printf(\u0026quot;%d\\n\u0026quot;, matDP(n)); } }\n","permalink":"/code/dbimport_191/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxl = 103;\nint bi[maxl], le; dint f[maxl], g[maxl][2];\ndint digDP(dint n) { le = 0; for (; n; n \u0026raquo;= 1, ++ le) bi[le] = n \u0026amp; 1; bi[le ++] = 0; memset(f, 0, sizeof(f)); memset(g, 0, sizeof(g)); g[0][0] = g[0][1] = 1; for (int i = 1; i \u0026lt; le; ++ i) { g[i][0] = g[i - 1][0] + g[i - 1][1]; g[i][1] = g[i - 1][0]; } f[0] = 1; for (int i = 1; i \u0026lt; le; ++ i) if (bi[i] == 1) { if (bi[i - 1] == 1) f[i] = g[i - 1][0]; else f[i] = f[i - 1]; } else { if (bi[i - 1] == 1) f[i] = f[i - 1] + g[i - 1][0]; else f[i] = f[i - 1]; } return f[le - 1] - 1; }","title":"bzoj3329.cc"},{"content":"还不错的题ovoovo\n发现其实要求x的二进制表示中没有相邻的1就行了.\n第一问水水的数位dp.从未写得如此愉快.\n第二问就是前面的g.然后发现是fib数列.矩阵快速幂搞定.\n","permalink":"/oi/dbimport_192/","summary":"还不错的题ovoovo\n发现其实要求x的二进制表示中没有相邻的1就行了.\n第一问水水的数位dp.从未写得如此愉快.\n第二问就是前面的g.然后发现是fib数列.矩阵快速幂搞定.","title":"bzoj3329 Xorequ"},{"content":"#include #include #include using namespace std;\n#define pow2(x) (1\u0026laquo;(x))\nconst int maxn = 103; const int maxm = 19; const int maxs = pow2(16) + 3;\nint n, m, e, d[maxn], c[maxn][maxm], f[maxs], g[maxs];\ninline void upMin(int\u0026amp; a, const int\u0026amp; b) { if (a \u0026gt; b) a = b; }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); for (int i = 1; i \u0026lt;= n; ++ i) { scanf(\u0026quot;%d\u0026quot;, d + i); for (int j = 0; j \u0026lt; m; ++ j) scanf(\u0026quot;%d\u0026quot;, c[i] + j); } memset(f, 0x3f, sizeof(f)); f[0] = 0; e = pow2(m); for (int i = 1; i \u0026lt;= n; ++ i) { memset(g, 0x3f, sizeof(int) * e); for (int j = 0; j \u0026lt; m; ++ j) for (int k = e - 1; k \u0026gt;= 0; -- k) if (k \u0026amp; pow2(j)) { upMin(g[k], g[k ^ pow2(j)] + c[i][j]); upMin(g[k], f[k ^ pow2(j)] + d[i] + c[i][j]); } for (int j = 0; j \u0026lt; e; ++ j) upMin(g[j], f[j]); memcpy(f, g, sizeof(int) * e); } printf(\u0026quot;%d\\n\u0026quot;, f[e - 1]); }\n","permalink":"/code/dbimport_247/","summary":"#include #include #include using namespace std;\n#define pow2(x) (1\u0026laquo;(x))\nconst int maxn = 103; const int maxm = 19; const int maxs = pow2(16) + 3;\nint n, m, e, d[maxn], c[maxn][maxm], f[maxs], g[maxs];\ninline void upMin(int\u0026amp; a, const int\u0026amp; b) { if (a \u0026gt; b) a = b; }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); for (int i = 1; i \u0026lt;= n; ++ i) { scanf(\u0026quot;%d\u0026quot;, d + i); for (int j = 0; j \u0026lt; m; ++ j) scanf(\u0026quot;%d\u0026quot;, c[i] + j); } memset(f, 0x3f, sizeof(f)); f[0] = 0; e = pow2(m); for (int i = 1; i \u0026lt;= n; ++ i) { memset(g, 0x3f, sizeof(int) * e); for (int j = 0; j \u0026lt; m; ++ j) for (int k = e - 1; k \u0026gt;= 0; -- k) if (k \u0026amp; pow2(j)) { upMin(g[k], g[k ^ pow2(j)] + c[i][j]); upMin(g[k], f[k ^ pow2(j)] + d[i] + c[i][j]); } for (int j = 0; j \u0026lt; e; ++ j) upMin(g[j], f[j]); memcpy(f, g, sizeof(int) * e); } printf(\u0026quot;%d\\n\u0026quot;, f[e - 1]); }","title":"bzoj4145.cc"},{"content":"最近总是被一些水题虐智商啊\u0026hellip;怎么回事Ovo\n无脑地状压dp一下就好了.\n每个物品分开dp,这样可以降到O(2m * n * m)级别.\n我还是太弱了.\n","permalink":"/oi/dbimport_248/","summary":"最近总是被一些水题虐智商啊\u0026hellip;怎么回事Ovo\n无脑地状压dp一下就好了.\n每个物品分开dp,这样可以降到O(2m * n * m)级别.\n我还是太弱了.","title":"bzoj4145 [AMPPZ2014]The Prices"},{"content":"naive之laekov系列.这么水的题还想了几天ovoovo\n这个距离,咦,不是传统的距离啊.等距线是十字形的.\n思考一下.发现,分别按x和y排序,把相邻的两点之间连边,dijkstra,完了.\n为啥啊?因为这样建图可以保证任意两点的最短路一定能在图上跑出来.\n毕竟我太弱,ovoovo\n","permalink":"/oi/dbimport_250/","summary":"naive之laekov系列.这么水的题还想了几天ovoovo\n这个距离,咦,不是传统的距离啊.等距线是十字形的.\n思考一下.发现,分别按x和y排序,把相邻的两点之间连边,dijkstra,完了.\n为啥啊?因为这样建图可以保证任意两点的最短路一定能在图上跑出来.\n毕竟我太弱,ovoovo","title":"bzoj4152 [AMPPZ2014]The Captain"},{"content":"#include #include #include #include using namespace std;\nstruct point { int x, y; void read() { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;x, \u0026amp;y); } }; struct edge { int t, v; edge *ne; };\ntypedef pair \u0026lt;int, int\u0026gt; dpr;\nconst int maxn = 200003;\nint n, xo[maxn], yo[maxn], d[maxn]; point p[maxn]; edge ebuf_arr[maxn \u0026laquo; 2], *ebuf(ebuf_arr), *head[maxn];\ninline bool xCmp(const int\u0026amp; a, const int\u0026amp; b) { return p[a]. x \u0026lt; p[b]. x; } inline bool yCmp(const int\u0026amp; a, const int\u0026amp; b) { return p[a]. y \u0026lt; p[b]. y; }\ninline int dist(const point\u0026amp; a, const point\u0026amp; b) { return min(abs(a. x - b. x), abs(a. y - b. y)); }\ninline void addEdge(int u, int v, int w) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; v = w; ebuf-\u0026gt; ne = head[u]; head[u] = ebuf ++; }\nint dijkstra() { static dpr hp[maxn \u0026laquo; 2]; int th(1); hp[0] = dpr(0, 1); memset(d, -1, sizeof(d)); while (th \u0026amp;\u0026amp; d[n] == -1) { dpr g(hp[0]); pop_heap(hp, hp + th \u0026ndash;); if (d[g. second] \u0026gt; -1) continue; d[g. second] = -g. first; for (edge* e = head[g. second]; e; e = e-\u0026gt; ne) if (d[e-\u0026gt; t] == -1) { hp[th] = dpr(g. first - e-\u0026gt; v, e-\u0026gt; t); push_heap(hp, hp + ++ th); } } return d[n]; }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); for (int i = 1; i \u0026lt;= n; ++ i) { p[i]. read(); xo[i - 1] = yo[i - 1] = i; } sort(xo, xo + n, xCmp); sort(yo, yo + n, yCmp); for (int i = 0; i + 1 \u0026lt; n; ++ i) { addEdge(xo[i], xo[i + 1], dist(p[xo[i]], p[xo[i + 1]])); addEdge(xo[i + 1], xo[i], dist(p[xo[i]], p[xo[i + 1]])); addEdge(yo[i], yo[i + 1], dist(p[yo[i]], p[yo[i + 1]])); addEdge(yo[i + 1], yo[i], dist(p[yo[i]], p[yo[i + 1]])); } printf(\u0026quot;%d\\n\u0026quot;, dijkstra()); }\n","permalink":"/code/dbimport_249/","summary":"#include #include #include #include using namespace std;\nstruct point { int x, y; void read() { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;x, \u0026amp;y); } }; struct edge { int t, v; edge *ne; };\ntypedef pair \u0026lt;int, int\u0026gt; dpr;\nconst int maxn = 200003;\nint n, xo[maxn], yo[maxn], d[maxn]; point p[maxn]; edge ebuf_arr[maxn \u0026laquo; 2], *ebuf(ebuf_arr), *head[maxn];\ninline bool xCmp(const int\u0026amp; a, const int\u0026amp; b) { return p[a]. x \u0026lt; p[b]. x; } inline bool yCmp(const int\u0026amp; a, const int\u0026amp; b) { return p[a].","title":"bzoj4152.cc"},{"content":"比较无语的一天考试\u0026hellip;老师说是很神奇的好题\u0026hellip;然后发现是shoi\u0026hellip;然后让rausen鉴定途中强行被剧透.\n第一题能二分ovo然后边界写丑了do了个大die.\n第二题线段树水水水.\n第三题想了2个小时,发现我根本不会什么lucas定理啊.于是只好百度一下.哦,这不是水题嘛ovoovo\n其实lucas定理以前肯定遇到过.不过自己太久没用就搞忘了.noi之前要把各种奇怪的定理和算法复习一下.不然万一考到就亏了啊ovoovo\n晚上给adminpage里加了些东西.\n所以我还是太弱了.\n","permalink":"/diary/dbimport_042/","summary":"比较无语的一天考试\u0026hellip;老师说是很神奇的好题\u0026hellip;然后发现是shoi\u0026hellip;然后让rausen鉴定途中强行被剧透.\n第一题能二分ovo然后边界写丑了do了个大die.\n第二题线段树水水水.\n第三题想了2个小时,发现我根本不会什么lucas定理啊.于是只好百度一下.哦,这不是水题嘛ovoovo\n其实lucas定理以前肯定遇到过.不过自己太久没用就搞忘了.noi之前要把各种奇怪的定理和算法复习一下.不然万一考到就亏了啊ovoovo\n晚上给adminpage里加了些东西.\n所以我还是太弱了.","title":"20150617"},{"content":"haha\n","permalink":"/post/dbimport_279/","summary":"haha","title":"test"},{"content":"mhy大爷多久之前开的坑啊ovo\n这题的思路比较神.点分+fft.两个点会产生的贡献是1/(dist + 1).于是要知道长度为多少的链有多少条.\n利用树分可以将∑深度降到O(n*log n)的级别.原因很明显啊.\n然后就用fft来求就好喽.反正是double也懒得用数论了.然后找了wyf的程序随便就拍出一组末位不等,也没用long double.居然能过太神奇了.\n总复杂度O(n*log2n).然后莫名其妙就拿了rank1好开心啊.\n","permalink":"/oi/dbimport_194/","summary":"mhy大爷多久之前开的坑啊ovo\n这题的思路比较神.点分+fft.两个点会产生的贡献是1/(dist + 1).于是要知道长度为多少的链有多少条.\n利用树分可以将∑深度降到O(n*log n)的级别.原因很明显啊.\n然后就用fft来求就好喽.反正是double也懒得用数论了.然后找了wyf的程序随便就拍出一组末位不等,也没用long double.居然能过太神奇了.\n总复杂度O(n*log2n).然后莫名其妙就拿了rank1好开心啊.","title":"bzoj3451 tyvj1953 Normal"},{"content":"#include #include #include #include using namespace std;\n#define float_t __float_t\ntypedef double float_t; #define _f (float_t)\nstruct cplx { float_t r, i; cplx() {} cplx(float_t ro, float_t io) { r = ro, i = io; } }; inline cplx operator +(const cplx\u0026amp; a, const cplx\u0026amp; b) { return cplx(a. r + b. r, a. i + b. i); } inline cplx operator -(const cplx\u0026amp; a, const cplx\u0026amp; b) { return cplx(a. r - b. r, a. i - b. i); } inline cplx operator *(const cplx\u0026amp; a, const cplx\u0026amp; b) { return cplx(a. r * b. r - a. i * b. i, a. r * b. i + a. i * b. r); }\nconst cplx cplx_zero = cplx(0, 0);\nstruct edge { int t; edge *ne; };\nconst int maxn = 40003; const int maxl = 17; const float_t pi = acos(-1);\nint n, vis[maxn], tvis, dv[maxn], dc[maxn], dt[maxn]; float_t ans; cplx wo[maxl], a[maxn], b[maxn], c[maxn]; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf(ebuf_arr), *head[maxn];\nvoid pre() { for (int i = 0; i \u0026lt; maxl; ++ i) { float_t tht(pi * 2 / (1 \u0026laquo; i)); wo[i] = cplx(cos(tht), sin(tht)); } }\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; ne = head[u]; head[u] = ebuf ++; }\nint findGrvCtr(int po) { static int q[maxn], fr[maxn], sz[maxn]; int hd(0), tl(1); fr[q[hd] = po] = 0; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (e-\u0026gt; t != fr[p] \u0026amp;\u0026amp; !dv[e-\u0026gt; t]) { fr[e-\u0026gt; t] = p; q[tl ++] = e-\u0026gt; t; } } int sp(po), ss(tl); for (int i = tl - 1; i \u0026gt;= 0; \u0026ndash; i) { int p(q[i]), m(0); sz[p] = 1; for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (e-\u0026gt; t != fr[p] \u0026amp;\u0026amp; !dv[e-\u0026gt; t]) { sz[p] += sz[e-\u0026gt; t]; if (sz[e-\u0026gt; t] \u0026gt; m) m = sz[e-\u0026gt; t]; } if (tl - sz[p] \u0026gt; m) m = tl - sz[p]; if (m \u0026lt; ss) sp = p, ss = m; } return sp; }\nint depthBFS(int po) { static int q[maxn], fr[maxn], d[maxn]; int hd(0), tl(1), t(0); fr[q[hd] = po] = 0; d[po] = 1; dt[0] = 0; while (hd \u0026lt; tl) { int p(q[hd ++]); if (d[p] \u0026gt;= t) dt[d[p]] = 1, t = d[p] + 1; else ++ dt[d[p]]; for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (e-\u0026gt; t != fr[p] \u0026amp;\u0026amp; !dv[e-\u0026gt; t]) { fr[e-\u0026gt; t] = p; d[e-\u0026gt; t] = d[p] + 1; q[tl ++] = e-\u0026gt; t; } } return t; }\nvoid fft(cplx* a, int n, int rv) { for (int i = 1, j = n \u0026raquo; 1, k; i + 1 \u0026lt; n; ++ i) { if (i \u0026lt; j) swap(a[i], a[j]); for (k = n \u0026raquo; 1; j \u0026gt;= k; k \u0026raquo;= 1) j -= k; if (j \u0026lt; k) j += k; } for (int h = 2, c = 1; h \u0026lt;= n; ++ c, h \u0026laquo;= 1) { cplx w0(wo[c]); if (rv) w0. i = -w0. i; for (int i = 0; i \u0026lt; n; i += h) { cplx w(cplx(1, 0)); for (int j = i; j \u0026lt; i + (h \u0026raquo; 1); ++ j) { cplx x(a[j]), y(a[j + (h \u0026raquo; 1)] * w); a[j] = x + y; a[j + (h \u0026raquo; 1)] = x - y; w = w * w0; } } } if (rv) for (int i = 0; i \u0026lt; n; ++ i) a[i]. r /= n; }\nvoid upAns(int la, int lb) { int m; for (m = 1; m \u0026lt; la + lb; m \u0026laquo;= 1); for (int i = 0; i \u0026lt; la; ++ i) a[i] = cplx(dc[i], 0); for (int i = la; i \u0026lt; m; ++ i) a[i] = cplx_zero; fft(a, m, 0); for (int i = 0; i \u0026lt; lb; ++ i) b[i] = cplx(dt[i], 0); for (int i = lb; i \u0026lt; m; ++ i) b[i] = cplx_zero; fft(b, m, 0); for (int i = 0; i \u0026lt; m; ++ i) c[i] = a[i] * b[i]; fft(c, m, 1); for (int i = 0; i \u0026lt; m; ++ i) ans += c[i]. r * 2 / (i + 1); }\nvoid divide(int po) { int p(findGrvCtr(po)), lc(1); dv[p] = 1; dc[0] = 1; for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (!dv[e-\u0026gt; t]) { int lt(depthBFS(e-\u0026gt; t)); upAns(lc, lt); for (int i = 0; i \u0026lt; lc \u0026amp;\u0026amp; i \u0026lt; lt; ++ i) dc[i] += dt[i]; if (lc \u0026lt; lt) { for (int i = lc; i \u0026lt; lt; ++ i) dc[i] = dt[i]; lc = lt; } } for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (!dv[e-\u0026gt; t]) divide(e-\u0026gt; t); }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\npre(); scanf(\u0026quot;%d\u0026quot;, \u0026amp;n); memset(head, 0, sizeof(head)); for (int i = 1; i \u0026lt; n; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); ++ u, ++ v; addEdge(u, v); addEdge(v, u); } memset(dv, 0, sizeof(dv)); divide(1); ans += n; printf(\u0026quot;%.4lf\\n\u0026quot;, (double)ans + 1e-11); }\n","permalink":"/code/dbimport_193/","summary":"#include #include #include #include using namespace std;\n#define float_t __float_t\ntypedef double float_t; #define _f (float_t)\nstruct cplx { float_t r, i; cplx() {} cplx(float_t ro, float_t io) { r = ro, i = io; } }; inline cplx operator +(const cplx\u0026amp; a, const cplx\u0026amp; b) { return cplx(a. r + b. r, a. i + b. i); } inline cplx operator -(const cplx\u0026amp; a, const cplx\u0026amp; b) { return cplx(a.","title":"bzoj3451.cc"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 1003; const int maxm = 10003; const dint dinf = 0x3f3f3f3f3f3f3f3fll;\nint n, m, ne[maxn]; dint a[maxm][maxn];\nvoid pivot(int e, int p) { int fr(n + 1); for (int i = n; i \u0026gt;= 0; \u0026ndash; i) if (a[p][i]) { ne[fr] = i; fr = i; } ne[fr] = -1; a[p][e] = -1; for (int i = 0; i \u0026lt;= m; ++ i) if (i != p) { int rat(a[i][e] / a[p][e]); a[i][e] = 0; for (int j = ne[n + 1]; j \u0026gt; -1; j = ne[j]) a[i][j] -= rat * a[p][j]; } }\ndint simplex() { while (1) { int e, p(-1); dint v(dinf); for (e = 1; e \u0026lt;= n \u0026amp;\u0026amp; a[0][e] \u0026lt;= 0; ++ e); if (e \u0026gt; n) return a[0][0]; for (int i = 1; i \u0026lt;= m; ++ i) if (a[i][e] \u0026lt; 0 \u0026amp;\u0026amp; a[i][0] \u0026lt; v) v = a[p = i][0]; if (p == -1) return dinf; pivot(e, p); } }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nmemset(a, 0, sizeof(a)); scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); for (int i = 1; i \u0026lt;= n; ++ i) scanf(lld, a[0] + i); for (int i = 1; i \u0026lt;= m; ++ i) { int k, s, t; scanf(\u0026quot;%d\u0026quot;, \u0026amp;k); while (k --) { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;s, \u0026amp;t); for (int j = s; j \u0026lt;= t; ++ j) a[i][j] = -1; } scanf(lld, a[i]); } printf(lld \u0026quot;\\n\u0026quot;, simplex()); }\n","permalink":"/code/dbimport_185/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 1003; const int maxm = 10003; const dint dinf = 0x3f3f3f3f3f3f3f3fll;\nint n, m, ne[maxn]; dint a[maxm][maxn];\nvoid pivot(int e, int p) { int fr(n + 1); for (int i = n; i \u0026gt;= 0; \u0026ndash; i) if (a[p][i]) { ne[fr] = i; fr = i; } ne[fr] = -1; a[p][e] = -1; for (int i = 0; i \u0026lt;= m; ++ i) if (i !","title":"bzoj3265.cc"},{"content":"simplex第一题.这玩意是不是拖得太久了啊ovo记得初中买算导的时候就想学它\u0026hellip;\nsimplex的思路其实比较简单.先找标号最小的目标函数中系数为正的变量.选择约束最紧的限制条件.通过这个条件来换元.直到消光.\n感觉好神奇啊然而为啥啊ovoovo\n然而线性规划的条件是≤而求的是目标函数的max.和这题的式子刚好相反啊.\n然后神奇的东西是,对偶.强行把矩阵转制,然后把大小于符号取反,求出来的目标式max就是原问题的min.为啥啊Ovo算导上的证明也能看?\n然后就是一个类似于高消的东西.据说跑得比较快.\n另一个神奇的事情是在这道题里面因为奇怪的系数所以所有变量的系数都是+-1或者0.于是可以不用double强行写.开心.\n然后网上的某份代码似乎会把无解的情况搞错hah\n然而第一遍自己也有地方写丑\u0026hellip;\n这种东西还要再练练.\n","permalink":"/oi/dbimport_186/","summary":"simplex第一题.这玩意是不是拖得太久了啊ovo记得初中买算导的时候就想学它\u0026hellip;\nsimplex的思路其实比较简单.先找标号最小的目标函数中系数为正的变量.选择约束最紧的限制条件.通过这个条件来换元.直到消光.\n感觉好神奇啊然而为啥啊ovoovo\n然而线性规划的条件是≤而求的是目标函数的max.和这题的式子刚好相反啊.\n然后神奇的东西是,对偶.强行把矩阵转制,然后把大小于符号取反,求出来的目标式max就是原问题的min.为啥啊Ovo算导上的证明也能看?\n然后就是一个类似于高消的东西.据说跑得比较快.\n另一个神奇的事情是在这道题里面因为奇怪的系数所以所有变量的系数都是+-1或者0.于是可以不用double强行写.开心.\n然后网上的某份代码似乎会把无解的情况搞错hah\n然而第一遍自己也有地方写丑\u0026hellip;\n这种东西还要再练练.","title":"bzoj3265 志愿者招募加强版"},{"content":"xjoi上的半天+废掉的下午和晚上TT\n上午考试感觉都不会.第二题想出的方法一点也不科学.第一题乱猜的结论还不知道怎么构造.第三题完全ovo感觉有点像魔法森林不过不会写toptree于是想起当年的三分乱搞.\n然后各种时间就在不知道干什么中过去了.\n有时候觉得心里好乱啊根本沉不下心来做题.然后也没有办法解决.只有事后去感到后悔然后毫无用处继续循环\u0026hellip;\n所以是时候做出一些改变啊\u0026hellip;其实事情不少啊少年ovoovo\n看到zhx很早之前写的文章,\u0026ldquo;noi也许是因为心境不同所以也没认真考\u0026rdquo;.他没认真考还是能进队.我要是不认真后果可能就是死啊ovoovo\n所以不能这样下去了啊\u0026hellip;每次都这么说TT\n所以我还是太弱了.\n","permalink":"/diary/dbimport_041/","summary":"xjoi上的半天+废掉的下午和晚上TT\n上午考试感觉都不会.第二题想出的方法一点也不科学.第一题乱猜的结论还不知道怎么构造.第三题完全ovo感觉有点像魔法森林不过不会写toptree于是想起当年的三分乱搞.\n然后各种时间就在不知道干什么中过去了.\n有时候觉得心里好乱啊根本沉不下心来做题.然后也没有办法解决.只有事后去感到后悔然后毫无用处继续循环\u0026hellip;\n所以是时候做出一些改变啊\u0026hellip;其实事情不少啊少年ovoovo\n看到zhx很早之前写的文章,\u0026ldquo;noi也许是因为心境不同所以也没认真考\u0026rdquo;.他没认真考还是能进队.我要是不认真后果可能就是死啊ovoovo\n所以不能这样下去了啊\u0026hellip;每次都这么说TT\n所以我还是太弱了.","title":"20150615"},{"content":"今天是中考day2ovoo今天是sccpc\u0026hellip;ovoovo\u0026hellip;\n比赛过程可以概括为前三小时狂刷一度rank1然后开始卡题后两小时零输出惨烈牺牲ovoovo\n还是自己太弱了没想清楚一些事情于是ovoovo\na题水.\nb题和\u0026quot;无敌异或\u0026quot;有些像.于是搞之.虽然反应过来有点慢.\nc题usaco原题ovoovo\nd题竟然误以为是菊花\u0026hellip;最后才反应过来.改对了程序然而dfs强行套bitset作die中\u0026hellip;\ne题是啥?哦似乎是水水的推公式.\nf题两遍lis.\ng题果然是最小割然而我和mhy都没有想到正确的建图.ovoovo\nh题根本没时间想.\ni题写了个高端dijkstra于是被卡tle.mhy认为可以直接用堆于是wa.然后听到正解眼泪流下来ovoovo\nj题无脑\u0026hellip;\n想去年都过了7题去年最后延时怒过一题.比去年还差啊伐开心ovoovo\n所以我还是太弱了.\n","permalink":"/diary/dbimport_040/","summary":"今天是中考day2ovoo今天是sccpc\u0026hellip;ovoovo\u0026hellip;\n比赛过程可以概括为前三小时狂刷一度rank1然后开始卡题后两小时零输出惨烈牺牲ovoovo\n还是自己太弱了没想清楚一些事情于是ovoovo\na题水.\nb题和\u0026quot;无敌异或\u0026quot;有些像.于是搞之.虽然反应过来有点慢.\nc题usaco原题ovoovo\nd题竟然误以为是菊花\u0026hellip;最后才反应过来.改对了程序然而dfs强行套bitset作die中\u0026hellip;\ne题是啥?哦似乎是水水的推公式.\nf题两遍lis.\ng题果然是最小割然而我和mhy都没有想到正确的建图.ovoovo\nh题根本没时间想.\ni题写了个高端dijkstra于是被卡tle.mhy认为可以直接用堆于是wa.然后听到正解眼泪流下来ovoovo\nj题无脑\u0026hellip;\n想去年都过了7题去年最后延时怒过一题.比去年还差啊伐开心ovoovo\n所以我还是太弱了.","title":"20150614 sccpc2015"},{"content":"mhy写此题写了良久啊然后T啊T,T啊T.然后我去翻了一下seter的博客.结合他的东西yy出一种比较优越的做法.\n如果我是出数据的,我会出两种数据,菊花图和链.\n如果是菊花图,直接朴素ovoovo如果是链,可以以每个叶子节点为根建一次可持久化线段树.\n如果是链上长出了一团菊花\u0026hellip;\nhow to 结合?\n不停地删叶子.如果删到某层时叶子足够少了,那就建可持久化线段树去.\n对于询问,有若干种情况.\n标记每个根里离得很近的点.\n如果两个中有一个被标记过,那么直接以这个根求另一个的答案,然后朴素查找近的这个点到根的答案.\n如果两个点都没有被删 ,那一定有至少一个根可以使得这条链的两个端点有祖先关系.这样的话直接用可持久化线段树求解.\n好像完了?然后wa了ovoovo\n还有一种情况是某个点被删了,但是删之后它是接在树枝上的!\n于是它离根很远,还不一定有能搞出祖先关系的解.\n于是先爬行到没被删的地方,看两个端点是否在同一棵被删的叶子树上.\n如果是就朴素了.\n如果不是的话,先求没被删的这一段,再朴素被删的一段.\n终于完辣.\n从来没写过这种代码.感觉自己萌萌哒.\n","permalink":"/oi/dbimport_149/","summary":"mhy写此题写了良久啊然后T啊T,T啊T.然后我去翻了一下seter的博客.结合他的东西yy出一种比较优越的做法.\n如果我是出数据的,我会出两种数据,菊花图和链.\n如果是菊花图,直接朴素ovoovo如果是链,可以以每个叶子节点为根建一次可持久化线段树.\n如果是链上长出了一团菊花\u0026hellip;\nhow to 结合?\n不停地删叶子.如果删到某层时叶子足够少了,那就建可持久化线段树去.\n对于询问,有若干种情况.\n标记每个根里离得很近的点.\n如果两个中有一个被标记过,那么直接以这个根求另一个的答案,然后朴素查找近的这个点到根的答案.\n如果两个点都没有被删 ,那一定有至少一个根可以使得这条链的两个端点有祖先关系.这样的话直接用可持久化线段树求解.\n好像完了?然后wa了ovoovo\n还有一种情况是某个点被删了,但是删之后它是接在树枝上的!\n于是它离根很远,还不一定有能搞出祖先关系的解.\n于是先爬行到没被删的地方,看两个端点是否在同一棵被删的叶子树上.\n如果是就朴素了.\n如果不是的话,先求没被删的这一段,再朴素被删的一段.\n终于完辣.\n从来没写过这种代码.感觉自己萌萌哒.","title":"bzoj2589 Spoj 10707 Count on a tree II"},{"content":"#include #include #include using namespace std;\nstruct seg { int v; seg *ch[2]; }; struct edge { int t; edge *ne; };\nconst int maxn = 40003; const int leafc = 20; const int maxk = leafc + 1;; const int maxl = 17; const int albsz = 1000003;\nint n, m, t, w[maxn], dl[maxn], df[maxn], fk[maxn], deg[maxn]; int tlf, lf[maxk], la[maxk][maxn], d[maxk][maxn], fr[maxk][maxn]; int dfb[maxk][maxn], dfe[maxk][maxn], dfn; int tvis, vis[maxn], vo[maxn], tv; seg *rt[maxk][maxn], *rl[maxk][maxn]; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf(ebuf_arr), *head[maxn];\ninline seg* allocSeg() { static seg* sbuf; static int cnt(0); if (!cnt) cnt = albsz - 1, sbuf = new seg[albsz]; return \u0026ndash; cnt, sbuf ++; }\n#define vof(p) ((p)?(p-\u0026gt;v):0) #define chof(p,d) ((p)?(p-\u0026gt;ch[d]):0) seg* sgtIns(seg* q, int po) { seg s(allocSeg()), p(s); int l(0), r(n + 1); while (l \u0026lt; r) { p-\u0026gt; v = vof(q) + 1; int md((l + r) \u0026raquo; 1); int d(po \u0026gt; md); p-\u0026gt; ch[d ^ 1] = chof(q, d ^ 1); q = chof(q, d); p-\u0026gt; ch[d] = allocSeg(); p = p-\u0026gt; ch[d]; if (d) l = md + 1; else r = md; } p-\u0026gt; v = vof(q) + 1; return s; } int sgtSQry(seg p, int po) { int l(0), r(n + 1); while (l \u0026lt; r \u0026amp;\u0026amp; p) { int md((l + r) \u0026raquo; 1); int d(po \u0026gt; md); p = p-\u0026gt; ch[d]; if (d) l = md + 1; else r = md; } return vof(p); } int sgtQry(seg p, int po) { int l(0), r(n + 1), s(0); while (l \u0026lt; r \u0026amp;\u0026amp; p) { int md((l + r) \u0026raquo; 1); if (po \u0026lt;= md) { p = p-\u0026gt; ch[0]; r = md; } else { s += vof(p-\u0026gt; ch[0]); p = p-\u0026gt; ch[1]; l = md + 1; } } return s + vof(p); }\nvoid dispVal() { sort(vo, vo + tv); tv = unique(vo, vo + tv) - vo; for (int i = 1; i \u0026lt;= n; ++ i) w[i] = lower_bound(vo, vo + tv, w[i]) - vo; }\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; ne = head[u]; head[u] = ebuf ++; }\nvoid setDFS(int p, int po) { fk[p] = po; for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (!dl[e-\u0026gt; t]) { dl[e-\u0026gt; t] = dl[p] + 1; setDFS(e-\u0026gt; t, po); } } void buildDFS(int p, int fr, int po) { int vo(vis[w[p]]); vis[w[p]] = d[po][p]; dfb[po][p] = ++ dfn; :: fr[po][p] = fr; if (fr) { rt[po][p] = sgtIns(rt[po][fr], w[p]); rl[po][p] = sgtIns(rl[po][fr], vo); la[po][p] = la[po][fr] + (!vo); } else { rt[po][p] = sgtIns(0, w[p]); rl[po][p] = sgtIns(0, 0); la[po][p] = 1; } for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (e-\u0026gt; t != fr) { d[po][e-\u0026gt; t] = d[po][p] + 1; buildDFS(e-\u0026gt; t, p, po); } vis[w[p]] = vo; dfe[po][p] = dfn; } void cutLeaf() { static int q[2][maxn]; int c[2], cur(0), prv(1); c[cur] = 0; memset(dl, -1, sizeof(dl)); for (int i = 1; i \u0026lt;= n; ++ i) if (deg[i] == 1) q[cur][c[cur] ++] = i; memset(fk, 0, sizeof(fk)); while (c[cur] \u0026gt; leafc) { swap(cur, prv); c[cur] = 0; for (int i = 0; i \u0026lt; c[prv]; ++ i) { int p(q[prv][i]); dl[p] = 0; for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (dl[e-\u0026gt; t]) { df[p] = e-\u0026gt; t; \u0026ndash; deg[e-\u0026gt; t]; if (deg[e-\u0026gt; t] == 1) q[cur][c[cur] ++] = e-\u0026gt; t; } } } tlf = c[cur]; for (int i = 1; i \u0026lt;= tlf; ++ i) { lf[i] = q[cur][i - 1]; d[i][lf[i]] = 1; memset(vis, 0, sizeof(vis)); dl[lf[i]] = 1; fr[i][lf[i]] = 0; dfn = 0; setDFS(lf[i], i); buildDFS(lf[i], 0, i); } }\nint findRoot(int\u0026amp; u, int\u0026amp; v) { int f; for (f = 1; 1; ++ f) { if (dfb[f][u] \u0026gt;= dfb[f][v] \u0026amp;\u0026amp; dfb[f][u] \u0026lt;= dfe[f][v]) break; swap(u, v); if (dfb[f][u] \u0026gt;= dfb[f][v] \u0026amp;\u0026amp; dfb[f][u] \u0026lt;= dfe[f][v]) break; } return f; }\nint inRoot(int u, int v) { int ans, f(findRoot(u, v)); ans = sgtQry(rl[f][u], d[f][v] - 1); if (fr[f][v]) ans -= sgtQry(rl[f][fr[f][v]], d[f][v] - 1); return ans; }\nint forceEnu(int u, int v) { static int sa[maxn], sb[maxn]; int ta(1), tb(1); for (sa[1] = u; dl[sa[ta]] != -1; ++ ta) sa[ta + 1] = df[sa[ta]]; for (sb[1] = v; dl[sb[tb]] != -1; ++ tb) sb[tb + 1] = df[sb[tb]]; while (ta \u0026amp;\u0026amp; tb \u0026amp;\u0026amp; sa[ta] == sb[tb]) \u0026ndash; ta, \u0026ndash; tb; int ans(1), a(sa[ta + 1]); vis[w[a]] = ++ tvis; for (; u != a; u = df[u]) if (vis[w[u]] \u0026lt; tvis) { ++ ans; vis[w[u]] = tvis; } for (; v != a; v = df[v]) if (vis[w[v]] \u0026lt; tvis) { ++ ans; vis[w[v]] = tvis; } return ans; }\nbool findVal(int w, int u, int v, int f) { if (d[f][u] \u0026lt; d[f][v]) swap(u, v); int s(sgtSQry(rt[f][u], w)); if (fr[f][v]) s -= sgtSQry(rt[f][fr[f][v]], w); return s; }\nint calcOO(int u, int v, int p, int q) { int po(p), qo(q); int f(findRoot(po, qo)); int ans(inRoot(po, qo)); ++ tvis; for (; u != p; u = df[u]) if (vis[w[u]] \u0026lt; tvis \u0026amp;\u0026amp; !findVal(w[u], p, q, f)) { ++ ans; vis[w[u]] = tvis; } for (; v != q; v = df[v]) if (vis[w[v]] \u0026lt; tvis \u0026amp;\u0026amp; !findVal(w[v], p, q, f)) { ++ ans; vis[w[v]] = tvis; } return ans; }\nint calc(int u, int v) { int ans(0); if (fk[u] \u0026amp;\u0026amp; fk[u] == fk[v]) { int f(fk[u]); ++ tvis; while (u != v) { if (d[f][u] \u0026lt; d[f][v]) swap(u, v); if (vis[w[u]] \u0026lt; tvis) { ++ ans; vis[w[u]] = tvis; } u = df[u]; } if (vis[w[u]] \u0026lt; tvis) { ++ ans; vis[w[u]] = tvis; } } else if (fk[u] || fk[v]) { if (!fk[u]) swap(u, v); int f(fk[u]); ans = la[f][v]; ++ tvis; for (; u != lf[f]; u = df[u]) if (!sgtSQry(rt[f][v], w[u]) \u0026amp;\u0026amp; vis[w[u]] \u0026lt; tvis) { ++ ans; vis[w[u]] = tvis; } } else if (u == v) { ans = 1; } else if (dl[u] == -1 \u0026amp;\u0026amp; dl[v] == -1) { ans = inRoot(u, v); } else { int p(u), q(v); for (; dl[p] != -1; p = df[p]); for (; dl[q] != -1; q = df[q]); if (p == q) ans = forceEnu(u, v); else ans = calcOO(u, v, p, q); } return ans; }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); tv = 0; for (int i = 1; i \u0026lt;= n; ++ i) scanf(\u0026quot;%d\u0026quot;, w + i), vo[tv ++] = w[i]; dispVal(); memset(deg, 0, sizeof(deg)); for (int i = 1; i \u0026lt; n; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); addEdge(u, v); addEdge(v, u); ++ deg[u], ++ deg[v]; } cutLeaf(); int lans(0); memset(vis, 0, sizeof(vis)); while (m --) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); u ^= lans; printf(\u0026quot;%d\u0026quot;, (lans = calc(u, v))); if (m) putchar(10); } }\n","permalink":"/code/dbimport_148/","summary":"#include #include #include using namespace std;\nstruct seg { int v; seg *ch[2]; }; struct edge { int t; edge *ne; };\nconst int maxn = 40003; const int leafc = 20; const int maxk = leafc + 1;; const int maxl = 17; const int albsz = 1000003;\nint n, m, t, w[maxn], dl[maxn], df[maxn], fk[maxn], deg[maxn]; int tlf, lf[maxk], la[maxk][maxn], d[maxk][maxn], fr[maxk][maxn]; int dfb[maxk][maxn], dfe[maxk][maxn], dfn; int tvis, vis[maxn], vo[maxn], tv; seg *rt[maxk][maxn], *rl[maxk][maxn]; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf(ebuf_arr), *head[maxn];","title":"bzoj2589.cc"},{"content":"#include #include #include using namespace std;\n#define _l (long long int)\nconst int maxn = 103; const int mod = 1e9 + 7;\nint modPow(int a, int x) { int s(1); for (; x; x \u0026raquo;= 1, a = _l a * a % mod) if (x \u0026amp; 1) s = _l s * a % mod; return s; }\nint fac[maxn], finv[maxn], vinv[maxn]; int n, m, k, f[maxn], c[maxn];\nvoid pre() { fac[0] = finv[0] = 1; for (int i = 1; i \u0026lt; maxn; ++ i) { fac[i] = _l fac[i - 1] * i % mod; vinv[i] = modPow(i, mod - 2); finv[i] = _l finv[i - 1] * vinv[i] % mod; } }\ninline int comb(int n, int k) { if (k \u0026gt; n || k \u0026lt; 0) return 0; else return _l fac[n] * finv[k] % mod * finv[n - k] % mod; } int hcomb(int n, int k) { int s(1); for (int i = 0; i \u0026lt; k; ++ i) s = _l s * (n - i + mod) % mod; return _l s * finv[k] % mod; } inline int align(int n, int k) { if (k \u0026gt; n || k \u0026lt; 0) return 0; else return _l fac[n] * finv[n - k] % mod; }\nvoid calc(int z) { int w(fac[n]), t(fac[k]); for (int i = 0; i \u0026lt; z; ++ i) w = _l w * finv[c[i]] % mod; for (int i = 0, j; i \u0026lt; z; i = j) { for (j = i; j \u0026lt; z \u0026amp;\u0026amp; c[i] == c[j]; ++ j); t = _l t * finv[j - i] % mod; } t = _l t * finv[k - z] % mod; for (int i = m; i; \u0026ndash; i) { int wp(1), tp(1); for (int j = i - 1; j \u0026gt;= 0 \u0026amp;\u0026amp; j + t \u0026gt;= i; \u0026ndash; j) { wp = _l wp * w % mod; tp = _l tp * (t - (i - j - 1)) % mod * vinv[i - j] % mod; f[i] = (f[i] + _l f[j] * tp % mod * wp) % mod; } } }\nvoid DFS(int c, int v, int d) { if (!c) { calc(d); } else if (d \u0026gt;= k) { return; } else { for (int i = 1; i \u0026lt;= c \u0026amp;\u0026amp; i \u0026lt;= v; ++ i) DFS(c - i, (:: c[d] = i), d + 1); } }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;m, \u0026amp;n, \u0026amp;k); memset(f, 0, sizeof(f)); f[0] = 1; pre(); DFS(n, n, 0); printf(\u0026quot;%d\\n\u0026quot;, (int)(_l f[m] * fac[m] % mod)); }\n","permalink":"/code/dbimport_274/","summary":"#include #include #include using namespace std;\n#define _l (long long int)\nconst int maxn = 103; const int mod = 1e9 + 7;\nint modPow(int a, int x) { int s(1); for (; x; x \u0026raquo;= 1, a = _l a * a % mod) if (x \u0026amp; 1) s = _l s * a % mod; return s; }\nint fac[maxn], finv[maxn], vinv[maxn]; int n, m, k, f[maxn], c[maxn];","title":"rshcr5count.cc"},{"content":"这题我的做法不太一样.所以mark一下.首先我把题里的n和m看反了,所以下面的m和n都与原题里的m和n相反.\n首先考虑一行的方案.在不考虑顺序(即只考虑题中要求􏰍􏱫􏴈􏴉􏰕􏱫􏰍􏱫􏴈􏴉􏰕􏱫􏲙每个颜色个数这个条件一定时)的方案数.\nn是50,刚好可以正整数拆分,把n拆成不超过k个正整数时,可行的方案数为n! / c1! / c2! / \u0026hellip; / s1! / s2! / \u0026hellip;这个样子.其中cx表示正整数拆分中的第x个数(后面补0可以不管),s1表示第一种相同的cx的个数.\n其实就是说怎么把k个颜色分配到我拆分出的这些整数里.\n然后对于一种这样的方案的排列数也比较好求.\n然后就是求m行的情况.我的思考方法是先按上面固定顺序,再乘m!.其实这样有问题虽然我没出事.也有可以补救的方法.\n上面拆出来的一种拆分,设它有t个不同的颜色分配方案,一种方案有c种排列.这里用一个类似于背包的转移,f[i] = f[j] + 一坨东西.\n这坨东西就是把(i - j)个方案按顺序排列的答案.(都叫方案啊好晕ovo)当然这里排列的话会用到判断t是否大于等于(i - j),但是t被模过ovoovo.我偷了个懒假设t如果被模过不会正好小到影响统计.果然也没有.\n其实也可以不去除,而是乘组合数吧.不过写起来好麻烦.\n咦写了这么多了.然而感觉还是没说清楚啊.ovoovo结合代码理解吧.\n","permalink":"/oi/dbimport_275/","summary":"这题我的做法不太一样.所以mark一下.首先我把题里的n和m看反了,所以下面的m和n都与原题里的m和n相反.\n首先考虑一行的方案.在不考虑顺序(即只考虑题中要求􏰍􏱫􏴈􏴉􏰕􏱫􏰍􏱫􏴈􏴉􏰕􏱫􏲙每个颜色个数这个条件一定时)的方案数.\nn是50,刚好可以正整数拆分,把n拆成不超过k个正整数时,可行的方案数为n! / c1! / c2! / \u0026hellip; / s1! / s2! / \u0026hellip;这个样子.其中cx表示正整数拆分中的第x个数(后面补0可以不管),s1表示第一种相同的cx的个数.\n其实就是说怎么把k个颜色分配到我拆分出的这些整数里.\n然后对于一种这样的方案的排列数也比较好求.\n然后就是求m行的情况.我的思考方法是先按上面固定顺序,再乘m!.其实这样有问题虽然我没出事.也有可以补救的方法.\n上面拆出来的一种拆分,设它有t个不同的颜色分配方案,一种方案有c种排列.这里用一个类似于背包的转移,f[i] = f[j] + 一坨东西.\n这坨东西就是把(i - j)个方案按顺序排列的答案.(都叫方案啊好晕ovo)当然这里排列的话会用到判断t是否大于等于(i - j),但是t被模过ovoovo.我偷了个懒假设t如果被模过不会正好小到影响统计.果然也没有.\n其实也可以不去除,而是乘组合数吧.不过写起来好麻烦.\n咦写了这么多了.然而感觉还是没说清楚啊.ovoovo结合代码理解吧.","title":"弱省互测Round5 Count"},{"content":"#include #include #include using namespace std;\nint calc(int i, int j, int d) { if ((i \u0026amp; 1) \u0026amp;\u0026amp; (j \u0026amp; 1)) return d; else return calc((i + 1) \u0026raquo; 1, (j + 1) \u0026raquo; 1, d + 1); }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nint t; scanf(\u0026quot;%d\u0026quot;, \u0026amp;t); while (t --) { int n, s(0); scanf(\u0026quot;%d\u0026quot;, \u0026amp;n); for (int i = 0; i \u0026lt; n; i += 2) { int a, b; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;a, \u0026amp;b); s ^= calc(a, b, 0); } puts(s ? \u0026quot;YES\u0026quot; : \u0026quot;NO\u0026quot;); } }\n","permalink":"/code/dbimport_123/","summary":"#include #include #include using namespace std;\nint calc(int i, int j, int d) { if ((i \u0026amp; 1) \u0026amp;\u0026amp; (j \u0026amp; 1)) return d; else return calc((i + 1) \u0026raquo; 1, (j + 1) \u0026raquo; 1, d + 1); }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nint t; scanf(\u0026quot;%d\u0026quot;, \u0026amp;t); while (t --) { int n, s(0); scanf(\u0026quot;%d\u0026quot;, \u0026amp;n); for (int i = 0; i \u0026lt; n; i += 2) { int a, b; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;a, \u0026amp;b); s ^= calc(a, b, 0); } puts(s ?","title":"bzoj1228.cc"},{"content":"mhy开了道找规律oovovo\n打表找规律良久.最后还是没有O(1)的规律.倒是发现有点像分形,有个log级别的递推式.\n怎么来的啊好神奇啊ovoovo\n","permalink":"/oi/dbimport_124/","summary":"mhy开了道找规律oovovo\n打表找规律良久.最后还是没有O(1)的规律.倒是发现有点像分形,有个log级别的递推式.\n怎么来的啊好神奇啊ovoovo","title":"bzoj1228 [SDOI2009]E\u0026D"},{"content":"考了一下今年jsoi的某试.感觉整个人都是晕的.\n第一题某三氧化萌在省选前正好和我说过.还记得我花了整个吃晚饭的时间去想终于想出了怎么证明.翻了一下qq聊天记录秒之ovoovo.\n第二题之前省选集训的时候做过!?翻了一下正好是4月10号无疑.依稀记得当时我用了二分+线段树,比正解多一个log,一直以为是卡常数,后来才知道正解是单调队列.(5s的题要跑9s是什么心态)\n于是狠狠地想了一会,然后发现可以分三种情况讨论,每种情况都可以用单调队列解决.其中两种还能通过翻转合并代码.于是开心ovo.感觉这题主要是在玩不等式和函数单调性.\n第三题无脑可持久化trie打打就过了ovoovo\n为啥bzoj上没这套题啊ovoovo\n2个多小时ak然后去404被高三某学长虐狗.\n下午颓颓颓,晚上颓颓颓.\n于是我还是太弱了.\n","permalink":"/diary/dbimport_039/","summary":"考了一下今年jsoi的某试.感觉整个人都是晕的.\n第一题某三氧化萌在省选前正好和我说过.还记得我花了整个吃晚饭的时间去想终于想出了怎么证明.翻了一下qq聊天记录秒之ovoovo.\n第二题之前省选集训的时候做过!?翻了一下正好是4月10号无疑.依稀记得当时我用了二分+线段树,比正解多一个log,一直以为是卡常数,后来才知道正解是单调队列.(5s的题要跑9s是什么心态)\n于是狠狠地想了一会,然后发现可以分三种情况讨论,每种情况都可以用单调队列解决.其中两种还能通过翻转合并代码.于是开心ovo.感觉这题主要是在玩不等式和函数单调性.\n第三题无脑可持久化trie打打就过了ovoovo\n为啥bzoj上没这套题啊ovoovo\n2个多小时ak然后去404被高三某学长虐狗.\n下午颓颓颓,晚上颓颓颓.\n于是我还是太弱了.","title":"20150610"},{"content":"最近都在做梦的感觉啊.这道题倒是mhy的博客一语点醒梦中人.\n只会加正数,所以每个数只有至多一次会从负变非负.\n链剖是肯定的.然后记录一下当前最大的负数是谁.如果大于等于0就改掉.所以还是O(n*log2n).\n所以我还是太弱了.于是读入优化大法抢了一个rank1.\n","permalink":"/oi/dbimport_244/","summary":"最近都在做梦的感觉啊.这道题倒是mhy的博客一语点醒梦中人.\n只会加正数,所以每个数只有至多一次会从负变非负.\n链剖是肯定的.然后记录一下当前最大的负数是谁.如果大于等于0就改掉.所以还是O(n*log2n).\n所以我还是太弱了.于是读入优化大法抢了一个rank1.","title":"bzoj4127 Abs"},{"content":"#include #include #include #include using namespace std;\nconst int buf_len = 45678; char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0), neg(0); while (!isdigit(*bufb)) { if (*bufb == \u0026lsquo;-\u0026rsquo;) neg = 1; readBuf(); } do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); if (neg) x = -s; else x = s; }\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct edge { int t; edge *ne; };\nstruct seg { int l, r; dint z, cn, sn, mn, cp, sp; seg *ch[2]; };\nconst int maxn = 100003; const dint dinf = 0x3f3f3f3f3f3f3fll;\nint n, m, a[maxn]; int d[maxn], fa[maxn], sz[maxn], tc, fc[maxn], ch[maxn], cl[maxn]; int dbuf_arr[maxn], *dbuf(dbuf_arr), *ab[maxn]; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf(ebuf_arr), *head[maxn]; seg sbuf_arr[maxn \u0026laquo; 2], *sbuf(sbuf_arr), *rt[maxn];\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; ne = head[u]; head[u] = ebuf ++; }\n#define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1) inline void update(seg* p) { p-\u0026gt; cn = p-\u0026gt; ch[0]-\u0026gt; cn + p-\u0026gt; ch[1]-\u0026gt; cn; p-\u0026gt; sn = p-\u0026gt; ch[0]-\u0026gt; sn + p-\u0026gt; ch[1]-\u0026gt; sn + p-\u0026gt; cn * p-\u0026gt; z; p-\u0026gt; mn = max(p-\u0026gt; ch[0]-\u0026gt; mn, p-\u0026gt; ch[1]-\u0026gt; mn); p-\u0026gt; cp = p-\u0026gt; ch[0]-\u0026gt; cp + p-\u0026gt; ch[1]-\u0026gt; cp; p-\u0026gt; sp = p-\u0026gt; ch[0]-\u0026gt; sp + p-\u0026gt; ch[1]-\u0026gt; sp + p-\u0026gt; cp * p-\u0026gt; z; } inline void addTo(seg* p, int z) { p-\u0026gt; z += z; p-\u0026gt; sn += p-\u0026gt; cn * z; p-\u0026gt; sp += p-\u0026gt; cp * z; if (p-\u0026gt; mn \u0026gt; -dinf) p-\u0026gt; mn += z; } inline void pushDown(seg* p) { if (p-\u0026gt; z) { addTo(p-\u0026gt; ch[0], p-\u0026gt; z); addTo(p-\u0026gt; ch[1], p-\u0026gt; z); p-\u0026gt; z = 0; } }\ninline seg* sgtBuild(int l, int r, int* ab) { seg* p(sbuf ++); p-\u0026gt; l = l, p-\u0026gt; r = r, p-\u0026gt; z = 0; if (l + 1 \u0026lt; r) { p-\u0026gt; ch[0] = sgtBuild(l, midp(p), ab); p-\u0026gt; ch[1] = sgtBuild(midp(p), r, ab); update(p); } else { if (ab[l] \u0026gt;= 0) { p-\u0026gt; cn = 0, p-\u0026gt; sn = 0, p-\u0026gt; mn = -dinf; p-\u0026gt; cp = 1, p-\u0026gt; sp = ab[l]; } else { p-\u0026gt; cn = 1, p-\u0026gt; sn = p-\u0026gt; mn = ab[l]; p-\u0026gt; cp = 0, p-\u0026gt; sp = 0; } } return p; } inline void sgtCheck(seg* p) { if (p-\u0026gt; l + 1 == p-\u0026gt; r) { if (p-\u0026gt; mn \u0026gt;= 0) { p-\u0026gt; cp = 1, p-\u0026gt; sp = p-\u0026gt; mn; p-\u0026gt; cn = 0, p-\u0026gt; sn = 0, p-\u0026gt; mn = -dinf; } } else { pushDown(p); while (p-\u0026gt; mn \u0026gt;= 0) { sgtCheck(p-\u0026gt; ch[p-\u0026gt; mn == p-\u0026gt; ch[1]-\u0026gt; mn]); update(p); } } } inline void sgtAdd(seg* p, int l, int r, int z) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) { addTo(p, z); sgtCheck(p); } else { pushDown(p); if (r \u0026lt;= midp(p) || l \u0026gt;= midp(p)) sgtAdd(p-\u0026gt; ch[l \u0026gt;= midp(p)], l, r, z); else sgtAdd(p-\u0026gt; ch[0], l, midp(p), z), sgtAdd(p-\u0026gt; ch[1], midp(p), r, z); update(p); sgtCheck(p); } } inline dint sgtQry(seg* p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) { return p-\u0026gt; sp - p-\u0026gt; sn; } else { pushDown(p); if (r \u0026lt;= midp(p) || l \u0026gt;= midp(p)) return sgtQry(p-\u0026gt; ch[l \u0026gt;= midp(p)], l, r); else return sgtQry(p-\u0026gt; ch[0], l, midp(p)) + sgtQry(p-\u0026gt; ch[1], midp(p), r); } }\n#define cpos(p) (d[p]-d[ch[fc[p]]])\nvoid divide() { static int q[maxn]; int hd(0), tl(1); fa[q[hd] = 1] = 0; d[1] = 1; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (e-\u0026gt; t != fa[p]) { fa[e-\u0026gt; t] = p; d[e-\u0026gt; t] = d[p] + 1; q[tl ++] = e-\u0026gt; t; } } tc = 0; for (int i = tl - 1; i \u0026gt;= 0; \u0026ndash; i) { int p(q[i]), z(-1); sz[p] = 1; for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (e-\u0026gt; t != fa[p]) { sz[p] += sz[e-\u0026gt; t]; if (z == -1 || sz[e-\u0026gt; t] \u0026gt; sz[z]) z = e-\u0026gt; t; } if (z == -1) cl[fc[p] = ++ tc] = 1; else ++ cl[fc[p] = fc[z]]; ch[fc[p]] = p; } for (int i = 1; i \u0026lt;= tc; ++ i) ab[i] = dbuf, dbuf += cl[i]; for (int i = 1; i \u0026lt;= n; ++ i) ab[fc[i]][cpos(i)] = a[i]; for (int i = 1; i \u0026lt;= tc; ++ i) rt[i] = sgtBuild(0, cl[i], ab[i]); }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nreadInt(n); readInt(m); for (int i = 1; i \u0026lt;= n; ++ i) readInt(a[i]); for (int i = 1; i \u0026lt; n; ++ i) { int u, v; readInt(u); readInt(v); addEdge(u, v); addEdge(v, u); } divide(); while (m --) { int opt, u, v, w; readInt(opt); readInt(u); readInt(v); if (opt == 1) { readInt(w); while (fc[u] != fc[v]) { if (d[ch[fc[u]]] \u0026lt; d[ch[fc[v]]]) swap(u, v); sgtAdd(rt[fc[u]], 0, cpos(u) + 1, w); u = fa[ch[fc[u]]]; } if (d[u] \u0026gt; d[v]) swap(u, v); sgtAdd(rt[fc[u]], cpos(u), cpos(v) + 1, w); } else if (opt == 2) { dint ans(0); while (fc[u] != fc[v]) { if (d[ch[fc[u]]] \u0026lt; d[ch[fc[v]]]) swap(u, v); ans += sgtQry(rt[fc[u]], 0, cpos(u) + 1); u = fa[ch[fc[u]]]; } if (d[u] \u0026gt; d[v]) swap(u, v); ans += sgtQry(rt[fc[u]], cpos(u), cpos(v) + 1); printf(lld \u0026quot;\\n\u0026quot;, ans); } } }\n","permalink":"/code/dbimport_243/","summary":"#include #include #include #include using namespace std;\nconst int buf_len = 45678; char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0), neg(0); while (!isdigit(*bufb)) { if (*bufb == \u0026lsquo;-\u0026rsquo;) neg = 1; readBuf(); } do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); if (neg) x = -s; else x = s; }","title":"bzoj4127.cc"},{"content":"#include #include #include using namespace std;\n#define _l (long long int)\nconst int maxn = 503; const int hmod = 1111111121;\nint n, m, a[maxn][maxn], b[maxn][maxn], rb[maxn][maxn], c[maxn], o[maxn]; int t, s;\ninline bool cCmp(const int\u0026amp; a, const int\u0026amp; b) { return c[a] \u0026lt; c[b]; }\nvoid pr() { for (int i = 0; i \u0026lt; t; ++ i, putchar(10)) for (int j = 0; j \u0026lt; m; ++ j) fprintf(stderr, \u0026ldquo;%5d\u0026rdquo;, b[i][j]); }\ninline int modPow(int a, int x) { int s(1); for (; x; x \u0026raquo;= 1, a = _l a * a % hmod) if (x \u0026amp; 1) s = _l s * a % hmod; return s; }\nbool checkIns(int lo) { bool az(1); for (int i = 0; i \u0026lt; m; ++ i) { b[t][i] = a[lo][i]; if (b[t][i]) az = 0; } if (az) return 0; for (int i = 0, l = 0; i \u0026lt; t; ++ i) { while (l \u0026lt; m \u0026amp;\u0026amp; !b[t][l] \u0026amp;\u0026amp; !b[i][l]) ++ l; if (l == m) return 0; while (b[t][l]) { int rat(b[i][l] / b[t][l]); for (int j = l; j \u0026lt; m; ++ j) { b[i][j] -= _l b[t][j] * rat % hmod; if (b[i][j] \u0026lt; 0) b[i][j] += hmod; } if (b[t][l]) { for (int j = l; j \u0026lt; m; ++ j) swap(b[i][j], b[t][j]); } } } bool r(0); for (int i = t; i \u0026lt; m \u0026amp;\u0026amp; !r; ++ i) if (b[t][i]) r = 1; return r; }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); for (int i = 0; i \u0026lt; n; ++ i) for (int j = 0; j \u0026lt; m; ++ j) scanf(\u0026quot;%d\u0026quot;, a[i] + j); for (int i = 0; i \u0026lt; n; ++ i) scanf(\u0026quot;%d\u0026quot;, c + i), o[i] = i; sort(o, o + n, cCmp); t = s = 0; for (int i = 0; i \u0026lt; n; ++ i) { memcpy(rb, b, sizeof(b)); if (checkIns(o[i])) ++ t, s += c[o[i]]; else memcpy(b, rb, sizeof(b)); } printf(\u0026quot;%d %d\\n\u0026quot;, t, s); }\n","permalink":"/code/dbimport_225/","summary":"#include #include #include using namespace std;\n#define _l (long long int)\nconst int maxn = 503; const int hmod = 1111111121;\nint n, m, a[maxn][maxn], b[maxn][maxn], rb[maxn][maxn], c[maxn], o[maxn]; int t, s;\ninline bool cCmp(const int\u0026amp; a, const int\u0026amp; b) { return c[a] \u0026lt; c[b]; }\nvoid pr() { for (int i = 0; i \u0026lt; t; ++ i, putchar(10)) for (int j = 0; j \u0026lt; m; ++ j) fprintf(stderr, \u0026ldquo;%5d\u0026rdquo;, b[i][j]); }","title":"bzoj4004.cc"},{"content":"比较郁闷的题ovo拍了老久.最后还是找Po神要来了数据.\n首先这个矩阵的基就是一个拟阵,所以可以贪心.\n然后发现就是要O(n^2)判断是否线性无关.\n其他人的做法是强行顺序.我觉得没辣么麻烦啊.先把原来消出来的东西备份一下.如果发现不行再备份回来就好了啊ovoovo\n那么直接高消会有非常严重的精度问题(似乎是).\n于是我想直接用整数搞.然后发现会有变成负数的问题和越界的问题,强行re+wa.非常不开心.\n于是直接取模yeah.然后由于用了辗转相除之类的东西所以常数巨大.而且bzoj上开了O2比本机没开O2竟然慢了6倍.ovoovo\n","permalink":"/oi/dbimport_226/","summary":"比较郁闷的题ovo拍了老久.最后还是找Po神要来了数据.\n首先这个矩阵的基就是一个拟阵,所以可以贪心.\n然后发现就是要O(n^2)判断是否线性无关.\n其他人的做法是强行顺序.我觉得没辣么麻烦啊.先把原来消出来的东西备份一下.如果发现不行再备份回来就好了啊ovoovo\n那么直接高消会有非常严重的精度问题(似乎是).\n于是我想直接用整数搞.然后发现会有变成负数的问题和越界的问题,强行re+wa.非常不开心.\n于是直接取模yeah.然后由于用了辗转相除之类的东西所以常数巨大.而且bzoj上开了O2比本机没开O2竟然慢了6倍.ovoovo","title":"bzoj4004 [JLOI2015]装备购买"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct edge { int t; edge *ne; };\nstruct seg { int l, r, rv, s; seg *ch[2]; };\nconst int maxn = 10003; const int maxl = 17;\nint n, m, a[maxn], ca[maxn]; int dv[maxn], sz[maxl][maxn], dfb[maxl][maxn], dfe[maxl][maxn], dsr[maxl][maxn], df[maxn]; int cp[maxn], cv[maxn], cb[maxn]; dint ans[maxn], cans; dint tp[maxn], xpc[maxn]; int tvis, vis[maxn]; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf, *head[maxn]; seg sbuf_arr[maxn * maxl * 3], *sbuf, *rt[maxn];\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; ne = head[u]; head[u] = ebuf ++; }\n#define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1) #define seglen(p) ((p-\u0026gt;r-p-\u0026gt;l)) inline seg* sgtBuild(int l, int r) { seg p(sbuf ++); p-\u0026gt; l = l, p-\u0026gt; r = r; if (l + 1 \u0026lt; r) { p-\u0026gt; ch[0] = sgtBuild(l, midp(p)); p-\u0026gt; ch[1] = sgtBuild(midp(p), r); } return p; } inline void segRev(seg p) { p-\u0026gt; rv ^= 1, p-\u0026gt; s = seglen(p) - p-\u0026gt; s; } inline void sgtRev(seg* p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) segRev(p); else { if (r \u0026lt;= midp(p) || l \u0026gt;= midp(p)) sgtRev(p-\u0026gt; ch[l \u0026gt;= midp(p)], l, r); else sgtRev(p-\u0026gt; ch[0], l, midp(p)), sgtRev(p-\u0026gt; ch[1], midp(p), r); p-\u0026gt; s = p-\u0026gt; ch[0]-\u0026gt; s + p-\u0026gt; ch[1]-\u0026gt; s; } } inline void sgtSet(seg* p, int po) { p-\u0026gt; s = 0, p-\u0026gt; rv = 0; if (p-\u0026gt; l + 1 \u0026lt; p-\u0026gt; r) sgtSet(p-\u0026gt; ch[po \u0026gt;= midp(p)], po); } inline int sgtQry(seg* p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) return p-\u0026gt; s; else { if (p-\u0026gt; rv) { segRev(p-\u0026gt; ch[0]); segRev(p-\u0026gt; ch[1]); p-\u0026gt; rv = 0; } if (r \u0026lt;= midp(p) || l \u0026gt;= midp(p)) return sgtQry(p-\u0026gt; ch[l \u0026gt;= midp(p)], l, r); else return sgtQry(p-\u0026gt; ch[0], l, midp(p)) + sgtQry(p-\u0026gt; ch[1], midp(p), r); } }\nint findGrvCtr(int po) { static int q[maxn], sz[maxn], fr[maxn]; int hd(0), tl(1); vis[q[hd] = po] = ++ tvis; fr[po] = 0; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (!dv[e-\u0026gt; t] \u0026amp;\u0026amp; vis[e-\u0026gt; t] \u0026lt; tvis) { vis[e-\u0026gt; t] = tvis; fr[e-\u0026gt; t] = p; q[tl ++] = e-\u0026gt; t; } } int ss(tl), sp(po); for (int i = tl - 1; i \u0026gt;= 0; \u0026ndash; i) { int p(q[i]), ms(0); sz[p] = 1; for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (vis[e-\u0026gt; t] == tvis \u0026amp;\u0026amp; e-\u0026gt; t != fr[p]) { sz[p] += sz[e-\u0026gt; t]; ms = max(ms, sz[e-\u0026gt; t]); } ms = max(ms, tl - sz[p]); if (ms \u0026lt; ss) ss = ms, sp = p; } return sp; }\nvoid DFSBuild(int po) { static int stc[maxn], fr[maxn], dfo[maxn]; int *dfb(:: dfb[dv[po]]), *dfe(:: dfe[dv[po]]), dsr(:: dsr[dv[po]]); int tst(1), dfn(0); fr[stc[tst] = po] = 0; vis[po] = ++ tvis; dsr[po] = -1; while (tst) { int p(stc[tst \u0026ndash;]); dfo[dfb[p] = dfe[p] = ++ dfn] = p; for (edge e = head[p]; e; e = e-\u0026gt; ne) if (!dv[e-\u0026gt; t] \u0026amp;\u0026amp; vis[e-\u0026gt; t] \u0026lt; tvis) { vis[e-\u0026gt; t] = tvis; fr[e-\u0026gt; t] = p; if (dsr[p] == -1) dsr[e-\u0026gt; t] = e-\u0026gt; t; else dsr[e-\u0026gt; t] = dsr[p]; stc[++ tst] = e-\u0026gt; t; } } for (int i = dfn; i \u0026gt; 1; \u0026ndash; i) { int p(dfo[i]); if (dfe[fr[p]] \u0026lt; dfe[p]) dfe[fr[p]] = dfe[p]; } rt[po] = sgtBuild(1, dfn + 1); tp[po] = dfn - 1; for (int i = 2, j; i \u0026lt;= dfn; i = j) { for (j = i; j \u0026lt;= dfn \u0026amp;\u0026amp; dsr[dfo[j]] == dsr[dfo[i]]; ++ j); int c(j - i); tp[po] += _l c * (dfn - c); } }\nvoid divide(int po, int dvd, int dvf) { int p(findGrvCtr(po)); dv[p] = dvd; df[p] = dvf; DFSBuild(p); for (edge* e = head[p]; e; e = e-\u0026gt; ne) if (!dv[e-\u0026gt; t]) divide(e-\u0026gt; t, dvd + 1, p); }\nvoid chgCol(int p) { cb[p] ^= 1; cans -= xpc[p]; cans += (xpc[p] = tp[p] - xpc[p]); for (int u = df[p]; u; u = df[u]) { int d(dv[u]), r(dsr[d][p]); int o0, o1, i0, i1; o1 = rt[u]-\u0026gt; s - sgtQry(rt[u], dfb[d][r], dfe[d][r] + 1); o0 = seglen(rt[u]) - (dfe[d][r] - dfb[d][r] + 1) - o1; i1 = sgtQry(rt[u], dfb[d][p], dfe[d][p] + 1); i0 = dfe[d][p] - dfb[d][p] + 1 - i1; dint dc; \u0026ndash; o0; if (cb[u]) dc = (_l i0 * o0 + _l i1 * o1 + i0) * 2; else dc = (_l i0 * o1 + _l i1 * o0 + i1) * 2; xpc[u] -= dc; cans -= dc; swap(i0, i1); if (cb[u]) dc = (_l i0 * o0 + _l i1 * o1 + i0) * 2; else dc = (_l i0 * o1 + _l i1 * o0 + i1) * 2; xpc[u] += dc; cans += dc; sgtRev(rt[u], dfb[d][p], dfe[d][p] + 1); } }\nvoid runLevel(int bi) { for (int i = 1; i \u0026lt;= n; ++ i) { xpc[i] = 0; cb[i] = 0; for (int p = i; p; p = df[p]) sgtSet(rt[p], dfb[dv[p]][i]); } cans = 0; for (int i = 1; i \u0026lt;= n; ++ i) { ca[i] = a[i]; if ((a[i] \u0026raquo; bi) \u0026amp; 1) chgCol(i); } for (int i = 0; i \u0026lt; m; ++ i) { int vo((ca[cp[i]] \u0026raquo; bi) \u0026amp; 1), vn((cv[i] \u0026raquo; bi) \u0026amp; 1); if (vo != vn) chgCol(cp[i]); ca[cp[i]] = cv[i]; ans[i] += cans \u0026laquo; bi; } }\nvoid sov() { ebuf = ebuf_arr; sbuf = sbuf_arr; for (int i = 1; i \u0026lt;= n; ++ i) { scanf(\u0026quot;%d\u0026quot;, a + i); head[i] = 0; dv[i] = 0; } for (int i = 1; i \u0026lt; n; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); addEdge(u, v); addEdge(v, u); } divide(1, 1, 0); for (int i = 0; i \u0026lt; m; ++ i) { scanf(\u0026quot;%d%d\u0026quot;, cp + i, cv + i); ans[i] = 0; } for (int i = 0; i \u0026lt; 16; ++ i) runLevel(i); for (int i = 0; i \u0026lt; m; ++ i) printf(lld \u0026ldquo;\\n\u0026rdquo;, ans[i]); }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nmemset(vis, 0, sizeof(vis)); tvis = 0; while (scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m) != EOF) sov(); }\n","permalink":"/code/dbimport_253/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct edge { int t; edge *ne; };\nstruct seg { int l, r, rv, s; seg *ch[2]; };\nconst int maxn = 10003; const int maxl = 17;\nint n, m, a[maxn], ca[maxn]; int dv[maxn], sz[maxl][maxn], dfb[maxl][maxn], dfe[maxl][maxn], dsr[maxl][maxn], df[maxn]; int cp[maxn], cv[maxn], cb[maxn]; dint ans[maxn], cans; dint tp[maxn], xpc[maxn]; int tvis, vis[maxn]; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf, *head[maxn]; seg sbuf_arr[maxn * maxl * 3], *sbuf, *rt[maxn];","title":"hdu5267.cc"},{"content":"bc fst爽翻.然后这题差二十分钟没调出来不然我就是rank1.还是应该直接敲而不是去和队友商量.\n静态做的话直接按位树分就好了.然后资瓷修改的时候也是一样.只是把之前求的信息在树分后的dfs序上用线段树记下来.也就是要随时知道某个分治层里的某个子树上有多少个0或者1.\n然后就是讨论某个修改对当前答案的贡献.要注意分治根的值,以及有贡献的是哪些位置.中间打错了外层的dfs序范围,导致调试了很久.明明想清楚了但是打错了,不应该的.\n只有完了之后交了然后怒虐标程好开心啊.\n","permalink":"/oi/dbimport_254/","summary":"bc fst爽翻.然后这题差二十分钟没调出来不然我就是rank1.还是应该直接敲而不是去和队友商量.\n静态做的话直接按位树分就好了.然后资瓷修改的时候也是一样.只是把之前求的信息在树分后的dfs序上用线段树记下来.也就是要随时知道某个分治层里的某个子树上有多少个0或者1.\n然后就是讨论某个修改对当前答案的贡献.要注意分治根的值,以及有贡献的是哪些位置.中间打错了外层的dfs序范围,导致调试了很久.明明想清楚了但是打错了,不应该的.\n只有完了之后交了然后怒虐标程好开心啊.","title":"hdu5267 pog loves szh IV"},{"content":"#include #include #include using namespace std;\nconst int maxn = 1000003;\nint n, l, a[maxn], b[maxn], s; int q[maxn], hd, tl;\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); for (int i = 1; i \u0026lt;= n; ++ i) scanf(\u0026quot;%d\u0026quot;, a + i); for (int i = n + 1; i \u0026lt;= n * 2; ++ i) a[i] = a[i - n]; a[0] = 0; for (int i = 1; i \u0026lt;= n * 2; ++ i) a[i] += a[i - 1]; l = (n + 1) \u0026gt;\u0026gt; 1; for (int i = 1; i + l - 1 \u0026lt;= n * 2; ++ i) b[i] = a[i + l - 1] - a[i - 1]; s = 0; hd = tl = 0; for (int i = 1; i + l - 1 \u0026lt;= n * 2; ++ i) { while (hd \u0026lt; tl \u0026amp;\u0026amp; b[q[tl - 1]] \u0026gt;= b[i]) -- tl; q[tl ++] = i; while (hd \u0026lt; tl \u0026amp;\u0026amp; q[hd] + l \u0026lt;= i) ++ hd; if (i \u0026gt;= l) s = max(s, b[q[hd]]); } printf(\u0026quot;%d\\n\u0026quot;, s); }\n","permalink":"/code/dbimport_241/","summary":"#include #include #include using namespace std;\nconst int maxn = 1000003;\nint n, l, a[maxn], b[maxn], s; int q[maxn], hd, tl;\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); for (int i = 1; i \u0026lt;= n; ++ i) scanf(\u0026quot;%d\u0026quot;, a + i); for (int i = n + 1; i \u0026lt;= n * 2; ++ i) a[i] = a[i - n]; a[0] = 0; for (int i = 1; i \u0026lt;= n * 2; ++ i) a[i] += a[i - 1]; l = (n + 1) \u0026gt;\u0026gt; 1; for (int i = 1; i + l - 1 \u0026lt;= n * 2; ++ i) b[i] = a[i + l - 1] - a[i - 1]; s = 0; hd = tl = 0; for (int i = 1; i + l - 1 \u0026lt;= n * 2; ++ i) { while (hd \u0026lt; tl \u0026amp;\u0026amp; b[q[tl - 1]] \u0026gt;= b[i]) -- tl; q[tl ++] = i; while (hd \u0026lt; tl \u0026amp;\u0026amp; q[hd] + l \u0026lt;= i) ++ hd; if (i \u0026gt;= l) s = max(s, b[q[hd]]); } printf(\u0026quot;%d\\n\u0026quot;, s); }","title":"bzoj4123.cc"},{"content":"还比较有意思的一题.\n考虑如果Alice选了某一个位置,那么Bob的策略一定是选使得Alice的和最小的一段.也就是对于所有位置,求包含它的所有区间中和最小的一个,再求个max.\n这个东西先要展开一倍,然后可以比较方便地用单调队列搞定.\n","permalink":"/oi/dbimport_242/","summary":"还比较有意思的一题.\n考虑如果Alice选了某一个位置,那么Bob的策略一定是选使得Alice的和最小的一段.也就是对于所有位置,求包含它的所有区间中和最小的一个,再求个max.\n这个东西先要展开一倍,然后可以比较方便地用单调队列搞定.","title":"bzoj4123 [Baltic2015]Hacker"},{"content":"听说要写一个计划ovo.然后计划没有变化快.\n首先我们来一张日历.\nSunMonTueWedThuFriSat 04.2204.2304.24 04.2504.2604.2704.2804.2904.3005.01 05.0205.0305.04ctsc day105.0505.06ctsc day205.0705.08 05.09apio05.1005.1105.1205.1305.1405.15 05.1605.1705.1805.1905.2005.2105.22 05.2305.2405.2505.2605.2705.28rshc 205.29 05.3005.3106.0106.0206.0306.0406.05 06.0606.0706.0806.0906.1006.1106.12 06.1306.1406.1506.1606.1706.1806.19 06.2006.2106.2206.2306.2406.2506.26 06.2706.2806.2906.3007.0107.0207.03 07.0407.0507.0607.0707.0807.0907.10 07.1107.1207.1307.1407.15noi 主要的事情有,五月上旬的apio和ctsc.五月中旬的zjoi.六月下旬的hn多校.七月noi集训.以及八月noi.\n四月大概木有多少时间了.apio之前就去浪一浪bzoj上前几年的原题吧.熟悉一下风格顺便受一下虐.然后顺便去把别的省的今年的省选题做一做.\n五月第一个星期就去ctsc和apio了.每天水一水题就好了.然后准备好被zhx各种奇怪的问题问趴下.另外要利用这个时间把弱省胡策的题搞定.\n然后回来就是11号了.然后大概马上又要去zj.这种零碎的时间啥的比较郁闷,就多刷一些题吧.大概还会有胡策.有时间就多看看.学习一下各省的神牛牛牛牛们都在看什么题.\n回来之后五月就只剩下一个星期了.先复习一会ds.去把toptree学了然后把sone1写了.(大概一个星期写不完?)心里的痛啊.\n5月31号这一周以及六月第一周去把noi原题填一些.重点做一些图论题和dp题.这回省选就是坑在这的.然后也要补习一些论文.\n6月13号这一周要会考.还是要多腾一些时间来复习一下政治和通用技术.不能不过关那就麻烦了.然后这个时候大概团抗的东西也出来了.可以看看.不能再像上次thu的aicraft那样郁闷了.\n会考完大概就直奔湖南了.\n然后回来就是noi集训.大概会比较累.赛前就是没事刷刷题来放松心情吧.然后还要给cdqz夏令营出题ovo.七月这个坑先放这吧.主要是用来查漏补缺.\n然后八月就愉快地去noi喽.\nupd@20150511 计划果然没有变化快.noi提前到了七月份,于是duang的一声时间变紧了.所幸之前没有给七月份安排什么很具体的事情.\n5月出去第一次之前的事情大概都解决了.但是没有坚持每天一道bzoj.感觉懒癌已经无药可治了.当然在外面没有好用的键盘也是一个问题.不过主要还得怪自己.\n发现自己的数学还是比较弱的.决定这周把矩阵论看了.反正也懒癌是吧您就多看看书吧.\n夏令营的题我觉得已经差不多了就差别人的部分了晕.然后要政治会考了也要抽一点时间把前两天错过的复习课看一下.然后也要准备一下简历和自荐信.下定决定用tex搞所以要先做一个好看一点的板出来.\n6月似乎又要去趟帝都了.之前觉得有坑的地方似乎都在被填ing好开心.\nupd@20150513 计划永远没有变化快.因为zjoi在余姚所以愉快地放弃了TT\n那这几天就闲着没事干喽.明天就动手去填sone1!\n多出来的时间把mhy开的坑填掉!就这么愉快地决定了!\nupd@20150603 考跪了一场thusc让我心情异常好.然后发现之前填Sone1的雄心淹没在了代码里.\n发现自己有些地方有漏洞啊.然后发现六月远没有想像中的那么充实.\n听zhx一句,vjudge上的题看来还是有用的,所以最近抽出些时间把题看一遍.不用全写,挑一些就好了.\n然后去学习一下单纯型.\n","permalink":"/diary/dbimport_024/","summary":"听说要写一个计划ovo.然后计划没有变化快.\n首先我们来一张日历.\nSunMonTueWedThuFriSat 04.2204.2304.24 04.2504.2604.2704.2804.2904.3005.01 05.0205.0305.04ctsc day105.0505.06ctsc day205.0705.08 05.09apio05.1005.1105.1205.1305.1405.15 05.1605.1705.1805.1905.2005.2105.22 05.2305.2405.2505.2605.2705.28rshc 205.29 05.3005.3106.0106.0206.0306.0406.05 06.0606.0706.0806.0906.1006.1106.12 06.1306.1406.1506.1606.1706.1806.19 06.2006.2106.2206.2306.2406.2506.26 06.2706.2806.2906.3007.0107.0207.03 07.0407.0507.0607.0707.0807.0907.10 07.1107.1207.1307.1407.15noi 主要的事情有,五月上旬的apio和ctsc.五月中旬的zjoi.六月下旬的hn多校.七月noi集训.以及八月noi.\n四月大概木有多少时间了.apio之前就去浪一浪bzoj上前几年的原题吧.熟悉一下风格顺便受一下虐.然后顺便去把别的省的今年的省选题做一做.\n五月第一个星期就去ctsc和apio了.每天水一水题就好了.然后准备好被zhx各种奇怪的问题问趴下.另外要利用这个时间把弱省胡策的题搞定.\n然后回来就是11号了.然后大概马上又要去zj.这种零碎的时间啥的比较郁闷,就多刷一些题吧.大概还会有胡策.有时间就多看看.学习一下各省的神牛牛牛牛们都在看什么题.\n回来之后五月就只剩下一个星期了.先复习一会ds.去把toptree学了然后把sone1写了.(大概一个星期写不完?)心里的痛啊.\n5月31号这一周以及六月第一周去把noi原题填一些.重点做一些图论题和dp题.这回省选就是坑在这的.然后也要补习一些论文.\n6月13号这一周要会考.还是要多腾一些时间来复习一下政治和通用技术.不能不过关那就麻烦了.然后这个时候大概团抗的东西也出来了.可以看看.不能再像上次thu的aicraft那样郁闷了.\n会考完大概就直奔湖南了.\n然后回来就是noi集训.大概会比较累.赛前就是没事刷刷题来放松心情吧.然后还要给cdqz夏令营出题ovo.七月这个坑先放这吧.主要是用来查漏补缺.\n然后八月就愉快地去noi喽.\nupd@20150511 计划果然没有变化快.noi提前到了七月份,于是duang的一声时间变紧了.所幸之前没有给七月份安排什么很具体的事情.\n5月出去第一次之前的事情大概都解决了.但是没有坚持每天一道bzoj.感觉懒癌已经无药可治了.当然在外面没有好用的键盘也是一个问题.不过主要还得怪自己.\n发现自己的数学还是比较弱的.决定这周把矩阵论看了.反正也懒癌是吧您就多看看书吧.\n夏令营的题我觉得已经差不多了就差别人的部分了晕.然后要政治会考了也要抽一点时间把前两天错过的复习课看一下.然后也要准备一下简历和自荐信.下定决定用tex搞所以要先做一个好看一点的板出来.\n6月似乎又要去趟帝都了.之前觉得有坑的地方似乎都在被填ing好开心.\nupd@20150513 计划永远没有变化快.因为zjoi在余姚所以愉快地放弃了TT\n那这几天就闲着没事干喽.明天就动手去填sone1!\n多出来的时间把mhy开的坑填掉!就这么愉快地决定了!\nupd@20150603 考跪了一场thusc让我心情异常好.然后发现之前填Sone1的雄心淹没在了代码里.\n发现自己有些地方有漏洞啊.然后发现六月远没有想像中的那么充实.\n听zhx一句,vjudge上的题看来还是有用的,所以最近抽出些时间把题看一遍.不用全写,挑一些就好了.\n然后去学习一下单纯型.","title":"20150422 plan before noi"},{"content":"此页已被hack\n","permalink":"/diary/dbimport_002/","summary":"此页已被hack","title":"20150315 first footprint"},{"content":"thusc最终还是完了.mark一下吧.\n昨天考了一场很糟熇的试.于是心情很差.\n今天去面试的时候有一点紧张,出来的时候没有起身看坐.大概是自己太naive了吧.\n于是结果就是那么不好喽.\n协议的意思大概是,如果noi前50就点,如果51到100就降一本,否则降60分.嗯,听上去也不算差是吧?\n总之给我提了一个醒,如果不努力的话就被淘汰了.不能再颓了.\n要登机了ovo\n//hackedby laekov粉丝团帮厨: laekov姥爷好强啊OvO\n","permalink":"/diary/dbimport_038/","summary":"thusc最终还是完了.mark一下吧.\n昨天考了一场很糟熇的试.于是心情很差.\n今天去面试的时候有一点紧张,出来的时候没有起身看坐.大概是自己太naive了吧.\n于是结果就是那么不好喽.\n协议的意思大概是,如果noi前50就点,如果51到100就降一本,否则降60分.嗯,听上去也不算差是吧?\n总之给我提了一个醒,如果不努力的话就被淘汰了.不能再颓了.\n要登机了ovo\n//hackedby laekov粉丝团帮厨: laekov姥爷好强啊OvO","title":"20150601"},{"content":"depressing\ni know nobody cares what i am really feeling. nobody.\nso why am i writing?\nthere\u0026rsquo;s really nothing to say.\nkilled by lazy cancer at May 31st, 2015\ngoodbye, the cute wrold. i will smash everything someday.\n","permalink":"/diary/dbimport_037/","summary":"depressing\ni know nobody cares what i am really feeling. nobody.\nso why am i writing?\nthere\u0026rsquo;s really nothing to say.\nkilled by lazy cancer at May 31st, 2015\ngoodbye, the cute wrold. i will smash everything someday.","title":"20150531 thusc day1"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\n#define checkNeg(x) { if (x \u0026lt; 0) x = -x; } dint gcd(dint a, dint b) { checkNeg(a); checkNeg(b); while (a) { register dint c(b % a); b = a; a = c; } return b; }\n#define md ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1) #define mdp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1) #define zp(x,y) ((x)*m+(y))\nconst int maxn = 500003;\nint n, m, q, xo, yo; dint a[maxn], b[maxn];\nnamespace isgt { const int maxl = 27; const int maxnd = maxn * 27; struct seg { int l, r; dint g; seg ls, rs; }; seg sbuf_arr[maxnd], sbuf(sbuf_arr); inline seg build(int l, int r, dint a) { seg p(sbuf ++); p-\u0026gt; l = l, p-\u0026gt; r = r; if (l + 1 == r) { p-\u0026gt; g = a[l]; } else { p-\u0026gt; ls = build(l, md, a); p-\u0026gt; rs = build(md, r, a); p-\u0026gt; g = gcd(p-\u0026gt; ls-\u0026gt; g, p-\u0026gt; rs-\u0026gt; g); } return p; } void chg(seg* p, int po, dint v, int ty) { seg* s[maxl]; int t(1); for (s[t] = p; s[t]-\u0026gt; l + 1 \u0026lt; s[t]-\u0026gt; r; ++ t) if (po \u0026lt; mdp(s[t])) s[t + 1] = s[t]-\u0026gt; ls; else s[t + 1] = s[t]-\u0026gt; rs; if (ty == 0) s[t]-\u0026gt; g += v; else s[t]-\u0026gt; g = v; while (\u0026ndash; t) s[t]-\u0026gt; g = gcd(s[t]-\u0026gt; ls-\u0026gt; g, s[t]-\u0026gt; rs-\u0026gt; g); } inline dint qry(seg* p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) return p-\u0026gt; g; else if (r \u0026lt;= md) return qry(p-\u0026gt; ls, l, r); else if (l \u0026gt;= md) return qry(p-\u0026gt; rs, l, r); else return gcd(qry(p-\u0026gt; ls, l, md), qry(p-\u0026gt; rs, md, r)); } };\nnamespace osgt { struct seg { int l, r; isgt :: seg* rt; seg *ls, *rs; }; seg sbuf_arr[maxn * 3], *sbuf(sbuf_arr); dint tmp[maxn];\ninline void update(seg* p, int po) { dint va(isgt :: qry(p-\u0026gt; ls-\u0026gt; rt, po, po + 1)); dint vb(isgt :: qry(p-\u0026gt; rs-\u0026gt; rt, po, po + 1)); isgt :: chg(p-\u0026gt; rt, po, gcd(va, vb), 1); } seg* build(int l, int r, int rl, int rr) { seg* p(sbuf ++); p-\u0026gt; l = l, p-\u0026gt; r = r; if (l + 1 == r) { p-\u0026gt; rt = isgt :: build(rl, rr, b + l * m); } else { p-\u0026gt; ls = build(l, md, rl, rr); p-\u0026gt; rs = build(md, r, rl, rr); p-\u0026gt; rt = isgt :: build(rl, rr, b + l * m); for (int i = rl; i \u0026lt; rr; ++ i) update(p, i); } return p; } inline dint qry(seg* p, int l, int r, int rl, int rr) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) return isgt :: qry(p-\u0026gt; rt, rl, rr); else if (r \u0026lt;= md) return qry(p-\u0026gt; ls, l, r, rl, rr); else if (l \u0026gt;= md) return qry(p-\u0026gt; rs, l, r, rl, rr); else return gcd(qry(p-\u0026gt; ls, l, md, rl, rr), qry(p-\u0026gt; rs, md, r, rl, rr)); } inline void chg(seg* p, int px, int py, dint vo) { if (p-\u0026gt; l + 1 == p-\u0026gt; r) isgt :: chg(p-\u0026gt; rt, py, vo, 0); else { if (px \u0026lt; md) chg(p-\u0026gt; ls, px, py, vo); else chg(p-\u0026gt; rs, px, py, vo); update(p, py); } } };\nosgt :: seg *rt[4];\nvoid preArr() { for (int i = 0; i \u0026lt; n; ++ i) for (int j = 0; j \u0026lt; m; ++ j) scanf(lld, a + zp(i, j)); for (int i = 0; i \u0026lt; xo; ++ i) { for (int j = 0; j \u0026lt; yo; ++ j) b[zp(i, j)] = a[zp(i, j)] - a[zp(i + 1, j)] - a[zp(i, j + 1)] + a[zp(i + 1, j + 1)]; b[zp(i, yo)] = a[zp(i, yo)] - a[zp(i + 1, yo)]; for (int j = yo + 1; j \u0026lt; m; ++ j) b[zp(i, j)] = a[zp(i, j)] - a[zp(i + 1, j)] - a[zp(i, j - 1)] + a[zp(i + 1, j - 1)]; } for (int j = 0; j \u0026lt; yo; ++ j) b[zp(xo, j)] = a[zp(xo, j)] - a[zp(xo, j + 1)]; b[zp(xo, yo)] = a[zp(xo, yo)]; for (int j = yo + 1; j \u0026lt; m; ++ j) b[zp(xo, j)] = a[zp(xo, j)] - a[zp(xo, j - 1)]; for (int i = xo + 1; i \u0026lt; n; ++ i) { for (int j = 0; j \u0026lt; yo; ++ j) b[zp(i, j)] = a[zp(i, j)] - a[zp(i - 1, j)] - a[zp(i, j + 1)] + a[zp(i - 1, j + 1)]; b[zp(i, yo)] = a[zp(i, yo)] - a[zp(i - 1, yo)]; for (int j = yo + 1; j \u0026lt; m; ++ j) b[zp(i, j)] = a[zp(i, j)] - a[zp(i - 1, j)] - a[zp(i, j - 1)] + a[zp(i - 1, j - 1)]; } rt[0] = osgt :: build(0, xo + 1, 0, yo + 1); rt[1] = osgt :: build(0, xo + 1, yo, m); rt[2] = osgt :: build(xo, n, 0, yo + 1); rt[3] = osgt :: build(xo, n, yo, m); }\nint main() { #ifdef LAEKOV_LOCAL freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d%d%d%d\u0026quot;, \u0026amp;n, \u0026amp;m, \u0026amp;xo, \u0026amp;yo, \u0026amp;q); -- xo, -- yo; preArr(); while (q --) { int opt, xa, ya, xb, yb; scanf(\u0026quot;%d%d%d%d%d\u0026quot;, \u0026amp;opt, \u0026amp;xa, \u0026amp;ya, \u0026amp;xb, \u0026amp;yb); if (opt == 0) { dint v0(osgt :: qry(rt[0], xo - xa, xo + 1, yo - ya, yo + 1)); dint v1(osgt :: qry(rt[1], xo - xa, xo + 1, yo, yo + yb + 1)); dint v2(osgt :: qry(rt[2], xo, xo + xb + 1, yo - ya, yo + 1)); dint v3(osgt :: qry(rt[3], xo, xo + xb + 1, yo, yo + yb + 1)); //printf(lld \u0026quot;\\n\u0026quot;, v3); printf(lld \u0026quot;\\n\u0026quot;, gcd(gcd(v0, v1), gcd(v2, v3))); } else { dint v; scanf(lld, \u0026amp;v); -- xa, -- ya, -- xb, -- yb; if (xa \u0026lt;= xo \u0026amp;\u0026amp; ya \u0026lt;= yo) { int xc(min(xo, xb)), yc(min(yo, yb)); osgt :: chg(rt[0], xc, yc, v); if (xa) osgt :: chg(rt[0], xa - 1, yc, -v); if (ya) osgt :: chg(rt[0], xc, ya - 1, -v); if (xa \u0026amp;\u0026amp; ya) osgt :: chg(rt[0], xa - 1, ya - 1, v); } if (xa \u0026lt;= xo \u0026amp;\u0026amp; yb \u0026gt;= yo) { int xc(min(xo, xb)), yc(max(yo, ya)); osgt :: chg(rt[1], xc, yc, v); if (xa) osgt :: chg(rt[1], xa - 1, yc, -v); if (yb + 1 \u0026lt; m) osgt :: chg(rt[1], xc, yb + 1, -v); if (xa \u0026amp;\u0026amp; yb + 1 \u0026lt; m) osgt :: chg(rt[1], xa - 1, yb + 1, v); } if (xb \u0026gt;= xo \u0026amp;\u0026amp; ya \u0026lt;= yo) { int xc(max(xo, xa)), yc(min(yo, yb)); osgt :: chg(rt[2], xc, yc, v); if (xb + 1 \u0026lt; n) osgt :: chg(rt[2], xb + 1, yc, -v); if (ya) osgt :: chg(rt[2], xc, ya - 1, -v); if (xb + 1 \u0026lt; n \u0026amp;\u0026amp; ya) osgt :: chg(rt[2], xb + 1, ya - 1, v); } if (xb \u0026gt;= xo \u0026amp;\u0026amp; yb \u0026gt;= yo) { int xc(max(xo, xa)), yc(max(yo, ya)); osgt :: chg(rt[3], xc, yc, v); if (xb + 1 \u0026lt; n) osgt :: chg(rt[3], xb + 1, yc, -v); if (yb + 1 \u0026lt; m) osgt :: chg(rt[3], xc, yb + 1, -v); if (xb + 1 \u0026lt; n \u0026amp;\u0026amp; yb + 1 \u0026lt; m) osgt :: chg(rt[3], xb + 1, yb + 1, v); } } } }\n","permalink":"/code/dbimport_166/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\n#define checkNeg(x) { if (x \u0026lt; 0) x = -x; } dint gcd(dint a, dint b) { checkNeg(a); checkNeg(b); while (a) { register dint c(b % a); b = a; a = c; } return b; }\n#define md ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1) #define mdp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1) #define zp(x,y) ((x)*m+(y))","title":"bzoj2877.cc"},{"content":"其实是一道没多大意思思的码农题TT然而这是我的第800题所以要mark一下.\ngcd序列可以用插分序列+第一个数来支持区间加.二维那就二维差分喽.\n然后发现第一个数似乎没有办法维护啊.不能做了?!\n询问的方式比较奇怪,有一个中心.那就建4个方向吧.这样似乎可做了yeah.\n所以我还是太naive了啊.\n是时候屯一波题了.\n","permalink":"/oi/dbimport_167/","summary":"其实是一道没多大意思思的码农题TT然而这是我的第800题所以要mark一下.\ngcd序列可以用插分序列+第一个数来支持区间加.二维那就二维差分喽.\n然后发现第一个数似乎没有办法维护啊.不能做了?!\n询问的方式比较奇怪,有一个中心.那就建4个方向吧.这样似乎可做了yeah.\n所以我还是太naive了啊.\n是时候屯一波题了.","title":"bzoj2877 [Noi2012]魔幻棋盘"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #define _l (long long int)\ntypedef pair \u0026lt;dint, int\u0026gt; dpr;\nstruct node { int v, t, sz; node* ch[2]; }; struct edge { int t, v; edge *next; };\nconst int maxn = 100009; const int maxh = 200009; const int maxnd = maxn * 43; const int mod = (1 \u0026laquo; 23) * 7 * 17 + 1;\nedge ebuf_arr[maxn], *ebuf(ebuf_arr), *head[maxn]; node nbuf_arr[maxnd], *nbuf(nbuf_arr), *nrt[maxn], *srt[maxn]; int n, k, ts, th; dint sans[maxn]; dpr hp[maxh];\n#define szof(p) ((p)?(p-\u0026gt;sz):0) inline void update(node* p) { p-\u0026gt; sz = szof(p-\u0026gt; ch[0]) + szof(p-\u0026gt; ch[1]) + 1; if (szof(p-\u0026gt; ch[0]) \u0026lt; szof(p-\u0026gt; ch[1])) swap(p-\u0026gt; ch[0], p-\u0026gt; ch[1]); }\ninline node* allocNode(int v, int t) { node* np(nbuf ++); np-\u0026gt; v = v; np-\u0026gt; t = t; np-\u0026gt; ch[0] = np-\u0026gt; ch[1] = 0; np-\u0026gt; sz = 1; return np; }\nnode* hMerge(node* p, node* q) { if (!p || !q) { if (!p) return q; else return p; } else if (p-\u0026gt; v \u0026lt; q-\u0026gt; v) { p-\u0026gt; ch[1] = hMerge(p-\u0026gt; ch[1], q); update(p); return p; } else { q-\u0026gt; ch[1] = hMerge(q-\u0026gt; ch[1], p); update(q); return q; } } node* prMerge(node* p, node* q) { node* r; if (!p || !q) { if (!p) r = q; else r = p; } else if (p-\u0026gt; v \u0026lt; q-\u0026gt; v) { r = nbuf ++; memcpy(r, p, sizeof(node)); r-\u0026gt; ch[1] = prMerge(r-\u0026gt; ch[1], q); } else { r = nbuf ++; memcpy(r, q, sizeof(node)); r-\u0026gt; ch[1] = prMerge(r-\u0026gt; ch[1], p); } if (r) update(r); return r; }\ndint sov() { while (ts \u0026lt; k \u0026amp;\u0026amp; th) { dpr g(hp[0]); pop_heap(hp, hp + th \u0026ndash;); int po(g. second), t; ++ ts; sans[ts] = -g. first; t = srt[po]-\u0026gt; t; srt[po] = prMerge(srt[po]-\u0026gt; ch[0], srt[po]-\u0026gt; ch[1]); if (srt[po]) { hp[th] = dpr(-sans[po] - srt[po]-\u0026gt; v, po); push_heap(hp, hp + ++ th); } srt[ts] = prMerge(srt[po], nrt[t]); if (srt[ts]) { hp[th] = dpr(-sans[ts] - srt[ts]-\u0026gt; v, ts); push_heap(hp, hp + ++ th); } } return sans[ts]; }\nint main() { #ifndef ONLINE_JUDGE //freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;k); memset(head, 0, sizeof(head)); for (int i = 2; i \u0026lt;= n; ++ i) { int f, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;f, \u0026amp;v); ebuf-\u0026gt; t = i; ebuf-\u0026gt; v = v; ebuf-\u0026gt; next = head[f]; head[f] = ebuf ++; } for (int i = 1; i \u0026lt;= n; ++ i) { nrt[i] = 0; for (edge* e = head[i]; e; e = e-\u0026gt; next) nrt[i] = hMerge(nrt[i], allocNode(e-\u0026gt; v, e-\u0026gt; t)); } ts = 1; sans[ts] = 0; srt[ts] = nrt[1]; if (n \u0026gt; 1) { hp[0] = dpr(-nrt[1]-\u0026gt; v, 1); th = 1; } else th = 0; printf(\u0026quot;%d\\n\u0026quot;, (int)(sov() % mod)); }\n","permalink":"/code/dbimport_269/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #define _l (long long int)\ntypedef pair \u0026lt;dint, int\u0026gt; dpr;\nstruct node { int v, t, sz; node* ch[2]; }; struct edge { int t, v; edge *next; };\nconst int maxn = 100009; const int maxh = 200009; const int maxnd = maxn * 43; const int mod = (1 \u0026laquo; 23) * 7 * 17 + 1;\nedge ebuf_arr[maxn], *ebuf(ebuf_arr), *head[maxn]; node nbuf_arr[maxnd], *nbuf(nbuf_arr), *nrt[maxn], *srt[maxn]; int n, k, ts, th; dint sans[maxn]; dpr hp[maxh];","title":"ovoo.cc"},{"content":"#include #include #include using namespace std;\nconst int mod = 1e9 + 7; const int maxs = 17; const int maxst = (1 \u0026laquo; 15) + 3; const char deoxynucleotide[5] = \u0026ldquo;AGCT\u0026rdquo;;\n#define mInc(a,b) { a += b; if (a \u0026gt;= mod) a -= mod; }\nint n, m, f[2][maxst], ans[maxs]; int trv[maxst][4]; char s[maxs];\nint getTrans(int i, int j) { static int fc[maxs], fd[maxs]; fc[0] = fd[0] = 0; for (int k = 0; k \u0026lt; n; ++ k) fc[k + 1] = fc[k] + ((i \u0026raquo; k) \u0026amp; 1); for (int k = 1; k \u0026lt;= n; ++ k) { if (s[k] == deoxynucleotide[j]) fd[k] = fc[k - 1] + 1; else if (fc[k] \u0026gt; fd[k - 1]) fd[k] = fc[k]; else fd[k] = fd[k - 1]; } int sn(0); for (int k = 0; k \u0026lt; n; ++ k) sn |= (fd[k + 1] - fd[k]) \u0026laquo; k; return sn; }\nvoid sov() { scanf(\u0026quot;%s%d\u0026quot;, s + 1, \u0026amp;m); n = strlen(s + 1); memset(f, 0, sizeof(f)); int cur(0), prv(1), e(1 \u0026laquo; n); for (int i = 0; i \u0026lt; e; ++ i) for (int j = 0; j \u0026lt; 4; ++ j) trv[i][j] = getTrans(i, j); f[cur][0] = 1; for (int fi = 0; fi \u0026lt; m; ++ fi) { swap(cur, prv); memset(f[cur], 0, sizeof(f[cur])); for (int i = 0; i \u0026lt; e; ++ i) if (f[prv][i]) { for (int j = 0; j \u0026lt; 4; ++ j) mInc(f[cur][trv[i][j]], f[prv][i]); } } memset(ans, 0, sizeof(ans)); for (int i = 0; i \u0026lt; e; ++ i) if (f[cur][i]) { int j(i), c(0); for (; j; j \u0026raquo;= 1) if (j \u0026amp; 1) ++ c; mInc(ans[c], f[cur][i]); } for (int i = 0; i \u0026lt;= n; ++ i) printf(\u0026quot;%d\\n\u0026quot;, ans[i]); }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nint t; scanf(\u0026quot;%d\u0026quot;, \u0026amp;t); while (t --) sov(); }\n","permalink":"/code/dbimport_209/","summary":"#include #include #include using namespace std;\nconst int mod = 1e9 + 7; const int maxs = 17; const int maxst = (1 \u0026laquo; 15) + 3; const char deoxynucleotide[5] = \u0026ldquo;AGCT\u0026rdquo;;\n#define mInc(a,b) { a += b; if (a \u0026gt;= mod) a -= mod; }\nint n, m, f[2][maxst], ans[maxs]; int trv[maxst][4]; char s[maxs];\nint getTrans(int i, int j) { static int fc[maxs], fd[maxs]; fc[0] = fd[0] = 0; for (int k = 0; k \u0026lt; n; ++ k) fc[k + 1] = fc[k] + ((i \u0026raquo; k) \u0026amp; 1); for (int k = 1; k \u0026lt;= n; ++ k) { if (s[k] == deoxynucleotide[j]) fd[k] = fc[k - 1] + 1; else if (fc[k] \u0026gt; fd[k - 1]) fd[k] = fc[k]; else fd[k] = fd[k - 1]; } int sn(0); for (int k = 0; k \u0026lt; n; ++ k) sn |= (fd[k + 1] - fd[k]) \u0026laquo; k; return sn; }","title":"bzoj3864.cc"},{"content":"立杰的dp套dp.之前在hwadee培训的时候讲过的题啊.\n考虑求lcs时候的f数组的一列,发现相邻两个数要么差1要么不差.于是15就是拿来状压这个东西的.\n然后很愉快地写了一个然后很愉快地tle了.妈妈,剧本里没这一节啊.\n仔细思考了一下发现每次在计数dp转移的时候去找lcs dp非常慢.而且只要给定状态和转移,目标是确定的.跑1000次浪费了.于是改成预处理转移.就好了.\n","permalink":"/oi/dbimport_210/","summary":"立杰的dp套dp.之前在hwadee培训的时候讲过的题啊.\n考虑求lcs时候的f数组的一列,发现相邻两个数要么差1要么不差.于是15就是拿来状压这个东西的.\n然后很愉快地写了一个然后很愉快地tle了.妈妈,剧本里没这一节啊.\n仔细思考了一下发现每次在计数dp转移的时候去找lcs dp非常慢.而且只要给定状态和转移,目标是确定的.跑1000次浪费了.于是改成预处理转移.就好了.","title":"bzoj3864 Hero meet devil"},{"content":"比较无语的一天.两道交互题ovoovo\n第一题看上去只会奇数情况.然后在mhy的强烈要求下去oeis看了一下.囧.\n第二题似乎std特别丑.然后pbds跑得没有普通的stl快啊ovoovo\n第三题比较神,只多会20分的暴力分.\n下午颓.\n晚上去学了一下mysql,感觉整个人都精神了.好开心啊.然后过了许久终于更新了一下这个网站ovoovo\n","permalink":"/diary/dbimport_036/","summary":"比较无语的一天.两道交互题ovoovo\n第一题看上去只会奇数情况.然后在mhy的强烈要求下去oeis看了一下.囧.\n第二题似乎std特别丑.然后pbds跑得没有普通的stl快啊ovoovo\n第三题比较神,只多会20分的暴力分.\n下午颓.\n晚上去学了一下mysql,感觉整个人都精神了.好开心啊.然后过了许久终于更新了一下这个网站ovoovo","title":"20150521"},{"content":"#include #include #include using namespace std;\n#define _l (long long int)\nstruct node { int le, sz; node *tr[27], *pt; node() { memset(tr, 0, sizeof(tr)); pt = 0; sz = 0; } };\nconst int maxn = 1200009; const int maxl = 4000000;\nchar g[maxl]; int n, mask; node nbuf_arr[maxn], *nbuf(nbuf_arr), *srt, *scur;\nvoid decodeStr(char* a, int mask) { int l(strlen(a)); for (int i = 0; i \u0026lt; l; ++ i) { mask = (_l mask * 131 + i) % l; swap(a[i], a[mask]); } }\nvoid samIns(int w) { node *np(nbuf ++), *p; np-\u0026gt; le = scur-\u0026gt; le + 1; for (p = scur; p \u0026amp;\u0026amp; !p-\u0026gt; tr[w]; p = p-\u0026gt; pt) p-\u0026gt; tr[w] = np; if (p) { node q(p-\u0026gt; tr[w]); if (q-\u0026gt; le != p-\u0026gt; le + 1) { node nq(nbuf ++); memcpy(nq, q, sizeof(node)); nq-\u0026gt; le = p-\u0026gt; le + 1; q-\u0026gt; pt = np-\u0026gt; pt = nq; for (; p \u0026amp;\u0026amp; p-\u0026gt; tr[w] == q; p = p-\u0026gt; pt) p-\u0026gt; tr[w] = nq; } else np-\u0026gt; pt = q; } else np-\u0026gt; pt = srt; scur = np; for (p = scur; p; p = p-\u0026gt; pt) ++ p-\u0026gt; sz; }\nint samQry(char* it) { node* p; for (p = srt; *it; ++ it) { int d(*it - 65); if (p-\u0026gt; tr[d]) p = p-\u0026gt; tr[d]; else return 0; } return p-\u0026gt; sz; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%s\u0026quot;, \u0026amp;n, g); mask = 0; srt = scur = nbuf ++; scur-\u0026gt; le = 0; for (char* i = g; *i; ++ i) samIns(*i - 65); while (n --) { char opt[7]; scanf(\u0026quot;%s%s\u0026quot;, opt, g); decodeStr(g, mask); if (opt[0] == 'A') { for (char* i = g; *i; ++ i) samIns(*i - 65); } else { int ans(samQry(g)); mask ^= ans; printf(\u0026quot;%d\\n\u0026quot;, ans); } } }\n","permalink":"/code/dbimport_147/","summary":"#include #include #include using namespace std;\n#define _l (long long int)\nstruct node { int le, sz; node *tr[27], *pt; node() { memset(tr, 0, sizeof(tr)); pt = 0; sz = 0; } };\nconst int maxn = 1200009; const int maxl = 4000000;\nchar g[maxl]; int n, mask; node nbuf_arr[maxn], *nbuf(nbuf_arr), *srt, *scur;\nvoid decodeStr(char* a, int mask) { int l(strlen(a)); for (int i = 0; i \u0026lt; l; ++ i) { mask = (_l mask * 131 + i) % l; swap(a[i], a[mask]); } }","title":"bzoj2555.cc"},{"content":"#include #include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct seg { int m, a, c; seg *ch[2]; seg() { ch[0] = ch[1] = 0, m = a = c = 0; } };\n#define sgtRoot 1, n + 1 #define mp ((pl+pr)\u0026raquo;1) #define lson pl, mp #define rson mp, pr #define checkNeg(x) { if (x \u0026lt; 0) x += mod; } #define mInc(x,y) { x += y; if (x \u0026gt;= mod) x -= mod; }\ntypedef map \u0026lt;dint, seg* \u0026gt; pmap; typedef pair \u0026lt;dint, seg* \u0026gt; ppr; typedef pmap :: iterator pmap_it;\nconst int maxn = 100007; const int mod = 1e9 + 7; const int bsz = 1000007;\nint n, m, sm, sa, sc, lans; dint x[maxn], y[maxn], qv; pmap r[2];\ninline seg* allocSeg() { static seg* sbuf; static int cnt(0); if (!cnt) sbuf = new seg[bsz], cnt = bsz - 1; return \u0026ndash; cnt, sbuf ++; }\ninline seg* sgtChg(seg* q, int po, int pl, int pr) { seg* p(q ? q : allocSeg()); mInc(p-\u0026gt; m, sm); mInc(p-\u0026gt; a, sa); mInc(p-\u0026gt; c, sc); if (pl + 1 \u0026lt; pr) { if (po \u0026lt; mp) p-\u0026gt; ch[0] = sgtChg(p-\u0026gt; ch[0], po, lson); else p-\u0026gt; ch[1] = sgtChg(p-\u0026gt; ch[1], po, rson); } return p; } void sgtQry(seg* p, int l, int r, int pl, int pr) { if (!p) return; else if (l == pl \u0026amp;\u0026amp; r == pr) { mInc(sm, p-\u0026gt; m); mInc(sa, p-\u0026gt; a); mInc(sc, p-\u0026gt; c); } else if (r \u0026lt;= mp) sgtQry(p-\u0026gt; ch[0], l, r, lson); else if (l \u0026gt;= mp) sgtQry(p-\u0026gt; ch[1], l, r, rson); else sgtQry(p-\u0026gt; ch[0], l, mp, lson), sgtQry(p-\u0026gt; ch[1], mp, r, rson); }\ninline int sqr(int x) { return _l x * x % mod; } inline void chgVal(int ri, int po, dint x, dint y, int sgn) { sm = y % mod; checkNeg(sm); sa = sqr(y % mod); sc = sgn; if (sgn == -1) { sm = (mod - sm) % mod; sa = (mod - sa) % mod; } r[ri][x] = sgtChg(r[ri][x], po, sgtRoot); } inline int qrySum(int ri, dint x, dint y, int le, int re) { sm = sa = sc = 0; sgtQry(r[ri][x], le, re + 1, sgtRoot); sm = -sm * 2 % mod; checkNeg(sm); int ret((_l sqr(y % mod) * sc + y % mod * sm + sa) % mod); checkNeg(ret); return ret; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%*s\u0026quot;, \u0026amp;n); for (int i = 1; i \u0026lt;= n; ++ i) { scanf(lld lld, x + i, y + i); chgVal(0, i, x[i], y[i], 1); chgVal(1, i, y[i], x[i], 1); } scanf(\u0026quot;%d\u0026quot;, \u0026amp;m); lans = 0; while (m --) { char opt[3]; scanf(\u0026quot;%s\u0026quot;, opt); if (opt[0] == 'Q') { int i, l, r; scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;i, \u0026amp;l, \u0026amp;r); i ^= lans; lans = (qrySum(0, x[i], y[i], l, r) + qrySum(1, y[i], x[i], l, r)) % mod; printf(\u0026quot;%d\\n\u0026quot;, lans); } else { int i; dint l; scanf(\u0026quot;%d\u0026quot; lld, \u0026amp;i, \u0026amp;l); i ^= lans; chgVal(0, i, x[i], y[i], -1); chgVal(1, i, y[i], x[i], -1); if (opt[0] == 'U') y[i] += l; else if (opt[0] == 'D') y[i] -= l; else if (opt[0] == 'L') x[i] -= l; else if (opt[0] == 'R') x[i] += l; chgVal(0, i, x[i], y[i], 1); chgVal(1, i, y[i], x[i], 1); } } }\n","permalink":"/code/dbimport_197/","summary":"#include #include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct seg { int m, a, c; seg *ch[2]; seg() { ch[0] = ch[1] = 0, m = a = c = 0; } };\n#define sgtRoot 1, n + 1 #define mp ((pl+pr)\u0026raquo;1) #define lson pl, mp #define rson mp, pr #define checkNeg(x) { if (x \u0026lt; 0) x += mod; } #define mInc(x,y) { x += y; if (x \u0026gt;= mod) x -= mod; }","title":"bzoj3542.cc"},{"content":"业界毒瘤ioi开的坑.然后被强行看了一下于教授的代码.然后觉得也不太难嘛.\n看了一下条件.只和同行或者同列有关?那就拿map套动态建树的线段树好了辣.\n然后距离是欧式距离?那就把完全平方式展开,发现只需要在线段树里记录一下个数,和,平方和,搞定了辣!\n然后alloc的时候\u0026ndash;写成了++,查错良久,囧.\n","permalink":"/oi/dbimport_198/","summary":"业界毒瘤ioi开的坑.然后被强行看了一下于教授的代码.然后觉得也不太难嘛.\n看了一下条件.只和同行或者同列有关?那就拿map套动态建树的线段树好了辣.\n然后距离是欧式距离?那就把完全平方式展开,发现只需要在线段树里记录一下个数,和,平方和,搞定了辣!\n然后alloc的时候\u0026ndash;写成了++,查错良久,囧.","title":"bzoj3542 DZY Loves March"},{"content":"之前觉得不可做的一道题.然后昨天听mhy一句话瞬间懂:几何反演.然后mhy说这题用cdq?骗我读书少呢?\nhtml写公式好郁闷.把设圆心是(p,q),点是(x,y),那么点在圆内的条件是\n(p-x)2+(q-y)2 ≤ p2+q2\n转化一下变成\nq ≥ -(x/y) * p + (x2+y2) / (y*2)\n然后就可以把(p,q)看作一个点,每个询问就是询问之前的所有点是否都在这条直线的上方.\n那么直接归并排序喽.处理出左边的凸壳再单调扫一遍右边的所有直线.这样复杂度是O(n*logn),又短又快yeah.\n然后还听说有精度误差?我全程double没用eps也没出事啊hhh\n","permalink":"/oi/dbimport_171/","summary":"之前觉得不可做的一道题.然后昨天听mhy一句话瞬间懂:几何反演.然后mhy说这题用cdq?骗我读书少呢?\nhtml写公式好郁闷.把设圆心是(p,q),点是(x,y),那么点在圆内的条件是\n(p-x)2+(q-y)2 ≤ p2+q2\n转化一下变成\nq ≥ -(x/y) * p + (x2+y2) / (y*2)\n然后就可以把(p,q)看作一个点,每个询问就是询问之前的所有点是否都在这条直线的上方.\n那么直接归并排序喽.处理出左边的凸壳再单调扫一遍右边的所有直线.这样复杂度是O(n*logn),又短又快yeah.\n然后还听说有精度误差?我全程double没用eps也没出事啊hhh","title":"bzoj2961 共点圆"},{"content":"#include #include #include using namespace std;\n#define _l (long long int)\nconst int maxc = 23; const int maxn = 50009; const int mod = 19940417;\nstruct dat { int a[maxc], t; inline dat() { memset(a, 0, sizeof(a)); a[0] = 1; t = 0; } inline int\u0026amp; operator[](const int\u0026amp; x) { return a[x]; } inline int operator[](const int\u0026amp; x) const { return a[x]; } void add(int); void rev(); };\nstruct seg { int l, r, rv, a; dat d; seg *ch[2]; inline void update(); inline void catTag(int ta, int tr) { if (tr) { a = (mod - a) % mod; d. rev(); rv ^= 1; } if (ta) { a = (a + ta) % mod; d. add(ta); } } void pushDown() { ch[0]-\u0026gt; catTag(a, rv); ch[1]-\u0026gt; catTag(a, rv); a = rv = 0; } };\nint n, m, a[maxn], comb[maxn][maxc]; seg sbuf_arr[maxn * 3], *sbuf(sbuf_arr), *rt;\nvoid preComb() { comb[0][0] = 1; for (int i = 1; i \u0026lt; maxn; ++ i) { comb[i][0] = 1; for (int j = 1; j \u0026lt; i \u0026amp;\u0026amp; j \u0026lt;= 20; ++ j) comb[i][j] = (comb[i - 1][j] + comb[i - 1][j - 1]) % mod; if (i \u0026lt;= 20) comb[i][i] = 1; } }\ndat mergeDat(const dat\u0026amp; a, const dat\u0026amp; b) { static dat r; memset(r. a, 0, sizeof(r. a)); for (int i = 0; i \u0026lt;= 20; ++ i) for (int j = 0; i + j \u0026lt;= 20; ++ j) r[i + j] = (r[i + j] + _l a[i] * b[j]) % mod; r. t = a. t + b. t; r[0] = 1; return r; } void dat :: rev() { for (int i = 1; i \u0026lt; 20; i += 2) a[i] = (mod - a[i]) % mod; } void dat :: add(int v) { static int b[maxc], pv[maxc]; memset(b, 0, sizeof(b)); pv[0] = 1; for (int i = 1; i \u0026lt;= 20; ++ i) pv[i] = _l pv[i - 1] * v % mod; for (int i = 0; i \u0026lt;= 20; ++ i) for (int j = 0; j \u0026lt;= i \u0026amp;\u0026amp; j \u0026lt;= t; ++ j) b[i] = (b[i] + _l a[j] * pv[i - j] % mod * comb[t - j][i - j]) % mod; memcpy(a, b, sizeof(a)); }\ninline void seg :: update() { d = mergeDat(ch[0]-\u0026gt; d, ch[1]-\u0026gt; d); if (a) d. add(a); if (rv) d. rev(); }\n#define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1) inline seg* sgtBuild(int l, int r) { seg p(sbuf ++); p-\u0026gt; l = l, p-\u0026gt; r = r; p-\u0026gt; rv = 0, p-\u0026gt; a = 0; if (p-\u0026gt; l + 1 \u0026lt; p-\u0026gt; r) { p-\u0026gt; ch[0] = sgtBuild(l, midp(p)); p-\u0026gt; ch[1] = sgtBuild(midp(p), r); p-\u0026gt; d = mergeDat(p-\u0026gt; ch[0]-\u0026gt; d, p-\u0026gt; ch[1]-\u0026gt; d); } else { p-\u0026gt; d[1] = a[l]; p-\u0026gt; d. t = 1; } return p; } inline void sgtChg(seg p, int l, int r, int ta, int tr) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) { p-\u0026gt; catTag(ta, tr); } else { p-\u0026gt; pushDown(); if (r \u0026lt;= midp(p)) sgtChg(p-\u0026gt; ch[0], l, r, ta, tr); else if (l \u0026gt;= midp(p)) sgtChg(p-\u0026gt; ch[1], l, r, ta, tr); else sgtChg(p-\u0026gt; ch[0], l, midp(p), ta, tr), sgtChg(p-\u0026gt; ch[1], midp(p), r, ta, tr); p-\u0026gt; update(); } } inline dat sgtQry(seg* p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) return p-\u0026gt; d; else { p-\u0026gt; pushDown(); dat ret; if (r \u0026lt;= midp(p)) ret = sgtQry(p-\u0026gt; ch[0], l, r); else if (l \u0026gt;= midp(p)) ret = sgtQry(p-\u0026gt; ch[1], l, r); else ret = mergeDat(sgtQry(p-\u0026gt; ch[0], l, midp(p)), sgtQry(p-\u0026gt; ch[1], midp(p), r)); if (p-\u0026gt; a) ret. add(p-\u0026gt; a); if (p-\u0026gt; rv) ret. rev(); return ret; } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\npreComb(); scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); for (int i = 1; i \u0026lt;= n; ++ i) scanf(\u0026quot;%d\u0026quot;, a + i); rt = sgtBuild(1, n + 1); while (m --) { char opt[3]; int l, r, c; scanf(\u0026quot;%s%d%d\u0026quot;, opt, \u0026amp;l, \u0026amp;r); ++ r; if (opt[0] == 'I') { scanf(\u0026quot;%d\u0026quot;, \u0026amp;c); sgtChg(rt, l, r, c, 0); } else if (opt[0] == 'R') { sgtChg(rt, l, r, 0, 1); } else { scanf(\u0026quot;%d\u0026quot;, \u0026amp;c); dat g(sgtQry(rt, l, r)); printf(\u0026quot;%d\\n\u0026quot;, g[c]); } } }\n","permalink":"/code/dbimport_172/","summary":"#include #include #include using namespace std;\n#define _l (long long int)\nconst int maxc = 23; const int maxn = 50009; const int mod = 19940417;\nstruct dat { int a[maxc], t; inline dat() { memset(a, 0, sizeof(a)); a[0] = 1; t = 0; } inline int\u0026amp; operator[](const int\u0026amp; x) { return a[x]; } inline int operator[](const int\u0026amp; x) const { return a[x]; } void add(int); void rev(); };\nstruct seg { int l, r, rv, a; dat d; seg *ch[2]; inline void update(); inline void catTag(int ta, int tr) { if (tr) { a = (mod - a) % mod; d.","title":"bzoj2962.cc"},{"content":"最近整个人都被Sone1搞得头昏脑胀。不爽ing。\n这个题其实就是线段树+维护的题。考虑给一个区间里每个数加C的时候的式子会变成什么样就好了。\n然后要注意标记得随时下传，不能永久化。\n然后感觉时间有点慢不过跑起来还将就。\n然后我太弱了。\n","permalink":"/oi/dbimport_173/","summary":"最近整个人都被Sone1搞得头昏脑胀。不爽ing。\n这个题其实就是线段树+维护的题。考虑给一个区间里每个数加C的时候的式子会变成什么样就好了。\n然后要注意标记得随时下传，不能永久化。\n然后感觉时间有点慢不过跑起来还将就。\n然后我太弱了。","title":"bzoj2962 序列操作"},{"content":"毫无违和感的一天.\n第一题只会40分的O(n2)级别的东西.正解没看懂.\n第二题想着想着就差点睡着.正解感觉比较神奇.自己还没有把sam吃透啊.\n第三题好神ovo\n下午总结交流感觉好像还是有好多之前想到的东西忘讲了ovo还忘卡时了ovo每次上台都会紧张,得多练.\n所以窝还是太弱辣.\n","permalink":"/diary/dbimport_035/","summary":"毫无违和感的一天.\n第一题只会40分的O(n2)级别的东西.正解没看懂.\n第二题想着想着就差点睡着.正解感觉比较神奇.自己还没有把sam吃透啊.\n第三题好神ovo\n下午总结交流感觉好像还是有好多之前想到的东西忘讲了ovo还忘卡时了ovo每次上台都会紧张,得多练.\n所以窝还是太弱辣.","title":"20150515"},{"content":"#include #include #include using namespace std;\n#define upMax(a,b) { if (a \u0026lt; b) a = b; } #define upMin(a,b) { if (a \u0026gt; b) a = b; }\nstruct kdnode { int p[2], a[2][2], v, s; kdnode *ch[2]; inline void update() { a[0][0] = a[1][0] = p[0]; a[0][1] = a[1][1] = p[1]; s = v; if (ch[0]) { upMin(a[0][0], ch[0]-\u0026gt; a[0][0]); upMin(a[0][1], ch[0]-\u0026gt; a[0][1]); upMax(a[1][0], ch[0]-\u0026gt; a[1][0]); upMax(a[1][1], ch[0]-\u0026gt; a[1][1]); s += ch[0]-\u0026gt; s; } if (ch[1]) { upMin(a[0][0], ch[1]-\u0026gt; a[0][0]); upMin(a[0][1], ch[1]-\u0026gt; a[0][1]); upMax(a[1][0], ch[1]-\u0026gt; a[1][0]); upMax(a[1][1], ch[1]-\u0026gt; a[1][1]); s += ch[1]-\u0026gt; s; } } };\nconst int maxn = 200009;\nint n, lans, qa[2], qb[2], qv, cmpx; kdnode nbuf_arr[maxn], *nbuf(nbuf_arr), *krt;\ninline bool xCmp(int* a, int* b) { if (a[cmpx] == b[cmpx]) return a[cmpx ^ 1] \u0026lt; b[cmpx ^ 1]; else return a[cmpx] \u0026lt; b[cmpx]; }\nkdnode* kdIns(kdnode* p) { cmpx ^= 1; if (!p) { p = nbuf ++; p-\u0026gt; p[0] = qa[0], p-\u0026gt; p[1] = qa[1]; p-\u0026gt; v = p-\u0026gt; s = qv; p-\u0026gt; ch[0] = p-\u0026gt; ch[1] = 0; } else if (qa[0] == p-\u0026gt; p[0] \u0026amp;\u0026amp; qa[1] == p-\u0026gt; p[1]) { p-\u0026gt; v += qv; p-\u0026gt; s += qv; } else { int d(xCmp(qa, p-\u0026gt; p) ^ 1); p-\u0026gt; ch[d] = kdIns(p-\u0026gt; ch[d]); } p-\u0026gt; update(); cmpx ^= 1; return p; }\ninline bool outRect(kdnode* p) { return qa[0] \u0026gt; p-\u0026gt; a[1][0] || qa[1] \u0026gt; p-\u0026gt; a[1][1] || qb[0] \u0026lt; p-\u0026gt; a[0][0] || qb[1] \u0026lt; p-\u0026gt; a[0][1]; } inline bool inRect(kdnode* p) { return qa[0] \u0026lt;= p-\u0026gt; a[0][0] \u0026amp;\u0026amp; qa[1] \u0026lt;= p-\u0026gt; a[0][1] \u0026amp;\u0026amp; qb[0] \u0026gt;= p-\u0026gt; a[1][0] \u0026amp;\u0026amp; qb[1] \u0026gt;= p-\u0026gt; a[1][1]; }\nvoid kdQry(kdnode* p) { if (!p || outRect(p)) return; else if (inRect(p)) qv += p-\u0026gt; s; else { if (p-\u0026gt; p[0] \u0026gt;= qa[0] \u0026amp;\u0026amp; p-\u0026gt; p[0] \u0026lt;= qb[0] \u0026amp;\u0026amp; p-\u0026gt; p[1] \u0026gt;= qa[1] \u0026amp;\u0026amp; p-\u0026gt; p[1] \u0026lt;= qb[1]) qv += p-\u0026gt; v; kdQry(p-\u0026gt; ch[0]), kdQry(p-\u0026gt; ch[1]); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\ncmpx = 0; scanf(\u0026quot;%d\u0026quot;, \u0026amp;n); krt = 0; lans = 0; for (int opt; scanf(\u0026quot;%d\u0026quot;, \u0026amp;opt), opt \u0026lt; 3; ) if (opt == 1) { scanf(\u0026quot;%d%d%d\u0026quot;, qa, qa + 1, \u0026amp;qv); qa[0] ^= lans, qa[1] ^= lans, qv ^= lans; krt = kdIns(krt); } else { scanf(\u0026quot;%d%d%d%d\u0026quot;, qa, qa + 1, qb, qb + 1); qa[0] ^= lans, qa[1] ^= lans; qb[0] ^= lans, qb[1] ^= lans; qv = 0; kdQry(krt); printf(\u0026quot;%d\\n\u0026quot;, (lans = qv)); } }\n","permalink":"/code/dbimport_234/","summary":"#include #include #include using namespace std;\n#define upMax(a,b) { if (a \u0026lt; b) a = b; } #define upMin(a,b) { if (a \u0026gt; b) a = b; }\nstruct kdnode { int p[2], a[2][2], v, s; kdnode *ch[2]; inline void update() { a[0][0] = a[1][0] = p[0]; a[0][1] = a[1][1] = p[1]; s = v; if (ch[0]) { upMin(a[0][0], ch[0]-\u0026gt; a[0][0]); upMin(a[0][1], ch[0]-\u0026gt; a[0][1]); upMax(a[1][0], ch[0]-\u0026gt; a[1][0]); upMax(a[1][1], ch[0]-\u0026gt; a[1][1]); s += ch[0]-\u0026gt; s; } if (ch[1]) { upMin(a[0][0], ch[1]-\u0026gt; a[0][0]); upMin(a[0][1], ch[1]-\u0026gt; a[0][1]); upMax(a[1][0], ch[1]-\u0026gt; a[1][0]); upMax(a[1][1], ch[1]-\u0026gt; a[1][1]); s += ch[1]-\u0026gt; s; } } };","title":"bzoj4066.cc"},{"content":"import java.util.; import java.math.;\nclass Main { static int n, m, a[], tp, pn[]; static BigInteger f[][]; static boolean pr[], fl[][];\nstatic void pre() { int maxm = 30; pr = new boolean[maxm]; pn = new int[maxm]; pn[0] = 1; tp = 1; for (int i = 0; i \u0026lt; maxm; ++ i) pr[i] = false; for (int i = 2; i \u0026lt; maxm; ++ i) { if (!pr[i]) pn[tp ++] = i; for (int j = 1; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j] \u0026lt; maxm; ++ j) { pr[i * pn[j]] = true; if (i % pn[j] == 0) break; } } } public static void main(String args[]) { Scanner cin = new Scanner(System.in); pre(); m = cin.nextInt(); a = new int[309]; n = 0; for (int i = 1; i * i \u0026lt;= m; ++ i) if (m % i == 0) { a[n ++] = i; if (i * i \u0026lt; m) a[n ++] = m / i; } Arrays.sort(a, 0, n); f = new BigInteger[n][]; fl = new boolean[n][]; for (int i = 0; i \u0026lt; n; ++ i) { f[i] = new BigInteger[tp]; fl[i] = new boolean[tp]; for (int j = 0; j \u0026lt; tp; ++ j) { f[i][j] = BigInteger.valueOf(0); fl[i][j] = false; } } fl[0][0] = true; f[0][0] = BigInteger.valueOf(1); for (int i = 1; i \u0026lt; n; ++ i) for (int j = 1; j \u0026lt; tp; ++ j) { fl[i][j] = true; f[i][j] = BigInteger.valueOf(pn[j]).pow(a[i] - 1); for (int k = 0; k \u0026lt; i; ++ k) if (fl[k][j - 1] \u0026amp;\u0026amp; a[i] % a[k] == 0) { BigInteger tmp = f[k][j - 1].multiply(BigInteger.valueOf(pn[j]).pow(a[i] / a[k] - 1)); if (f[i][j].compareTo(tmp) \u0026gt; 0) f[i][j] = tmp; } } BigInteger ans = f[n - 1][1]; for (int i = 2; i \u0026lt; tp; ++ i) { if (fl[n - 1][i] \u0026amp;\u0026amp; ans.compareTo(f[n - 1][i]) \u0026gt; 0) ans = f[n - 1][i]; } System.out.println(ans.toString()); } }\n","permalink":"/code/dbimport_122/","summary":"import java.util.; import java.math.;\nclass Main { static int n, m, a[], tp, pn[]; static BigInteger f[][]; static boolean pr[], fl[][];\nstatic void pre() { int maxm = 30; pr = new boolean[maxm]; pn = new int[maxm]; pn[0] = 1; tp = 1; for (int i = 0; i \u0026lt; maxm; ++ i) pr[i] = false; for (int i = 2; i \u0026lt; maxm; ++ i) { if (!pr[i]) pn[tp ++] = i; for (int j = 1; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j] \u0026lt; maxm; ++ j) { pr[i * pn[j]] = true; if (i % pn[j] == 0) break; } } } public static void main(String args[]) { Scanner cin = new Scanner(System.","title":"bzoj1225.java"},{"content":"ioi好神啊,居然写搜索.我显然是不想写高精的啦于是用java于是花费了整整两节课TT\n我的想法是dp.设答案为f[m],那么f[m]只与fd有关.设f[i][j]表示i为m的第i小的约数,且已经用了前j个素数的答案.然后就可以转移辣.\n然后得二分一下用多大的素数可以卡过.毕竟java自带大常数.而且bzoj坑爹在不管有多少组数据都只多给2秒总时限ovo\n","permalink":"/oi/dbimport_121/","summary":"ioi好神啊,居然写搜索.我显然是不想写高精的啦于是用java于是花费了整整两节课TT\n我的想法是dp.设答案为f[m],那么f[m]只与fd有关.设f[i][j]表示i为m的第i小的约数,且已经用了前j个素数的答案.然后就可以转移辣.\n然后得二分一下用多大的素数可以卡过.毕竟java自带大常数.而且bzoj坑爹在不管有多少组数据都只多给2秒总时限ovo","title":"bzoj1225 [HNOI2001] 求正整数"},{"content":"#include #include #include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct range { int l, r; }; inline bool operator \u0026lt;(const range\u0026amp; a, const range\u0026amp; b) { return a. l + a. r \u0026lt; b. l + b. r; }\nstruct bridge { static const int maxn = 200009; int ha[maxn], hb[maxn], ta, tb; dint sa, sb; inline void clr() { ta = tb = sa = sb = 0; } bridge() { clr(); } void balance() { while (ta \u0026gt; tb + 1) { hb[tb] = -ha[0]; sa -= ha[0]; sb += hb[tb]; pop_heap(ha, ha + ta \u0026ndash;); push_heap(hb, hb + ++ tb); } while (ta \u0026lt; tb + 1) { ha[ta] = -hb[0]; sb -= hb[0]; sa += ha[ta]; pop_heap(hb, hb + tb \u0026ndash;); push_heap(ha, ha + ++ ta); } } inline void ins(int x) { if (x \u0026lt;= ha[0]) { sa += x; ha[ta] = x; push_heap(ha, ha + ++ ta); } else { sb -= x; hb[tb] = -x; push_heap(hb, hb + ++ tb); } balance(); } inline dint qry() { return _l ha[0] * (ta - tb) - sa - sb; } };\nconst int maxn = 100009; const dint dinf = 0x3f3f3f3f3f3f3f3fll;\nint n, t, c, a[maxn \u0026laquo; 1]; dint sa[maxn], sb[maxn]; range b[maxn]; bridge rb;\ndint oneBridge() { dint ans(0); t = 0; for (int i = 0; i \u0026lt; n; ++ i) { char xp[3], yp[3]; int u, v; scanf(\u0026quot;%s%d%s%d\u0026quot;, xp, \u0026amp;u, yp, \u0026amp;v); if (xp[0] != yp[0]) { a[t ++] = u; a[t ++] = v; } else ans += abs(v - u); } sort(a, a + t); int m(a[t \u0026raquo; 1]); for (int i = 0; i \u0026lt; t; ++ i) ans += abs(m - a[i]); return ans + (t \u0026raquo; 1); }\ninline dint dist(const range\u0026amp; a, const int\u0026amp; p) { return abs(a. l - p) + abs(a. r - p); }\ndint twoBridge() { dint ans(0); t = 0; for (int i = 0; i \u0026lt; n; ++ i) { char xp[3], yp[3]; int u, v; scanf(\u0026quot;%s%d%s%d\u0026quot;, xp, \u0026amp;u, yp, \u0026amp;v); if (xp[0] != yp[0]) { if (u \u0026gt; v) swap(u, v); b[t]. l = u, b[t]. r = v; ++ t; } else ans += abs(v - u); } if (!t) return ans; sort(b, b + t); rb. clr(); for (int i = 0; i \u0026lt; t; ++ i) { rb. ins(b[i]. l); rb. ins(b[i]. r); sa[i] = rb. qry(); } rb. clr(); sb[t] = 0; for (int i = t - 1; i \u0026gt;= 0; \u0026ndash; i) { rb. ins(b[i]. l); rb. ins(b[i]. r); sb[i] = rb. qry(); } dint sx(sb[0]); //for (int i = 0; i \u0026lt; t; ++ i) //fprintf(stderr, \u0026ldquo;%d %d\\n\u0026rdquo;, b[i]. l, b[i]. r); // for (int i = 0; i \u0026lt; t; ++ i) //fprintf(stderr, \u0026ldquo;%lld %lld %lld\\n\u0026rdquo;, sa[i], sb[i + 1], sa[i] + sb[i + 1]); for (int i = 0; i \u0026lt; t; ++ i) sx = min(sx, sa[i] + sb[i + 1]); return ans + t + sx; }\nint main() { int t; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;t, \u0026amp;n); dint ans; if (t == 1) ans = oneBridge(); else ans = twoBridge(); printf(lld \u0026ldquo;\\n\u0026rdquo;, ans); }\n","permalink":"/code/dbimport_239/","summary":"#include #include #include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct range { int l, r; }; inline bool operator \u0026lt;(const range\u0026amp; a, const range\u0026amp; b) { return a. l + a. r \u0026lt; b. l + b. r; }\nstruct bridge { static const int maxn = 200009; int ha[maxn], hb[maxn], ta, tb; dint sa, sb; inline void clr() { ta = tb = sa = sb = 0; } bridge() { clr(); } void balance() { while (ta \u0026gt; tb + 1) { hb[tb] = -ha[0]; sa -= ha[0]; sb += hb[tb]; pop_heap(ha, ha + ta \u0026ndash;); push_heap(hb, hb + ++ tb); } while (ta \u0026lt; tb + 1) { ha[ta] = -hb[0]; sb -= hb[0]; sa += ha[ta]; pop_heap(hb, hb + tb \u0026ndash;); push_heap(ha, ha + ++ ta); } } inline void ins(int x) { if (x \u0026lt;= ha[0]) { sa += x; ha[ta] = x; push_heap(ha, ha + ++ ta); } else { sb -= x; hb[tb] = -x; push_heap(hb, hb + ++ tb); } balance(); } inline dint qry() { return _l ha[0] * (ta - tb) - sa - sb; } };","title":"bzoj4071.cc"},{"content":"这是apio里我最自豪的一道题了.让三分党去\u0026hellip;吧.\nk=1直接在所有坐标的中位数处建桥就行了不要问我为什么.\n首先感受一下发现可以按(a+b)把序列分成两半,然后两半就是k=1的情况嘛.那直接处理一下每个前缀和后缀的答案就完了辣.\n","permalink":"/oi/dbimport_240/","summary":"这是apio里我最自豪的一道题了.让三分党去\u0026hellip;吧.\nk=1直接在所有坐标的中位数处建桥就行了不要问我为什么.\n首先感受一下发现可以按(a+b)把序列分成两半,然后两半就是k=1的情况嘛.那直接处理一下每个前缀和后缀的答案就完了辣.","title":"bzoj4071 [Apio2015]巴邻旁之桥"},{"content":"#include #include #include #include #include using namespace std;\nstruct edge { int t, v; edge* next; };\nconst int maxn = 30009; const int bsz = 80; const int maxb = 83; const int maxnd = maxn * maxb; const int ebsz = 1000001;\nint n, m, st, te, d[maxnd], tnid, nid[maxb][maxn]; edge *head[maxnd];\ninline void addEdge(int u, int v, int w) { static edge* ebuf; static int cnt(0); if (!cnt \u0026ndash;) ebuf = new edge[ebsz], cnt = ebsz - 2; ebuf-\u0026gt; t = v; ebuf-\u0026gt; v = w; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\n#define recycle(x) { if (x == maxn) x = 1; }\nvoid SPFA() { static int q[maxnd]; static bool inq[maxnd]; int hd(0), tl(1); memset(inq, 0, sizeof(inq)); memset(d, -1, sizeof(d)); d[q[0] = st] = 0; while (hd != tl) { int p(q[hd ++]); recycle(hd); inq[p] = 0; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (d[e-\u0026gt; t] == -1 || d[e-\u0026gt; t] \u0026gt; d[p] + e-\u0026gt; v) { d[e-\u0026gt; t] = d[p] + e-\u0026gt; v; if (!inq[e-\u0026gt; t]) { inq[e-\u0026gt; t] = 1; q[tl ++] = e-\u0026gt; t; recycle(tl); } } } }\nint main() { memset(head, 0, sizeof(head)); scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); tnid = n; for (int i = 1; i \u0026lt;= bsz; ++ i) { for (int j = 0; j \u0026lt; n; ++ j) { nid[i][j] = tnid ++; addEdge(nid[i][j], j, 0); } for (int j = 0; j + i \u0026lt; n; ++ j) { addEdge(nid[i][j], nid[i][j + i], 1); addEdge(nid[i][j + i], nid[i][j], 1); } } for (int i = 0; i \u0026lt; m; ++ i) { int b, p; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;b, \u0026amp;p); if (i == 0) st = b; else if (i == 1) te = b; if (p \u0026gt; bsz) { for (int j = b % p; j \u0026lt; n; j += p) addEdge(b, j, abs(b - j) / p); } else addEdge(b, nid[p][b], 0); } SPFA(); printf(\u0026quot;%d\\n\u0026quot;, d[te]); }\n","permalink":"/code/dbimport_237/","summary":"#include #include #include #include #include using namespace std;\nstruct edge { int t, v; edge* next; };\nconst int maxn = 30009; const int bsz = 80; const int maxb = 83; const int maxnd = maxn * maxb; const int ebsz = 1000001;\nint n, m, st, te, d[maxnd], tnid, nid[maxb][maxn]; edge *head[maxnd];\ninline void addEdge(int u, int v, int w) { static edge* ebuf; static int cnt(0); if (!","title":"bzoj4070.cc"},{"content":"apio的第二题.其实是我做题顺序里的最后一道.\n我的方法比较奇怪.对于p分开讨论.如果p\u0026gt;c那么直接建边,否则在图的旁边再建若干条链,把这个点连到链上去.然后再跑一下最短路.\n卡一卡常数就过去啦.\n","permalink":"/oi/dbimport_238/","summary":"apio的第二题.其实是我做题顺序里的最后一道.\n我的方法比较奇怪.对于p分开讨论.如果p\u0026gt;c那么直接建边,否则在图的旁边再建若干条链,把这个点连到链上去.然后再跑一下最短路.\n卡一卡常数就过去啦.","title":"bzoj4070 [Apio2015]雅加达的摩天楼"},{"content":"#include #include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int) #define lpow2(x) (1ll\u0026laquo;(x))\nconst int maxn = 2009; const int maxb = 43;\ndint a[maxn], ans; int n, ml, mh, d[maxn]; bitset f[maxn];\nint bitDP(int bo) { if (ml \u0026gt; 1) { memset(f, 0, sizeof(f)); f[0][0] = 1; for (int i = 1; i \u0026lt;= n; ++ i) { f[i - 1] \u0026laquo;= 1; for (int j = 0; j \u0026lt; i; ++ j) { dint vd(a[i] - a[j]); if (((vd \u0026amp; ans) \u0026raquo; bo) != (vd \u0026raquo; bo)) continue; f[i] |= f[j]; } } for (int i = ml; i \u0026lt;= mh; ++ i) if (f[n][i]) return 0; return 1; } else { memset(d, 0x3f, sizeof(d)); d[0] = 0; for (int i = 1; i \u0026lt;= n; ++ i) { for (int j = 0; j \u0026lt; i; ++ j) { dint vd(a[i] - a[j]); if (((vd \u0026amp; ans) \u0026raquo; bo) != (vd \u0026raquo; bo)) continue; d[i] = min(d[i], d[j] + 1); } } return !(d[n] \u0026lt;= mh); } }\nint main() { scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;n, \u0026amp;ml, \u0026amp;mh); a[0] = 0; for (int i = 1; i \u0026lt;= n; ++ i) { scanf(lld, a + i); a[i] += a[i - 1]; } ans = 0; for (int i = maxb; i \u0026gt;= 0; \u0026ndash; i) if (bitDP(i)) ans |= lpow2(i); printf(lld \u0026ldquo;\\n\u0026rdquo;, ans); }\n","permalink":"/code/dbimport_235/","summary":"#include #include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int) #define lpow2(x) (1ll\u0026laquo;(x))\nconst int maxn = 2009; const int maxb = 43;\ndint a[maxn], ans; int n, ml, mh, d[maxn]; bitset f[maxn];\nint bitDP(int bo) { if (ml \u0026gt; 1) { memset(f, 0, sizeof(f)); f[0][0] = 1; for (int i = 1; i \u0026lt;= n; ++ i) { f[i - 1] \u0026laquo;= 1; for (int j = 0; j \u0026lt; i; ++ j) { dint vd(a[i] - a[j]); if (((vd \u0026amp; ans) \u0026raquo; bo) !","title":"bzoj4069.cc"},{"content":"看上去apio的成绩都出来了,那我就可以写题解喽.\n这题比较水啊,尤其是在考试的时候允许多次提交,服务器还跑得飞快.强行bitset压位就好了.\n按位从高向低贪心.\n对于l=1的情况直接求最少的覆盖区间就好了.\n对于剩下的情况,用f[i][j]表示前i个数能否用j个区间覆盖.\n完了辣\n","permalink":"/oi/dbimport_236/","summary":"看上去apio的成绩都出来了,那我就可以写题解喽.\n这题比较水啊,尤其是在考试的时候允许多次提交,服务器还跑得飞快.强行bitset压位就好了.\n按位从高向低贪心.\n对于l=1的情况直接求最少的覆盖区间就好了.\n对于剩下的情况,用f[i][j]表示前i个数能否用j个区间覆盖.\n完了辣","title":"bzoj4069 [Apio2015]巴厘岛的雕塑"},{"content":"比较无语的一场考试.感觉题不太能做啊.\n第一题,啊,平面图!根本不会!想了想能不能反演发现好像没有意义,感觉xyz大爷当年讲过啊.于是只好朴素拿40分走人.然后发现别人居然都没有拿到40分ovo\n第二题我觉得任何时候都不能赌博啊然后还是hobo厉害地发现了问题所在.本来也没有认真想,都去颓提答去了.\n提答题感觉还挺好玩.先写个模拟器人工玩过了123,然后发现后面的点都有特点啊.有的是矩形最短路,有的是树形dp啥的.不过,我,都,不,想,写,了.于是写了个随便乱走的东西骗个1分2分的.懒癌晚期TT\n后来还差点把spj配错结果差点以为我自己几乎ac.吓死了.其实只有35分TT\n然后ioi好强啊.\n所以我还是太弱了.\n","permalink":"/diary/dbimport_034/","summary":"比较无语的一场考试.感觉题不太能做啊.\n第一题,啊,平面图!根本不会!想了想能不能反演发现好像没有意义,感觉xyz大爷当年讲过啊.于是只好朴素拿40分走人.然后发现别人居然都没有拿到40分ovo\n第二题我觉得任何时候都不能赌博啊然后还是hobo厉害地发现了问题所在.本来也没有认真想,都去颓提答去了.\n提答题感觉还挺好玩.先写个模拟器人工玩过了123,然后发现后面的点都有特点啊.有的是矩形最短路,有的是树形dp啥的.不过,我,都,不,想,写,了.于是写了个随便乱走的东西骗个1分2分的.懒癌晚期TT\n后来还差点把spj配错结果差点以为我自己几乎ac.吓死了.其实只有35分TT\n然后ioi好强啊.\n所以我还是太弱了.","title":"20150513"},{"content":"#include #include #include using namespace std;\n#define _l (long long int)\nconst int maxn = 1000009;\nint n, mod, sz[maxn];\nint modPow(int a, int x) { int s(1); for (; x; x \u0026raquo;= 1, a = _l a * a % mod) if (x \u0026amp; 1) s = _l s * a % mod; return s; }\nstruct modInt { int a, b; modInt() {} modInt(int ao, int bo) { a = ao, b = bo; } modInt(int xo) { a = xo; for (b = 0; a % mod == 0; a /= mod, ++ b); a %= mod; } inline void print() { if (b) puts(\u0026ldquo;0\u0026rdquo;); else printf(\u0026quot;%d\\n\u0026quot;, a); } }; inline modInt operator *(const modInt\u0026amp; a, const modInt\u0026amp; b) { return modInt(_l a. a * b. a % mod, a. b + b. b); } inline modInt operator /(const modInt\u0026amp; a, const modInt\u0026amp; b) { return modInt(_l a. a * modPow(b. a, mod - 2) % mod, a. b - b. b); }\nmodInt fac[maxn], f[maxn];\nvoid pre() { fac[0] = modInt(1); for (int i = 1; i \u0026lt;= n; ++ i) fac[i] = fac[i - 1] * modInt(i); }\ninline modInt comb(int n, int m) { return fac[n + m] / fac[n] / fac[m]; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;mod); pre(); for (int i = n; i; -- i) { sz[i] = 1; f[i] = modInt(1); if (i * 2 \u0026lt;= n) { f[i] = f[i] * f[i * 2]; sz[i] += sz[i * 2]; } if (i * 2 + 1 \u0026lt;= n) { f[i] = f[i] * f[i * 2 + 1]; f[i] = f[i] * comb(sz[i * 2], sz[i * 2 + 1]); sz[i] += sz[i * 2 + 1]; } } f[1]. print(); }\n","permalink":"/code/dbimport_125/","summary":"#include #include #include using namespace std;\n#define _l (long long int)\nconst int maxn = 1000009;\nint n, mod, sz[maxn];\nint modPow(int a, int x) { int s(1); for (; x; x \u0026raquo;= 1, a = _l a * a % mod) if (x \u0026amp; 1) s = _l s * a % mod; return s; }\nstruct modInt { int a, b; modInt() {} modInt(int ao, int bo) { a = ao, b = bo; } modInt(int xo) { a = xo; for (b = 0; a % mod == 0; a /= mod, ++ b); a %= mod; } inline void print() { if (b) puts(\u0026ldquo;0\u0026rdquo;); else printf(\u0026quot;%d\\n\u0026quot;, a); } }; inline modInt operator *(const modInt\u0026amp; a, const modInt\u0026amp; b) { return modInt(_l a.","title":"bzoj2111.cc"},{"content":"之前觉得好神的题根本没有思路.刚才才发现ovo\n发现这玩意其实就是一个堆而且堆里没有相同的元素.那么对于一个点它的方案数就是左右儿子的方案数的积再乘两边大小的组合数ovo\n然后被坑了直到看到zyf的题解才想起有可能mod\u0026lt;n.然后得用一个pair来代替原来的数.\n无语喽ovo\n","permalink":"/oi/dbimport_126/","summary":"之前觉得好神的题根本没有思路.刚才才发现ovo\n发现这玩意其实就是一个堆而且堆里没有相同的元素.那么对于一个点它的方案数就是左右儿子的方案数的积再乘两边大小的组合数ovo\n然后被坑了直到看到zyf的题解才想起有可能mod\u0026lt;n.然后得用一个pair来代替原来的数.\n无语喽ovo","title":"bzoj2111 [ZJOI2010]Perm 排列计数"},{"content":"#include #include #include #include using namespace std;\ntypedef pair \u0026lt;int, int\u0026gt; ipr; typedef map \u0026lt;int, int\u0026gt; imap; typedef imap :: iterator imap_it;\nstruct seg { int l, r, s, a; seg *ls, *rs; }; struct oper { int x, ya, yb, t; }; inline bool operator \u0026lt;(const oper\u0026amp; a, const oper\u0026amp; b) { return a. x \u0026lt; b. x; }\nconst int maxn = 400009;\nint n, m, a[maxn], pr[maxn], su[maxn], t; oper o[maxn]; seg sbuf_arr[maxn * 2], *sbuf, *rt; imap ri;\n#define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1) inline seg* sgtBuild(int l, int r) { seg* p(sbuf ++); p-\u0026gt; l = l, p-\u0026gt; r = r; p-\u0026gt; s = 0, p-\u0026gt; a = 0; if (l + 1 \u0026lt; r) { p-\u0026gt; ls = sgtBuild(l, midp(p)); p-\u0026gt; rs = sgtBuild(midp(p), r); } return p; } inline void sgtChg(seg* p, int l, int r, int v) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) p-\u0026gt; a += v; else if (r \u0026lt;= midp(p)) sgtChg(p-\u0026gt; ls, l, r, v); else if (l \u0026gt;= midp(p)) sgtChg(p-\u0026gt; rs, l, r, v); else sgtChg(p-\u0026gt; ls, l, midp(p), v), sgtChg(p-\u0026gt; rs, midp(p), r, v); if (p-\u0026gt; a) p-\u0026gt; s = 1; else if (p-\u0026gt; l + 1 \u0026lt; p-\u0026gt; r) p-\u0026gt; s = p-\u0026gt; ls-\u0026gt; s \u0026amp; p-\u0026gt; rs-\u0026gt; s; else p-\u0026gt; s = 0; } inline int sgtQry(seg* p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) return p-\u0026gt; s; else if (r \u0026lt;= midp(p)) return sgtQry(p-\u0026gt; ls, l, r); else if (l \u0026gt;= midp(p)) return sgtQry(p-\u0026gt; rs, l, r); else return sgtQry(p-\u0026gt; ls, l, midp(p)) \u0026amp; sgtQry(p-\u0026gt; rs, midp(p), r); }\nbool sov() { scanf(\u0026quot;%d\u0026quot;, \u0026amp;n); ri. clear(); for (int i = 0; i \u0026lt; n; ++ i) { scanf(\u0026quot;%d\u0026quot;, a + i); imap_it it(ri. find(a[i])); if (it != ri. end()) { pr[i] = it-\u0026gt; second + 1; it-\u0026gt; second = i; } else { pr[i] = 0; ri. insert(ipr(a[i], i)); } } ri. clear(); for (int i = n - 1; i \u0026gt;= 0; \u0026ndash; i) { imap_it it(ri. find(a[i])); if (it != ri. end()) { su[i] = it-\u0026gt; second - 1; it-\u0026gt; second = i; } else { su[i] = n - 1; ri. insert(ipr(a[i], i)); } } sbuf = sbuf_arr; rt = sgtBuild(0, n); m = 0; for (int i = 0; i \u0026lt; n; ++ i) { o[m]. x = pr[i]; o[m]. ya = i; o[m]. yb = su[i]; o[m]. t = 1; ++ m; o[m]. x = i + 1; o[m]. ya = i; o[m]. yb = su[i]; o[m]. t = -1; ++ m; } sort(o, o + m); for (int i = 0, j = 0; i \u0026lt; n; ++ i) { for (; j \u0026lt; m \u0026amp;\u0026amp; o[j]. x == i; ++ j) sgtChg(rt, o[j]. ya, o[j]. yb + 1, o[j]. t); if (sgtQry(rt, i, n) \u0026lt;= 0) return 0; } return 1; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nint t; scanf(\u0026quot;%d\u0026quot;, \u0026amp;t); while (t --) puts(sov() ? \u0026quot;non-boring\u0026quot; : \u0026quot;boring\u0026quot;); }\n","permalink":"/code/dbimport_233/","summary":"#include #include #include #include using namespace std;\ntypedef pair \u0026lt;int, int\u0026gt; ipr; typedef map \u0026lt;int, int\u0026gt; imap; typedef imap :: iterator imap_it;\nstruct seg { int l, r, s, a; seg *ls, *rs; }; struct oper { int x, ya, yb, t; }; inline bool operator \u0026lt;(const oper\u0026amp; a, const oper\u0026amp; b) { return a. x \u0026lt; b. x; }\nconst int maxn = 400009;\nint n, m, a[maxn], pr[maxn], su[maxn], t; oper o[maxn]; seg sbuf_arr[maxn * 2], *sbuf, *rt; imap ri;","title":"bzoj4059.cc"},{"content":"去了一趟帝都,算起来大概打了4场比赛.\nctsc听说是世界上最难的oi比赛.虽然我至少有2题写出了正确的代码,然后又因为奇奇怪怪的原因把分扔掉了.本来以为自己考得稀撇然而还是拿到了au.说明在这样的比赛里稳定才是关键.当然像hobo那样玩心跳翻盘也是不错的,虽然我觉得这样风险很大.也教会我要相信自己相信出题人,不要老是怀疑人生.\napio相对开心很多.吉司机怒虐全场2小时ak把我惊呆了.然后我也就做了2.75小时而已.感觉今年题简单加上多次提交帮了大忙.虽然心虚不过最后还是拿到了au.\n然后因为apio提前出来了所以还做了bop复赛,虽然感觉整个那个下午都很颓废.做了比较水的题然后就放弃了.然后还有个题强行set被卡常数了TT\n然后就是pku校赛了,事实证明在acm中找一个正确的团队和写好自己的题同样重要.虽然是一支从未磨合过的队伍,但是感觉还是很好吖.然后也结交了两个很厉害的朋友.\n感觉上面的东西在之前的博客里都说过了.所以就自行翻阅吧.\n出来也认识了很多各地的神犇,从以前只是oj上的一个id变成了现实中活生生的人.每个人都有自己的个性,让我感觉世界一下充实了不少,也找到了自己的差距和努力的方向.顺便也为未来规划了一些互相帮助共同进步的计(hu)划(ce).\n嗯很开心啦,虽然我还是很弱.\n","permalink":"/diary/dbimport_033/","summary":"去了一趟帝都,算起来大概打了4场比赛.\nctsc听说是世界上最难的oi比赛.虽然我至少有2题写出了正确的代码,然后又因为奇奇怪怪的原因把分扔掉了.本来以为自己考得稀撇然而还是拿到了au.说明在这样的比赛里稳定才是关键.当然像hobo那样玩心跳翻盘也是不错的,虽然我觉得这样风险很大.也教会我要相信自己相信出题人,不要老是怀疑人生.\napio相对开心很多.吉司机怒虐全场2小时ak把我惊呆了.然后我也就做了2.75小时而已.感觉今年题简单加上多次提交帮了大忙.虽然心虚不过最后还是拿到了au.\n然后因为apio提前出来了所以还做了bop复赛,虽然感觉整个那个下午都很颓废.做了比较水的题然后就放弃了.然后还有个题强行set被卡常数了TT\n然后就是pku校赛了,事实证明在acm中找一个正确的团队和写好自己的题同样重要.虽然是一支从未磨合过的队伍,但是感觉还是很好吖.然后也结交了两个很厉害的朋友.\n感觉上面的东西在之前的博客里都说过了.所以就自行翻阅吧.\n出来也认识了很多各地的神犇,从以前只是oj上的一个id变成了现实中活生生的人.每个人都有自己的个性,让我感觉世界一下充实了不少,也找到了自己的差距和努力的方向.顺便也为未来规划了一些互相帮助共同进步的计(hu)划(ce).\n嗯很开心啦,虽然我还是很弱.","title":"20150511 summary for 北京多合一"},{"content":"pku的acm校赛.原来这么欢乐.成功抱粗腿虽然最后10分钟duang的一声rank3就变rank4了.\n我的输出其实就是c和j两道比较无语的题.然后d题在帮着调精度虽然最后也没有过.队友不会用gdb心头一惊.\n一个发现是队友的数学比较强,所以他们选择的题和我选择的题刚好没有交集(除了水题).感觉这样才是科学的组合啊.\n我的做法?\nc题好像很水啊.直接用xyz大爷在wc的时候讲的东西分治过去就行了.然后听说k=0坑了一坨人.我也挂了一次幸好马上就发现了.\nd题听说可以强行解方程然后队友去写二分于是挂辣.\nj题我的做法是按x坐标分组,分别处理大小大于b的组和小于b的组.总的复杂度是根号乘log.我调了一下块大小加上fread读入优化搞过去了好开心.\n所以我还是太弱啦,队友好神啊orz\n","permalink":"/diary/dbimport_032/","summary":"pku的acm校赛.原来这么欢乐.成功抱粗腿虽然最后10分钟duang的一声rank3就变rank4了.\n我的输出其实就是c和j两道比较无语的题.然后d题在帮着调精度虽然最后也没有过.队友不会用gdb心头一惊.\n一个发现是队友的数学比较强,所以他们选择的题和我选择的题刚好没有交集(除了水题).感觉这样才是科学的组合啊.\n我的做法?\nc题好像很水啊.直接用xyz大爷在wc的时候讲的东西分治过去就行了.然后听说k=0坑了一坨人.我也挂了一次幸好马上就发现了.\nd题听说可以强行解方程然后队友去写二分于是挂辣.\nj题我的做法是按x坐标分组,分别处理大小大于b的组和小于b的组.总的复杂度是根号乘log.我调了一下块大小加上fread读入优化搞过去了好开心.\n所以我还是太弱啦,队友好神啊orz","title":"20150510"},{"content":"apio2015.据说不能透露任何信息,那就随便写点心情之类的吧.大概也没人会看.\n嗯第一题把条件看错了居然过了.下来才知道我有多厉害ovo\n然后三个小时不到就搞完了虽然换台评测机肯定稳死.于是出去吃饭还遇到了已经变身工作人员的vfk和毕姥爷.令人感动的是他们居然认识我了ovo\n于是下午干啥呢思考ing\n","permalink":"/diary/dbimport_031/","summary":"apio2015.据说不能透露任何信息,那就随便写点心情之类的吧.大概也没人会看.\n嗯第一题把条件看错了居然过了.下来才知道我有多厉害ovo\n然后三个小时不到就搞完了虽然换台评测机肯定稳死.于是出去吃饭还遇到了已经变身工作人员的vfk和毕姥爷.令人感动的是他们居然认识我了ovo\n于是下午干啥呢思考ing","title":"20150509 apio2015"},{"content":"ctsc就考完了.考这么差居然还能压线拿au.我的rp一定被吸光了.\n今天考得比较郁闷.\n花了很久去做第一题.写出了正解只是网络流的建图不够优.于是在考试结束前2分钟决定卡一个时于是就wa了.下来之后发现不卡时能过.只能说我没救了.\n第二题数据结构题orz hobo.后来说了之后发现没有很好地把对象的特征抽出来.还好黑暗的算法也过了只有add的20分.\n答案提交题看了一会题发现是出题人报复社会于是果断地放弃了.似乎这个决定是很英明的.\n于是ctsc就完了.因为自己的奇奇怪怪的疏忽导致有2道能ac的题目的得分都不高.虽然擦线拿到了au,不过感觉还是很不光彩的.感觉自己还是缺乏对考试的掌控的感觉,于是和那些强省的强同学差了很多.毕竟我还是太弱了.\n下午mhy主持的闭幕式还挺能看的啊,虽然他们也是业余的,所以还是有一些环节让我都捏了一把汗.不过句句都透着他们的心血,还是很感动的orz也像dzd主席说的一样,抓住了机会来锻炼自己.相信mhy的答辩的时候一定能做得比今天的所有人都好ovo\n虽然ctsc跪了不过apio还有机会吧ovo\n然后就是胡策出题的事了.ioi真是业界毒瘤orz.这种思维碰撞的感觉真的很好.\n所以我还是太弱了.\n","permalink":"/diary/dbimport_030/","summary":"ctsc就考完了.考这么差居然还能压线拿au.我的rp一定被吸光了.\n今天考得比较郁闷.\n花了很久去做第一题.写出了正解只是网络流的建图不够优.于是在考试结束前2分钟决定卡一个时于是就wa了.下来之后发现不卡时能过.只能说我没救了.\n第二题数据结构题orz hobo.后来说了之后发现没有很好地把对象的特征抽出来.还好黑暗的算法也过了只有add的20分.\n答案提交题看了一会题发现是出题人报复社会于是果断地放弃了.似乎这个决定是很英明的.\n于是ctsc就完了.因为自己的奇奇怪怪的疏忽导致有2道能ac的题目的得分都不高.虽然擦线拿到了au,不过感觉还是很不光彩的.感觉自己还是缺乏对考试的掌控的感觉,于是和那些强省的强同学差了很多.毕竟我还是太弱了.\n下午mhy主持的闭幕式还挺能看的啊,虽然他们也是业余的,所以还是有一些环节让我都捏了一把汗.不过句句都透着他们的心血,还是很感动的orz也像dzd主席说的一样,抓住了机会来锻炼自己.相信mhy的答辩的时候一定能做得比今天的所有人都好ovo\n虽然ctsc跪了不过apio还有机会吧ovo\n然后就是胡策出题的事了.ioi真是业界毒瘤orz.这种思维碰撞的感觉真的很好.\n所以我还是太弱了.","title":"20150506 ctsc2015 day2 and summary"},{"content":"ctsc day1.早上起来的时候发现太阳都晒屁股了然后才想起这是在帝都.\n如果按照时间顺序的话早上是高三的成人礼,虽然我是晚上才知道的.不得不感叹时间过得好快,依稀记得去年zhx穿西服的样子,然后现在他已经这么神了.(说得好像他当年不神一样)\n早上考试比较虐心吧.第一题知道可以用dijkstra来优化最短路然后再怎么dp一下,不过觉得第二题更可写于是去写第二题了.然后就错误投资了.\n第二题我写的可持久化kdtree.过掉此题的吉丽也是这么写的,可惜我把题意理解错啦.不然是能ac的.悲伤ing.最后一直觉得是我的kdtree写得有问题所以才过不了样例的.当然kdtree是可以被卡的,不过出题组没有想到kdtree的做法好开心hhhh然后正解也比较神不过还比较好理解.zhx的ds题风格.\n第三题比较神啦.花神讲了一堆东西我也没太懂不过觉得相当厉害啊.\n然后反正就比较虐啦.感觉自己太弱,只有每天写水题度日了.怎么最近总是投资ds题然后出大事啊伐开心.\n所以我还是太弱了.\n","permalink":"/diary/dbimport_029/","summary":"ctsc day1.早上起来的时候发现太阳都晒屁股了然后才想起这是在帝都.\n如果按照时间顺序的话早上是高三的成人礼,虽然我是晚上才知道的.不得不感叹时间过得好快,依稀记得去年zhx穿西服的样子,然后现在他已经这么神了.(说得好像他当年不神一样)\n早上考试比较虐心吧.第一题知道可以用dijkstra来优化最短路然后再怎么dp一下,不过觉得第二题更可写于是去写第二题了.然后就错误投资了.\n第二题我写的可持久化kdtree.过掉此题的吉丽也是这么写的,可惜我把题意理解错啦.不然是能ac的.悲伤ing.最后一直觉得是我的kdtree写得有问题所以才过不了样例的.当然kdtree是可以被卡的,不过出题组没有想到kdtree的做法好开心hhhh然后正解也比较神不过还比较好理解.zhx的ds题风格.\n第三题比较神啦.花神讲了一堆东西我也没太懂不过觉得相当厉害啊.\n然后反正就比较虐啦.感觉自己太弱,只有每天写水题度日了.怎么最近总是投资ds题然后出大事啊伐开心.\n所以我还是太弱了.","title":"20150504 ctsc2015 day1"},{"content":"ctsc2015 day0.第x次来帝都,看满城飘絮.(一下飞机嘴皮就开始痛)\n住得比较醚.因为cdqc众来得比较晚所以分散了而且我还得当厅长了,然后意外遇到熟人yeah.\n试机其实也比较无语键盘好难用电脑好难用板凳是坏的还能连外网顺便ssh玩玩yjq.\n面了好多之前一直orz的神牛牛牛牛,比如ioi,tkd(原来你就是tkd!!!),popoqqq,zrt,zyf(不是zfy)\u0026hellip;考虑哪天给这个网站加个友链的功能好了.\n明天去骗分喽.\n","permalink":"/diary/dbimport_028/","summary":"ctsc2015 day0.第x次来帝都,看满城飘絮.(一下飞机嘴皮就开始痛)\n住得比较醚.因为cdqc众来得比较晚所以分散了而且我还得当厅长了,然后意外遇到熟人yeah.\n试机其实也比较无语键盘好难用电脑好难用板凳是坏的还能连外网顺便ssh玩玩yjq.\n面了好多之前一直orz的神牛牛牛牛,比如ioi,tkd(原来你就是tkd!!!),popoqqq,zrt,zyf(不是zfy)\u0026hellip;考虑哪天给这个网站加个友链的功能好了.\n明天去骗分喽.","title":"20150503 ctsc2015 day0"},{"content":"今天用apio赛制做别人的省选题ovo\n第一题直接用O(n3)的dp加剪枝水过去了.\n第二题数据结构题无聊ing\n第三题比较有意思.首先你需要有足够强的直觉来推出sg函数的感觉,然后还要用高超的常数优化技巧来过题.各种ovo\n晚上还有场tyvj有奖赛ovo\n","permalink":"/post/dbimport_027/","summary":"今天用apio赛制做别人的省选题ovo\n第一题直接用O(n3)的dp加剪枝水过去了.\n第二题数据结构题无聊ing\n第三题比较有意思.首先你需要有足够强的直觉来推出sg函数的感觉,然后还要用高超的常数优化技巧来过题.各种ovo\n晚上还有场tyvj有奖赛ovo","title":"20150430 haoi2015 day1"},{"content":"#include #include #include using namespace std;\nconst int maxn = 89; const int mod = 1e9; const int movx[4] = {1, 0, -1, 0}; const int movy[4] = {0, 1, 0, -1};\nint n, m, a[maxn][maxn], nid[11][11], t; char g[11][11];\n#define _l (long long int) #define mInc(a,b) { a += b; if (a \u0026gt;= mod) a -= mod; } #define mDec(a,b) { a -= b; if (a \u0026lt; 0) a += mod; }\nint matrixTree() { int sgn(1), s(1); for (int i = 1; i \u0026lt; t; ++ i) { if (!a[i][i]) return 0; for (int j = i + 1; j \u0026lt; t; ++ j) { while (1) { int rat(a[j][i] / a[i][i]); for (int k = i; k \u0026lt; t; ++ k) mDec(a[j][k], _l a[i][k] * rat % mod); if (a[j][i]) { sgn *= -1; for (int k = i; k \u0026lt; t; ++ k) swap(a[i][k], a[j][k]); } else break; } } } for (int i = 1; i \u0026lt; t; ++ i) s = _l s * a[i][i] % mod; s *= sgn; if (s \u0026lt; 0) s += mod; return s; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); t = 0; for (int i = 0; i \u0026lt; n; ++ i) { scanf(\u0026quot;%s\u0026quot;, g[i]); for (int j = 0; j \u0026lt; m; ++ j) if (g[i][j] == '.') nid[i][j] = t ++; } memset(a, 0, sizeof(a)); for (int i = 0; i \u0026lt; n; ++ i) for (int j = 0; j \u0026lt; m; ++ j) if (g[i][j] == '.') for (int mi = 0; mi \u0026lt; 4; ++ mi) { int x(i + movx[mi]), y(j + movy[mi]); if (x \u0026lt; 0 || x \u0026gt;= n || y \u0026lt; 0 || y \u0026gt;= m || g[x][y] != '.') continue; mInc(a[nid[i][j]][nid[i][j]], 1); mDec(a[nid[i][j]][nid[x][y]], 1); } printf(\u0026quot;%d\\n\u0026quot;, matrixTree()); }\n","permalink":"/code/dbimport_231/","summary":"#include #include #include using namespace std;\nconst int maxn = 89; const int mod = 1e9; const int movx[4] = {1, 0, -1, 0}; const int movy[4] = {0, 1, 0, -1};\nint n, m, a[maxn][maxn], nid[11][11], t; char g[11][11];\n#define _l (long long int) #define mInc(a,b) { a += b; if (a \u0026gt;= mod) a -= mod; } #define mDec(a,b) { a -= b; if (a \u0026lt; 0) a += mod; }","title":"bzoj4031.cc"},{"content":"看上去像是插头dp啊.然后基尔霍夫矩阵也能做.\n关键是模数不是质数,所以不能逆元,所以要用mhy的黑科技,碾转相除来做.\nmhy太强了ovo\n","permalink":"/oi/dbimport_232/","summary":"看上去像是插头dp啊.然后基尔霍夫矩阵也能做.\n关键是模数不是质数,所以不能逆元,所以要用mhy的黑科技,碾转相除来做.\nmhy太强了ovo","title":"bzoj4031 [HEOI2015]小Z的房间"},{"content":"#include #include #include using namespace std;\nstruct edge { int t, c; edge *next, *rv; };\nconst int maxn = 255009; const int maxe = 2000009; const int maxa = 509; const int inf = 0x3f3f3f3f;\nint n, st, te, tnid, rid[maxa], ans; int tvis, vis[maxn], d[maxn]; edge ebuf_arr[maxe], *ebuf(ebuf_arr), *head[maxn];\ninline edge* allocEdge(int u, int v, int c) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; c = c; ebuf-\u0026gt; next = head[u]; return head[u] = ebuf ++; } inline void addEdge(int u, int v, int c) { edge* a(allocEdge(u, v, c)); edge* b(allocEdge(v, u, 0)); a-\u0026gt; rv = b; b-\u0026gt; rv = a; }\nbool bfsBuild() { static int q[maxn]; int hd(0), tl(1); q[0] = st; vis[st] = ++ tvis; d[st] = 1; while (hd \u0026lt; tl \u0026amp;\u0026amp; vis[te] \u0026lt; tvis) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; c \u0026amp;\u0026amp; vis[e-\u0026gt; t] \u0026lt; tvis) { d[e-\u0026gt; t] = d[p] + 1; vis[e-\u0026gt; t] = tvis; q[tl ++] = e-\u0026gt; t; } } return vis[te] == tvis; } int dfsFind(int p, int c) { if (p == te) return c; int s(0); edge* e; for (e = head[p]; e \u0026amp;\u0026amp; c; e = e-\u0026gt; next) if (e-\u0026gt; c \u0026amp;\u0026amp; d[e-\u0026gt; t] == d[p] + 1 \u0026amp;\u0026amp; vis[e-\u0026gt; t] == tvis) { int x(dfsFind(e-\u0026gt; t, min(c, e-\u0026gt; c))); c -= x, s += x; e-\u0026gt; c -= x, e-\u0026gt; rv-\u0026gt; c += x; } if (!e) d[p] = 0; return s; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\ntnid = 0; st = ++ tnid, te = ++ tnid; scanf(\u0026quot;%d\u0026quot;, \u0026amp;n); for (int i = 1; i \u0026lt;= n; ++ i) rid[i] = ++ tnid; ans = 0; for (int i = 1; i \u0026lt;= n; ++ i) for (int j = 1; j \u0026lt;= n; ++ j) { int x; scanf(\u0026quot;%d\u0026quot;, \u0026amp;x); ans += x; if (i != j) { ++ tnid; addEdge(rid[i], tnid, inf); addEdge(rid[j], tnid, inf); addEdge(tnid, te, x); } else addEdge(rid[i], te, x); } for (int i = 1; i \u0026lt;= n; ++ i) { int c; scanf(\u0026quot;%d\u0026quot;, \u0026amp;c); addEdge(st, rid[i], c); } memset(vis, 0, sizeof(vis)); tvis = 0; while (bfsBuild()) ans -= dfsFind(st, inf); printf(\u0026quot;%d\\n\u0026quot;, ans); }\n","permalink":"/code/dbimport_221/","summary":"#include #include #include using namespace std;\nstruct edge { int t, c; edge *next, *rv; };\nconst int maxn = 255009; const int maxe = 2000009; const int maxa = 509; const int inf = 0x3f3f3f3f;\nint n, st, te, tnid, rid[maxa], ans; int tvis, vis[maxn], d[maxn]; edge ebuf_arr[maxe], *ebuf(ebuf_arr), *head[maxn];\ninline edge* allocEdge(int u, int v, int c) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; c = c; ebuf-\u0026gt; next = head[u]; return head[u] = ebuf ++; } inline void addEdge(int u, int v, int c) { edge* a(allocEdge(u, v, c)); edge* b(allocEdge(v, u, 0)); a-\u0026gt; rv = b; b-\u0026gt; rv = a; }","title":"bzoj3996.cc"},{"content":"最开始看了一下这是什么gui啊.然后仔细一看发现有玄机.\n管aa[1][i]叫a[i]好了.那么b[i]j对答案产生贡献当且仅当a[i]=a[j]=1.b[i][i]对答案产生贡献当且仅当a[i]=1.c[i]对答案产生影响当且仅当a[i]=1.\n然后看上去好玄妙啊.其实就是要决定哪些a[i]要选.那不是最大权闭合子图嘛?\n数据范围有点大?实测一下飞快啊.\n","permalink":"/oi/dbimport_222/","summary":"最开始看了一下这是什么gui啊.然后仔细一看发现有玄机.\n管aa[1][i]叫a[i]好了.那么b[i]j对答案产生贡献当且仅当a[i]=a[j]=1.b[i][i]对答案产生贡献当且仅当a[i]=1.c[i]对答案产生影响当且仅当a[i]=1.\n然后看上去好玄妙啊.其实就是要决定哪些a[i]要选.那不是最大权闭合子图嘛?\n数据范围有点大?实测一下飞快啊.","title":"bzoj3996 [TJOI2015]线性代数"},{"content":"题目好长啊,像个阅读题一样.还是比较有意思的一道题.有点像gorgeous和我说的那个原创题的感觉啊.\n首先如果没有加边的话那么答案就是∏indegreeu.\n如果加了边之后还是dag那么无影响.\n如果加了边之后存在一个scc,那么答案就要减去∑(环*∏其它点的indegree).这个东西可以用随随便便的dp来解决.\n","permalink":"/oi/dbimport_230/","summary":"题目好长啊,像个阅读题一样.还是比较有意思的一道题.有点像gorgeous和我说的那个原创题的感觉啊.\n首先如果没有加边的话那么答案就是∏indegreeu.\n如果加了边之后还是dag那么无影响.\n如果加了边之后存在一个scc,那么答案就要减去∑(环*∏其它点的indegree).这个东西可以用随随便便的dp来解决.","title":"bzoj4011 [HNOI2015]落忆枫音"},{"content":"#include #include #include using namespace std;\nstruct edge { int t; edge* next; };\ntypedef long long dint; #define _l (long long int)\nconst int maxn = 100009; const int maxe = 200009; const int mod = 1e9 + 7;\nint n, m, x, y, ans, ind[maxn], tpo[maxn], tpn[maxn], inv[maxn], f[maxn]; edge ebuf_arr[maxe], *ebuf(ebuf_arr), *head[maxn];\nint modPow(int a, int x) { int s(1); for (; x; x \u0026raquo;= 1, a = _l a * a % mod) if (x \u0026amp; 1) s = _l s * a % mod; return s; }\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\nint topSort(int* q) { static int c[maxn]; int hd(0), tl(1); for (int i = 1; i \u0026lt;= n; ++ i) c[i] = ind[i]; q[hd] = 1; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) { \u0026ndash; c[e-\u0026gt; t]; if (!c[e-\u0026gt; t]) q[tl ++] = e-\u0026gt; t; } } return tl; }\n#define mInc(a,b) { a += b; if (a \u0026gt;= mod) a -= mod; }\nint DP() { int nt(1); for (int i = 1; i \u0026lt;= n; ++ i) inv[i] = modPow(i, mod - 2); for (int i = 2; i \u0026lt;= n; ++ i) nt = _l nt * ind[i] % mod; memset(f, 0, sizeof(f)); for (int i = 0; i \u0026lt; n; ++ i) tpn[tpo[i]] = i; \u0026ndash; ind[y]; f[y] = _l ans * inv[ind[y]] % mod; for (int i = tpn[y]; i \u0026lt; tpn[x]; ++ i) { int p(tpo[i]); for (edge* e = head[p]; e; e = e-\u0026gt; next) mInc(f[e-\u0026gt; t], _l f[p] * inv[ind[e-\u0026gt; t]] % mod); } return (nt - f[x] + mod) % mod; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d%d%d\u0026quot;, \u0026amp;n, \u0026amp;m, \u0026amp;x, \u0026amp;y); memset(head, 0, sizeof(head)); memset(ind, 0, sizeof(ind)); for (int i = 0; i \u0026lt; m; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); addEdge(u, v); ++ ind[v]; } ans = 1; for (int i = 2; i \u0026lt;= n; ++ i) ans = _l ans * ind[i] % mod; topSort(tpo); if (x != y) { addEdge(x, y); ++ ind[y]; } if (topSort(tpn) \u0026lt; n \u0026amp;\u0026amp; x != y \u0026amp;\u0026amp; y != 1) { ans = DP(); } else { ans = 1; for (int i = 2; i \u0026lt;= n; ++ i) ans = _l ans * ind[i] % mod; } printf(\u0026quot;%d\\n\u0026quot;, ans); }\n","permalink":"/code/dbimport_229/","summary":"#include #include #include using namespace std;\nstruct edge { int t; edge* next; };\ntypedef long long dint; #define _l (long long int)\nconst int maxn = 100009; const int maxe = 200009; const int mod = 1e9 + 7;\nint n, m, x, y, ans, ind[maxn], tpo[maxn], tpn[maxn], inv[maxn], f[maxn]; edge ebuf_arr[maxe], *ebuf(ebuf_arr), *head[maxn];\nint modPow(int a, int x) { int s(1); for (; x; x \u0026raquo;= 1, a = _l a * a % mod) if (x \u0026amp; 1) s = _l s * a % mod; return s; }","title":"bzoj4011.cc"},{"content":"无语的智商题啊.居然没人写题解.\n首先dp打个表.cnt[i]表示大小为i的二叉树的总个数.当然这个就是catlan数.然后son[i]表示大小为i的所有不同构的二叉树的叶子数的和.\n然后经过找规律(翻oeis)发现son[i] = C(2n-2,n-1).\n于是就没有于是了.推一下组合数发现answer=n2(n+1) / (n2) / (n*2-1).\n代码好无语.\n","permalink":"/oi/dbimport_223/","summary":"无语的智商题啊.居然没人写题解.\n首先dp打个表.cnt[i]表示大小为i的二叉树的总个数.当然这个就是catlan数.然后son[i]表示大小为i的所有不同构的二叉树的叶子数的和.\n然后经过找规律(翻oeis)发现son[i] = C(2n-2,n-1).\n于是就没有于是了.推一下组合数发现answer=n2(n+1) / (n2) / (n*2-1).\n代码好无语.","title":"bzoj4001 [TJOI2015]概率论"},{"content":"var n: double; begin readln(n); writeln(nn(n+1)/(2n-1)/(2n):0:9); end.\n","permalink":"/code/dbimport_224/","summary":"var n: double; begin readln(n); writeln(nn(n+1)/(2n-1)/(2n):0:9); end.","title":"bzoj4001.pas"},{"content":"无语的考试ovo前几天见过原题ovo\n第一题水fib数列的dp.然后还只求个位.找循环节都行啊.\n第二题无语的树形dp.之前没有看见树的条件.\n第三题算几啊.按面积排一下序然后扫描线啥的.然后mhy还有更厉害的扫描线虽然我不会.\n所以mhy好强啊.\n顺手粘一发考试的时候写的画图器ovo\nzao (zuo) fu (si) de hua tu qi\tJS not supported\tdraw\tclear\t","permalink":"/diary/dbimport_026/","summary":"无语的考试ovo前几天见过原题ovo\n第一题水fib数列的dp.然后还只求个位.找循环节都行啊.\n第二题无语的树形dp.之前没有看见树的条件.\n第三题算几啊.按面积排一下序然后扫描线啥的.然后mhy还有更厉害的扫描线虽然我不会.\n所以mhy好强啊.\n顺手粘一发考试的时候写的画图器ovo\nzao (zuo) fu (si) de hua tu qi\tJS not supported\tdraw\tclear\t","title":"20150427"},{"content":"终于还是忍不了把语言换成了英语.然后整个世界的画风都变了ovo不我是指字体变了.\n一天考两场ovo虽然都是网赛不过还是mark一下喽.\n下午的bop本来也是去玩的所以死得比较惨.\n第一题数学渣直接再见.第二题似乎是比较无语的贪心.第三题写了老半天的按询问分块最后还是放弃了.感觉计算影响太麻烦.\n晚上bc居然和gorgeous分在一个房间了.于是钱没了.\n1001水.1002我随便写了个分块.似乎有人直接写朴素也黑不掉啊不开心.\n1003被gorgeous秒了.我还是思考了一下才想到的.其实也就是mobius随便推一下的啦.\n1004我写的是按左边区间莫队+按颜色大小分块.然后写完之后发现我开的怎么是c.cc?顺手mv c.cc d.cc然后duang的一声代码不见啦.于是只好重写一遍.然后排名就很惨了.于是orz gorgeous去了.\n完了发现并不好hack.于是洗澡.于是在洗澡的时候发现我的4的做法居然乘起来的复杂度是O(n2 logn).这是怎么过pre的啊我类个去.肯定fst了.于是很久之后发现居然pre==final!?一脸捂脸ing.是不是我的rp要被吸光了.\n所以我还是太弱啦!\n","permalink":"/diary/dbimport_025/","summary":"终于还是忍不了把语言换成了英语.然后整个世界的画风都变了ovo不我是指字体变了.\n一天考两场ovo虽然都是网赛不过还是mark一下喽.\n下午的bop本来也是去玩的所以死得比较惨.\n第一题数学渣直接再见.第二题似乎是比较无语的贪心.第三题写了老半天的按询问分块最后还是放弃了.感觉计算影响太麻烦.\n晚上bc居然和gorgeous分在一个房间了.于是钱没了.\n1001水.1002我随便写了个分块.似乎有人直接写朴素也黑不掉啊不开心.\n1003被gorgeous秒了.我还是思考了一下才想到的.其实也就是mobius随便推一下的啦.\n1004我写的是按左边区间莫队+按颜色大小分块.然后写完之后发现我开的怎么是c.cc?顺手mv c.cc d.cc然后duang的一声代码不见啦.于是只好重写一遍.然后排名就很惨了.于是orz gorgeous去了.\n完了发现并不好hack.于是洗澡.于是在洗澡的时候发现我的4的做法居然乘起来的复杂度是O(n2 logn).这是怎么过pre的啊我类个去.肯定fst了.于是很久之后发现居然pre==final!?一脸捂脸ing.是不是我的rp要被吸光了.\n所以我还是太弱啦!","title":"20150426"},{"content":"#include #include #include #include using namespace std;\nconst double eps = 1e-11; const int maxa = 23; const int maxn = 409;\nint n, m, t, pa, pb, mp[maxa][maxa], deg[maxn]; double p[maxa], a[maxn][maxn], s[maxn];\ninline double transPsb(int a, int b) { if (a == b) return p[a]; else if (!mp[a][b]) return 0; else return (1.0 - p[a]) / deg[a]; }\nvoid guess() { for (int i = 0; i \u0026lt; t; ++ i) { int z; for (z = i; fabs(a[z][i]) \u0026lt; eps; ++ z); if (z \u0026gt; i) for (int k = i; k \u0026lt;= t; ++ k) swap(a[i][k], a[z][k]); for (int j = i + 1; j \u0026lt; t; ++ j) { double rat(a[j][i] / a[i][i]); for (int k = i; k \u0026lt;= t; ++ k) a[j][k] -= a[i][k] * rat; } } for (int i = t - 1; i \u0026gt;= 0; \u0026ndash; i) { s[i] = - a[i][t]; for (int j = t - 1; j \u0026gt; i; \u0026ndash; j) s[i] -= s[j] * a[i][j]; s[i] /= a[i][i]; } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d%d%d\u0026quot;, \u0026amp;n, \u0026amp;m, \u0026amp;pa, \u0026amp;pb); -- pa, -- pb; t = n * n; memset(mp, 0, sizeof(mp)); memset(deg, 0, sizeof(deg)); while (m --) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); ++ deg[-- u], ++ deg[-- v]; mp[u][v] = mp[v][u] = 1; } for (int i = 0; i \u0026lt; n; ++ i) scanf(\u0026quot;%lf\u0026quot;, p + i); for (int i = 0; i \u0026lt; n; ++ i) for (int j = 0; j \u0026lt; n; ++ j) { int pi(i * n + j); for (int k = 0; k \u0026lt; n; ++ k) for (int l = 0; l \u0026lt; n; ++ l) { int pj(k * n + l); if (k != l) a[pi][pj] = transPsb(k, i) * transPsb(l, j); else a[pi][pj] = 0; } if (i == pa \u0026amp;\u0026amp; j == pb) a[pi][t] = 1.0; else a[pi][t] = 0; a[pi][pi] -= 1.0; } guess(); for (int i = 0; i \u0026lt; n; ++ i) printf(\u0026quot;%.6lf \u0026quot;, s[n * i + i]); putchar(10); }\n","permalink":"/code/dbimport_187/","summary":"#include #include #include #include using namespace std;\nconst double eps = 1e-11; const int maxa = 23; const int maxn = 409;\nint n, m, t, pa, pb, mp[maxa][maxa], deg[maxn]; double p[maxa], a[maxn][maxn], s[maxn];\ninline double transPsb(int a, int b) { if (a == b) return p[a]; else if (!mp[a][b]) return 0; else return (1.0 - p[a]) / deg[a]; }\nvoid guess() { for (int i = 0; i \u0026lt; t; ++ i) { int z; for (z = i; fabs(a[z][i]) \u0026lt; eps; ++ z); if (z \u0026gt; i) for (int k = i; k \u0026lt;= t; ++ k) swap(a[i][k], a[z][k]); for (int j = i + 1; j \u0026lt; t; ++ j) { double rat(a[j][i] / a[i][i]); for (int k = i; k \u0026lt;= t; ++ k) a[j][k] -= a[i][k] * rat; } } for (int i = t - 1; i \u0026gt;= 0; \u0026ndash; i) { s[i] = - a[i][t]; for (int j = t - 1; j \u0026gt; i; \u0026ndash; j) s[i] -= s[j] * a[i][j]; s[i] /= a[i][i]; } }","title":"bzoj3270.cc"},{"content":"比较基础的期望+高消的题.为了说明一下高消是what,我决定写一发题解.\n首先题意是有个n个点m条边的无向图.有两个人初始位置是a和b.每个时刻每个人在一个点有p_i的概率不动,否则等概率移动到相邻的点.只有在同一时刻在同一个顶点上才算相遇.相遇了他俩就玩去了.求在第i号点相遇的概率.\n首先方程很好列.定义一个状态f[i][j]表示第一个人在i,第二个人在j的概率.那么f[i][j] = ∑ f[k][l] * ptrans(k,i) * ptrans(j, l),其中ptrans(a,b)表示从a移动到b的概率.\n然后这个东西就用高消嘛.(upd:才发现它叫gauss而不是guess.捂脸ing)\n高消就是说每次把剩下的方程里的第一个系数不为0的未知数的系数全部通过减某一个方程来把这个系数都消成0.当然被减的方程得留下系数过会再用于推答案.然后就可以不管这个被留下的方程了.\n换句话说,如果把方程组看成t*(t+1)的矩阵的话,其实就是消成一个右上三角.\n然后再倒着推出每个未知数的值.\n这个直接算比例就完了嘛.然后有一种情况是当前a[i][i]已经为0了,那么减不掉?反正所有方程的顺序没有关系啊.你就随便找一个不是0的到前面来消就好了啊.如果剩下方程的这一个系数都是0,那这个未知数取啥就无关了.也无所谓啦.\n详见代码.\n","permalink":"/oi/dbimport_188/","summary":"比较基础的期望+高消的题.为了说明一下高消是what,我决定写一发题解.\n首先题意是有个n个点m条边的无向图.有两个人初始位置是a和b.每个时刻每个人在一个点有p_i的概率不动,否则等概率移动到相邻的点.只有在同一时刻在同一个顶点上才算相遇.相遇了他俩就玩去了.求在第i号点相遇的概率.\n首先方程很好列.定义一个状态f[i][j]表示第一个人在i,第二个人在j的概率.那么f[i][j] = ∑ f[k][l] * ptrans(k,i) * ptrans(j, l),其中ptrans(a,b)表示从a移动到b的概率.\n然后这个东西就用高消嘛.(upd:才发现它叫gauss而不是guess.捂脸ing)\n高消就是说每次把剩下的方程里的第一个系数不为0的未知数的系数全部通过减某一个方程来把这个系数都消成0.当然被减的方程得留下系数过会再用于推答案.然后就可以不管这个被留下的方程了.\n换句话说,如果把方程组看成t*(t+1)的矩阵的话,其实就是消成一个右上三角.\n然后再倒着推出每个未知数的值.\n这个直接算比例就完了嘛.然后有一种情况是当前a[i][i]已经为0了,那么减不掉?反正所有方程的顺序没有关系啊.你就随便找一个不是0的到前面来消就好了啊.如果剩下方程的这一个系数都是0,那这个未知数取啥就无关了.也无所谓啦.\n详见代码.","title":"bzoj3270 博物馆"},{"content":"#include #include #include using namespace std;\ninline double sqr(const double\u0026amp; x) { return x * x; }\nstruct opt { int t, i; double x, y; inline double f(double xo) { return x * xo + y; } inline void read() { scanf(\u0026quot;%d%lf%lf\u0026quot;, \u0026amp;t, \u0026amp;x, \u0026amp;y); } }; inline bool operator \u0026lt;(const opt\u0026amp; a, const opt\u0026amp; b) { if (a. x == b. x) return a. y \u0026lt; b. y; else return a. x \u0026lt; b. x; }\nconst int maxn = 500009;\nint n, c[maxn]; opt a[maxn];\ninline bool inHalf(const opt\u0026amp; a, const opt\u0026amp; b, const opt\u0026amp; c) { double xa(b. x - a. x), ya(b. y - a. y); double xb(c. x - a. x), yb(c. y - a. y); return xa * yb - xb * ya \u0026lt;= 0; }\nint mergeSort(int le, int re) { if (le + 1 == re) return a[le]. t == 1 ? re : le; int md((le + re) \u0026raquo; 1); int lm(mergeSort(le, md)); int rm(mergeSort(md, re)); static int stc[maxn]; static double k[maxn]; int tst(0); for (int i = lm; i \u0026lt; md; ++ i) { while (tst \u0026gt; 1 \u0026amp;\u0026amp; inHalf(a[stc[tst - 1]], a[stc[tst]], a[i])) \u0026ndash; tst; stc[++ tst] = i; } for (int i = 1; i \u0026lt; tst; ++ i) k[i] = (a[stc[i + 1]]. y - a[stc[i]]. y) / (a[stc[i + 1]]. x - a[stc[i]]. x); if (tst) { for (int i = md, j = 1; i \u0026lt; rm; ++ i) { for (; j \u0026lt; tst \u0026amp;\u0026amp; a[i]. x \u0026gt; k[j]; ++ j); c[a[i]. i] \u0026amp;= (a[i]. f(a[stc[j]]. x) \u0026lt;= a[stc[j]]. y); } } static opt b[maxn]; int tp(le), tc; for (int i = le, j = md; i \u0026lt; lm || j \u0026lt; rm; ++ tp) if (i \u0026lt; lm \u0026amp;\u0026amp; (j == rm || a[i] \u0026lt; a[j])) b[tp] = a[i ++]; else b[tp] = a[j ++]; tc = tp; for (int i = lm, j = rm; i \u0026lt; md || j \u0026lt; re; ++ tc) if (i \u0026lt; md \u0026amp;\u0026amp; (j == re || a[i] \u0026lt; a[j])) b[tc] = a[i ++]; else b[tc] = a[j ++]; for (int i = le; i \u0026lt; re; ++ i) a[i] = b[i]; return tp; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); for (int i = 0; i \u0026lt; n; ++ i) { a[i]. read(); a[i]. i = i; c[i] = a[i]. t * 2 - 1; if (a[i]. t == 1) { double k(- a[i]. x / a[i]. y); double b((sqr(a[i]. x) + sqr(a[i]. y)) / (a[i]. y * 2.0)); a[i]. x = k, a[i]. y = b; } } mergeSort(0, n); for (int i = 0, iz = 0; i \u0026lt; n; ++ i) if (c[i] \u0026gt; -1) puts(c[i] \u0026amp;\u0026amp; iz ? \u0026quot;Yes\u0026quot; : \u0026quot;No\u0026quot;); else iz = 1; }\n","permalink":"/code/dbimport_170/","summary":"#include #include #include using namespace std;\ninline double sqr(const double\u0026amp; x) { return x * x; }\nstruct opt { int t, i; double x, y; inline double f(double xo) { return x * xo + y; } inline void read() { scanf(\u0026quot;%d%lf%lf\u0026quot;, \u0026amp;t, \u0026amp;x, \u0026amp;y); } }; inline bool operator \u0026lt;(const opt\u0026amp; a, const opt\u0026amp; b) { if (a. x == b. x) return a. y \u0026lt; b. y; else return a.","title":"bzoj2961.cc"},{"content":"#include #include #include #include using namespace std;\ntypedef set rbt; typedef set :: iterator rbt_it;\nstruct cus { int l, r, i; }; inline bool rCmp(const cus\u0026amp; a, const cus\u0026amp; b) { if (a. r == b. r) return a. l \u0026gt; b. l; else return a. r \u0026lt; b. r; } inline bool iCmp(const cus\u0026amp; a, const cus\u0026amp; b) { return a. i \u0026lt; b. i; }\nconst int maxn = 400009; const int maxl = 19;\nint n, m, t, v[maxn], tv, ut[maxn][maxl]; int ts[maxn]; cus a[maxn], b[maxn]; rbt le, re;\ninline int succ(rbt\u0026amp; t, int v) { return *t. upper_bound(v); } inline int prev(rbt\u0026amp; t, int v) { rbt_it it(t. lower_bound(v)); if (it == t. end()) return *t. rbegin(); else return *(\u0026ndash; it); }\nint checkMax(int l, int r) { int s(0); for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (ut[l][i] \u0026lt;= tv \u0026amp;\u0026amp; ut[l][i] \u0026lt;= r + 1) { s += 1 \u0026laquo; i; l = ut[l][i]; } return s; }\nint btQry(int* t, int p) { int s(0); for (++ p; p; p -= (p \u0026amp; -p)) s += t[p]; return s; } void btChg(int* t, int p, int v) { for (++ p; p \u0026lt; maxn; p += (p \u0026amp; -p)) t[p] += v; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); tv = 0; for (int i = 0; i \u0026lt; n; ++ i) { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;a[i]. l, \u0026amp;a[i]. r); a[i]. i = i; v[tv ++] = a[i]. l; v[tv ++] = a[i]. r; } sort(v, v + tv); tv = unique(v, v + tv) - v; for (int i = 0; i \u0026lt; n; ++ i) { a[i]. l = lower_bound(v, v + tv, a[i]. l) - v; a[i]. r = lower_bound(v, v + tv, a[i]. r) - v; } sort(a, a + n, rCmp); t = 0; for (int i = 0; i \u0026lt; n; ++ i) if (!t || a[i]. l \u0026gt; b[t - 1]. l) b[t ++] = a[i]; m = 0; for (int i = 0, l = -1; i \u0026lt; t; ++ i) if (b[i]. l \u0026gt; l) l = b[i]. r, ++ m; for (int i = 0, j = 0; i \u0026lt; tv; ++ i) { for (; j \u0026lt; t \u0026amp;\u0026amp; i \u0026gt; b[j]. l; ++ j); if (j == t) ut[i][0] = tv + 1; else ut[i][0] = b[j]. r + 1; } ut[tv][0] = tv + 1; for (int i = 0; i \u0026lt; maxl; ++ i) ut[tv + 1][i] = tv + 1; for (int i = tv; i \u0026gt;= 0; -- i) for (int j = 1; j \u0026lt; maxl; ++ j) ut[i][j] = ut[ut[i][j - 1]][j - 1]; re. insert(-1); le. insert(tv); sort(a, a + n, iCmp); printf(\u0026quot;%d\\n\u0026quot;, m); memset(ts, 0, sizeof(ts)); for (int i = 0; i \u0026lt; n; ++ i) if (btQry(ts, a[i]. r) - btQry(ts, a[i]. l - 1) == 0) { int l(prev(re, a[i]. l)), r(succ(le, a[i]. r)); if (checkMax(l + 1, r - 1) == checkMax(l + 1, a[i]. l - 1) + checkMax(a[i]. r + 1, r - 1) + 1) { for (int j = a[i]. l; j \u0026lt;= a[i]. r; ++ j) btChg(ts, j, 1); printf(\u0026quot;%d \u0026quot;, i + 1); le. insert(a[i]. l); re. insert(a[i]. r); } } }\n","permalink":"/code/dbimport_115/","summary":"#include #include #include #include using namespace std;\ntypedef set rbt; typedef set :: iterator rbt_it;\nstruct cus { int l, r, i; }; inline bool rCmp(const cus\u0026amp; a, const cus\u0026amp; b) { if (a. r == b. r) return a. l \u0026gt; b. l; else return a. r \u0026lt; b. r; } inline bool iCmp(const cus\u0026amp; a, const cus\u0026amp; b) { return a. i \u0026lt; b. i; }\nconst int maxn = 400009; const int maxl = 19;","title":"bzoj1178.cc"},{"content":"apio的题也是比较有质量的.听说这题很难写但是我感觉难点在想上啊.\n首先直接两遍Lis强行判断能不能扔进去是错的.至于为啥我也不造啊.\n于是就是区间询问答案最大.然后每次看把当前询问加进去后会不会对最大答案产生影响.\n然后发现有点像今年sctsc那个倍增?居然还真是倍增.先去掉包含有其它区间的区间.然后找每个点向右跨过的最近的一个区间.然后再倍增一发.\n好神的做法啊ovo\nbtw为啥bzoj第一页上充满了黑坨坨.不爽Ing.\n","permalink":"/oi/dbimport_116/","summary":"apio的题也是比较有质量的.听说这题很难写但是我感觉难点在想上啊.\n首先直接两遍Lis强行判断能不能扔进去是错的.至于为啥我也不造啊.\n于是就是区间询问答案最大.然后每次看把当前询问加进去后会不会对最大答案产生影响.\n然后发现有点像今年sctsc那个倍增?居然还真是倍增.先去掉包含有其它区间的区间.然后找每个点向右跨过的最近的一个区间.然后再倍增一发.\n好神的做法啊ovo\nbtw为啥bzoj第一页上充满了黑坨坨.不爽Ing.","title":"bzoj1178 [Apio2009]CONVENTION会议中心"},{"content":"之前在哪里听过的题啊.于是卡了一晚上.\n就是缩个点然后看看哪些点必需自己去点第一把火就好了.\n然后有一种情况是把剩下的都查完之后只剩下一个了.那么看存不存在这种情况.那就是某个第一把火的地方的scc大小为1,且它连出去的都不必需用它查.\n然后我就卡在ans\u0026gt;1上了.我傻了ovo\n然后非递归tarjan还是写得不熟啊.还要再加深一下对自己想出来的算法的印象.\n","permalink":"/oi/dbimport_142/","summary":"之前在哪里听过的题啊.于是卡了一晚上.\n就是缩个点然后看看哪些点必需自己去点第一把火就好了.\n然后有一种情况是把剩下的都查完之后只剩下一个了.那么看存不存在这种情况.那就是某个第一把火的地方的scc大小为1,且它连出去的都不必需用它查.\n然后我就卡在ans\u0026gt;1上了.我傻了ovo\n然后非递归tarjan还是写得不熟啊.还要再加深一下对自己想出来的算法的印象.","title":"bzoj2438 [中山市选2011]杀人游戏"},{"content":"#include #include #include using namespace std;\nstruct edge { int t; edge *next; };\nconst int maxn = 100009; const int maxe = 600009; const int maxst = 800009;\nint n, m, vis[maxn], dfn[maxn], low[maxn], tscc, fs[maxn], ssz[maxn], ind[maxn]; edge ebuf_arr[maxe], *ebuf(ebuf_arr), *head[maxn], *hg[maxn];\ninline void addEdge(edge** head, int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\nvoid tarjanDFS(int po) { static int stc[maxst], stv[maxn], stt[maxn], fr[maxn], d[maxn]; int tsc(1), tsv(0), tst(0), dfi(0); d[stc[tsc] = po] = 1; vis[po] = 1; while (tsc) { int p(stc[tsc \u0026ndash;]); if (dfn[p]) continue; for (; tsv \u0026amp;\u0026amp; d[p] \u0026lt;= d[stv[tsv]]; \u0026ndash; tsv) { low[fr[stv[tsv]]] = min(low[fr[stv[tsv]]], low[stv[tsv]]); if (low[stv[tsv]] == dfn[stv[tsv]]) { ssz[++ tscc] = 0; do { vis[stt[tst]] = 2; ++ ssz[fs[stt[tst]] = tscc]; } while (stt[tst \u0026ndash;] != stv[tsv]); } } dfn[p] = low[p] = ++ dfi; stv[++ tsv] = stt[++ tst] = p; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (!dfn[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; fr[e-\u0026gt; t] = p; vis[e-\u0026gt; t] = 1; stc[++ tsc] = e-\u0026gt; t; } else if (vis[e-\u0026gt; t] == 1) low[p] = min(low[p], dfn[e-\u0026gt; t]); } for (; tsv; \u0026ndash; tsv) { low[fr[stv[tsv]]] = min(low[fr[stv[tsv]]], low[stv[tsv]]); if (low[stv[tsv]] == dfn[stv[tsv]]) { ssz[++ tscc] = 0; do { vis[stt[tst]] = 2; ++ ssz[fs[stt[tst]] = tscc]; } while (stt[tst \u0026ndash;] != stv[tsv]); } } }\nbool checkSingle() { for (int i = 1; i \u0026lt;= tscc; ++ i) if (!ind[i] \u0026amp;\u0026amp; ssz[i] == 1) { bool x(1); for (edge* e = hg[i]; e \u0026amp;\u0026amp; x; e = e-\u0026gt; next) if (ind[e-\u0026gt; t] == 1) x = 0; if (x) return 1; } return 0; }\nint main() { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); memset(head, 0, sizeof(head)); for (int i = 0; i \u0026lt; m; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); addEdge(head, u, v); } memset(vis, 0, sizeof(vis)); tscc = 0; memset(dfn, 0, sizeof(dfn)); for (int i = 1; i \u0026lt;= n; ++ i) if (!vis[i]) tarjanDFS(i); int ans(0); memset(ind, 0, sizeof(ind)); memset(hg, 0, sizeof(hg)); for (int i = 1; i \u0026lt;= n; ++ i) for (edge* e = head[i]; e; e = e-\u0026gt; next) if (fs[i] != fs[e-\u0026gt; t]) { ++ ind[fs[e-\u0026gt; t]]; addEdge(hg, fs[i], fs[e-\u0026gt; t]); } for (int i = 1; i \u0026lt;= tscc; ++ i) if (!ind[i]) ++ ans; if (checkSingle()) \u0026ndash; ans; printf(\u0026quot;%.6lf\u0026quot;, (double)(n - ans) / n); }\n","permalink":"/code/dbimport_141/","summary":"#include #include #include using namespace std;\nstruct edge { int t; edge *next; };\nconst int maxn = 100009; const int maxe = 600009; const int maxst = 800009;\nint n, m, vis[maxn], dfn[maxn], low[maxn], tscc, fs[maxn], ssz[maxn], ind[maxn]; edge ebuf_arr[maxe], *ebuf(ebuf_arr), *head[maxn], *hg[maxn];\ninline void addEdge(edge** head, int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\nvoid tarjanDFS(int po) { static int stc[maxst], stv[maxn], stt[maxn], fr[maxn], d[maxn]; int tsc(1), tsv(0), tst(0), dfi(0); d[stc[tsc] = po] = 1; vis[po] = 1; while (tsc) { int p(stc[tsc \u0026ndash;]); if (dfn[p]) continue; for (; tsv \u0026amp;\u0026amp; d[p] \u0026lt;= d[stv[tsv]]; \u0026ndash; tsv) { low[fr[stv[tsv]]] = min(low[fr[stv[tsv]]], low[stv[tsv]]); if (low[stv[tsv]] == dfn[stv[tsv]]) { ssz[++ tscc] = 0; do { vis[stt[tst]] = 2; ++ ssz[fs[stt[tst]] = tscc]; } while (stt[tst \u0026ndash;] !","title":"bzoj2438.cc"},{"content":"#include #include #include using namespace std;\nstruct edge { int t; edge *next; };\nconst int maxn = 100009;\nint n, m, ind[maxn], hp[maxn], q[maxn]; edge ebuf_arr[maxn], *ebuf, *head[maxn];\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\nvoid sov() { memset(ind, 0, sizeof(ind)); memset(head, 0, sizeof(head)); ebuf = ebuf_arr; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); for (int i = 0; i \u0026lt; m; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); addEdge(v, u); ++ ind[u]; } int th(0), tq(0); for (int i = 1; i \u0026lt;= n; ++ i) if (!ind[i]) hp[th ++] = i; make_heap(hp, hp + th); while (th) { int p(hp[0]); pop_heap(hp, hp + th \u0026ndash;); q[tq ++] = p; for (edge* e = head[p]; e; e = e-\u0026gt; next) { \u0026ndash; ind[e-\u0026gt; t]; if (!ind[e-\u0026gt; t]) { hp[th] = e-\u0026gt; t; push_heap(hp, hp + ++ th); } } } if (tq == n) { for (int i = tq - 1; i \u0026gt;= 0; \u0026ndash; i) printf(\u0026quot;%d \u0026ldquo;, q[i]); putchar(10); } else puts(\u0026ldquo;Impossible!\u0026rdquo;); }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nint t; scanf(\u0026quot;%d\u0026quot;, \u0026amp;t); while (t --) sov(); }\n","permalink":"/code/dbimport_227/","summary":"#include #include #include using namespace std;\nstruct edge { int t; edge *next; };\nconst int maxn = 100009;\nint n, m, ind[maxn], hp[maxn], q[maxn]; edge ebuf_arr[maxn], *ebuf, *head[maxn];\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\nvoid sov() { memset(ind, 0, sizeof(ind)); memset(head, 0, sizeof(head)); ebuf = ebuf_arr; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); for (int i = 0; i \u0026lt; m; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); addEdge(v, u); ++ ind[u]; } int th(0), tq(0); for (int i = 1; i \u0026lt;= n; ++ i) if (!","title":"bzoj4010.cc"},{"content":"bzoj都3k道题了ovo\nhnoi的题好强.\n这个题就建反图然后跑topsort就行了.每次选能选的里最大的扔进去.最后倒过来输出.\n我也是猜的然后交上去居然是对的.\n为什么呢?好神奇?\n","permalink":"/oi/dbimport_228/","summary":"bzoj都3k道题了ovo\nhnoi的题好强.\n这个题就建反图然后跑topsort就行了.每次选能选的里最大的扔进去.最后倒过来输出.\n我也是猜的然后交上去居然是对的.\n为什么呢?好神奇?","title":"bzoj4010 [HNOI2015]菜肴制作"},{"content":"#include #include #include #include #include using namespace std;\n#ifdef WIN32 #define randInt ((rand()\u0026laquo;16)|rand()) #else #define randInt (rand()) #endif\nconst double eps = 1e-11; const double pi = acos(-1);\ninline double sqr(const double\u0026amp; x) { return x * x; } inline int sgn(const double\u0026amp; x) { return (x \u0026gt; eps) - (x \u0026lt; -eps); }\ntypedef struct triobj { double x, y, z; triobj() {} triobj(const double\u0026amp; xo, const double\u0026amp; yo, const double\u0026amp; zo) { x = xo, y = yo, z = zo; } inline void read() { scanf(\u0026quot;%lf%lf%lf\u0026quot;, \u0026amp;x, \u0026amp;y, \u0026amp;z); } } point, vect; inline triobj operator +(const triobj\u0026amp; a, const triobj\u0026amp; b) { return triobj(a. x + b. x, a. y + b. y, a. z + b. z); } inline triobj operator -(const triobj\u0026amp; a, const triobj\u0026amp; b) { return triobj(a. x - b. x, a. y - b. y, a. z - b. z); } inline triobj operator *(const triobj\u0026amp; a, const triobj\u0026amp; b) { return triobj(a. y * b. z - a. z * b. y, a. z * b. x - a. x * b. z, a. x * b. y - a. y * b. x); } inline double operator \u0026amp;(const triobj\u0026amp; a, const triobj\u0026amp; b) { return a. x * b. x + a. y * b. y + a. z * b. z; } inline double vol(const point\u0026amp; a, const point\u0026amp; b, const point\u0026amp; c, const point\u0026amp; d) { return (a - b) \u0026amp; ((c - b) * (d - b)); } inline double sqLen(const vect\u0026amp; a) { return sqr(a. x) + sqr(a. y) + sqr(a. z); }\nstruct surface { int a, b, c; surface() {} surface(int ao, int bo, int co) { a = ao, b = bo, c = co; } };\nconst int maxn = 109; const int maxf = 10009;\nint n, t, cu, mk[maxn][maxn]; point a[maxn]; surface h[maxf];\nbool findQua() { t = 0; for (int i = 2; i \u0026lt; n; ++ i) { vect s((a[i] - a[0]) * (a[i] - a[1])); if (!sgn(sqLen(s))) continue; swap(a[i], a[2]); for (int j = i + 1; j \u0026lt; n; ++ j) { double v(vol(a[0], a[1], a[2], a[j])); if (sgn(v)) { swap(a[3], a[j]); h[t ++] = surface(0, 1, 2); h[t ++] = surface(0, 2, 1); return 1; } } } return 0; }\nvoid addPoint(int ci) { static surface hn[maxf]; int tn(0); ++ cu; for (int i = 0; i \u0026lt; t; ++ i) { point u(a[h[i]. a]); point v(a[h[i]. b]); point w(a[h[i]. c]); if (sgn(vol(a[ci], u, v, w)) \u0026lt; 0) { mk[h[i]. a][h[i]. b] = mk[h[i]. b][h[i]. a] = cu; mk[h[i]. a][h[i]. c] = mk[h[i]. c][h[i]. a] = cu; mk[h[i]. c][h[i]. b] = mk[h[i]. b][h[i]. c] = cu; } else hn[tn ++] = h[i]; } t = tn; for (int i = 0; i \u0026lt; tn; ++ i) h[i] = hn[i]; for (int i = 0; i \u0026lt; tn; ++ i) { if (mk[hn[i]. a][hn[i]. b] == cu) h[t ++] = surface(hn[i]. b, hn[i]. a, ci); if (mk[hn[i]. b][hn[i]. c] == cu) h[t ++] = surface(hn[i]. c, hn[i]. b, ci); if (mk[hn[i]. c][hn[i]. a] == cu) h[t ++] = surface(hn[i]. a, hn[i]. c, ci); } }\ndouble randDouble() { return (double)(randInt % 100000000) / 1e9; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nsrand(23472349); scanf(\u0026quot;%d\u0026quot;, \u0026amp;n); for (int i = 0; i \u0026lt; n; ++ i) a[i]. read(); random_shuffle(a, a + n); while (!findQua()) { for (int i = 0; i \u0026lt; n; ++ i) { a[i]. x += randDouble() / 1e7; a[i]. y += randDouble() / 1e7; a[i]. z += randDouble() / 1e7; } } memset(mk, 0, sizeof(mk)); cu = 0; for (int i = 3; i \u0026lt; n; ++ i) addPoint(i); double ans(0); for (int i = 0; i \u0026lt; t; ++ i) { vect v((a[h[i]. b] - a[h[i]. a]) * (a[h[i]. c] - a[h[i]. a])); ans += sqrt(sqLen(v)); } printf(\u0026quot;%.6lf\\n\u0026quot;, ans * 0.5); }\n","permalink":"/code/dbimport_117/","summary":"#include #include #include #include #include using namespace std;\n#ifdef WIN32 #define randInt ((rand()\u0026laquo;16)|rand()) #else #define randInt (rand()) #endif\nconst double eps = 1e-11; const double pi = acos(-1);\ninline double sqr(const double\u0026amp; x) { return x * x; } inline int sgn(const double\u0026amp; x) { return (x \u0026gt; eps) - (x \u0026lt; -eps); }\ntypedef struct triobj { double x, y, z; triobj() {} triobj(const double\u0026amp; xo, const double\u0026amp; yo, const double\u0026amp; zo) { x = xo, y = yo, z = zo; } inline void read() { scanf(\u0026quot;%lf%lf%lf\u0026quot;, \u0026amp;x, \u0026amp;y, \u0026amp;z); } } point, vect; inline triobj operator +(const triobj\u0026amp; a, const triobj\u0026amp; b) { return triobj(a.","title":"bzoj1209.cc"},{"content":"三维算几ovo给mhy和idy跪烂.\n三维凸包算是一种比较简单的三维算几吧.首先有一些基本的公式比如算四个点的体积就是一个底*高.不过变成了一个面的法向量点乘另一个向量.\n然后就用随机增量法每次替掉一些面就好了.\n然后有一种可能是所有点都共面.这种时候就随机把一些点乱移动一下让它们形成一个高度和纸一样薄的凸包再来算就行了.\n感觉也不是特别恶心啊ovo\n","permalink":"/oi/dbimport_118/","summary":"三维算几ovo给mhy和idy跪烂.\n三维凸包算是一种比较简单的三维算几吧.首先有一些基本的公式比如算四个点的体积就是一个底*高.不过变成了一个面的法向量点乘另一个向量.\n然后就用随机增量法每次替掉一些面就好了.\n然后有一种可能是所有点都共面.这种时候就随机把一些点乱移动一下让它们形成一个高度和纸一样薄的凸包再来算就行了.\n感觉也不是特别恶心啊ovo","title":"bzoj1209 [HNOI2004]最佳包裹"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 50009;\ndint n, s; int tp, pn[maxn], u[maxn], fc[maxn], tf; bool pr[maxn];\nvoid pre() { memset(pr, 0, sizeof(pr)); u[1] = 1; tp = 0; for (int i = 2; i \u0026lt; maxn; ++ i) { if (!pr[i]) { pn[tp ++] = i; u[i] = -1; } for (int j = 0, v; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j] \u0026lt; maxn; ++ j) { pr[v = i * pn[j]] = 1; if (i % pn[j] == 0) { u[v] = 0; break; } else u[v] = -u[i]; } } }\nint cntFac(int v) { int s(0); for (int i = 0; i \u0026lt; tf \u0026amp;\u0026amp; fc[i] \u0026lt;= v; ++ i) s += u[fc[i]] * (v / fc[i]); return s; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\npre(); scanf(lld, \u0026amp;n); s = 0; for (dint b = 1; b * b \u0026lt;= n; ++ b) { dint nx(n / b); tf = 0; for (int i = 1; i * i \u0026lt;= b; ++ i) if (b % i == 0) { if (u[i]) fc[tf ++] = i; if (i * i \u0026lt; b \u0026amp;\u0026amp; u[b / i]) fc[tf ++] = b / i; } sort(fc, fc + tf); for (dint a = 1, j; a \u0026lt; b \u0026amp;\u0026amp; a + b \u0026lt;= nx; a = j + 1) { j = nx / (nx / (a + b)) - b; if (j \u0026gt;= b) j = b - 1; s += (nx / (a + b)) * (cntFac(j) - cntFac(a - 1)); } } printf(lld \u0026quot;\\n\u0026quot;, s); }\n","permalink":"/code/dbimport_150/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 50009;\ndint n, s; int tp, pn[maxn], u[maxn], fc[maxn], tf; bool pr[maxn];\nvoid pre() { memset(pr, 0, sizeof(pr)); u[1] = 1; tp = 0; for (int i = 2; i \u0026lt; maxn; ++ i) { if (!pr[i]) { pn[tp ++] = i; u[i] = -1; } for (int j = 0, v; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j] \u0026lt; maxn; ++ j) { pr[v = i * pn[j]] = 1; if (i % pn[j] == 0) { u[v] = 0; break; } else u[v] = -u[i]; } } }","title":"bzoj2671.cc"},{"content":"在颓废了一天之后决定写一个题解.因为我觉得这题挺有意思.\n我们需要转化一下式子.把原来的a,b改成A,B.设d=gcd(A,B),A=ad,B=bd.\n那么(a+b)d | abd2,即(a+b)|ab*d.\n又因为gcd(a,b)=1,所以(a+b)一定与a,b都互质.于是(a+b)|d.\n设t*(a+b)=d.那么因为bd≤n,所以t(a+b)*b≤n.那么b是sqrt(n)级别的.且我们只需要统计三元组(a,b,t)的个数就行了.\nanswer=∑b∑a(n/b)/(a+b)(gcd(a,b)=1)然后这个玩意看上去好像是个长得怪异一点的狄利克雷卷积啊.\n于是就是要求[l, r]中与b互质的数的个数?这个玩意等于∑i|bu(i)*(r/i).然后发现可以把b分解质因数.而且只留下u不为0的.于是就能出奇迹辣好厉害ovo\n","permalink":"/oi/dbimport_151/","summary":"在颓废了一天之后决定写一个题解.因为我觉得这题挺有意思.\n我们需要转化一下式子.把原来的a,b改成A,B.设d=gcd(A,B),A=ad,B=bd.\n那么(a+b)d | abd2,即(a+b)|ab*d.\n又因为gcd(a,b)=1,所以(a+b)一定与a,b都互质.于是(a+b)|d.\n设t*(a+b)=d.那么因为bd≤n,所以t(a+b)*b≤n.那么b是sqrt(n)级别的.且我们只需要统计三元组(a,b,t)的个数就行了.\nanswer=∑b∑a(n/b)/(a+b)(gcd(a,b)=1)然后这个玩意看上去好像是个长得怪异一点的狄利克雷卷积啊.\n于是就是要求[l, r]中与b互质的数的个数?这个玩意等于∑i|bu(i)*(r/i).然后发现可以把b分解质因数.而且只留下u不为0的.于是就能出奇迹辣好厉害ovo","title":"bzoj2671 Calc"},{"content":"居然这么快.然后就完了.感觉好像是做了一场梦 或者玩了一场游戏ovo\n既然是diary那就先diary一下吧.\nday1早上起来在拥挤的餐厅里吃了面包加面包然后走去考试.\n然后就开考了.第一题好神不会.第二题好水选敲.第三题想了想就是半平面交啊敲敲敲.然后发现第一题似乎取值是连续的?那就随便打个dinic乱二分一下吧.然后就完了估分200应该过2和3.\n然后下午看分居然220.居然过了1和2然后3tle.居然被高一的虐.然后进去申诉居然连数据都不给那玩ball.于是要数据顺便被某负责人怒斥.然后下午果断去看电影.速7还不错.\n晚上开会感觉就是flag大会.\n然后就day2了昨天晚上好像被毒蚊子咬了,惨.看题发现第一题好神.第二题好神.第三题好水敲30分钟.然后发现第二题似乎可做然后去敲.然后发现第一题还是不会于是乱骗.考试结束前15分钟发现第二题题意看错试图改朴素未果.心痛ing\n下午看分果然只有100虽然还是进队了不过被虐惨于是心痛回家.\ndiary得好水.那么再重新说一下题的做法吧ovo\nday1a把≥某个数的东西当作1来跑二分图最大匹配就可以得到最多有多少个≥这个数的选择方案然后直接二分.\nday1b是个水水的倍增.每个战士肯定传给最远的一个然后没有覆盖于是倍增一下看要多远才能盖一圈.然后这题数据好难造.\nday1c是个半平面交.可以证明任意一边和01边都会划分成一个半平面.扔一起跑半平面交就好了.然后求那个的时候可以用数据公式不过我二分所以被卡常了不开心.\nday2a似乎是树形dp反正我还没想出来.大概反正先走左先走右dp一下.因为是完全二叉树所以很多看上去不靠谱的复杂度在这里都是靠谱的.\nday2b听说是线段树.其实直接维护每个0区间的左右端点扔进set里就好了.然后黑白转换的时候分情况讨论一下.每次询问的时候先把某个点的值更新一下.然后查询左右能控制到的最远的端点.如果是连在一起的话还要再找第二近的因为有可能另一边会造成答案变小.\nday2c水水的链剖+持久化线段树.其实询问就是在某个时刻前就被感染的人在某条链上有多少.我比较懒就直接链剖了其实直接dfs序区间修改也能做还少一个log.不过反正链剖比较快嘛.\n虽然这样但是我也只过了3题而已看来我还是太弱啊.\n似乎还有总结的部分.\n最后一次省选了吧.也是唯一的一次机会.以为自己会很厉害,其实还是不厉害.也算是一种成长吧.发现自己还有很长的路要走.\n这回没有倒在ds怎么写上,而倒在了ds的题面上.也算是倒在自己最得意的地方了吧.成长总是痛苦的ovo\ndp啥的的确比较弱.不能偏科啊.\n世事无常吧.有人翻盘也有人第二天倒下了.4个a类居然没有一个人两天都发挥正常.然后女a也暴冷了.yjq差点就进队了可惜了.然后就有一些熟悉的面孔退役了.\n反正就是各种奇怪的事情.其实也早就知道有这一天吧.其实也早就准备好了这一天吧.至少i survived.\n于是今年省队好像更整齐了.\n所以我还是太弱了啊.\n","permalink":"/diary/dbimport_023/","summary":"居然这么快.然后就完了.感觉好像是做了一场梦 或者玩了一场游戏ovo\n既然是diary那就先diary一下吧.\nday1早上起来在拥挤的餐厅里吃了面包加面包然后走去考试.\n然后就开考了.第一题好神不会.第二题好水选敲.第三题想了想就是半平面交啊敲敲敲.然后发现第一题似乎取值是连续的?那就随便打个dinic乱二分一下吧.然后就完了估分200应该过2和3.\n然后下午看分居然220.居然过了1和2然后3tle.居然被高一的虐.然后进去申诉居然连数据都不给那玩ball.于是要数据顺便被某负责人怒斥.然后下午果断去看电影.速7还不错.\n晚上开会感觉就是flag大会.\n然后就day2了昨天晚上好像被毒蚊子咬了,惨.看题发现第一题好神.第二题好神.第三题好水敲30分钟.然后发现第二题似乎可做然后去敲.然后发现第一题还是不会于是乱骗.考试结束前15分钟发现第二题题意看错试图改朴素未果.心痛ing\n下午看分果然只有100虽然还是进队了不过被虐惨于是心痛回家.\ndiary得好水.那么再重新说一下题的做法吧ovo\nday1a把≥某个数的东西当作1来跑二分图最大匹配就可以得到最多有多少个≥这个数的选择方案然后直接二分.\nday1b是个水水的倍增.每个战士肯定传给最远的一个然后没有覆盖于是倍增一下看要多远才能盖一圈.然后这题数据好难造.\nday1c是个半平面交.可以证明任意一边和01边都会划分成一个半平面.扔一起跑半平面交就好了.然后求那个的时候可以用数据公式不过我二分所以被卡常了不开心.\nday2a似乎是树形dp反正我还没想出来.大概反正先走左先走右dp一下.因为是完全二叉树所以很多看上去不靠谱的复杂度在这里都是靠谱的.\nday2b听说是线段树.其实直接维护每个0区间的左右端点扔进set里就好了.然后黑白转换的时候分情况讨论一下.每次询问的时候先把某个点的值更新一下.然后查询左右能控制到的最远的端点.如果是连在一起的话还要再找第二近的因为有可能另一边会造成答案变小.\nday2c水水的链剖+持久化线段树.其实询问就是在某个时刻前就被感染的人在某条链上有多少.我比较懒就直接链剖了其实直接dfs序区间修改也能做还少一个log.不过反正链剖比较快嘛.\n虽然这样但是我也只过了3题而已看来我还是太弱啊.\n似乎还有总结的部分.\n最后一次省选了吧.也是唯一的一次机会.以为自己会很厉害,其实还是不厉害.也算是一种成长吧.发现自己还有很长的路要走.\n这回没有倒在ds怎么写上,而倒在了ds的题面上.也算是倒在自己最得意的地方了吧.成长总是痛苦的ovo\ndp啥的的确比较弱.不能偏科啊.\n世事无常吧.有人翻盘也有人第二天倒下了.4个a类居然没有一个人两天都发挥正常.然后女a也暴冷了.yjq差点就进队了可惜了.然后就有一些熟悉的面孔退役了.\n反正就是各种奇怪的事情.其实也早就知道有这一天吧.其实也早就准备好了这一天吧.至少i survived.\n于是今年省队好像更整齐了.\n所以我还是太弱了啊.","title":"20150419 scoi diary and summary"},{"content":"奇怪的一天ovo然后发现后天就省选了.\n考试ovo然后发现整个高二都不太高兴.\n第一题想了半个小时之后写了半个小时ovo充分证明思考的重要性.做法大概就是正解线段树二分.然后还卡常数无语了喽.\n第二题不是做过的usaco原题么.然后就按当时的想法敲了个上凸壳下面下凸壳上面的东西.最后交之前想起没改过点的范围于是造了个109的数据.然后发现自己wa掉了.整个人都吓到了.不过也没有时间改了只好硬着头皮交上去了.结果下午发现居然过了ovo数据又水了么.讲的时候知道不用那么麻烦.找出凸多边形的核之后直接在里面找个点极角排序就完了.\n第三题一直在想.想了一下dp发现应该是自动机.于是一直在想怎么建一个点数不会炸的dfa.最后才发现我没有注意到dp数组相邻两数差只能是1或者0这个性质ovo.\n考成这个鬼样子居然还是rank1,被发了大洋若干.这是要我省选rp下溢直接退役的节奏啊.然后仔细一看发现有人没交ovo妈呀他们都是坏银ovo\n然后就花了一个下午+一个晚上在群里水.\n所以我还是太弱了.\n","permalink":"/diary/dbimport_022/","summary":"奇怪的一天ovo然后发现后天就省选了.\n考试ovo然后发现整个高二都不太高兴.\n第一题想了半个小时之后写了半个小时ovo充分证明思考的重要性.做法大概就是正解线段树二分.然后还卡常数无语了喽.\n第二题不是做过的usaco原题么.然后就按当时的想法敲了个上凸壳下面下凸壳上面的东西.最后交之前想起没改过点的范围于是造了个109的数据.然后发现自己wa掉了.整个人都吓到了.不过也没有时间改了只好硬着头皮交上去了.结果下午发现居然过了ovo数据又水了么.讲的时候知道不用那么麻烦.找出凸多边形的核之后直接在里面找个点极角排序就完了.\n第三题一直在想.想了一下dp发现应该是自动机.于是一直在想怎么建一个点数不会炸的dfa.最后才发现我没有注意到dp数组相邻两数差只能是1或者0这个性质ovo.\n考成这个鬼样子居然还是rank1,被发了大洋若干.这是要我省选rp下溢直接退役的节奏啊.然后仔细一看发现有人没交ovo妈呀他们都是坏银ovo\n然后就花了一个下午+一个晚上在群里水.\n所以我还是太弱了.","title":"20150416"},{"content":"#include #include #include using namespace std;\n#define mInc(x,y) { x += y; if (x \u0026gt;= mod) x -= mod; } #define _l (long long int)\nconst int maxn = 20009; const int mod = 1004535809; const int wo = 3;\nint n, m, mz, l, x, a[maxn], g[maxn], ss; int wm, wp[maxn];\nint modPow(int a, int x, int tmod = mod) { int s(1); for (; x; x \u0026raquo;= 1, a = _l a * a % tmod) if (x \u0026amp; 1) s = _l s * a % tmod; return s; }\nvoid getWM() { static int fm[maxn]; int tf(0); for (int i = 2; i * i \u0026lt;= mz; ++ i) if (mz % i == 0) { fm[tf ++] = i; if (i * i \u0026lt; mz) fm[tf ++] = mz / i; } for (int i = 2; 1; ++ i) { bool ir(1); for (int j = 0; j \u0026lt; tf \u0026amp;\u0026amp; ir; ++ j) if (modPow(i, fm[j], m) == 1) ir = 0; if (ir) { wm = i; break; } } for (int i = 0, x = 1; i \u0026lt; mz; ++ i, x = _l x * wm % m) wp[x] = i; }\nvoid fft(int* a, int l, int rv) { for (int i = 1, j = l \u0026raquo; 1, k; i \u0026lt; l - 1; ++ i) { if (i \u0026lt; j) swap(a[i], a[j]); for (k = l \u0026raquo; 1; j \u0026gt;= k; k \u0026raquo;= 1) j -= k; if (j \u0026lt;= k) j += k; } for (int h = 2; h \u0026lt;= l; h \u0026laquo;= 1) { int w0(modPow(wo, (mod - 1) / h)); if (rv) w0 = modPow(w0, mod - 2); for (int i = 0; i \u0026lt; l; i += h) { int w(1); for (int j = i; j \u0026lt; i + (h \u0026raquo; 1); ++ j) { int x(a[j]), y(_l a[j + (h \u0026raquo; 1)] * w % mod); a[j] = (x + y) % mod; a[j + (h \u0026raquo; 1)] = (x - y + mod) % mod; w = _l w * w0 % mod; } } } if (rv) { int ni(modPow(l, mod - 2)); for (int i = 0; i \u0026lt; l; ++ i) a[i] = _l a[i] * ni % mod; } }\nvoid conv(int* resa, int* a, int* b) { static int tmp[maxn]; fft(a, l, 0); if (b != a) fft(b, l, 0); for (int i = 0; i \u0026lt; l; ++ i) tmp[i] = _l a[i] * b[i] % mod; fft(tmp, l, 1); for (int i = mz; i \u0026lt; l; ++ i) { mInc(tmp[i % mz], tmp[i]); tmp[i] = 0; } for (int i = 0; i \u0026lt; l; ++ i) resa[i] = tmp[i]; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d%d%d\u0026quot;, \u0026amp;n, \u0026amp;m, \u0026amp;x, \u0026amp;ss); mz = m - 1; getWM(); memset(a, 0, sizeof(a)); memset(g, 0, sizeof(g)); for (l = 1; l \u0026lt;= m * 2; l \u0026lt;\u0026lt;= 1); for (int i = 0; i \u0026lt; ss; ++ i) { int u; scanf(\u0026quot;%d\u0026quot;, \u0026amp;u); if (u) ++ a[wp[u]]; } g[0] = 1; for (; n; n \u0026gt;\u0026gt;= 1) { if (n \u0026amp; 1) { conv(g, g, a); fft(a, l, -1); } conv(a, a, a); } printf(\u0026quot;%d\\n\u0026quot;, g[wp[x]]); }\n","permalink":"/code/dbimport_219/","summary":"#include #include #include using namespace std;\n#define mInc(x,y) { x += y; if (x \u0026gt;= mod) x -= mod; } #define _l (long long int)\nconst int maxn = 20009; const int mod = 1004535809; const int wo = 3;\nint n, m, mz, l, x, a[maxn], g[maxn], ss; int wm, wp[maxn];\nint modPow(int a, int x, int tmod = mod) { int s(1); for (; x; x \u0026raquo;= 1, a = _l a * a % tmod) if (x \u0026amp; 1) s = _l s * a % tmod; return s; }","title":"bzoj3992.cc"},{"content":"好玩的数论题。想想发现可以像快速幂一样跑。然后就是思考如何转移优化。\n发现模数比较奇怪。居然是fnt的模数ovo那就要用fft喽？可是这里是乘啊。木有关系喽，因为m是素数，所以它一定有原根。于是可以取原根的幂次，就变成加辣。\n这种东西我自己当然想不出来ovo\n同余系下的东西真有趣ovo\n","permalink":"/oi/dbimport_220/","summary":"好玩的数论题。想想发现可以像快速幂一样跑。然后就是思考如何转移优化。\n发现模数比较奇怪。居然是fnt的模数ovo那就要用fft喽？可是这里是乘啊。木有关系喽，因为m是素数，所以它一定有原根。于是可以取原根的幂次，就变成加辣。\n这种东西我自己当然想不出来ovo\n同余系下的东西真有趣ovo","title":"bzoj3992 [Sdoi2015]序列统计"},{"content":"好无语的一天ovo\n上午讲的东西还是非常能听的，虽然出现了不少原题ovo然后发现自己还是好年轻啊，很多东西想得都不够透彻。\n下午考试证明了正确投资的重要性。\n第一题就是状态压缩dp，不过显然我写得太，丑，了。又wa又t一时爽yeah。\n第二题全场基本都把题意理解错了ovo我还有什么好说的呢。不过目测没有别人写这种题意的正解。我来mark一下。\n首先左右端点还是满足单调的。然后就是加点删点判断最小无向子树。以1为根，分两种情况讨论。一种是本来就是一棵子树，那么随便选一个点二分就可以找到这棵子树的最小大小。另一种是除了某个点为根的子树的另一部分。那么可以为根的点就是子树里没有已选点的点。那么用树链剖分来维护哪些点可选就可以辣。非常好写好调ovo\n然后出题人理解的题意是做过的ovo\n第三题各种无语水。\n然后晚上题完全没有思路弃疗ing.\n所以我还是太年轻了。积累一个经验就是如果题意感觉会有歧义的话一定要问清楚。\n","permalink":"/diary/dbimport_021/","summary":"好无语的一天ovo\n上午讲的东西还是非常能听的，虽然出现了不少原题ovo然后发现自己还是好年轻啊，很多东西想得都不够透彻。\n下午考试证明了正确投资的重要性。\n第一题就是状态压缩dp，不过显然我写得太，丑，了。又wa又t一时爽yeah。\n第二题全场基本都把题意理解错了ovo我还有什么好说的呢。不过目测没有别人写这种题意的正解。我来mark一下。\n首先左右端点还是满足单调的。然后就是加点删点判断最小无向子树。以1为根，分两种情况讨论。一种是本来就是一棵子树，那么随便选一个点二分就可以找到这棵子树的最小大小。另一种是除了某个点为根的子树的另一部分。那么可以为根的点就是子树里没有已选点的点。那么用树链剖分来维护哪些点可选就可以辣。非常好写好调ovo\n然后出题人理解的题意是做过的ovo\n第三题各种无语水。\n然后晚上题完全没有思路弃疗ing.\n所以我还是太年轻了。积累一个经验就是如果题意感觉会有歧义的话一定要问清楚。","title":"20150415"},{"content":"#include #include #include using namespace std;\nstruct edge { int t; edge *next; };\nconst int maxn = 109; const int inf = 0x3f3f3f3f;\nedge *head[maxn], ebuf_arr[maxn \u0026laquo; 1], ebuf; int n, f[maxn][2][2]; / f[node][if u is light][if u is chosen] */\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\n#define protect(x) { if (x \u0026gt; inf) x = inf; }\nvoid dfsDP(int p, int fr) { int g[2][2][2], cur(0), prv(1); g[cur][0][0] = 0; g[cur][1][1] = 1; g[cur][0][1] = g[cur][1][0] = inf; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; t != fr) { dfsDP(e-\u0026gt; t, p); swap(cur, prv); g[cur][0][0] = min(g[prv][0][0] + f[e-\u0026gt; t][1][0], g[prv][1][0] + f[e-\u0026gt; t][1][1]); g[cur][1][0] = min(g[prv][1][0] + f[e-\u0026gt; t][1][0], g[prv][0][0] + f[e-\u0026gt; t][1][1]); protect(g[cur][0][0]); protect(g[cur][1][0]); g[cur][0][1] = min(g[prv][0][1] + f[e-\u0026gt; t][0][0], g[prv][1][1] + f[e-\u0026gt; t][0][1]); g[cur][1][1] = min(g[prv][1][1] + f[e-\u0026gt; t][0][0], g[prv][0][1] + f[e-\u0026gt; t][0][1]); protect(g[cur][0][1]); protect(g[cur][1][1]); } f[p][0][0] = g[cur][0][0]; f[p][1][0] = g[cur][1][0]; f[p][0][1] = g[cur][0][1]; f[p][1][1] = g[cur][1][1]; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nwhile (scanf(\u0026quot;%d\u0026quot;, \u0026amp;n), n) { memset(head, 0, sizeof(head)); ebuf = ebuf_arr; for (int i = 1; i \u0026lt; n; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); addEdge(u, v); addEdge(v, u); } dfsDP(1, 0); printf(\u0026quot;%d\\n\u0026quot;, min(f[1][1][0], f[1][1][1])); } }\n","permalink":"/code/dbimport_143/","summary":"#include #include #include using namespace std;\nstruct edge { int t; edge *next; };\nconst int maxn = 109; const int inf = 0x3f3f3f3f;\nedge *head[maxn], ebuf_arr[maxn \u0026laquo; 1], ebuf; int n, f[maxn][2][2]; / f[node][if u is light][if u is chosen] */\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\n#define protect(x) { if (x \u0026gt; inf) x = inf; }","title":"bzoj2466.cc"},{"content":"之前听说是异或高消？好神的感觉。\n然后可以树形dp嘛！为啥网上题解这么误导ovo\n就是f[u][i][j]表示u这个点有没有亮，有没有被按开关。完了嘛。\n无语了辣。\n","permalink":"/oi/dbimport_144/","summary":"之前听说是异或高消？好神的感觉。\n然后可以树形dp嘛！为啥网上题解这么误导ovo\n就是f[u][i][j]表示u这个点有没有亮，有没有被按开关。完了嘛。\n无语了辣。","title":"bzoj2466 [中山市选2009]树"},{"content":"省上奇怪的集训的day1.\n早上讲的东西还是比较能听的.然后我自己非常的naive嘛.听说讲课的就是省选的出题人?然后看着这些可以\u0026quot;把握我的命运\u0026quot;的人,有种奇怪的感觉.\n下午随便考了一发试.\n第一题想到了dp,但是一直在想平方和存不下啊怎么办啊.然后最后才知道平方都要乘n次干嘛要存下来.\n第二题水水的树形dp.\n第三题还行的算几.反正就对称一下就好了.中途把线线交写丑了晕.\n晚上居然还有题.\n第一题第二题看了看不想做,因为感觉第三题比较有趣.可是最后还是只想到O(n)的做法不开心ovo\n所以我还是太弱了.马上都要省选了啊怎么办.\n","permalink":"/diary/dbimport_020/","summary":"省上奇怪的集训的day1.\n早上讲的东西还是比较能听的.然后我自己非常的naive嘛.听说讲课的就是省选的出题人?然后看着这些可以\u0026quot;把握我的命运\u0026quot;的人,有种奇怪的感觉.\n下午随便考了一发试.\n第一题想到了dp,但是一直在想平方和存不下啊怎么办啊.然后最后才知道平方都要乘n次干嘛要存下来.\n第二题水水的树形dp.\n第三题还行的算几.反正就对称一下就好了.中途把线线交写丑了晕.\n晚上居然还有题.\n第一题第二题看了看不想做,因为感觉第三题比较有趣.可是最后还是只想到O(n)的做法不开心ovo\n所以我还是太弱了.马上都要省选了啊怎么办.","title":"20150414"},{"content":"比较神奇的数学题.首先你得听说过一个东西叫Mertens函数.于是你可以找到一篇论文.然后你发现它是英文的.试图理解了很久没有成功.\n然后终于有人良心贴出了一个blog.这回懂辣开心ovo\n其实就是那一个公式:F(n) = ∑一堆约数 + ∑k=2nF([n/k])\n然后发现mu和phi的左边一堆都是可以O(1)算的辣.右边强行记搜可以做到O(n2/3)的辣.\n然后手写个hash啥的就能跑得飞快的辣.\n","permalink":"/oi/dbimport_218/","summary":"比较神奇的数学题.首先你得听说过一个东西叫Mertens函数.于是你可以找到一篇论文.然后你发现它是英文的.试图理解了很久没有成功.\n然后终于有人良心贴出了一个blog.这回懂辣开心ovo\n其实就是那一个公式:F(n) = ∑一堆约数 + ∑k=2nF([n/k])\n然后发现mu和phi的左边一堆都是可以O(1)算的辣.右边强行记搜可以做到O(n2/3)的辣.\n然后手写个hash啥的就能跑得飞快的辣.","title":"bzoj3944 sum"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct node { int v; dint phi, mu; node *next; };\nconst int maxv = 3000009; const int hmod = 4432457;\nint n, tp, pn[maxv], phi[maxv], mu[maxv]; dint sp[maxv], smu[maxv]; bool pr[maxv]; node *head[hmod];\nvoid pre() { memset(pr, 0, sizeof(pr)); memset(head, 0, sizeof(head)); tp = 0; phi[1] = mu[1] = 1; for (int i = 2; i \u0026lt; maxv; ++ i) { if (!pr[i]) { pn[tp ++] = i; mu[i] = -1; phi[i] = i - 1; } for (int j = 0, v; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j] \u0026lt; maxv; ++ j) { pr[v = i * pn[j]] = 1; if (i % pn[j]) { mu[v] = - mu[i]; phi[v] = phi[i] * (pn[j] - 1); } else { mu[v] = 0; phi[v] = phi[i] * pn[j]; break; } } } smu[0] = sp[0] = 0; for (int i = 1; i \u0026lt; maxv; ++ i) { smu[i] = smu[i - 1] + mu[i]; sp[i] = sp[i - 1] + phi[i]; } }\nvoid getVal(int x, dint\u0026amp; u, dint\u0026amp; p) { if (x \u0026lt; maxv) { u = smu[x]; p = sp[x]; } else { node* it; for (it = head[x % hmod]; it; it = it-\u0026gt; next) if (it-\u0026gt; v == x) { u = it-\u0026gt; mu; p = it-\u0026gt; phi; break; } if (!it) { u = 1, p = _l x * (_l x + 1) / 2; for (dint i = 2, j; i \u0026lt;= x; i = j + 1) { j = x / (x / i); dint ux, px; getVal(x / i, ux, px); u -= ux * (j - i + 1); p -= px * (j - i + 1); } it = new node; it-\u0026gt; v = x; it-\u0026gt; mu = u; it-\u0026gt; phi = p; it-\u0026gt; next = head[x % hmod]; head[x % hmod] = it; } } }\nvoid sov() { dint uo, po; getVal(n, uo, po); printf(lld \u0026quot; \u0026quot; lld \u0026ldquo;\\n\u0026rdquo;, po, uo); }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\npre(); int t; scanf(\u0026quot;%d\u0026quot;, \u0026amp;t); while (t --) { scanf(\u0026quot;%d\u0026quot;, \u0026amp;n); sov(); } }\n","permalink":"/code/dbimport_217/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct node { int v; dint phi, mu; node *next; };\nconst int maxv = 3000009; const int hmod = 4432457;\nint n, tp, pn[maxv], phi[maxv], mu[maxv]; dint sp[maxv], smu[maxv]; bool pr[maxv]; node *head[hmod];\nvoid pre() { memset(pr, 0, sizeof(pr)); memset(head, 0, sizeof(head)); tp = 0; phi[1] = mu[1] = 1; for (int i = 2; i \u0026lt; maxv; ++ i) { if (!","title":"bzoj3944.cc"},{"content":"#include #include #include using namespace std;\n#define _l (long long int)\nconst int maxn = 2000009; const int mod = (1 \u0026laquo; 23) * 7 * 17 + 1;\nint n, a[maxn], b[maxn], c[maxn];\nint readInt(int* a) { static char g[maxn]; scanf(\u0026quot;%s\u0026quot;, g); int l(strlen(g)); for (int i = 0; i \u0026lt; l; ++ i) a[l - i - 1] = g[i] - 48; return l; }\nint modPow(int a, int x) { int s(1); for (; x; x \u0026raquo;= 1, a = _l a * a % mod) if (x \u0026amp; 1) s = _l s * a % mod; return s; }\nvoid fnt(int* a, int n, int rv) { for (int i = 1, j = n \u0026raquo; 1, k; i \u0026lt; n - 1; ++ i) { if (i \u0026lt; j) swap(a[i], a[j]); for (k = n \u0026raquo; 1; j \u0026gt;= k; k \u0026raquo;= 1) j -= k; if (j \u0026lt;= k) j += k; } for (int l = 2; l \u0026lt;= n; l \u0026laquo;= 1) { int w0(modPow(3, (mod - 1) / l)); if (rv) w0 = modPow(w0, mod - 2); for (int i = 0; i \u0026lt; n; i += l) { int w(1); for (int j = i; j \u0026lt; i + (l \u0026raquo; 1); ++ j) { int x(a[j]), y(_l a[j + (l \u0026raquo; 1)] * w % mod); a[j] = (x + y) % mod; a[j + (l \u0026raquo; 1)] = (x - y + mod) % mod; w = _l w * w0 % mod; } } } if (rv) { int ninv(modPow(n, mod - 2)); for (int i = 0; i \u0026lt; n; ++ i) a[i] = _l a[i] * ninv % mod; } }\nvoid sov() { memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); int tl(max(readInt(a), readInt(b))); for (n = 1; n \u0026lt; tl * 2; n \u0026laquo;= 1); fnt(a, n, 0); fnt(b, n, 0); for (int i = 0; i \u0026lt; n; ++ i) c[i] = _l a[i] * b[i] % mod; fnt(c, n, 1); for (int i = 0; i \u0026lt; n; ++ i) { c[i + 1] += c[i] / 10; c[i] %= 10; } int x; for (x = n - 1; x \u0026amp;\u0026amp; !c[x]; \u0026ndash; x); for (; x \u0026gt;= 0; \u0026ndash; x) putchar(c[x] + 48); putchar(10); }\nint main() { #ifndef ONLINE_JUDGE //\tfreopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nint t; scanf(\u0026quot;%d\u0026quot;, \u0026amp;t); while (t --) sov(); }\n","permalink":"/code/dbimport_276/","summary":"#include #include #include using namespace std;\n#define _l (long long int)\nconst int maxn = 2000009; const int mod = (1 \u0026laquo; 23) * 7 * 17 + 1;\nint n, a[maxn], b[maxn], c[maxn];\nint readInt(int* a) { static char g[maxn]; scanf(\u0026quot;%s\u0026quot;, g); int l(strlen(g)); for (int i = 0; i \u0026lt; l; ++ i) a[l - i - 1] = g[i] - 48; return l; }\nint modPow(int a, int x) { int s(1); for (; x; x \u0026raquo;= 1, a = _l a * a % mod) if (x \u0026amp; 1) s = _l s * a % mod; return s; }","title":"spoj235.cc"},{"content":"水水的fft啦.主要是来mark一下数论版fft.\n有一个奇妙的东西叫原根.这个玩意要乘(p-1)次才能乘回自己.然后如果(p-1)含有很多很多个2的话,就可以拿来做fft辣.其实就是解决了fft的单位根,不用complex.剩下的照搬好辣.\n水ovo.在这个前不着村后不着店的四星酒店里好无语ovo\n","permalink":"/oi/dbimport_277/","summary":"水水的fft啦.主要是来mark一下数论版fft.\n有一个奇妙的东西叫原根.这个玩意要乘(p-1)次才能乘回自己.然后如果(p-1)含有很多很多个2的话,就可以拿来做fft辣.其实就是解决了fft的单位根,不用complex.剩下的照搬好辣.\n水ovo.在这个前不着村后不着店的四星酒店里好无语ovo","title":"spoj235 Very Fast Multiplication"},{"content":"不打算再刷题了.省选的时候就让它保持700这个数字吧.突然闲下来感觉好奇怪.\n还有一个星期就省选了呢.时间过得好快.至今后悔没有去参加2012年的省选,然后现在是2015年.\n想起2013年的时候各种奇怪,叛逆?然后也只是去观摩一下.唉.然后2014年因为数组开小而抱憾.\n然后我就高二了.然后就不会再有然后了.\n很郁闷为什么总是要最后一次才是正位.为什么年轻的我就必需去中考,去学文化课?好羡慕初中就能来参加训练的学弟.毕竟初中的我是不会线段树的.\n不管如何,六年的路走到了将要分叉的地方了.看到高三某逃课君,抛开他使得全教室环境变差不说,其实也蛮那啥的.如果真的退役了,嘴上很倔强,心里真的放得下?真的能狠下那条心去当飞行员?\n我不服.唯一的出路是战斗.\n来吧,scoi.\n","permalink":"/diary/dbimport_019/","summary":"不打算再刷题了.省选的时候就让它保持700这个数字吧.突然闲下来感觉好奇怪.\n还有一个星期就省选了呢.时间过得好快.至今后悔没有去参加2012年的省选,然后现在是2015年.\n想起2013年的时候各种奇怪,叛逆?然后也只是去观摩一下.唉.然后2014年因为数组开小而抱憾.\n然后我就高二了.然后就不会再有然后了.\n很郁闷为什么总是要最后一次才是正位.为什么年轻的我就必需去中考,去学文化课?好羡慕初中就能来参加训练的学弟.毕竟初中的我是不会线段树的.\n不管如何,六年的路走到了将要分叉的地方了.看到高三某逃课君,抛开他使得全教室环境变差不说,其实也蛮那啥的.如果真的退役了,嘴上很倔强,心里真的放得下?真的能狠下那条心去当飞行员?\n我不服.唯一的出路是战斗.\n来吧,scoi.","title":"20150413"},{"content":"比较神奇的dp题.其实也不能算dp辣ovo\n有一个神奇的事情是,塔的高度与底层的宽度是负相关的.\n所以就变成了问塔底最窄的时候塔有多高.\n用f[i]来表示用从第i个砖块到第n个砖块搭起来的塔的最窄底层宽度.用s[i]来表示宽度的前缀和,然后得到一个式子:\nf[i] = min(s[j-1]) - s[i - 1] (f[j] ≤ s[j - 1] - s[i - 1], j \u0026gt; i)\ns是单调的.看上去很像是dp呢.\n然后就变成了求s[j - 1] - f[j] ≥ s[i - 1]时的最大的s[j - 1].于是开单调队列搞吧ovo\n","permalink":"/oi/dbimport_200/","summary":"比较神奇的dp题.其实也不能算dp辣ovo\n有一个神奇的事情是,塔的高度与底层的宽度是负相关的.\n所以就变成了问塔底最窄的时候塔有多高.\n用f[i]来表示用从第i个砖块到第n个砖块搭起来的塔的最窄底层宽度.用s[i]来表示宽度的前缀和,然后得到一个式子:\nf[i] = min(s[j-1]) - s[i - 1] (f[j] ≤ s[j - 1] - s[i - 1], j \u0026gt; i)\ns是单调的.看上去很像是dp呢.\n然后就变成了求s[j - 1] - f[j] ≥ s[i - 1]时的最大的s[j - 1].于是开单调队列搞吧ovo","title":"bzoj3549 [ONTAK2010]Tower"},{"content":"#include #include #include using namespace std;\nconst int maxn = 100009;\nint n, a[maxn], sm[maxn], ans; int f[maxn], g[maxn], q[maxn], hd, tl;\nint main() { #ifndef ONLINE_JUDGE //freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); sm[0] = 0; for (int i = 0; i \u0026lt; n; ++ i) { scanf(\u0026quot;%d\u0026quot;, a + i); sm[i + 1] = sm[i] + a[i]; } hd = 0, tl = 1, q[hd] = n; f[n] = 0, g[n] = 0; for (int i = n - 1; i \u0026gt;= 0; -- i) { while (hd + 1 \u0026lt; tl \u0026amp;\u0026amp; sm[q[hd + 1]] - f[q[hd + 1]] \u0026gt;= sm[i]) ++ hd; f[i] = sm[q[hd]] - sm[i]; g[i] = g[q[hd]] + 1; while (hd \u0026lt; tl \u0026amp;\u0026amp; sm[i] - f[i] \u0026gt;= sm[q[tl - 1]] - f[q[tl - 1]]) -- tl; q[tl ++] = i; } printf(\u0026quot;%d\\n\u0026quot;, g[0]); }\n","permalink":"/code/dbimport_199/","summary":"#include #include #include using namespace std;\nconst int maxn = 100009;\nint n, a[maxn], sm[maxn], ans; int f[maxn], g[maxn], q[maxn], hd, tl;\nint main() { #ifndef ONLINE_JUDGE //freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); sm[0] = 0; for (int i = 0; i \u0026lt; n; ++ i) { scanf(\u0026quot;%d\u0026quot;, a + i); sm[i + 1] = sm[i] + a[i]; } hd = 0, tl = 1, q[hd] = n; f[n] = 0, g[n] = 0; for (int i = n - 1; i \u0026gt;= 0; -- i) { while (hd + 1 \u0026lt; tl \u0026amp;\u0026amp; sm[q[hd + 1]] - f[q[hd + 1]] \u0026gt;= sm[i]) ++ hd; f[i] = sm[q[hd]] - sm[i]; g[i] = g[q[hd]] + 1; while (hd \u0026lt; tl \u0026amp;\u0026amp; sm[i] - f[i] \u0026gt;= sm[q[tl - 1]] - f[q[tl - 1]]) -- tl; q[tl ++] = i; } printf(\u0026quot;%d\\n\u0026quot;, g[0]); }","title":"bzoj3549.cc"},{"content":"好像是省选前最后一天在学校考试了ovo\n第一题构造水.\n第二题我以为是出题人丧心病狂卡常数,然后发现我比std多一个log.然后就和朴素一个分了不开心啊.\n第三题神搜索ovo\n然后不知不觉自己也站到最后一次省选的面前了.这么多年,感觉积累了好多东西,要在接下来的也许是几天也许是几个月里爆发.\n当初年少无知的我以及现在虽然不年少但是还是无知的我.站在茫茫的时间轴上不知所措.心里想着远方,却没有找到脚下的路.\n最初开始搞oi的时候并没有想过那些功利的东西.只是一种热爱罢了.但是经历了这么多之后,人总是会变的.于是也有了些背水一站的悲壮.其实如果不是为了做自己喜欢的事情,为什么要付出这么些东西?\n未来是未知的.也许几天也不能再改变些什么了.要相信世界是科学的.然后淡定地去迎接挑战.\n唉,我还是太弱了.\n","permalink":"/diary/dbimport_018/","summary":"好像是省选前最后一天在学校考试了ovo\n第一题构造水.\n第二题我以为是出题人丧心病狂卡常数,然后发现我比std多一个log.然后就和朴素一个分了不开心啊.\n第三题神搜索ovo\n然后不知不觉自己也站到最后一次省选的面前了.这么多年,感觉积累了好多东西,要在接下来的也许是几天也许是几个月里爆发.\n当初年少无知的我以及现在虽然不年少但是还是无知的我.站在茫茫的时间轴上不知所措.心里想着远方,却没有找到脚下的路.\n最初开始搞oi的时候并没有想过那些功利的东西.只是一种热爱罢了.但是经历了这么多之后,人总是会变的.于是也有了些背水一站的悲壮.其实如果不是为了做自己喜欢的事情,为什么要付出这么些东西?\n未来是未知的.也许几天也不能再改变些什么了.要相信世界是科学的.然后淡定地去迎接挑战.\n唉,我还是太弱了.","title":"20150410"},{"content":"#include #include #include using namespace std;\nconst int maxn = 200009;\nint n, tn, tr[maxn][26], ed[maxn], fl[maxn]; int m, pi[maxn], dl[maxn], r[maxn]; char a[maxn], g[maxn];\nvoid trieIns(char* i) { int p(1), l(0); for (; *i; ++ i, ++ l) { int t(*i - 97); if (!tr[p][t]) { tr[p][t] = ++ tn; ed[tn] = 0; memset(tr[tn], 0, sizeof(tr[tn])); } p = tr[p][t]; } ed[p] = l; }\nvoid acaBuild() { static int q[maxn]; int hd(0), tl(1); q[0] = 1; while (hd \u0026lt; tl) { int u(q[hd ++]); for (int i = 0; i \u0026lt; 26; ++ i) if (tr[u][i]) { int v(tr[u][i]), w; for (w = fl[u]; w \u0026amp;\u0026amp; !tr[w][i]; w = fl[w]); if (!w) fl[v] = 1; else fl[v] = tr[w][i]; q[tl ++] = v; } else tr[u][i] = tr[fl[u]][i]; } }\nint getTrans(int p, int w) { for (; p \u0026amp;\u0026amp; !tr[p][w]; p = fl[p]); return p ? tr[p][w] : 1; }\nint getRoot(int x) { register int p, q; for (p = r[x]; p ^ r[p]; p = r[p]); for (; x ^ p; q = r[x], r[x] = p, x = q); return x; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); freopen(\u0026quot;.o1\u0026quot;, \u0026ldquo;w\u0026rdquo;, stdout); #endif\nscanf(\u0026quot;%s%d\u0026quot;, a + 1, \u0026amp;n); m = strlen(a + 1); for (int i = 1; i \u0026lt;= m; ++ i) r[i] = i; tn = 1; memset(tr[1], 0, sizeof(tr[1])); ed[1] = 0; for (int i = 0; i \u0026lt; n; ++ i) { scanf(\u0026quot;%s\u0026quot;, g); trieIns(g); } acaBuild(); pi[0] = 1; for (int i = 1; i \u0026lt;= m; ++ i) { pi[i] = getTrans(pi[getRoot(i - 1)], a[i] - 97); if (ed[pi[i]]) { int le(ed[pi[i]]), p(i); for (int j = 0; j \u0026lt; le; ++ j) { r[p] = getRoot(p - 1); p = r[p]; } pi[i] = pi[p]; } } for (int i = 1; i \u0026lt;= m; ++ i) if (r[i] == i) putchar(a[i]); putchar(10); }\n","permalink":"/code/dbimport_215/","summary":"#include #include #include using namespace std;\nconst int maxn = 200009;\nint n, tn, tr[maxn][26], ed[maxn], fl[maxn]; int m, pi[maxn], dl[maxn], r[maxn]; char a[maxn], g[maxn];\nvoid trieIns(char* i) { int p(1), l(0); for (; *i; ++ i, ++ l) { int t(*i - 97); if (!tr[p][t]) { tr[p][t] = ++ tn; ed[tn] = 0; memset(tr[tn], 0, sizeof(tr[tn])); } p = tr[p][t]; } ed[p] = l; }\nvoid acaBuild() { static int q[maxn]; int hd(0), tl(1); q[0] = 1; while (hd \u0026lt; tl) { int u(q[hd ++]); for (int i = 0; i \u0026lt; 26; ++ i) if (tr[u][i]) { int v(tr[u][i]), w; for (w = fl[u]; w \u0026amp;\u0026amp; !","title":"bzoj3940.cc"},{"content":"自从会了sam,似乎已经不知道acam该怎么写了ovo\n这个题就是强行用ac自动机记录匹配到某个位置的时候的状态.然后如果走到一个终态的话就可以强行删掉一段,然后把当前状态变为上一个状态.\n最初没有想到有可能会连续删除,于是挂了很久.最后用官网上的数据还是过不了第9个点,然后交bzoj居然过了.好神奇.我猜想是迅雷挂了hhh毕竟usaco的数据用wget根本搞不下来好伤心.\n所以我还是太弱ovo\n","permalink":"/oi/dbimport_216/","summary":"自从会了sam,似乎已经不知道acam该怎么写了ovo\n这个题就是强行用ac自动机记录匹配到某个位置的时候的状态.然后如果走到一个终态的话就可以强行删掉一段,然后把当前状态变为上一个状态.\n最初没有想到有可能会连续删除,于是挂了很久.最后用官网上的数据还是过不了第9个点,然后交bzoj居然过了.好神奇.我猜想是迅雷挂了hhh毕竟usaco的数据用wget根本搞不下来好伤心.\n所以我还是太弱ovo","title":"bzoj3940 [Usaco2015 Feb]Censoring"},{"content":"好奇怪的题ovo他们说难度太低ovo\n第一题原来构造这么简单.我还是只会朴素+乱随机ovo遇构造题必出事的节奏啊不爽啊.\n第二题居然是这么水的树剖.\n第三题正解居然就是朴素ovo然后我乱写了个随机化缩小范围的玩意.如果在非windows下就能过ovo然后发现是windows随机数的范围问题.当时想到了然后想物品的范围是2k肯定没有问题.卧类个擦.\n所以我还是太弱啊.马上都要省选了.怎么办啊ovo\n","permalink":"/diary/dbimport_017/","summary":"好奇怪的题ovo他们说难度太低ovo\n第一题原来构造这么简单.我还是只会朴素+乱随机ovo遇构造题必出事的节奏啊不爽啊.\n第二题居然是这么水的树剖.\n第三题正解居然就是朴素ovo然后我乱写了个随机化缩小范围的玩意.如果在非windows下就能过ovo然后发现是windows随机数的范围问题.当时想到了然后想物品的范围是2k肯定没有问题.卧类个擦.\n所以我还是太弱啊.马上都要省选了.怎么办啊ovo","title":"20150409"},{"content":"idy居然会开1d-1d这个坑ovo之前听讲的时候也只是觉得很神奇,没有真正手写过,所以不明觉厉.\n这个东西需要实际问题实际分析.总的思路就是利用决策的单调性.\n对于这题,设f(x)=sqrt(x-j)+a[j].那么显然它是凸的.然后若干个它还可以拼成一个奇怪的凸壳状的分段函数.然后我们要取每段的极值.怎么有种半平面交的变形的感觉.\n然后发现每次插入的函数的j单增,既x单增.于是只需要开一个双端出的队列就好了.然后每次二分一下两个函数的交的x坐标.其它时候可以完全单调性搞定.\n然后算的时候用double会方便很多.\n似乎很有意思啊hhh\n","permalink":"/oi/dbimport_130/","summary":"idy居然会开1d-1d这个坑ovo之前听讲的时候也只是觉得很神奇,没有真正手写过,所以不明觉厉.\n这个东西需要实际问题实际分析.总的思路就是利用决策的单调性.\n对于这题,设f(x)=sqrt(x-j)+a[j].那么显然它是凸的.然后若干个它还可以拼成一个奇怪的凸壳状的分段函数.然后我们要取每段的极值.怎么有种半平面交的变形的感觉.\n然后发现每次插入的函数的j单增,既x单增.于是只需要开一个双端出的队列就好了.然后每次二分一下两个函数的交的x坐标.其它时候可以完全单调性搞定.\n然后算的时候用double会方便很多.\n似乎很有意思啊hhh","title":"bzoj2216 [Poi2011]Lightning Conductor"},{"content":"#include #include #include #include using namespace std;\nconst int maxn = 500009;\nint n, a[maxn], z[maxn], ans, sa[maxn], sr[maxn]; double sqa[maxn];\nvoid pre(int n) { for (int i = 0, j = 0; j \u0026lt;= n; ++ i) for (; j \u0026lt;= i * i \u0026amp;\u0026amp; j \u0026lt;= n; ++ j) z[j] = i; for (int i = 0; i \u0026lt;= n; ++ i) sqa[i] = sqrt(i); }\ninline double fi(int j, int i) { return a[j] + sqa[i - j]; } inline int fii(int j, int i) { return a[j] + z[i - j]; }\nvoid calc(int* ans) { static int q[maxn], dv[maxn]; int hd(0), tl(0); for (int i = 0; i \u0026lt; n; ++ i) { while (hd \u0026lt; tl \u0026amp;\u0026amp; dv[hd + 1] \u0026lt;= i) ++ hd; if (hd \u0026lt; tl \u0026amp;\u0026amp; dv[hd] \u0026lt; i) dv[hd] = i; if (hd \u0026gt;= tl || fi(q[tl - 1], n) \u0026lt; fi(i, n)) { while (hd \u0026lt; tl \u0026amp;\u0026amp; fi(q[tl - 1], dv[tl - 1]) \u0026lt;= fi(i, dv[tl - 1])) \u0026ndash; tl; if (hd \u0026lt; tl) { int l(dv[tl - 1]), r(n); dv[tl] = r; while (l \u0026lt; r) { int md((l + r) \u0026raquo; 1); if (fi(i, md) \u0026gt;= fi(q[tl - 1], md)) { dv[tl] = md; r = md - 1; } else l = md + 1; } } else dv[tl] = i; q[tl ++] = i; dv[tl] = n; } ans[i] = fii(q[hd], i); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); pre(n); for (int i = 0; i \u0026lt; n; ++ i) scanf(\u0026quot;%d\u0026quot;, a + i); calc(sa); for (int i = 0; i \u0026lt; n - i - 1; ++ i) swap(a[i], a[n - i - 1]); calc(sr); for (int i = 0; i \u0026lt; n; ++ i) { int y(max(sa[i], sr[n - i - 1]) - a[n - i - 1]); printf(\u0026quot;%d\\n\u0026quot;, max(y, 0)); } }\n","permalink":"/code/dbimport_129/","summary":"#include #include #include #include using namespace std;\nconst int maxn = 500009;\nint n, a[maxn], z[maxn], ans, sa[maxn], sr[maxn]; double sqa[maxn];\nvoid pre(int n) { for (int i = 0, j = 0; j \u0026lt;= n; ++ i) for (; j \u0026lt;= i * i \u0026amp;\u0026amp; j \u0026lt;= n; ++ j) z[j] = i; for (int i = 0; i \u0026lt;= n; ++ i) sqa[i] = sqrt(i); }\ninline double fi(int j, int i) { return a[j] + sqa[i - j]; } inline int fii(int j, int i) { return a[j] + z[i - j]; }","title":"bzoj2216.cc"},{"content":"明明就是usaco的水题嘛有啥好写的ovo只是想mark一下刚自己想出来的非递归的正常版的tarjan.\n这题思路灰常简单.就tarjan缩scc然后在dag上找一下最长路就完了.\n然后就是非递归的tarjan.考虑平时用栈建树的dfs序的方法,既把一个点的所有儿子扔进栈再递归.然而这个方法不能直接套进tarjan的dfs.因为它的一个儿子可能会对另一个儿子造成影响,有可能甚至直接改变dfs的顺序.\n所以如果更新的时候一个点连出去的点还没有被访问,那么不管它是否已经在栈里,都再把它扔进去一次.这样就保证了访问的顺序.而在再次访问的时候只要判断一下是否已经访问就行了.\n然后对于两个更新,首先如果直接low[p]=dfn[p]的话是不需要专门去用dfn来取min的.然后考虑倒着更新.每个点被退visit栈的时候去更新它的父亲就好.因为它的父亲一定还没有出栈.然后如果是只更新不递归那就直接访问.\n这样的话空间复杂度会变成O(n+m),不过妈妈再也不用担心我暴栈了.而这个方法也比强行模拟系统栈要方便一些.\n开心ovo\n","permalink":"/oi/dbimport_212/","summary":"明明就是usaco的水题嘛有啥好写的ovo只是想mark一下刚自己想出来的非递归的正常版的tarjan.\n这题思路灰常简单.就tarjan缩scc然后在dag上找一下最长路就完了.\n然后就是非递归的tarjan.考虑平时用栈建树的dfs序的方法,既把一个点的所有儿子扔进栈再递归.然而这个方法不能直接套进tarjan的dfs.因为它的一个儿子可能会对另一个儿子造成影响,有可能甚至直接改变dfs的顺序.\n所以如果更新的时候一个点连出去的点还没有被访问,那么不管它是否已经在栈里,都再把它扔进去一次.这样就保证了访问的顺序.而在再次访问的时候只要判断一下是否已经访问就行了.\n然后对于两个更新,首先如果直接low[p]=dfn[p]的话是不需要专门去用dfn来取min的.然后考虑倒着更新.每个点被退visit栈的时候去更新它的父亲就好.因为它的父亲一定还没有出栈.然后如果是只更新不递归那就直接访问.\n这样的话空间复杂度会变成O(n+m),不过妈妈再也不用担心我暴栈了.而这个方法也比强行模拟系统栈要方便一些.\n开心ovo","title":"bzoj3887 [Usaco2015 Jan]Grass Cownoisseur"},{"content":"#include #include #include using namespace std;\nstruct edge { int t; edge *next; };\nconst int maxn = 200009; const int maxe = 300009;\nint n, m, vis[maxn], tscc, fs[maxn], cs[maxn], f[2][maxn]; int tpo[maxn], ind[maxn]; edge ebuf_arr[maxe], *ebuf(ebuf_arr), *head[maxn], *hg[maxn];\ninline void addEdge(edge** head, int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\nvoid tarjanDFS(int po) { static int stc[maxn], stv[maxn], stj[maxn], fr[maxn], d[maxn]; static int dfb[maxn], low[maxn]; int tst(1), dfn(0), tsv(0), tsj(0); vis[stc[tst] = po] = 1; fr[po] = 0; d[po] = 1; while (tst) { int p(stc[tst \u0026ndash;]); if (dfb[p]) continue; for (; tsv \u0026amp;\u0026amp; d[stv[tsv]] \u0026gt;= d[p]; \u0026ndash; tsv) { int q(stv[tsv]); low[fr[q]] = min(low[fr[q]], low[q]); if (dfb[q] == low[q]) { cs[++ tscc] = 0; do { ++ cs[tscc]; fs[stj[tsj]] = tscc; vis[stj[tsj]] = 2; } while (stj[tsj \u0026ndash;] != q); } } stv[++ tsv] = stj[++ tsj] = p; low[p] = dfb[p] = ++ dfn; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (!dfb[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; fr[e-\u0026gt; t] = p; vis[e-\u0026gt; t] = 1; stc[++ tst] = e-\u0026gt; t; } else if (vis[e-\u0026gt; t] == 1) low[p] = min(low[p], dfb[e-\u0026gt; t]); } for (; tsv; \u0026ndash; tsv) { int q(stv[tsv]); low[fr[q]] = min(low[fr[q]], low[q]); if (dfb[q] == low[q]) { cs[++ tscc] = 0; do { ++ cs[tscc]; fs[stj[tsj]] = tscc; vis[stj[tsj]] = 2; } while (stj[tsj \u0026ndash;] != q); } } }\nvoid topSort() { int hd(0), tl(0); memset(ind, 0, sizeof(ind)); for (int i = 1; i \u0026lt;= tscc; ++ i) for (edge* e = hg[i]; e; e = e-\u0026gt; next) ++ ind[e-\u0026gt; t]; for (int i = 1; i \u0026lt;= tscc; ++ i) if (!ind[i]) tpo[tl ++] = i; while (hd \u0026lt; tl) { int p(tpo[hd ++]); for (edge* e = hg[p]; e; e = e-\u0026gt; next) { \u0026ndash; ind[e-\u0026gt; t]; if (!ind[e-\u0026gt; t]) tpo[tl ++] = e-\u0026gt; t; } } }\nvoid DP() { int *g; g = f[0]; for (int i = 1; i \u0026lt;= tscc; ++ i) g[i] = -1; g[fs[1]] = 0; for (int i = 0; i \u0026lt; tscc; ++ i) { int p(tpo[i]); if (g[p] \u0026gt; -1) for (edge *e = hg[p]; e; e = e-\u0026gt; next) g[e-\u0026gt; t] = max(g[e-\u0026gt; t], g[p] + cs[e-\u0026gt; t]); } g = f[1]; for (int i = 1; i \u0026lt;= tscc; ++ i) g[i] = -1; g[fs[1]] = 0; for (int i = tscc - 1; i \u0026gt;= 0; \u0026ndash; i) { int p(tpo[i]); for (edge *e = hg[p]; e; e = e-\u0026gt; next) if (g[e-\u0026gt; t] \u0026gt; -1) g[p] = max(g[p], g[e-\u0026gt; t] + cs[p]); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); memset(head, 0, sizeof(head)); for (int i = 0; i \u0026lt; m; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); addEdge(head, u, v); } memset(vis, 0, sizeof(vis)); tscc = 0; for (int i = 1; i \u0026lt;= n; ++ i) if (!vis[i]) tarjanDFS(i); memset(hg, 0, sizeof(hg)); for (int i = 1; i \u0026lt;= n; ++ i) for (edge* e = head[i]; e; e = e-\u0026gt; next) if (fs[i] ^ fs[e-\u0026gt; t]) addEdge(hg, fs[i], fs[e-\u0026gt; t]); topSort(); DP(); int ans(cs[fs[1]]); for (int i = 1; i \u0026lt;= n; ++ i) for (edge* e = head[i]; e; e = e-\u0026gt; next) if (fs[i] != fs[e-\u0026gt; t]) { int u(fs[i]), v(fs[e-\u0026gt; t]); if (f[0][v] \u0026gt;= 0 \u0026amp;\u0026amp; f[1][u] \u0026gt;= 0) ans = max(ans, f[1][u] + f[0][v] + cs[fs[1]]); } printf(\u0026quot;%d\\n\u0026quot;, ans); }\n","permalink":"/code/dbimport_211/","summary":"#include #include #include using namespace std;\nstruct edge { int t; edge *next; };\nconst int maxn = 200009; const int maxe = 300009;\nint n, m, vis[maxn], tscc, fs[maxn], cs[maxn], f[2][maxn]; int tpo[maxn], ind[maxn]; edge ebuf_arr[maxe], *ebuf(ebuf_arr), *head[maxn], *hg[maxn];\ninline void addEdge(edge** head, int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\nvoid tarjanDFS(int po) { static int stc[maxn], stv[maxn], stj[maxn], fr[maxn], d[maxn]; static int dfb[maxn], low[maxn]; int tst(1), dfn(0), tsv(0), tsj(0); vis[stc[tst] = po] = 1; fr[po] = 0; d[po] = 1; while (tst) { int p(stc[tst \u0026ndash;]); if (dfb[p]) continue; for (; tsv \u0026amp;\u0026amp; d[stv[tsv]] \u0026gt;= d[p]; \u0026ndash; tsv) { int q(stv[tsv]); low[fr[q]] = min(low[fr[q]], low[q]); if (dfb[q] == low[q]) { cs[++ tscc] = 0; do { ++ cs[tscc]; fs[stj[tsj]] = tscc; vis[stj[tsj]] = 2; } while (stj[tsj \u0026ndash;] !","title":"bzoj3887.cc"},{"content":"成功被吊打.\n花了五个小时去写第三题.然后证明是我太弱了.\n第一题知道可以写.计划花2小时写第三题2小时写第一题的.晕啊ovo\n第二题太神了ovo\n第三题ovo正解用上了平面图的性质.然而我没有想到怎么正确地利用这个性质.于是只好去写lct+ett.其实是最后30分钟才想到ett的于是成功地没有写出来.郁闷ing\n所以我太弱啦.\n","permalink":"/diary/dbimport_016/","summary":"成功被吊打.\n花了五个小时去写第三题.然后证明是我太弱了.\n第一题知道可以写.计划花2小时写第三题2小时写第一题的.晕啊ovo\n第二题太神了ovo\n第三题ovo正解用上了平面图的性质.然而我没有想到怎么正确地利用这个性质.于是只好去写lct+ett.其实是最后30分钟才想到ett的于是成功地没有写出来.郁闷ing\n所以我太弱啦.","title":"20150408"},{"content":"听说比一个月之前的策爷高ovo感觉今天什么奇怪的东西也没用啊.\n第一题kd-tree居然是正解.我还以为会被卡ovo\n第二题差不多想到了直线的交,但是没有想到三维空间去,于是觉得此题不可做然后只好最大团了.然后我的最大团又不是mhy那种优越的最大团ovo\n第三题想了一会想出了正解感觉比较trick啊ovo\n然后配cena的时候装了dev搞忘配到cena里了.幸好后来去看了一下,不然就身败名裂了ovo\n所以我还是太弱.\n","permalink":"/diary/dbimport_015/","summary":"听说比一个月之前的策爷高ovo感觉今天什么奇怪的东西也没用啊.\n第一题kd-tree居然是正解.我还以为会被卡ovo\n第二题差不多想到了直线的交,但是没有想到三维空间去,于是觉得此题不可做然后只好最大团了.然后我的最大团又不是mhy那种优越的最大团ovo\n第三题想了一会想出了正解感觉比较trick啊ovo\n然后配cena的时候装了dev搞忘配到cena里了.幸好后来去看了一下,不然就身败名裂了ovo\n所以我还是太弱.","title":"20150407"},{"content":"n = int(raw_input()); gl = raw_input().split(\u0026rsquo; \u0026lsquo;); a = []; a.append(0); s = 0; iz = 0; for i in range(0, n): a.append(int(gl[i]) - 1); s = s + a[i + 1]; if (a[i + 1] \u0026lt; 0): iz = 1; if (n == 1): if (a[1] == -1): print 1; else: print 0; elif (s != n - 2 or iz): print 0; else: fac = []; fac.append(1); for i in range(1, n + 1): fac.append(fac[i - 1] * i); ans = fac[n - 2]; for i in range(1, n + 1): if (a[i] \u0026gt; 0): ans = ans / fac[a[i]]; if (ans \u0026gt; 1e17): ans = 0; print ans;\n","permalink":"/code/dbimport_120/","summary":"n = int(raw_input()); gl = raw_input().split(\u0026rsquo; \u0026lsquo;); a = []; a.append(0); s = 0; iz = 0; for i in range(0, n): a.append(int(gl[i]) - 1); s = s + a[i + 1]; if (a[i + 1] \u0026lt; 0): iz = 1; if (n == 1): if (a[1] == -1): print 1; else: print 0; elif (s != n - 2 or iz): print 0; else: fac = []; fac.append(1); for i in range(1, n + 1): fac.","title":"bzoj1211.py"},{"content":"网没救啦.然后发现看电影居然看得无聊了.于是去愉快地刷题了ovo\n来复习一下一个叫prufer序列的东西.它是用来做生成树计数的.考虑一棵有标号的树,每次把叶子中编号最大的一个节点的唯一一条边的另一边扔进序列尾部,然后把它扯了,直到只剩俩点.然后发现这个序列对于一棵树是唯一的,且一个序列对应唯一的树.且这个序列的取值全都是1到n的数,无相互限制.这也是为啥完全图的生成树个数是nn-2.\n然后这个题是给定度数嘛,于是就是对于每个点要求在prufer序列中出现次数一定.那也很好做的啦.\n然后要注意的是有一堆无解的情况要先判断一下.然后听说写c++要小心暴long long.我强行python无压力啦ovo\n","permalink":"/oi/dbimport_119/","summary":"网没救啦.然后发现看电影居然看得无聊了.于是去愉快地刷题了ovo\n来复习一下一个叫prufer序列的东西.它是用来做生成树计数的.考虑一棵有标号的树,每次把叶子中编号最大的一个节点的唯一一条边的另一边扔进序列尾部,然后把它扯了,直到只剩俩点.然后发现这个序列对于一棵树是唯一的,且一个序列对应唯一的树.且这个序列的取值全都是1到n的数,无相互限制.这也是为啥完全图的生成树个数是nn-2.\n然后这个题是给定度数嘛,于是就是对于每个点要求在prufer序列中出现次数一定.那也很好做的啦.\n然后要注意的是有一堆无解的情况要先判断一下.然后听说写c++要小心暴long long.我强行python无压力啦ovo","title":"bzoj1211 [HNOI2004]树的计数"},{"content":"#include #include #include #include using namespace std;\nstruct doll { int w, v, e; inline void read() { scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;w, \u0026amp;v, \u0026amp;e); } };\nconst int maxn = 1009; const int tv = 1000;\nint n, q, bsz, fa[maxn][maxn], fr[maxn][maxn], f[maxn][maxn]; doll d[maxn];\nvoid sglDP(int* f, doll d) { int e(d. e); for (int i = 1; i \u0026lt;= e; i \u0026laquo;= 1) { e -= i; for (int j = tv; j \u0026gt;= i * d. w; \u0026ndash; j) f[j] = max(f[j], f[j - i * d. w] + i * d. v); } if (e) for (int j = tv; j \u0026gt;= e * d. w; \u0026ndash; j) f[j] = max(f[j], f[j - e * d. w] + e * d. v); }\nvoid preBlock(int le, int re) { static int tmp[maxn]; memset(tmp, 0, sizeof(tmp)); for (int i = 0; i \u0026lt;= tv; ++ i) for (int j = 0; i + j \u0026lt;= tv; ++ j) tmp[i + j] = max(tmp[i + j], fa[le - 1][i] + fr[re + 1][j]); for (int i = le; i \u0026lt;= re; ++ i) { memcpy(f[i], tmp, sizeof(tmp)); for (int j = le; j \u0026lt;= re; ++ j) if (i != j) sglDP(f[i], d[j]); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); for (int i = 1; i \u0026lt;= n; ++ i) d[i]. read(); memset(fa[0], 0, sizeof(fa[0])); for (int i = 1; i \u0026lt;= n; ++ i) { memcpy(fa[i], fa[i - 1], sizeof(fa[i])); sglDP(fa[i], d[i]); } memset(fr[n + 1], 0, sizeof(fr[n + 1])); for (int i = n; i; -- i) { memcpy(fr[i], fr[i + 1], sizeof(fr[i])); sglDP(fr[i], d[i]); } bsz = (int)sqrt(n) + 1; for (int i = 1; i \u0026lt;= n; i += bsz) preBlock(i, min(n, i + bsz - 1)); scanf(\u0026quot;%d\u0026quot;, \u0026amp;q); while (q --) { int a, b; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;a, \u0026amp;b); printf(\u0026quot;%d\\n\u0026quot;, f[a + 1][b]); } }\n","permalink":"/code/dbimport_177/","summary":"#include #include #include #include using namespace std;\nstruct doll { int w, v, e; inline void read() { scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;w, \u0026amp;v, \u0026amp;e); } };\nconst int maxn = 1009; const int tv = 1000;\nint n, q, bsz, fa[maxn][maxn], fr[maxn][maxn], f[maxn][maxn]; doll d[maxn];\nvoid sglDP(int* f, doll d) { int e(d. e); for (int i = 1; i \u0026lt;= e; i \u0026laquo;= 1) { e -= i; for (int j = tv; j \u0026gt;= i * d.","title":"bzoj3163.cc"},{"content":"似乎是去年省选集训的时候见过啊ovo还记得当年因为把背包写错了所以被唱歌了ovo\n比较有意思的题.这个题询问数是骗人的ovo其实是预处理然后O(1)询问.\n把如果强行预处理的话时间是O(n3)的.于是考虑一些奇怪的黑暗.把物品强行分块.对于每一个块,可以知道它左边的总答案,右边的总答案.这个是可以O(n2)的.(二进制背包的log就忽略了)然后把左边和右边合并一下,这个是平方的.然后对于块内的每个物品,把其它的物品拿来强行跑一遍背包,这个对于一个物品的复杂度是O(n1.5)的.于是就奇妙地少了O(n0.5)的复杂度.然后就可过了ovo\n我当年是怎么想到的ovo还是我当年黑暗过去了ovo\n","permalink":"/oi/dbimport_178/","summary":"似乎是去年省选集训的时候见过啊ovo还记得当年因为把背包写错了所以被唱歌了ovo\n比较有意思的题.这个题询问数是骗人的ovo其实是预处理然后O(1)询问.\n把如果强行预处理的话时间是O(n3)的.于是考虑一些奇怪的黑暗.把物品强行分块.对于每一个块,可以知道它左边的总答案,右边的总答案.这个是可以O(n2)的.(二进制背包的log就忽略了)然后把左边和右边合并一下,这个是平方的.然后对于块内的每个物品,把其它的物品拿来强行跑一遍背包,这个对于一个物品的复杂度是O(n1.5)的.于是就奇妙地少了O(n0.5)的复杂度.然后就可过了ovo\n我当年是怎么想到的ovo还是我当年黑暗过去了ovo","title":"bzoj3163 [Heoi2013]Eden的新背包问题"},{"content":"后缀数组的基础题ovo好久没写sa了还自己yy了半天ovo\n为啥感觉每次写sa写得都不一样ovo\n求出height数组之后,如果一个位置的height大于上一个位置的,那么高出来的这一截都是新的一个答案.那么直接朴素地去找它出现了多少次就好了.我相信出题人没有办法构造数据把我卡到三方.\n所以各种题都要再复习一下ovo\n","permalink":"/oi/dbimport_132/","summary":"后缀数组的基础题ovo好久没写sa了还自己yy了半天ovo\n为啥感觉每次写sa写得都不一样ovo\n求出height数组之后,如果一个位置的height大于上一个位置的,那么高出来的这一截都是新的一个答案.那么直接朴素地去找它出现了多少次就好了.我相信出题人没有办法构造数据把我卡到三方.\n所以各种题都要再复习一下ovo","title":"bzoj2251 [2010Beijing Wc]外星联络"},{"content":"#include #include #include using namespace std;\nconst int maxn = 3009;\nint n, a[maxn], sa[maxn], rk[maxn], hi[maxn], ho[maxn]; char g[maxn];\ninline bool equStr(int a, int b, int l) { if (rk[a] \u0026gt; rk[b]) return 0; else if (a + l \u0026gt;= n \u0026amp;\u0026amp; b + l \u0026gt;= n) return 1; else if (a + l \u0026gt;= n || b + l \u0026gt;= n) return 0; else return rk[a + l] == rk[b + l]; }\nvoid suffixArray() { static int w[maxn], nr[maxn], b[maxn]; memset(w, 0, sizeof(w)); for (int i = 0; i \u0026lt; n; ++ i) ++ w[rk[i] = a[i]]; w[1] += w[0]; for (int i = 0; i \u0026lt; n; ++ i) sa[\u0026ndash; w[rk[i]]] = i; for (int l = 1; l \u0026lt; n; l \u0026laquo;= 1) { for (int i = 0; i \u0026lt; l; ++ i) b[i] = n - i - 1; for (int i = 0, j = l; i \u0026lt; n; ++ i) if (sa[i] \u0026gt;= l) b[j ++] = sa[i] - l; memset(w, 0, sizeof(w)); for (int i = 0; i \u0026lt; n; ++ i) ++ w[rk[i]]; for (int i = 1; i \u0026lt; n; ++ i) w[i] += w[i - 1]; for (int i = n - 1; i \u0026gt;= 0; \u0026ndash; i) sa[\u0026ndash; w[rk[b[i]]]] = b[i]; nr[sa[0]] = 0; for (int i = 1; i \u0026lt; n; ++ i) if (equStr(sa[i], sa[i - 1], l)) nr[sa[i]] = nr[sa[i - 1]]; else nr[sa[i]] = nr[sa[i - 1]] + 1; memcpy(rk, nr, sizeof(rk)); } for (int i = 0; i \u0026lt; n; ++ i) ho[sa[i]] = i; for (int i = 0; i \u0026lt; n; ++ i) if (ho[i] \u0026lt; n - 1) { int p(ho[i]), j(sa[ho[i] + 1]); hi[p] = i ? max(hi[ho[i - 1]] - 1, 0) : 0; while (i + hi[p] \u0026lt; n \u0026amp;\u0026amp; j + hi[p] \u0026lt; n \u0026amp;\u0026amp; a[i + hi[p]] == a[j + hi[p]]) ++ hi[p]; } }\nvoid cntAns() { for (int i = 0, pr = 0; i \u0026lt; n - 1; pr = hi[i ++]) { for (int j = pr + 1; j \u0026lt;= hi[i]; ++ j) { int k; for (k = i; k \u0026lt; n - 1 \u0026amp;\u0026amp; hi[k] \u0026gt;= j; ++ k); printf(\u0026quot;%d\\n\u0026quot;, k - i + 1); } } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%s\u0026quot;, \u0026amp;n, g); for (int i = 0; i \u0026lt; n; ++ i) a[i] = g[i] - 48; suffixArray(); cntAns(); }\n","permalink":"/code/dbimport_131/","summary":"#include #include #include using namespace std;\nconst int maxn = 3009;\nint n, a[maxn], sa[maxn], rk[maxn], hi[maxn], ho[maxn]; char g[maxn];\ninline bool equStr(int a, int b, int l) { if (rk[a] \u0026gt; rk[b]) return 0; else if (a + l \u0026gt;= n \u0026amp;\u0026amp; b + l \u0026gt;= n) return 1; else if (a + l \u0026gt;= n || b + l \u0026gt;= n) return 0; else return rk[a + l] == rk[b + l]; }","title":"bzoj2251.cc"},{"content":"#include #include #include #include using namespace std;\nconst int buf_len = 4567; char buf[buf_len], *bufb(buf), *bufe(bufb + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; }\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct edge { int t, v; edge *next; };\nconst int maxn = 1000009; const int maxl = 25; const int inf = 0x3f3f3f3f;\nnamespace rtree { int n, d[maxn], ut[maxn][maxl]; int dfo[maxn], dfb[maxn]; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf(ebuf_arr), *head[maxn];\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; } void init() { readInt(n); memset(head, 0, sizeof(head)); for (int i = 1; i \u0026lt; n; ++ i) { int u, v; readInt(u); readInt(v); addEdge(u, v); addEdge(v, u); } static int stc[maxn]; int tst(1), dfn(0); memset(d, 0, sizeof(d)); d[stc[1] = 1] = 1; while (tst) { int p(stc[tst --]); dfo[dfb[p] = ++ dfn] = p; for (int i = 1; i \u0026lt; maxl; ++ i) ut[p][i] = ut[ut[p][i - 1]][i - 1]; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (!d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; ut[e-\u0026gt; t][0] = p; stc[++ tst] = e-\u0026gt; t; } } } int LCA(int u, int v) { if (d[u] \u0026lt; d[v]) swap(u, v); for (int i = maxl - 1; i \u0026gt;= 0; -- i) if (d[ut[u][i]] \u0026gt;= d[v]) u = ut[u][i]; if (u == v) return u; for (int i = maxl - 1; i \u0026gt;= 0; -- i) if (ut[u][i] != ut[v][i]) { u = ut[u][i]; v = ut[v][i]; } return ut[u][0]; } inline bool cmpDfn(const int\u0026amp; a, const int\u0026amp; b) { return dfb[a] \u0026lt; dfb[b]; } inline int dis(int u, int v) { return d[u] - d[v]; } };\nnamespace ftree { int n, q[maxn], stc[maxn], tst; int tiq(0), ciq[maxn] = {0}; int sz[maxn], f[maxn][3], g[maxn][3], dfo[maxn]; int sf, sg; dint tot; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf, *head[maxn];\ninline void addEdge(int u, int v, int w) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; v = w; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; } void DP() { int dfn(0); tot = 0; stc[tst = 1] = 1; sf = inf, sg = -inf; tot = 0; while (tst) { int p(stc[tst --]); dfo[++ dfn] = p; for (edge* e = head[p]; e; e = e-\u0026gt; next) stc[++ tst] = e-\u0026gt; t; } for (int i = dfn; i; -- i) { int p(dfo[i]); sz[p] = (ciq[p] == tiq); f[p][0] = f[p][1] = -1; g[p][0] = g[p][1] = -1; if (ciq[p] == tiq) f[p][0] = g[p][0] = 0; for (edge* e = head[p]; e; e = e-\u0026gt; next) { tot += _l e-\u0026gt; v * sz[e-\u0026gt; t] * (n - sz[e-\u0026gt; t]); sz[p] += sz[e-\u0026gt; t]; int vn(f[e-\u0026gt; t][0] + e-\u0026gt; v); if (f[p][0] == -1 || vn \u0026lt; f[p][0]) { f[p][1] = f[p][0]; f[p][0] = vn; } else if (f[p][1] == -1 || vn \u0026lt; f[p][1]) f[p][1] = vn; if (f[p][1] \u0026gt; -1) sf = min(sf, f[p][0] + f[p][1]); vn = g[e-\u0026gt; t][0] + e-\u0026gt; v; if (g[p][0] == -1 || vn \u0026gt; g[p][0]) { g[p][1] = g[p][0]; g[p][0] = vn; } else if (g[p][1] == -1 || vn \u0026gt; g[p][1]) g[p][1] = vn; if (g[p][1] \u0026gt; -1) sg = max(sg, g[p][0] + g[p][1]); } } f[1][2] = g[1][2] = -1; for (int i = 1; i \u0026lt;= dfn; ++ i) { int p(dfo[i]); if (f[p][2] \u0026gt; -1) sf = min(sf, f[p][0] + f[p][2]); if (g[p][2] \u0026gt; -1) sg = max(sg, g[p][0] + g[p][2]); for (edge* e = head[p]; e; e = e-\u0026gt; next) { int vn; if (f[e-\u0026gt; t][0] + e-\u0026gt; v == f[p][0]) vn = f[p][1]; else vn = f[p][0]; if (vn == -1 || f[p][2] \u0026lt; vn) vn = f[p][2]; if (vn \u0026gt; -1) vn += e-\u0026gt; v; f[e-\u0026gt; t][2] = vn; if (g[e-\u0026gt; t][0] + e-\u0026gt; v == g[p][0]) vn = g[p][1]; else vn = g[p][0]; if (vn == -1 || g[p][2] \u0026gt; vn) vn = g[p][2]; if (vn \u0026gt; -1) vn += e-\u0026gt; v; g[e-\u0026gt; t][2] = vn; } } printf(lld \u0026quot; %d %d\\n\u0026quot;, tot, sf, sg); } void sov() { readInt(n); ++ tiq; for (int i = 0; i \u0026lt; n; ++ i) { readInt(q[i]); ciq[q[i]] = tiq; } sort(q, q + n, rtree :: cmpDfn); tst = 1; head[stc[tst] = 1] = 0; ebuf = ebuf_arr; for (int i = 0; i \u0026lt; n; ++ i) { int p(q[i]), a(rtree :: LCA(p, stc[tst])); if (a == stc[tst]) { if (p != stc[tst]) { head[p] = 0; stc[++ tst] = p; } } else { while (rtree :: d[stc[tst - 1]] \u0026gt;= rtree :: d[a]) { addEdge(stc[tst - 1], stc[tst], rtree :: dis(stc[tst], stc[tst - 1])); -- tst; } if (a != stc[tst]) { head[a] = 0; addEdge(a, stc[tst], rtree :: dis(stc[tst], a)); stc[tst] = a; } head[p] = 0; stc[++ tst] = p; } } while (tst \u0026gt; 1) { addEdge(stc[tst - 1], stc[tst], rtree :: dis(stc[tst], stc[tst - 1])); -- tst; } DP(); } };\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nrtree :: init(); int q; readInt(q); while (q --) ftree :: sov(); }\n","permalink":"/code/dbimport_203/","summary":"#include #include #include #include using namespace std;\nconst int buf_len = 4567; char buf[buf_len], *bufb(buf), *bufe(bufb + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; }\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)","title":"bzoj3611.cc"},{"content":"继续填idy的坑ovo\n这个题就是比sdoi那个题要麻烦一些.于是我决定把虚树建成真正的树来跑dp.然后这个树形dp似乎没啥麻烦的东西.就是给你一棵有关键点的树求所有点对的距离和,距离min和max.\n常数又被吊打ovo无语喽.\n","permalink":"/oi/dbimport_204/","summary":"继续填idy的坑ovo\n这个题就是比sdoi那个题要麻烦一些.于是我决定把虚树建成真正的树来跑dp.然后这个树形dp似乎没啥麻烦的东西.就是给你一棵有关键点的树求所有点对的距离和,距离min和max.\n常数又被吊打ovo无语喽.","title":"bzoj3611 [Heoi2014]大工程"},{"content":"idy又开坑辣.居然开的是虚树.\n然后发现我好像还是不会ovo我太弱了ovo而且idy自带常数优化+代码长度优化根本打不过ovo\n这个题算是相对比较容易的虚树吧.强行模拟一遍缩掉所有没有用的边之后的dfs就好了.中间要讨论一下几个点的祖先关系.yy起来还比较清晰.\n然后似乎就没有啥要说的了ovo\nUpd:早上起来脑洞一开发现似乎不需要讨论当前的点已经在栈里的情况啊ovo\n","permalink":"/oi/dbimport_134/","summary":"idy又开坑辣.居然开的是虚树.\n然后发现我好像还是不会ovo我太弱了ovo而且idy自带常数优化+代码长度优化根本打不过ovo\n这个题算是相对比较容易的虚树吧.强行模拟一遍缩掉所有没有用的边之后的dfs就好了.中间要讨论一下几个点的祖先关系.yy起来还比较清晰.\n然后似乎就没有啥要说的了ovo\nUpd:早上起来脑洞一开发现似乎不需要讨论当前的点已经在栈里的情况啊ovo","title":"bzoj2286 [Sdoi2011]消耗战"},{"content":"#include #include #include using namespace std;\nstruct edge { int t, v; edge *next; };\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 250009; const int maxl = 19; const int inf = 0x3f3f3f3f; const dint dinf = 0x3f3f3f3f3f3f3f3fll;\nint n, m; int d[maxn], dfb[maxn], dfe[maxn], dfo[maxn]; int ut[maxn][maxl], uv[maxn][maxl]; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf(ebuf_arr), *head[maxn];\ninline void addEdge(int u, int v, int w) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; v = w; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\nvoid buildTree() { static int stc[maxn]; int tst(1), dfn(0); memset(d, 0, sizeof(d)); d[stc[tst] = 1] = 1; while (tst) { int p(stc[tst \u0026ndash;]); dfo[dfb[p] = ++ dfn] = p; dfe[p] = dfb[p]; for (int i = 1; i \u0026lt; maxl; ++ i) { ut[p][i] = ut[ut[p][i - 1]][i - 1]; uv[p][i] = min(uv[p][i - 1], uv[ut[p][i - 1]][i - 1]); } for (edge* e = head[p]; e; e = e-\u0026gt; next) if (!d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; ut[e-\u0026gt; t][0] = p; uv[e-\u0026gt; t][0] = e-\u0026gt; v; stc[++ tst] = e-\u0026gt; t; } } for (int i = n; i \u0026gt; 1; \u0026ndash; i) { int p(dfo[i]), f(ut[p][0]); if (dfe[f] \u0026lt; dfe[p]) dfe[f] = dfe[p]; } }\ninline bool cmpDfn(const int\u0026amp; a, const int\u0026amp; b) { return dfb[a] \u0026lt; dfb[b]; }\nint LCA(int u, int v) { if (d[u] \u0026lt; d[v]) swap(u, v); for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (d[ut[u][i]] \u0026gt;= d[v]) u = ut[u][i]; if (u == v) return u; for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (ut[u][i] != ut[v][i]) { u = ut[u][i]; v = ut[v][i]; } return ut[u][0]; } int minVal(int u, int dx) { int ans(inf); for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (d[ut[u][i]] \u0026gt;= dx) { ans = min(ans, uv[u][i]); u = ut[u][i]; } return ans; }\ndint f[maxn]; inline void upF(int u, int a) { f[u] = min(f[u], _l minVal(u, d[a])); } dint DP() { static int stc[maxn], q[maxn]; int t, tst(1); scanf(\u0026quot;%d\u0026quot;, \u0026amp;t); for (int i = 0; i \u0026lt; t; ++ i) scanf(\u0026quot;%d\u0026quot;, q + i); sort(q, q + t, cmpDfn); f[stc[1] = 1] = 0; for (int i = 0; i \u0026lt; t; ++ i) { int p(q[i]), a(LCA(p, stc[tst])); if (a == stc[tst]) { if (p != stc[tst]) { stc[++ tst] = p; f[p] = dinf; } } else if (a == p) { while (d[stc[tst]] \u0026gt; d[p]) { upF(stc[tst], stc[tst - 1]); f[stc[tst - 1]] += f[stc[tst]]; \u0026ndash; tst; } if (p != stc[tst]) { stc[++ tst] = p; f[p] = 0; } else f[p] = dinf; } else { while (d[stc[tst - 1]] \u0026gt;= d[a]) { upF(stc[tst], stc[tst - 1]); f[stc[tst - 1]] += f[stc[tst]]; \u0026ndash; tst; } if (d[stc[tst]] \u0026gt; d[a]) { upF(stc[tst], a); f[a] = f[stc[tst]]; stc[tst] = a; } stc[++ tst] = p; f[p] = dinf; } } while (tst \u0026gt; 1) { upF(stc[tst], stc[tst - 1]); f[stc[tst - 1]] += f[stc[tst]]; \u0026ndash; tst; } return f[1]; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); for (int i = 1; i \u0026lt; n; ++ i) { int u, v, w; scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;u, \u0026amp;v, \u0026amp;w); addEdge(u, v, w); addEdge(v, u, w); } buildTree(); scanf(\u0026quot;%d\u0026quot;, \u0026amp;m); while (m --) printf(lld \u0026quot;\\n\u0026quot;, DP()); }\n","permalink":"/code/dbimport_133/","summary":"#include #include #include using namespace std;\nstruct edge { int t, v; edge *next; };\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 250009; const int maxl = 19; const int inf = 0x3f3f3f3f; const dint dinf = 0x3f3f3f3f3f3f3f3fll;\nint n, m; int d[maxn], dfb[maxn], dfe[maxn], dfo[maxn]; int ut[maxn][maxl], uv[maxn][maxl]; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf(ebuf_arr), *head[maxn];","title":"bzoj2286.cc"},{"content":"gui vfk.\n在hdsdfz听讲过的题.\n可持久化seg tree优化建边.好像一句话就能说清楚啊.\n然后证明了我的网络流的姿势严重不科学ovo\n然后bzoj上样例居然是图片ovo于是附上手打的样例ovo\n10 0 1 7 3 9 2 7 4 0 9 10 5 1 0 4 2 10 2 7 9 1 5 7 2 6 3 5 3 6 2 6 6 4 1 8 1 6 1 6 0 6 5 2 2 5 0 9 3 5 1 3 0 2 5 5 6 7 1 1 2 ","permalink":"/oi/dbimport_180/","summary":"gui vfk.\n在hdsdfz听讲过的题.\n可持久化seg tree优化建边.好像一句话就能说清楚啊.\n然后证明了我的网络流的姿势严重不科学ovo\n然后bzoj上样例居然是图片ovo于是附上手打的样例ovo\n10 0 1 7 3 9 2 7 4 0 9 10 5 1 0 4 2 10 2 7 9 1 5 7 2 6 3 5 3 6 2 6 6 4 1 8 1 6 1 6 0 6 5 2 2 5 0 9 3 5 1 3 0 2 5 5 6 7 1 1 2 ","title":"bzoj3218 a + b problem"},{"content":"#include #include #include using namespace std;\nstruct seg { int id; seg *ls, *rs; }; struct block { int b, w, p, l, r, a; int lid, rid, mid; inline void read() { scanf(\u0026quot;%d%d%d%d%d%d\u0026quot;, \u0026amp;a, \u0026amp;b, \u0026amp;w, \u0026amp;l, \u0026amp;r, \u0026amp;p); } }; struct edge { int t, c; edge *next, *rv; };\nconst int maxn = 5009; const int maxnd = 90009; const int maxe = 400009; const int inf = 0x3f3f3f3f;\nint n, tnid, st, te; int va[maxn * 3], tv, ans; block a[maxn]; seg sbuf_arr[maxn * 41], *sbuf(sbuf_arr), *rt; edge ebuf_arr[maxe], *ebuf(ebuf_arr), *head[maxnd];\ninline edge* allocEdge(int u, int v, int c) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; c = c; ebuf-\u0026gt; next = head[u]; return head[u] = ebuf ++; } inline void addEdge(int u, int v, int c) { edge *a(allocEdge(u, v, c)); edge *b(allocEdge(v, u, 0)); a-\u0026gt; rv = b; b-\u0026gt; rv = a; }\n#define midp ((pl+pr)\u0026raquo;1) #define lson(p) ((p)?(p-\u0026gt;ls):0) #define rson(p) ((p)?(p-\u0026gt;rs):0) inline void sgtQry(seg* p, int oid, int l, int r, int pl, int pr) { if (!p) return; else if (pl == l \u0026amp;\u0026amp; pr == r) addEdge(oid, p-\u0026gt; id, inf); else if (r \u0026lt;= midp) sgtQry(p-\u0026gt; ls, oid, l, r, pl, midp); else if (l \u0026gt;= midp) sgtQry(p-\u0026gt; rs, oid, l, r, midp, pr); else sgtQry(p-\u0026gt; ls, oid, l, midp, pl, midp), sgtQry(p-\u0026gt; rs, oid, midp, r, midp, pr); } inline seg* sgtChg(seg* q, int po, int pi, int pl, int pr) { seg *p(sbuf ++); p-\u0026gt; id = ++ tnid; if (pl + 1 == pr) { addEdge(p-\u0026gt; id, a[pi]. rid, inf); if (q) addEdge(p-\u0026gt; id, q-\u0026gt; id, inf); } else { p-\u0026gt; ls = lson(q), p-\u0026gt; rs = rson(q); if (po \u0026lt; midp) p-\u0026gt; ls = sgtChg(lson(q), po, pi, pl, midp); else p-\u0026gt; rs = sgtChg(rson(q), po, pi, midp, pr); if (p-\u0026gt; ls) addEdge(p-\u0026gt; id, p-\u0026gt; ls-\u0026gt; id, inf); if (p-\u0026gt; rs) addEdge(p-\u0026gt; id, p-\u0026gt; rs-\u0026gt; id, inf); } return p; }\nint d[maxnd]; bool bfsBuild() { static int q[maxnd]; int hd(0), tl(1); memset(d, 0, sizeof(d)); d[q[0] = st] = 1; while (hd \u0026lt; tl \u0026amp;\u0026amp; !d[te]) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; c \u0026amp;\u0026amp; !d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; q[tl ++] = e-\u0026gt; t; } } return d[te]; } int dfsFind(int p, int c) { if (p == te) return c; int s(0); edge *e; for (e = head[p]; e \u0026amp;\u0026amp; c; e = e-\u0026gt; next) if (e-\u0026gt; c \u0026amp;\u0026amp; d[e-\u0026gt; t] == d[p] + 1) { int x(dfsFind(e-\u0026gt; t, min(c, e-\u0026gt; c))); c -= x; s += x; e-\u0026gt; c -= x; e-\u0026gt; rv-\u0026gt; c += x; } if (!e) d[p] = 0; return s; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); rt = 0; tnid = tv = 0; ans = 0; st = ++ tnid, te = ++ tnid; for (int i = 0; i \u0026lt; n; ++ i) { a[i]. read(); va[tv ++] = a[i]. l; va[tv ++] = a[i]. r; va[tv ++] = a[i]. a; a[i]. lid = a[i]. rid = ++ tnid; a[i]. mid = ++ tnid; //a[i]. rid = ++ tnid; ans += a[i]. b + a[i]. w; } sort(va, va + tv); tv = unique(va, va + tv) - va; for (int i = 0; i \u0026lt; n; ++ i) { a[i]. l = lower_bound(va, va + tv, a[i]. l) - va; a[i]. r = lower_bound(va, va + tv, a[i]. r) - va; a[i]. a = lower_bound(va, va + tv, a[i]. a) - va; } for (int i = 0; i \u0026lt; n; ++ i) { addEdge(st, a[i]. lid, a[i]. b); //addEdge(a[i]. lid, a[i]. rid, inf); addEdge(a[i]. rid, te, a[i]. w); addEdge(a[i]. lid, a[i]. mid, a[i]. p); sgtQry(rt, a[i]. mid, a[i]. l, a[i]. r + 1, 0, tv); rt = sgtChg(rt, a[i]. a, i, 0, tv); } while (bfsBuild()) ans -= dfsFind(st, inf); printf(\u0026quot;%d\\n\u0026quot;, ans); }\n","permalink":"/code/dbimport_179/","summary":"#include #include #include using namespace std;\nstruct seg { int id; seg *ls, *rs; }; struct block { int b, w, p, l, r, a; int lid, rid, mid; inline void read() { scanf(\u0026quot;%d%d%d%d%d%d\u0026quot;, \u0026amp;a, \u0026amp;b, \u0026amp;w, \u0026amp;l, \u0026amp;r, \u0026amp;p); } }; struct edge { int t, c; edge *next, *rv; };\nconst int maxn = 5009; const int maxnd = 90009; const int maxe = 400009; const int inf = 0x3f3f3f3f;","title":"bzoj3218.cc"},{"content":"有点像xyz在wc的时候讲的动态图连通性问题.不过这个看上去要水些啊.\n考虑建一棵生成树,那么所有剩余的边覆盖了的边就不是桥.如果没有被覆盖就是桥.\n于是这个题可以倒过来,支持加边和查询两点间没有被覆盖的边数.\n似乎挺水.\n完了.\n","permalink":"/oi/dbimport_169/","summary":"有点像xyz在wc的时候讲的动态图连通性问题.不过这个看上去要水些啊.\n考虑建一棵生成树,那么所有剩余的边覆盖了的边就不是桥.如果没有被覆盖就是桥.\n于是这个题可以倒过来,支持加边和查询两点间没有被覆盖的边数.\n似乎挺水.\n完了.","title":"bzoj2896 桥"},{"content":"#include #include #include #include using namespace std;\ntypedef pair \u0026lt;int, int\u0026gt; epr; typedef set erbt;\nstruct seg { int s, z, l, r; seg *ls, *rs; }; struct edge { int t; edge *next; }; struct oper { int t, u, v, s; };\nconst int maxn = 30009; const int maxq = 40009; const int maxe = 100009;\nint n, m, q, r[maxn]; int fa[maxn], d[maxn], sz[maxn], tc, fc[maxn], ch[maxn], cl[maxn]; seg sbuf_arr[maxn \u0026laquo; 2], *sbuf(sbuf_arr), *rt[maxn]; oper o[maxq]; erbt re; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf(ebuf_arr), *head[maxn];\n#define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1) inline seg* sgtBuild(int l, int r) { seg p(sbuf ++); p-\u0026gt; l = l, p-\u0026gt; r = r; p-\u0026gt; s = r - l; p-\u0026gt; z = 0; if (l + 1 \u0026lt; r) { p-\u0026gt; ls = sgtBuild(l, midp(p)); p-\u0026gt; rs = sgtBuild(midp(p), r); } return p; } inline void sgtChg(seg p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) p-\u0026gt; z = 1, p-\u0026gt; s = 0; else if (p-\u0026gt; z) return; else { if (r \u0026lt;= midp(p)) sgtChg(p-\u0026gt; ls, l, r); else if (l \u0026gt;= midp(p)) sgtChg(p-\u0026gt; rs, l, r); else sgtChg(p-\u0026gt; ls, l, midp(p)), sgtChg(p-\u0026gt; rs, midp(p), r); p-\u0026gt; s = p-\u0026gt; ls-\u0026gt; s + p-\u0026gt; rs-\u0026gt; s; } } inline int sgtQry(seg* p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) return p-\u0026gt; s; else if (p-\u0026gt; z) return 0; else if (r \u0026lt;= midp(p)) return sgtQry(p-\u0026gt; ls, l, r); else if (l \u0026gt;= midp(p)) return sgtQry(p-\u0026gt; rs, l, r); else return sgtQry(p-\u0026gt; ls, l, midp(p)) + sgtQry(p-\u0026gt; rs, midp(p), r); }\n#define cpos(x) (d[x]-d[ch[fc[x]]]) void ersBridge(int u, int v) { while (fc[u] ^ fc[v]) if (d[ch[fc[u]]] \u0026gt; d[ch[fc[v]]]) { sgtChg(rt[fc[u]], 0, cpos(u) + 1); u = fa[ch[fc[u]]]; } else { sgtChg(rt[fc[v]], 0, cpos(v) + 1); v = fa[ch[fc[v]]]; } if (d[u] \u0026lt; d[v]) sgtChg(rt[fc[u]], cpos(u) + 1, cpos(v) + 1); else if (d[v] \u0026lt; d[u]) sgtChg(rt[fc[v]], cpos(v) + 1, cpos(u) + 1); }\nint getRoot(int x) { register int p, q; for (p = r[x]; p ^ r[p]; p = r[p]); for (; x ^ p; q = r[x], r[x] = p, x = q); return x; }\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\nvoid buildTree() { for (int i = 1; i \u0026lt;= n; ++ i) r[i] = i; static epr rme[maxe]; int tre(0); for (erbt :: iterator i = re. begin(); i != re. end(); ++ i) { int u(i-\u0026gt; first), v(i-\u0026gt; second); if (getRoot(u) != getRoot(v)) { addEdge(u, v); addEdge(v, u); r[getRoot(u)] = getRoot(v); } else rme[tre ++] = i; } static int q[maxn]; int hd(0), tl(1); memset(d, 0, sizeof(d)); d[q[0] = 1] = 1; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge e = head[p]; e; e = e-\u0026gt; next) if (!d[e-\u0026gt; t]) { fa[e-\u0026gt; t] = p; d[e-\u0026gt; t] = d[p] + 1; q[tl ++] = e-\u0026gt; t; } } tc = 0; for (int i = tl - 1; i \u0026gt;= 0; \u0026ndash; i) { int p(q[i]), z(-1); sz[p] = 1; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; t != fa[p]) { sz[p] += sz[e-\u0026gt; t]; if (z == -1 || sz[e-\u0026gt; t] \u0026gt; sz[z]) z = e-\u0026gt; t; } if (z == -1) cl[fc[p] = ++ tc] = 1; else ++ cl[fc[p] = fc[z]]; ch[fc[p]] = p; } for (int i = 1; i \u0026lt;= tc; ++ i) rt[i] = sgtBuild(0, cl[i]); for (int i = 0; i \u0026lt; tre; ++ i) ersBridge(rme[i]. first, rme[i]. second); }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); for (int i = 0; i \u0026lt; m; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); if (u \u0026gt; v) swap(u, v); re. insert(epr(u, v)); } for (q = 0; 1; ++ q) { int opt; scanf(\u0026quot;%d\u0026quot;, \u0026amp;opt); if (opt == -1) break; o[q]. t = opt; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;o[q]. u, \u0026amp;o[q]. v); if (o[q]. u \u0026gt; o[q]. v) swap(o[q]. u, o[q]. v); if (opt == 0) re. erase(epr(o[q]. u, o[q]. v)); } buildTree(); for (int i = q - 1; i \u0026gt;= 0; -- i) if (o[i]. t == 0) { ersBridge(o[i]. u, o[i]. v); } else if (o[i]. t == 1) { o[i]. s = 0; int u(o[i]. u), v(o[i]. v); while (fc[u] ^ fc[v]) if (d[ch[fc[u]]] \u0026gt; d[ch[fc[v]]]) { o[i]. s += sgtQry(rt[fc[u]], 0, cpos(u) + 1); u = fa[ch[fc[u]]]; } else { o[i]. s += sgtQry(rt[fc[v]], 0, cpos(v) + 1); v = fa[ch[fc[v]]]; } if (d[u] \u0026lt; d[v]) o[i]. s += sgtQry(rt[fc[u]], cpos(u) + 1, cpos(v) + 1); else if (d[v] \u0026lt; d[u]) o[i]. s += sgtQry(rt[fc[v]], cpos(v) + 1, cpos(u) + 1); } for (int i = 0; i \u0026lt; q; ++ i) if (o[i]. t == 1) printf(\u0026quot;%d\\n\u0026quot;, o[i]. s); }\n","permalink":"/code/dbimport_168/","summary":"#include #include #include #include using namespace std;\ntypedef pair \u0026lt;int, int\u0026gt; epr; typedef set erbt;\nstruct seg { int s, z, l, r; seg *ls, *rs; }; struct edge { int t; edge *next; }; struct oper { int t, u, v, s; };\nconst int maxn = 30009; const int maxq = 40009; const int maxe = 100009;\nint n, m, q, r[maxn]; int fa[maxn], d[maxn], sz[maxn], tc, fc[maxn], ch[maxn], cl[maxn]; seg sbuf_arr[maxn \u0026laquo; 2], *sbuf(sbuf_arr), *rt[maxn]; oper o[maxq]; erbt re; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf(ebuf_arr), *head[maxn];","title":"bzoj2896.cc"},{"content":"被虐暴了.看来我还是太年轻.\n去年的uestc校赛过了3道,今年过了4道ovo虽然很挫.\na题水水的虽然还是写错了几次还因为数据出错坑了几次.\nb题随机水过去了.\nc题最开始想错了,然后就放弃了.其实还能做.\nd题0阶aha.\ne题鹰蛋么.不过看到期望题之后就不想再想了.知道是dp,不过最后没有推对.\nf题数据结构.最初都想到点分了,但是被队友坑了去想线段树,于是就再见了.其实点分+dfs序挺好写的.浪费了诶.\ng题好神.\nh题常数优化老久水过去了.\ni题算几.队友写到结束没有成功.\nj题后缀数组构造.其实都想到一半了.然后就没有再想下去了.\n所以我还是太弱了啊怎么办啊.\n","permalink":"/diary/dbimport_014/","summary":"被虐暴了.看来我还是太年轻.\n去年的uestc校赛过了3道,今年过了4道ovo虽然很挫.\na题水水的虽然还是写错了几次还因为数据出错坑了几次.\nb题随机水过去了.\nc题最开始想错了,然后就放弃了.其实还能做.\nd题0阶aha.\ne题鹰蛋么.不过看到期望题之后就不想再想了.知道是dp,不过最后没有推对.\nf题数据结构.最初都想到点分了,但是被队友坑了去想线段树,于是就再见了.其实点分+dfs序挺好写的.浪费了诶.\ng题好神.\nh题常数优化老久水过去了.\ni题算几.队友写到结束没有成功.\nj题后缀数组构造.其实都想到一半了.然后就没有再想下去了.\n所以我还是太弱了啊怎么办啊.","title":"20150404"},{"content":"#include #include #include #include using namespace std;\nconst int buf_len = 4567; char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; }\nconst int maxn = 209; const int inf = 0x3f3f3f3f;\nint n, m, g[maxn][maxn], a[maxn][maxn], rk[maxn][maxn];\n#define upAns(x) (ans=min(ans,x))\nint main() { readInt(n); readInt(m); memset(g, 0x3f, sizeof(g)); for (int i = 0; i \u0026lt; m; ++ i) { int u, v, w; readInt(u); readInt(v); readInt(w); g[u][v] = g[v][u] = min(g[u][v], w); } memcpy(a, g, sizeof(a)); for (int k = 1; k \u0026lt;= n; ++ k) for (int i = 1; i \u0026lt;= n; ++ i) if (i ^ k) for (int j = 1; j \u0026lt;= n; ++ j) if ((i ^ k) \u0026amp;\u0026amp; (k ^ j)) a[i][j] = min(a[i][j], a[i][k] + a[k][j]); for (int i = 1; i \u0026lt;= n; ++ i) a[i][i] = 0; for (int i = 1; i \u0026lt;= n; ++ i) { for (int j = 1; j \u0026lt;= n; ++ j) rk[i][j] = j; for (int j = 1; j \u0026lt;= n; ++ j) for (int k = j + 1; k \u0026lt;= n; ++ k) if (a[i][rk[i][j]] \u0026lt; a[i][rk[i][k]]) swap(rk[i][j], rk[i][k]); } int ans(inf); for (int u = 1; u \u0026lt;= n; ++ u) for (int v = u; v \u0026lt;= n; ++ v) if (g[u][v] \u0026lt; inf) { int br(a[rk[u][1]][v]); for (int i = 2; i \u0026lt;= n; ++ i) { int bl(a[rk[u][i]][u]); int xn(br - bl + g[u][v]); if (xn \u0026gt;= 0 \u0026amp;\u0026amp; xn \u0026lt;= g[u][v] * 2) upAns(bl * 2 + xn); br = max(br, a[rk[u][i]][v]); } } printf(\u0026quot;%d\\n\u0026quot;, ans); }\n","permalink":"/code/dbimport_127/","summary":"#include #include #include #include using namespace std;\nconst int buf_len = 4567; char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; }\nconst int maxn = 209; const int inf = 0x3f3f3f3f;","title":"bzoj2182.cc"},{"content":"下午写的东西被奇妙地吞掉了ovo\n最小直径生成树,一定不要用sort,否则会tle.\n首先考虑一个绝对中心的概念.既在生成树上它是所有直径的严格中心.它有可能在点上,也有可能在边上.\n于是我们枚举边,试图让这个绝对中心在这条边上.那么每个点都选择到这条边的最短路树来生成.如果两个端点的最长链的差距不是很大,那么就有可能在这条边上找到最小直径生成树的绝对中心.\n考虑绝对中心对一个端点的距离,会对每个点形成一个峰形的函数.要找的答案就在相邻两个峰之间.于是可以利用两边直线k相同,把b排序之后直接做.总复杂度O(n3).\n然后如果每个边强行排序只会多个log,但是会tle.\n","permalink":"/oi/dbimport_128/","summary":"下午写的东西被奇妙地吞掉了ovo\n最小直径生成树,一定不要用sort,否则会tle.\n首先考虑一个绝对中心的概念.既在生成树上它是所有直径的严格中心.它有可能在点上,也有可能在边上.\n于是我们枚举边,试图让这个绝对中心在这条边上.那么每个点都选择到这条边的最短路树来生成.如果两个端点的最长链的差距不是很大,那么就有可能在这条边上找到最小直径生成树的绝对中心.\n考虑绝对中心对一个端点的距离,会对每个点形成一个峰形的函数.要找的答案就在相邻两个峰之间.于是可以利用两边直线k相同,把b排序之后直接做.总复杂度O(n3).\n然后如果每个边强行排序只会多个log,但是会tle.","title":"bzoj2182 [Spoj1479]The GbAaY Kingdom最小直径生成树"},{"content":"这么早就开始写总结了ovo\n其实已经玩了一个上午了.写完是9点的事.\n感觉今天题比较顺手,于是就ak了一发ovo\n第一题似乎是做过,虽然我不记得了.水水的最小割模型.差点就忘了处理0和9的情况.幸好最后检查的时候发现了.\n第二题似乎是我当年想过的费用流建边优化啊,开心ing.于是就敲上去了.于是就过了.然后发现yjq居然写的是segtree优化dp.好强.\n第三题思考了一下,发现转移可以变成旋转45度的最长上升子序yeah.\n所以我还是太弱了.\n","permalink":"/diary/dbimport_013/","summary":"这么早就开始写总结了ovo\n其实已经玩了一个上午了.写完是9点的事.\n感觉今天题比较顺手,于是就ak了一发ovo\n第一题似乎是做过,虽然我不记得了.水水的最小割模型.差点就忘了处理0和9的情况.幸好最后检查的时候发现了.\n第二题似乎是我当年想过的费用流建边优化啊,开心ing.于是就敲上去了.于是就过了.然后发现yjq居然写的是segtree优化dp.好强.\n第三题思考了一下,发现转移可以变成旋转45度的最长上升子序yeah.\n所以我还是太弱了.","title":"20150403"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct node { int l, i, ri; node *tr[26], *pr; node() { ri = l = 0; memset(tr, 0, sizeof(tr)); } }; struct edge { int t; edge *next; };\nconst int maxn = 1000009;\nchar a[maxn]; int n, ni, f[maxn], sz[maxn], d[maxn]; dint ans; edge ebuf_arr[maxn], *ebuf(ebuf_arr), *head[maxn]; node nbuf_arr[maxn], *nbuf(nbuf_arr), *l, *srt, *scur;\nvoid samIns(int w) { node *p, *np(nbuf ++); np-\u0026gt; i = ++ ni; np-\u0026gt; l = scur-\u0026gt; l + 1; for (p = scur; p \u0026amp;\u0026amp; !p-\u0026gt; tr[w]; p = p-\u0026gt; pr) p-\u0026gt; tr[w] = np; if (p) { node *q(p-\u0026gt; tr[w]); if (q-\u0026gt; l != p-\u0026gt; l + 1) { node *nq(nbuf ++); memcpy(nq, q, sizeof(node)); nq-\u0026gt; ri = 0; nq-\u0026gt; i = ++ ni; nq-\u0026gt; l = p-\u0026gt; l + 1; np-\u0026gt; pr = q-\u0026gt; pr = nq; for (; p \u0026amp;\u0026amp; p-\u0026gt; tr[w] == q; p = p-\u0026gt; pr) p-\u0026gt; tr[w] = nq; } else np-\u0026gt; pr = q; } else np-\u0026gt; pr = srt; ++ np-\u0026gt; ri; scur = np; }\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\ndint dp() { dint s(0); static int q[maxn]; int hd(0), tl(1); d[q[0] = srt-\u0026gt; i] = 0; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) { //d[e-\u0026gt; t] = d[p] + 1; q[tl ++] = e-\u0026gt; t; } } for (int i = tl - 1; i \u0026gt;= 0; \u0026ndash; i) { int p(q[i]); for (edge* e = head[p]; e; e = e-\u0026gt; next) { s += _l sz[e-\u0026gt; t] * sz[p] * d[p]; sz[p] += sz[e-\u0026gt; t]; } } return s; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%s\u0026quot;, a); n = strlen(a); srt = scur = nbuf ++; srt-\u0026gt; i = ni = 1; srt-\u0026gt; pr = 0; for (int i = n - 1; i \u0026gt;= 0; -- i) samIns(a[i] - 97); memset(head, 0, sizeof(head)); for (node *i = srt; i != nbuf; ++ i) { d[i-\u0026gt; i] = i-\u0026gt; l; sz[i-\u0026gt; i] = i-\u0026gt; ri; if (i-\u0026gt; pr) addEdge(i-\u0026gt; pr-\u0026gt; i, i-\u0026gt; i); } ans = _l n * (n - 1) * (n + 1) / 2 - dp() * 2; printf(lld \u0026quot;\\n\u0026quot;, ans); }\n","permalink":"/code/dbimport_183/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct node { int l, i, ri; node *tr[26], *pr; node() { ri = l = 0; memset(tr, 0, sizeof(tr)); } }; struct edge { int t; edge *next; };\nconst int maxn = 1000009;\nchar a[maxn]; int n, ni, f[maxn], sz[maxn], d[maxn]; dint ans; edge ebuf_arr[maxn], *ebuf(ebuf_arr), *head[maxn]; node nbuf_arr[maxn], *nbuf(nbuf_arr), *l, *srt, *scur;","title":"bzoj3238.cc"},{"content":"考试的时候do big die去刷bzoj.大概下午会hug zero.\nsam的第二题.其实这个玩意是应该用sa做的,不过现在我觉得sa没有sam简单.虽然sam的构造和性质还是一团大雾.\n这个题可以做出原串的后缀树,然后在上面dp一下.每个点对答案的贡献为任意两个不在同一子树的终态对数*深度.\n然后倒过来建sam,它的parent树就是原串的后缀树.虽然我还没有成功理解这个东西.\n然后坑了一会的一件事情是新建的nq节点的right集合为空.因为它只是一个扩展点,但是不是一个接受态ovo\n我还是太弱啊怎么办.\n","permalink":"/oi/dbimport_184/","summary":"考试的时候do big die去刷bzoj.大概下午会hug zero.\nsam的第二题.其实这个玩意是应该用sa做的,不过现在我觉得sa没有sam简单.虽然sam的构造和性质还是一团大雾.\n这个题可以做出原串的后缀树,然后在上面dp一下.每个点对答案的贡献为任意两个不在同一子树的终态对数*深度.\n然后倒过来建sam,它的parent树就是原串的后缀树.虽然我还没有成功理解这个东西.\n然后坑了一会的一件事情是新建的nq节点的right集合为空.因为它只是一个扩展点,但是不是一个接受态ovo\n我还是太弱啊怎么办.","title":"bzoj3238 [Ahoi2013]差异"},{"content":"上午讲数据结构ovo感觉不少东西都比较科普向.比如\u0026quot;我们来看看怎么用fft匹配01串\u0026quot;.\n然后讲的字符串题还比较能思考.后缀自动机啥的学得还是不够扎实啊.\n下午考试ovo\n第一题感觉就是数颜色搬到了树上再卡一下空间嘛.于是树状数组套sbt就上了.于是就被卡常数只有40了.就多了那么几百毫秒怎么也优化不下来啊.趴了.然后正解要利用树的特殊性来做到O(n*logn).非常ovo\n第二题shen me gui.做法差不多想到了不过还是没有勇气去写单调队列.\n第三题std写慢了吧.然后还把一堆写朴素的家伙都放过去了.严重地不爽.然后反正我分块我无压力ovo\n所以我还是太弱了啊.\n","permalink":"/diary/dbimport_012/","summary":"上午讲数据结构ovo感觉不少东西都比较科普向.比如\u0026quot;我们来看看怎么用fft匹配01串\u0026quot;.\n然后讲的字符串题还比较能思考.后缀自动机啥的学得还是不够扎实啊.\n下午考试ovo\n第一题感觉就是数颜色搬到了树上再卡一下空间嘛.于是树状数组套sbt就上了.于是就被卡常数只有40了.就多了那么几百毫秒怎么也优化不下来啊.趴了.然后正解要利用树的特殊性来做到O(n*logn).非常ovo\n第二题shen me gui.做法差不多想到了不过还是没有勇气去写单调队列.\n第三题std写慢了吧.然后还把一堆写朴素的家伙都放过去了.严重地不爽.然后反正我分块我无压力ovo\n所以我还是太弱了啊.","title":"20150402"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct seg { int s; seg *ch[2]; }; struct edge { int t; edge *next; }; struct path { int u, v; inline void read() { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); } };\nconst int maxn = 100009; const int maxl = 19;\nseg sbuf_arr[maxn * maxl], *sbuf(sbuf_arr), *rt[maxn]; dint su, sd; int n, m, ut[maxn][maxl]; int d[maxn], dfo[maxn], dfb[maxn], dfe[maxn]; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf(ebuf_arr), *head[maxn]; path q[maxn];\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\ninline bool cmpPath(const path\u0026amp; a, const path\u0026amp; b) { return dfb[a. u] \u0026lt; dfb[b. u]; }\nvoid buildTree() { static int stc[maxn]; int tst(1), dfn(0); memset(d, 0, sizeof(d)); d[stc[1] = 1] = 1; while (tst) { int p(stc[tst \u0026ndash;]); dfo[dfb[p] = ++ dfn] = p; dfe[p] = dfb[p]; for (int i = 1; i \u0026lt; maxl; ++ i) ut[p][i] = ut[ut[p][i - 1]][i - 1]; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (!d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; ut[e-\u0026gt; t][0] = p; stc[++ tst] = e-\u0026gt; t; } } for (int i = n; i \u0026gt; 1; \u0026ndash; i) { int p(dfo[i]), q(ut[p][0]); if (dfe[p] \u0026gt; dfe[q]) dfe[q] = dfe[p]; } }\n#define chof(q,t) ((q)?(q-\u0026gt;ch[t]):0) #define sof(q) ((q)?(q-\u0026gt;s):0)\nseg psgtIns(seg q, int po) { seg *s(sbuf ++), p(s); int l(1), r(n + 1); while (l + 1 \u0026lt; r) { p-\u0026gt; s = sof(q) + 1; int md((l + r) \u0026raquo; 1), d(po \u0026gt;= md); p-\u0026gt; ch[d ^ 1] = chof(q, d ^ 1); q = chof(q, d); p-\u0026gt; ch[d] = sbuf ++; p = p-\u0026gt; ch[d]; if (d) l = md; else r = md; } p-\u0026gt; s = sof(q) + 1; return s; } int psgtQry(seg p, int po) { if (po \u0026lt; 1) return 0; int s(0), l(1), r(n + 1); while (l + 1 \u0026lt; r \u0026amp;\u0026amp; p) { int md((l + r) \u0026raquo; 1); if (po \u0026lt; md) { r = md; p = p-\u0026gt; ch[0]; } else { l = md; s += sof(p-\u0026gt; ch[0]); p = p-\u0026gt; ch[1]; } } return s + sof(p); }\nint cntPath(int la, int ra, int lb, int rb) { if (la \u0026gt; ra || lb \u0026gt; rb) return 0; else return psgtQry(rt[ra], rb) - psgtQry(rt[ra], lb - 1) - psgtQry(rt[la - 1], rb) + psgtQry(rt[la - 1], lb - 1); }\ndint gcd(dint a, dint b) { while (a) { dint c(b % a); b = a; a = c; } return b; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); sd = _l m * (m - 1) / 2; memset(head, 0, sizeof(head)); for (int i = 1; i \u0026lt; n; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); addEdge(u, v); addEdge(v, u); } buildTree(); for (int i = 0; i \u0026lt; m; ++ i) { q[i]. read(); if (dfb[q[i]. u] \u0026gt; dfb[q[i]. v]) swap(q[i]. u, q[i]. v); } sort(q, q + m, cmpPath); rt[0] = 0; for (int i = 1, j = 0; i \u0026lt;= n; ++ i) { rt[i] = rt[i - 1]; for (; j \u0026lt; m \u0026amp;\u0026amp; q[j]. u == dfo[i]; ++ j) rt[i] = psgtIns(rt[i], dfb[q[j]. v]); } su = 0; for (int i = 0; i \u0026lt; m; ++ i) { int u(q[i]. u), v(q[i]. v); if (d[u] \u0026gt; d[v]) swap(u, v); if (dfb[v] \u0026gt;= dfb[u] \u0026amp;\u0026amp; dfb[v] \u0026lt;= dfe[u]) { int p(v); for (int i = maxl - 1; i \u0026gt;= 0; -- i) if (d[ut[p][i]] \u0026gt; d[u]) p = ut[p][i]; su += cntPath(1, dfb[p] - 1, dfb[v], dfe[v]); su += cntPath(dfb[v], dfe[v], dfe[p] + 1, n); } else { if (dfb[u] \u0026gt; dfb[v]) swap(u, v); su += cntPath(dfb[u], dfe[u], dfb[v], dfe[v]); } } su -= m; int g(gcd(su, sd)); su /= g, sd /= g; printf(lld \u0026quot;/\u0026quot; lld \u0026quot;\\n\u0026quot;, su, sd); }\n","permalink":"/code/dbimport_205/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct seg { int s; seg *ch[2]; }; struct edge { int t; edge *next; }; struct path { int u, v; inline void read() { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); } };\nconst int maxn = 100009; const int maxl = 19;\nseg sbuf_arr[maxn * maxl], *sbuf(sbuf_arr), *rt[maxn]; dint su, sd; int n, m, ut[maxn][maxl]; int d[maxn], dfo[maxn], dfb[maxn], dfe[maxn]; edge ebuf_arr[maxn \u0026laquo; 1], *ebuf(ebuf_arr), *head[maxn]; path q[maxn];","title":"bzoj3772.cc"},{"content":"idy又开坑辣,虽然是个无聊的无聊题.\n考虑每条路径会被哪些路径包含.那条路径的两个端点一定是在条路径的两个端点的子树上.(如果这两个点有祖先关系,那么需要重新makeroot一下)\n当然我不是说要用Lct.直接用可持久化线段树在dfs序上把路径存下来就完了.\n","permalink":"/oi/dbimport_206/","summary":"idy又开坑辣,虽然是个无聊的无聊题.\n考虑每条路径会被哪些路径包含.那条路径的两个端点一定是在条路径的两个端点的子树上.(如果这两个点有祖先关系,那么需要重新makeroot一下)\n当然我不是说要用Lct.直接用可持久化线段树在dfs序上把路径存下来就完了.","title":"bzoj3772 精神污染"},{"content":"#include #include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct cplx { double r, i; cplx() {} cplx(double rx, double ix) { r = rx, i = ix; } }; inline cplx operator +(const cplx\u0026amp; a, const cplx\u0026amp; b) { return cplx(a. r + b. r, a. i + b. i); } inline cplx operator -(const cplx\u0026amp; a, const cplx\u0026amp; b) { return cplx(a. r - b. r, a. i - b. i); } inline cplx operator *(const cplx\u0026amp; a, const cplx\u0026amp; b) { return cplx(a. r * b. r - a. i * b. i, a. r * b. i + a. i * b. r); }\nconst int maxn = 100009; const int bsz = 3000; const int maxv = 66009; const int maxa = 30000; const int fm = 1 \u0026laquo; 16; const int maxl = 19; const double pi = acos(-1);\nint n, a[maxn], b[maxv], c[maxv]; dint ans, d[maxv]; cplx wo[maxl];\nvoid fftPre() { for (int i = 0; i \u0026lt; maxl; ++ i) { double tht(pi * 2 / (1 \u0026laquo; i)); wo[i] = cplx(cos(tht), sin(tht)); } }\nvoid calcInside(int le, int re) { static int v[maxa + 9]; memset(v, 0, sizeof(v)); for (int i = le; i \u0026lt; re; ++ i) { ans += v[a[i]]; for (int j = le; j \u0026lt; i; ++ j) { int nv(a[i] * 2 - a[j]); if (nv \u0026gt;= 0 \u0026amp;\u0026amp; nv \u0026lt;= maxa) { ++ v[nv]; ans += c[nv]; } nv = a[j] * 2 - a[i]; if (nv \u0026gt;= 0 \u0026amp;\u0026amp; nv \u0026lt;= maxa) ans += b[nv]; } } }\nvoid radar(cplx* a, int n) { for (int i = 1, j = n \u0026raquo; 1, k; i \u0026lt; n - 1; ++ i) { if (i \u0026lt; j) swap(a[i], a[j]); for (k = n \u0026raquo; 1; k \u0026lt;= j; j -= k, k \u0026raquo;= 1); if (j \u0026lt;= k) j += k; } }\nvoid fft(cplx* a, int n, bool rv) { radar(a, n); for (int l = 2, lv = 1; l \u0026lt;= n; l \u0026laquo;= 1, ++ lv) { cplx w0(wo[lv]); if (rv) w0. i = -w0. i; for (int i = 0; i \u0026lt; n; i += l) { cplx w(1, 0); for (int j = i; j \u0026lt; i + (l \u0026raquo; 1); ++ j, w = w * w0) { cplx x(a[j]), y(w * a[j + (l \u0026raquo; 1)]); a[j] = x + y; a[j + (l \u0026raquo; 1)] = x - y; } } } if (rv) for (int i = 0; i \u0026lt; n; ++ i) a[i]. r /= n; }\nvoid faltung(int le, int re) { static cplx x[maxv], y[maxv], z[maxv]; for (int i = 0; i \u0026lt; fm; ++ i) { x[i] = cplx(b[i], 0); y[i] = cplx(c[i], 0); } fft(x, fm, 0); fft(y, fm, 0); for (int i = 0; i \u0026lt; fm; ++ i) z[i] = x[i] * y[i]; fft(z, fm, 1); for (int i = 0; i \u0026lt; fm; ++ i) d[i] = _l (z[i]. r + 0.4999); for (int i = le; i \u0026lt; re; ++ i) ans += d[a[i] * 2]; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nfftPre(); scanf(\u0026quot;%d\u0026quot;, \u0026amp;n); memset(b, 0, sizeof(b)); memset(c, 0, sizeof(c)); for (int i = 0; i \u0026lt; n; ++ i) { scanf(\u0026quot;%d\u0026quot;, a + i); ++ c[a[i]]; } for (int i = 0; i \u0026lt; n; i += bsz) { int j(min(i + bsz, n)); for (int k = i; k \u0026lt; j; ++ k) -- c[a[k]]; calcInside(i, j); if (i \u0026gt; 0 \u0026amp;\u0026amp; j \u0026lt; n) faltung(i, j); for (int k = i; k \u0026lt; j; ++ k) ++ b[a[k]]; } printf(lld \u0026quot;\\n\u0026quot;, ans); }\n","permalink":"/code/dbimport_195/","summary":"#include #include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct cplx { double r, i; cplx() {} cplx(double rx, double ix) { r = rx, i = ix; } }; inline cplx operator +(const cplx\u0026amp; a, const cplx\u0026amp; b) { return cplx(a. r + b. r, a. i + b. i); } inline cplx operator -(const cplx\u0026amp; a, const cplx\u0026amp; b) { return cplx(a.","title":"bzoj3509.cc"},{"content":"好难得自己去开坑hhhhh\n其实之前看过做法,觉得有点麻烦.于是拖到现在.然后荣登最慢yeah.不知道那些又短又快的东西是怎么来的.肯定和我不是一个写法的啦.\n我的做法是把序列每b个分成一块.对于同一块,直接b2求内部有三个点或者两个点的等差三元组的数量.\n对于分别在3块的,对每块把两边的所有东西卷积一次来统计.\n其实也没啥技术含量ovo\n","permalink":"/oi/dbimport_196/","summary":"好难得自己去开坑hhhhh\n其实之前看过做法,觉得有点麻烦.于是拖到现在.然后荣登最慢yeah.不知道那些又短又快的东西是怎么来的.肯定和我不是一个写法的啦.\n我的做法是把序列每b个分成一块.对于同一块,直接b2求内部有三个点或者两个点的等差三元组的数量.\n对于分别在3块的,对每块把两边的所有东西卷积一次来统计.\n其实也没啥技术含量ovo","title":"bzoj3509 [CodeChef] COUNTARI"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #define _l (long long int)\nstruct edge { int a, b, va, vb; inline void read() { scanf(\u0026quot;%d%d%d%d\u0026quot;, \u0026amp;a, \u0026amp;b, \u0026amp;va, \u0026amp;vb); } };\nstruct sptree { int va, vb; sptree() {} sptree(int ao, int bo) { va = ao, vb = bo; } inline dint prd() const { return _l va * vb; } void disp(int x) { printf(\u0026quot;(%d,%d)%c\u0026quot;, va, vb, x); } }; inline bool operator \u0026lt;(const sptree\u0026amp; a, const sptree\u0026amp; b) { return a. prd() \u0026lt; b. prd() || (a. prd() == b. prd() \u0026amp;\u0026amp; a. va \u0026lt; b. va); }\nconst int maxn = 209; const int maxm = 10009; const int maxv = 60009;\nint n, m, ma, mb, r[maxn]; edge e[maxm]; sptree ans;\ninline bool cmpEdge(const edge\u0026amp; a, const edge\u0026amp; b) { return a. va * ma + a. vb * mb \u0026lt; b. va * ma + b. vb * mb; }\nint getRoot(int x) { register int p, q; for (p = r[x]; p ^ r[p]; p = r[p]); for (; x ^ p; q = r[x], r[x] = p, x = q); return x; }\nsptree kruskal(int mav, int mbv) { ma = mav, mb = mbv; sort(e, e + m, cmpEdge); for (int i = 0; i \u0026lt; n; ++ i) r[i] = i; sptree ret(0, 0); for (int i = 0, c = n; i \u0026lt; m \u0026amp;\u0026amp; c \u0026gt; 1; ++ i) if (getRoot(e[i]. a) != getRoot(e[i]. b)) { ret. va += e[i]. va; ret. vb += e[i]. vb; r[getRoot(e[i]. a)] = getRoot(e[i]. b); } return ret; }\ninline dint mulx(const sptree\u0026amp; a, const sptree\u0026amp; b, const sptree\u0026amp; c) { int xa(b. va - a. va), ya(b. vb - a. vb); int xb(c. va - a. va), yb(c. vb - a. vb); return _l xa * yb - _l xb * ya; }\nvoid dfs(sptree l, sptree r) { sptree md(kruskal(l. vb - r. vb, r. va - l. va)); //l. disp(32), r. disp(10); ans = min(ans, md); if (mulx(l, md, r) != 0) { dfs(l, md); dfs(md, r); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); for (int i = 0; i \u0026lt; m; ++ i) e[i]. read(); sptree l(kruskal(maxv, 1)), r(kruskal(1, maxv)); ans = min(l, r); dfs(l, r); printf(\u0026quot;%d %d\\n\u0026quot;, ans. va, ans. vb); }\n","permalink":"/code/dbimport_137/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #define _l (long long int)\nstruct edge { int a, b, va, vb; inline void read() { scanf(\u0026quot;%d%d%d%d\u0026quot;, \u0026amp;a, \u0026amp;b, \u0026amp;va, \u0026amp;vb); } };\nstruct sptree { int va, vb; sptree() {} sptree(int ao, int bo) { va = ao, vb = bo; } inline dint prd() const { return _l va * vb; } void disp(int x) { printf(\u0026quot;(%d,%d)%c\u0026quot;, va, vb, x); } }; inline bool operator \u0026lt;(const sptree\u0026amp; a, const sptree\u0026amp; b) { return a.","title":"bzoj2395.cc"},{"content":"谁说最小乘积生成树是取log了ovo题意都不一样好么.\n首先这个东西一定在一个像是下凸壳一样的东西上.其实是一个反比例函数的k的最小值.\n把x和y的和看作坐标,求在(x0,y0)与(x1,y1)中间的一个点,为了平均分配,要取那个三角形最大,于是可以用叉积弄出一个式子来当作x和y的系数,这样就可以直接kruskal求最小生成树了.\n如果求出来的点在这个线段上,那这个区间就不用再找了.否则还得去两边继续递归.\n然后最初的左端点和右端点就取x的最小生成树和y的最小生成树就好了.\n这个时间复杂度似乎还是没有保证啊.有点像自适应simpson的感觉,虽然这个肯定是精确的.然后跑起来也比较快.有意思.\n这个玩意还是比较好写的.虽然中间kruskal把0打成1,看了半天ovo\n","permalink":"/oi/dbimport_138/","summary":"谁说最小乘积生成树是取log了ovo题意都不一样好么.\n首先这个东西一定在一个像是下凸壳一样的东西上.其实是一个反比例函数的k的最小值.\n把x和y的和看作坐标,求在(x0,y0)与(x1,y1)中间的一个点,为了平均分配,要取那个三角形最大,于是可以用叉积弄出一个式子来当作x和y的系数,这样就可以直接kruskal求最小生成树了.\n如果求出来的点在这个线段上,那这个区间就不用再找了.否则还得去两边继续递归.\n然后最初的左端点和右端点就取x的最小生成树和y的最小生成树就好了.\n这个时间复杂度似乎还是没有保证啊.有点像自适应simpson的感觉,虽然这个肯定是精确的.然后跑起来也比较快.有意思.\n这个玩意还是比较好写的.虽然中间kruskal把0打成1,看了半天ovo","title":"bzoj2395 [Balkan 2011]Timeismoney"},{"content":"说好了今天不去学校的ovo\n于是在家里睡到9点半,起来吃饭,看题,帮ant选电脑,写题,出去吃饭ovo时间好紧.\n居然是今年jsoi的题.\n第一题水水的树形dp啊.其实都不能叫dp,把所有子树排序看一下就完了.\n第二题看题面好长好麻烦不写了.于是交了个根据n的范围来wtf的东西.于是被逼唱歌.也只有这有一个字母能形容我的心情ovo.\n第三题不就是树化简+无根树哈希么.随便乱写了个东西交上去居然过了ovo\n所以我还是太年轻辣.\n","permalink":"/diary/dbimport_011/","summary":"说好了今天不去学校的ovo\n于是在家里睡到9点半,起来吃饭,看题,帮ant选电脑,写题,出去吃饭ovo时间好紧.\n居然是今年jsoi的题.\n第一题水水的树形dp啊.其实都不能叫dp,把所有子树排序看一下就完了.\n第二题看题面好长好麻烦不写了.于是交了个根据n的范围来wtf的东西.于是被逼唱歌.也只有这有一个字母能形容我的心情ovo.\n第三题不就是树化简+无根树哈希么.随便乱写了个东西交上去居然过了ovo\n所以我还是太年轻辣.","title":"20150401"},{"content":"在飞机上写总结ovo\n不知不觉中三月就过去了呢.这是三月最后一天的晚上了诶ovo.来的时候感觉十天会很漫长,然后不知不觉就结束了.这次出来感觉收获比较大.难度比较适中,有时候能看到原题体验一下切题的快感.也有很多时候要耗尽脑细胞去想题,然后还常常听了讲之后才aha过来.当然也有听着听着就开始刮大雾了ovo.\n考了六场试吧.有时候考得比较好,有时候也会被虐得很惨.说明我还是不够稳定的.遇到写得比较熟的东西还能写一写得一些分,有时候心情好能过两道题.但是多数时候还得靠骗分和暴力.可是已经有很长一段时间我都一直在试图追求正解,结果导致有时候骗分的技巧也比较拙劣,看上去发挥得并不好.省选的时候题是怎样的谁也说不清楚.所以最近不仅要复习和巩固各种算法,也要思考一下骗分暴力之类的东西该怎么写.\n考试的时候纪律比较不好.有时候也会受到身旁同学的影响.有时候还会因此而受到提醒,有意无意见想到更好的idea.我觉得这样不是一种好的情况.所以还是要找一个比较安静的环境.自己在考试的时候也要严格遵守纪律.不管是正式还是非正式,有人监考还是放任自流,都要安静,独立思考.\n这回讲课的同学讲得实用性也非常强.因为省选比较近,所以很多都是直接讲题,而没有再去纠结某个专题.他们也带来了一些最近比较流行的新的思路.比如cdq分治扔进线段树,再比如dp的有序与无序.还有dyf讲的积分.虽然比较实用向,但是也提醒了我有些东西是需要不停地用才能一起掌握的.一年半没碰过微积分,所以以前的基础等于白废了.不开心.\n这些天也认识了一些sdfz和山东以及其它省份的神犇.发现自己如果放到全国,也并不能算一个厉害的角色.大家学习,刷题都很拼,也很有理想有追求.所以说自己也要坚定道路,并为之不懈努力.\n不在的将近两个星期里sc省也发生了不少事,学校也发生了不少事.scoi发生了一些改变.不知道这是怎样一种信号.不过我觉得很适合今天在出租车上广播里的一句话,如果你站在浪尖上,那你就要把握好机会冲上巅峰.这是一个改变的时代.要善于把握变革.\n然后家里也考了不少题,有些题还是比较有意思的.还有一些题我感觉我还不会做.所以说我还是有路要走的.另外常在bzoj上看到idy在开坑.还有很多我都没做过的题,填坑也填得比较狼狈.所以说身边就有很多人在默默努力.如果你不前进得更快,你就会被超越.而被超越的结果就是淘汰.世界是残酷的,但是是公平的.\n怎么又扯远了.Whatever, scoi在即,退役or继续?It depends on nobody but myself. Fighting.\n","permalink":"/diary/dbimport_010/","summary":"在飞机上写总结ovo\n不知不觉中三月就过去了呢.这是三月最后一天的晚上了诶ovo.来的时候感觉十天会很漫长,然后不知不觉就结束了.这次出来感觉收获比较大.难度比较适中,有时候能看到原题体验一下切题的快感.也有很多时候要耗尽脑细胞去想题,然后还常常听了讲之后才aha过来.当然也有听着听着就开始刮大雾了ovo.\n考了六场试吧.有时候考得比较好,有时候也会被虐得很惨.说明我还是不够稳定的.遇到写得比较熟的东西还能写一写得一些分,有时候心情好能过两道题.但是多数时候还得靠骗分和暴力.可是已经有很长一段时间我都一直在试图追求正解,结果导致有时候骗分的技巧也比较拙劣,看上去发挥得并不好.省选的时候题是怎样的谁也说不清楚.所以最近不仅要复习和巩固各种算法,也要思考一下骗分暴力之类的东西该怎么写.\n考试的时候纪律比较不好.有时候也会受到身旁同学的影响.有时候还会因此而受到提醒,有意无意见想到更好的idea.我觉得这样不是一种好的情况.所以还是要找一个比较安静的环境.自己在考试的时候也要严格遵守纪律.不管是正式还是非正式,有人监考还是放任自流,都要安静,独立思考.\n这回讲课的同学讲得实用性也非常强.因为省选比较近,所以很多都是直接讲题,而没有再去纠结某个专题.他们也带来了一些最近比较流行的新的思路.比如cdq分治扔进线段树,再比如dp的有序与无序.还有dyf讲的积分.虽然比较实用向,但是也提醒了我有些东西是需要不停地用才能一起掌握的.一年半没碰过微积分,所以以前的基础等于白废了.不开心.\n这些天也认识了一些sdfz和山东以及其它省份的神犇.发现自己如果放到全国,也并不能算一个厉害的角色.大家学习,刷题都很拼,也很有理想有追求.所以说自己也要坚定道路,并为之不懈努力.\n不在的将近两个星期里sc省也发生了不少事,学校也发生了不少事.scoi发生了一些改变.不知道这是怎样一种信号.不过我觉得很适合今天在出租车上广播里的一句话,如果你站在浪尖上,那你就要把握好机会冲上巅峰.这是一个改变的时代.要善于把握变革.\n然后家里也考了不少题,有些题还是比较有意思的.还有一些题我感觉我还不会做.所以说我还是有路要走的.另外常在bzoj上看到idy在开坑.还有很多我都没做过的题,填坑也填得比较狼狈.所以说身边就有很多人在默默努力.如果你不前进得更快,你就会被超越.而被超越的结果就是淘汰.世界是残酷的,但是是公平的.\n怎么又扯远了.Whatever, scoi在即,退役or继续?It depends on nobody but myself. Fighting.","title":"20150331 HDSDFZ2015集训总结"},{"content":"比较好想的dfs容斥，然后二分答案。\n就只用dfs不超过sqrt(n)的素数的平方和。\n","permalink":"/oi/dbimport_175/","summary":"比较好想的dfs容斥，然后二分答案。\n就只用dfs不超过sqrt(n)的素数的平方和。","title":"bzoj2986 Non-Squarefree Numbers"},{"content":"idy又开坑辣。\nmobius反演题么么哒。强行sqrt(n)的询问。\n于是推一下式子。\nanswer = ∑i∑j1 (gcd(i, j) = 1)\n= ∑\u0026lt;sub\u0026gt;p\u0026lt;/sub\u0026gt;∑\u0026lt;sub\u0026gt;g\u0026lt;/sub\u0026gt;u(g) * (n/(p*g)) * (m/(p*g)) 然后把p和g合起来设为v。\nh(v) = ∑ u(v) (v = x/p)\n然后发现h(v)函数是很好推的。\nh(px) = (x % p == 0) ? (u(x)) : (u(x) - h(x))\n然后就搞定啦orz.\n","permalink":"/oi/dbimport_163/","summary":"idy又开坑辣。\nmobius反演题么么哒。强行sqrt(n)的询问。\n于是推一下式子。\nanswer = ∑i∑j1 (gcd(i, j) = 1)\n= ∑\u0026lt;sub\u0026gt;p\u0026lt;/sub\u0026gt;∑\u0026lt;sub\u0026gt;g\u0026lt;/sub\u0026gt;u(g) * (n/(p*g)) * (m/(p*g)) 然后把p和g合起来设为v。\nh(v) = ∑ u(v) (v = x/p)\n然后发现h(v)函数是很好推的。\nh(px) = (x % p == 0) ? (u(x)) : (u(x) - h(x))\n然后就搞定啦orz.","title":"bzoj2820 yy的gcd"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 10000009;\nint tp, pn[maxn], mu[maxn], h[maxn]; dint sh[maxn]; bool pr[maxn];\nvoid pre() { memset(pr, 0, sizeof(pr)); tp = 0; mu[1] = 1; sh[0] = sh[1] = 0; for (int i = 2; i \u0026lt; maxn; ++ i) { if (!pr[i]) { pn[tp ++] = i; mu[i] = -1; h[i] = 1; } for (int j = 0, v; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j] \u0026lt; maxn; ++ j) { pr[v = i * pn[j]] = 1; if (i % pn[j] == 0) { mu[v] = 0; h[v] = mu[i]; break; } else { mu[v] = -mu[i]; h[v] = mu[i] - h[i]; } } sh[i] = sh[i - 1] + h[i]; } }\nint main() { pre(); int t; scanf(\u0026quot;%d\u0026quot;, \u0026amp;t); while (t \u0026ndash;) { int a, b; dint s(0); scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;a, \u0026amp;b); if (a \u0026gt; b) swap(a, b); for (int i = 1, j; i \u0026lt;= a; i = j + 1) { j = min(a / (a / i), b / (b / i)); s = s + (sh[j] - sh[i - 1]) * (a / i) * (b / i); } printf(lld \u0026ldquo;\\n\u0026rdquo;, s); } }\n","permalink":"/code/dbimport_162/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 10000009;\nint tp, pn[maxn], mu[maxn], h[maxn]; dint sh[maxn]; bool pr[maxn];\nvoid pre() { memset(pr, 0, sizeof(pr)); tp = 0; mu[1] = 1; sh[0] = sh[1] = 0; for (int i = 2; i \u0026lt; maxn; ++ i) { if (!pr[i]) { pn[tp ++] = i; mu[i] = -1; h[i] = 1; } for (int j = 0, v; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j] \u0026lt; maxn; ++ j) { pr[v = i * pn[j]] = 1; if (i % pn[j] == 0) { mu[v] = 0; h[v] = mu[i]; break; } else { mu[v] = -mu[i]; h[v] = mu[i] - h[i]; } } sh[i] = sh[i - 1] + h[i]; } }","title":"bzoj2820.cc"},{"content":"终于过审核了.好感动啊.\n今天考试比较开心吧.一直很膜拜出题人.\n第一题想了一会想出了O(n*log2n)的正解,似乎比std还要优一些.然后不开心的是这题居然把朴素放过去了.\n第二题被mhy点了一下于是就直接写了插头dp.然后再套个高精度的模板.因为比较有经验所以就调度得比较快.\n第三题觉得懒得算了于是乱写了个东西弃疗.然后旁边的mhy因为看了我在写这题所以去写了simpson,结果成了全场唯一有分的还有80分.晕.\n下午讲积分.感觉我一年半前学的东西就没有再用过啊.晕.看来以前的东西还是要再去复习一下的.\n晚上去了橘子洲.走了好久.感觉蛮好的.然后还坐了地铁,公交.吃了过桥米线.很想找个安静的地方坐坐,消消火,不过感觉总向被什么东西压着,总是要向前去.\n于是我还是太年轻喽.明天就可以回家喽.开心ovo\n","permalink":"/diary/dbimport_009/","summary":"终于过审核了.好感动啊.\n今天考试比较开心吧.一直很膜拜出题人.\n第一题想了一会想出了O(n*log2n)的正解,似乎比std还要优一些.然后不开心的是这题居然把朴素放过去了.\n第二题被mhy点了一下于是就直接写了插头dp.然后再套个高精度的模板.因为比较有经验所以就调度得比较快.\n第三题觉得懒得算了于是乱写了个东西弃疗.然后旁边的mhy因为看了我在写这题所以去写了simpson,结果成了全场唯一有分的还有80分.晕.\n下午讲积分.感觉我一年半前学的东西就没有再用过啊.晕.看来以前的东西还是要再去复习一下的.\n晚上去了橘子洲.走了好久.感觉蛮好的.然后还坐了地铁,公交.吃了过桥米线.很想找个安静的地方坐坐,消消火,不过感觉总向被什么东西压着,总是要向前去.\n于是我还是太年轻喽.明天就可以回家喽.开心ovo","title":"20150330"},{"content":"#define PROC \u0026ldquo;coconut\u0026rdquo; #include #include #include using namespace std;\nstruct edge { int t, v; edge *next; };\nconst int maxn = 509; const int maxe = 6009; const double bseps = 1e-4; const double finf = 1e20;\nint n, m, fp[maxn], st, vis[maxn], tvis; edge ebuf_arr[maxe], *ebuf(ebuf_arr), *head[maxn]; double d[maxn];\ninline void addEdge(int u, int v, int w) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; v = w; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; //\tprintf(\u0026ldquo;AE %d -\u0026gt; %d of %d\\n\u0026rdquo;, u, v, w); }\n#define recycle(x) { if (x == maxn) x = 0; } bool check(double s) { static int q[maxn], iq[maxn]; int hd(0), tl(1); memset(iq, 0, sizeof(iq)); for (int i = 1; i \u0026lt;= n + 2; ++ i) d[i] = finf; d[q[0] = st] = 0; fp[st] = 0; while (hd ^ tl) { int p(q[hd ++]); recycle(hd); iq[p] = 0; vis[p] = ++ tvis; for (int q = fp[p]; q \u0026amp;\u0026amp; q != st; q = fp[q]) if (vis[q] == tvis) return 1; else vis[q] = tvis; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (d[p] + e-\u0026gt; v + s \u0026lt; d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + e-\u0026gt; v + s; fp[e-\u0026gt; t] = p; if (!iq[e-\u0026gt; t]) { iq[e-\u0026gt; t] = 1; q[tl ++] = e-\u0026gt; t; recycle(tl); } } } return 0; }\nint main() { #ifndef ONLINE_JUDGE freopen(PROC \u0026ldquo;.in\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); freopen(PROC \u0026ldquo;.out\u0026rdquo;, \u0026ldquo;w\u0026rdquo;, stdout); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); st = n + 1; for (int i = 0; i \u0026lt; m; ++ i) { int u, v, a, b, c, d; scanf(\u0026quot;%d%d%d%d%d%d\u0026quot;, \u0026amp;u, \u0026amp;v, \u0026amp;a, \u0026amp;b, \u0026amp;c, \u0026amp;d); addEdge(u, v, b + d); if (u != st \u0026amp;\u0026amp; c) addEdge(v, u, a - d); } double l(0), r(10000); memset(vis, 0, sizeof(vis)); tvis = 0; while (l + bseps \u0026lt; r) { double mid((l + r + bseps) / 2.0); if (check(mid)) l = mid; else r = mid - bseps; } printf(\u0026quot;%.2lf\\n\u0026quot;, l); }\n","permalink":"/code/dbimport_201/","summary":"#define PROC \u0026ldquo;coconut\u0026rdquo; #include #include #include using namespace std;\nstruct edge { int t, v; edge *next; };\nconst int maxn = 509; const int maxe = 6009; const double bseps = 1e-4; const double finf = 1e20;\nint n, m, fp[maxn], st, vis[maxn], tvis; edge ebuf_arr[maxe], *ebuf(ebuf_arr), *head[maxn]; double d[maxn];\ninline void addEdge(int u, int v, int w) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; v = w; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; //\tprintf(\u0026ldquo;AE %d -\u0026gt; %d of %d\\n\u0026rdquo;, u, v, w); }","title":"bzoj3597.cc"},{"content":"去年的省选题.之前知道了是找负环.不过一直感觉好迷是个坑.最近又想了想发现也不是很麻烦.\n当年省选的时候完全对比例题无感啊.经过一年之后终于觉悟了一点东西.\n考虑一个网络流,每条边的流量上限是inf,只有从源出来的边不是.然后如果进行一次正向增广会使代价增加b+d,如果进行一次逆向增广的话代价会增加a-d,前提是有流量.于是只要二分一个答案,看下存不存在一个负环来增广就好了.\n然后一个spfa就迷之拿了bzoj的rank1.好开心.\n","permalink":"/oi/dbimport_202/","summary":"去年的省选题.之前知道了是找负环.不过一直感觉好迷是个坑.最近又想了想发现也不是很麻烦.\n当年省选的时候完全对比例题无感啊.经过一年之后终于觉悟了一点东西.\n考虑一个网络流,每条边的流量上限是inf,只有从源出来的边不是.然后如果进行一次正向增广会使代价增加b+d,如果进行一次逆向增广的话代价会增加a-d,前提是有流量.于是只要二分一个答案,看下存不存在一个负环来增广就好了.\n然后一个spfa就迷之拿了bzoj的rank1.好开心.","title":"bzoj3597 [Scoi2014]方伯伯运椰子"},{"content":"#include #include #include #include using namespace std;\nstruct seg { int v, l, r; seg *ls, *rs; };\nconst int maxn = 70009; const int maxb = 23; const int maxseg = maxn * maxb * 3;\nint n, m, bv, a[maxn]; seg *br[maxb][maxb], sbuf_arr[maxseg], *sbuf(sbuf_arr);\n#define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1) inline seg* sgtBuild(int l, int r) { seg* p(sbuf ++); p-\u0026gt; l = l; p-\u0026gt; r = r; p-\u0026gt; v = 0; if (l + 1 \u0026lt; r) { p-\u0026gt; ls = sgtBuild(l, midp(p)); p-\u0026gt; rs = sgtBuild(midp(p), r); } return p; } inline void sgtChg(seg* p, int po, int vo) { if (p-\u0026gt; l + 1 == p-\u0026gt; r) p-\u0026gt; v += vo; else { if (po \u0026lt; midp(p)) sgtChg(p-\u0026gt; ls, po, vo); else sgtChg(p-\u0026gt; rs, po, vo); p-\u0026gt; v = max(p-\u0026gt; ls-\u0026gt; v, p-\u0026gt; rs-\u0026gt; v); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); bv = 10; for (int i = 1; i \u0026lt;= bv; ++ i) for (int j = 0; j \u0026lt; i; ++ j) br[i][j] = sgtBuild(0, n / i + 1); for (int i = 1; i \u0026lt;= n; ++ i) { scanf(\u0026quot;%d\u0026quot;, a + (n - i)); for (int j = 1; j \u0026lt;= bv; ++ j) sgtChg(br[j][(n - i) % j], (n - i) / j, a[n - i]); } scanf(\u0026quot;%d\u0026quot;, \u0026amp;m); while (m --) { int opt, x, y; scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;opt, \u0026amp;x, \u0026amp;y); x = n - x; if (opt == 0) { a[x] += y; for (int i = 1; i \u0026lt;= bv; ++ i) sgtChg(br[i][x % i], x / i, y); } else { int ans(a[x]); if (y \u0026lt;= bv) { seg *p(br[y][x % y]); int po(x / y); while (p-\u0026gt; l + 1 \u0026lt; p-\u0026gt; r) if (po \u0026gt;= midp(p)) ans = max(ans, p-\u0026gt; ls-\u0026gt; v), p = p-\u0026gt; rs; else p = p-\u0026gt; ls; ans = max(ans, p-\u0026gt; v); } else { for (; x \u0026gt;= 0; x -= y) ans = max(ans, a[x]); } printf(\u0026quot;%d\\n\u0026quot;, ans); } } }\n","permalink":"/code/dbimport_213/","summary":"#include #include #include #include using namespace std;\nstruct seg { int v, l, r; seg *ls, *rs; };\nconst int maxn = 70009; const int maxb = 23; const int maxseg = maxn * maxb * 3;\nint n, m, bv, a[maxn]; seg *br[maxb][maxb], sbuf_arr[maxseg], *sbuf(sbuf_arr);\n#define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1) inline seg* sgtBuild(int l, int r) { seg* p(sbuf ++); p-\u0026gt; l = l; p-\u0026gt; r = r; p-\u0026gt; v = 0; if (l + 1 \u0026lt; r) { p-\u0026gt; ls = sgtBuild(l, midp(p)); p-\u0026gt; rs = sgtBuild(midp(p), r); } return p; } inline void sgtChg(seg* p, int po, int vo) { if (p-\u0026gt; l + 1 == p-\u0026gt; r) p-\u0026gt; v += vo; else { if (po \u0026lt; midp(p)) sgtChg(p-\u0026gt; ls, po, vo); else sgtChg(p-\u0026gt; rs, po, vo); p-\u0026gt; v = max(p-\u0026gt; ls-\u0026gt; v, p-\u0026gt; rs-\u0026gt; v); } }","title":"bzoj3922.cc"},{"content":"迷之数据结构.我的想法比较简单,确定一个值b,对所有小于b的k建线段树维护,对大于b的k直接朴素找.\n于是时间复杂度算起来比较迷.\n试了一下发现b取20的时候能过.虽然还是跑得最慢的一个.无语喽.大概我不是正解.\n","permalink":"/oi/dbimport_214/","summary":"迷之数据结构.我的想法比较简单,确定一个值b,对所有小于b的k建线段树维护,对大于b的k直接朴素找.\n于是时间复杂度算起来比较迷.\n试了一下发现b取20的时候能过.虽然还是跑得最慢的一个.无语喽.大概我不是正解.","title":"bzoj3922 Karin的弹幕"},{"content":"#include #include #include #include using namespace std;\n#define dir_l 2 #define dir_r 3\nstruct circle { double x, y, r; void read() { scanf(\u0026quot;%lf%lf%lf\u0026quot;, \u0026amp;x, \u0026amp;y, \u0026amp;r); } };\ntypedef pair \u0026lt;double, int\u0026gt; dpr;\ninline double sqr(double x) { return x * x; }\nconst int maxn = 100009; const double finf = 1e23; const double eps = 1e-8;\nint n, t; dpr y[maxn * 2]; circle c[maxn];\nint checkDir(double x) { int wl(0), wr(0); t = 0; for (int i = 1; i \u0026lt;= n; ++ i) if (c[i]. x + c[i]. r \u0026lt;= x) { ++ wl; } else if (c[i]. x - c[i]. r \u0026gt;= x) { ++ wr; } else { double dt(sqrt(sqr(c[i]. r) - sqr(x - c[i]. x))); y[t ++] = dpr(c[i]. y - dt, i); y[t ++] = dpr(c[i]. y + dt, -i); } if (wl \u0026amp;\u0026amp; wr) return 0; if (wl) return dir_l; if (wr) return dir_r; sort(y, y + t); int mb(-1), me(-1), ca(0); for (int i = 0, c = 0; i \u0026lt; t; ca = max(ca, c), ++ i) if (y[i]. second \u0026gt; 0) { me = y[i]. second; ++ c; } else { if (mb == -1) mb = -y[i]. second; \u0026ndash; c; } if (ca == n) return 1; if (c[mb]. x == x \u0026amp;\u0026amp; c[me]. x == x) return 0; else if (c[me]. x == x) swap(mb, me); if (c[mb]. x == x) { if (c[me]. x \u0026gt; x) return dir_r; else return dir_l; } else { int da(c[mb]. x \u0026lt; x); int db(c[me]. x \u0026lt; x); if (da != db) return 0; else if (da) return dir_l; else return dir_r; } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026quot;.in\u0026quot;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;n); double l(-finf), r(finf); for (int i = 1; i \u0026lt;= n; ++ i) { c[i]. read(); l = max(l, c[i]. x - c[i]. r + eps); r = min(r, c[i]. x + c[i]. r - eps); } int ret(0); while (l + eps \u0026lt; r) { double mid((l + r) / 2); int g(checkDir(mid)); if (g \u0026lt; 2) { ret = g; break; } else if (g == dir_l) r = mid - eps; else l = mid + eps; } puts(ret ? \u0026quot;YES\u0026quot; : \u0026quot;NO\u0026quot;); }\n","permalink":"/code/dbimport_135/","summary":"#include #include #include #include using namespace std;\n#define dir_l 2 #define dir_r 3\nstruct circle { double x, y, r; void read() { scanf(\u0026quot;%lf%lf%lf\u0026quot;, \u0026amp;x, \u0026amp;y, \u0026amp;r); } };\ntypedef pair \u0026lt;double, int\u0026gt; dpr;\ninline double sqr(double x) { return x * x; }\nconst int maxn = 100009; const double finf = 1e23; const double eps = 1e-8;\nint n, t; dpr y[maxn * 2]; circle c[maxn];\nint checkDir(double x) { int wl(0), wr(0); t = 0; for (int i = 1; i \u0026lt;= n; ++ i) if (c[i].","title":"bzoj2289.cc"},{"content":"白天讲课讲到的题。感觉比较有意思于是就去写了。然后这也是我超过于教授的题。感觉还是挺有意义的。\n之前遇到过这个题。不过没有想出比较靠谱的方法。然后就用黑暗水过了。这回算是来对地方了。\n做法比较简单。二分一个xo，看x=xo这条直线上有没有一部分被所有圆覆盖。如果有就ok。没有的话，如果有圆完全在它左或者它右，那么可以确定二分往哪边走或者无解。否则去随便找两个不相交的圆。如果它们在不同侧那就没有解了。在同一侧也可以确定方向。虽然我觉得没解这个地方需要再想想严格的证明。\n不过反正填了2个点分之后终于写了道有意思的题，开心ing。\nHistorical Comments Unknown friend at 2016-01-18T08:27:34 @bzoj2289: “否则去随便找两个不相交的圆。如果它们在不同侧那就没有解了。” QAQ这里是有反例的……！ \u0026mdash;- anonymous\nUnknown friend at 2016-01-18T08:27:34 @bzoj2289: “否则去随便找两个不相交的圆。如果它们在不同侧那就没有解了。” QAQ这里是有反例的……！ \u0026mdash;- anonymous\nUnknown friend at 2016-01-18T22:40:55 @bzoj2289: 也许是吧= =表示高考解析几何比这玩意好玩多了ovo还有啊匿名是几个意思ovo \u0026mdash;- laekov\nUnknown friend at 2016-01-18T22:40:55 @bzoj2289: 也许是吧= =表示高考解析几何比这玩意好玩多了ovo还有啊匿名是几个意思ovo \u0026mdash;- laekov\n","permalink":"/oi/dbimport_136/","summary":"白天讲课讲到的题。感觉比较有意思于是就去写了。然后这也是我超过于教授的题。感觉还是挺有意义的。\n之前遇到过这个题。不过没有想出比较靠谱的方法。然后就用黑暗水过了。这回算是来对地方了。\n做法比较简单。二分一个xo，看x=xo这条直线上有没有一部分被所有圆覆盖。如果有就ok。没有的话，如果有圆完全在它左或者它右，那么可以确定二分往哪边走或者无解。否则去随便找两个不相交的圆。如果它们在不同侧那就没有解了。在同一侧也可以确定方向。虽然我觉得没解这个地方需要再想想严格的证明。\n不过反正填了2个点分之后终于写了道有意思的题，开心ing。\nHistorical Comments Unknown friend at 2016-01-18T08:27:34 @bzoj2289: “否则去随便找两个不相交的圆。如果它们在不同侧那就没有解了。” QAQ这里是有反例的……！ \u0026mdash;- anonymous\nUnknown friend at 2016-01-18T08:27:34 @bzoj2289: “否则去随便找两个不相交的圆。如果它们在不同侧那就没有解了。” QAQ这里是有反例的……！ \u0026mdash;- anonymous\nUnknown friend at 2016-01-18T22:40:55 @bzoj2289: 也许是吧= =表示高考解析几何比这玩意好玩多了ovo还有啊匿名是几个意思ovo \u0026mdash;- laekov\nUnknown friend at 2016-01-18T22:40:55 @bzoj2289: 也许是吧= =表示高考解析几何比这玩意好玩多了ovo还有啊匿名是几个意思ovo \u0026mdash;- laekov","title":"bzoj2289 POJ Challenge圆，圆，圆"},{"content":"#include #include #include using namespace std;\nstruct edge { int t, v; edge *next; };\ntypedef pair \u0026lt;int, int\u0026gt; dpr; struct seg { dpr d; int l, r; seg *ls, *rs; };\nstruct ptrec { dpr d; int l, r, du; seg *rt; }; inline bool operator \u0026lt;(const ptrec\u0026amp; a, const ptrec\u0026amp; b) { return a. d. first \u0026lt; b. d. first; }\nconst int maxn = 50009; const int maxl = 17; const int maxbuf = maxn * maxl;\nint n, m; int vis[maxn], tvis; int dd[maxn], df[maxl][maxn], dl[maxl][maxn], ds[maxl][maxn], *ar[maxn]; int ibuf_arr[maxbuf], *ibuf(ibuf_arr); edge ebuf_arr[maxn \u0026laquo; 2], *ebuf(ebuf_arr), *head[maxn]; seg sbuf_arr[maxbuf * 3], *sbuf(sbuf_arr), *rt[maxn]; ptrec rhp[maxbuf + 300000]; int th;\ninline void addEdge(int u, int v, int w) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; v = w; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\nnamespace tree_kit { int n, sz[maxn], d, ret, retv, dfo; inline void init(int no, int cd, int ci) { retv = (n = no) + 1; d = dl[cd]; dfo = ci; } void dfsCenter(int p) { int ms(1); vis[p] = tvis; sz[p] = 1; for (edge e = head[p]; e; e = e-\u0026gt; next) if (!dd[e-\u0026gt; t] \u0026amp;\u0026amp; vis[e-\u0026gt; t] != tvis) { dfsCenter(e-\u0026gt; t); sz[p] += sz[e-\u0026gt; t]; ms = max(ms, sz[e-\u0026gt; t]); } ms = max(ms, n - sz[p]); if (ms \u0026lt; retv) retv = ms, ret = p; } void dfsDepth(int p, int fr) { if (!fr) d[p] = 0; (dfo ++) = d[p]; sz[p] = 1; for (edge e = head[p]; e; e = e-\u0026gt; next) if (!dd[e-\u0026gt; t] \u0026amp;\u0026amp; e-\u0026gt; t != fr) { d[e-\u0026gt; t] = d[p] + e-\u0026gt; v; dfsDepth(e-\u0026gt; t, p); sz[p] += sz[e-\u0026gt; t]; } } };\n#define midp ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1) inline seg* sgtBuild(int l, int r, int* ar) { seg p(sbuf ++); p-\u0026gt; l = l; p-\u0026gt; r = r; if (l + 1 \u0026lt; r) { p-\u0026gt; ls = sgtBuild(l, midp, ar); p-\u0026gt; rs = sgtBuild(midp, r, ar); p-\u0026gt; d = max(p-\u0026gt; ls-\u0026gt; d, p-\u0026gt; rs-\u0026gt; d); } else p-\u0026gt; d = dpr(ar[l], l); return p; } inline dpr sgtQry(seg p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) return p-\u0026gt; d; else if (r \u0026lt;= midp) return sgtQry(p-\u0026gt; ls, l, r); else if (l \u0026gt;= midp) return sgtQry(p-\u0026gt; rs, l, r); else return max(sgtQry(p-\u0026gt; ls, l, midp), sgtQry(p-\u0026gt; rs, midp, r)); }\ninline ptrec makeRec(int l, int r, int du, seg* rt) { ptrec ret; ret. l = l, ret. r = r; ret. d = sgtQry(rt, l, r); ret. d. first += (ret. du = du); ret. rt = rt; return ret; }\nvoid divide(int ph, int dc, int sa) { ++ tvis; tree_kit :: init(sa, dc, ibuf); tree_kit :: dfsCenter(ph); int c(tree_kit :: ret); tree_kit :: dfsDepth(c, 0); dd[c] = dc; ar[c] = ibuf; ibuf += sa; int ci(0); for (edge* e = head[c]; e; e = e-\u0026gt; next) if (!dd[e-\u0026gt; t]) { ds[dc][ci] = tree_kit :: sz[e-\u0026gt; t]; divide(e-\u0026gt; t, dc + 1, ds[dc][ci]); ++ ci; } rt[c] = sgtBuild(0, sa, ar[c]); for (int i = 1, j = 0, csz = 1; i \u0026lt; sa; ++ i) { for (; j \u0026lt; ci \u0026amp;\u0026amp; i \u0026gt;= csz + ds[dc][j]; ++ j) csz += ds[dc][j]; rhp[th ++] = makeRec(0, csz, ar[c][i], rt[c]); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); memset(head, 0, sizeof(head)); for (int i = 1; i \u0026lt; n; ++ i) { int u, v, w; scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;u, \u0026amp;v, \u0026amp;w); addEdge(u, v, w); addEdge(v, u, w); } memset(dd, 0, sizeof(dd)); memset(vis, 0, sizeof(vis)); tvis = 0; th = 0; divide(1, 1, n); make_heap(rhp, rhp + th); while (m --) { ptrec g(rhp[0]); pop_heap(rhp, rhp + th --); printf(\u0026quot;%d\\n\u0026quot;, g. d. first); int po(g. d. second); if (po \u0026gt; g. l) { rhp[th] = makeRec(g. l, po, g. du, g. rt); push_heap(rhp, rhp + ++ th); } if (po + 1 \u0026lt; g. r) { rhp[th] = makeRec(po + 1, g. r, g. du, g. rt); push_heap(rhp, rhp + ++ th); } } }\n","permalink":"/code/dbimport_207/","summary":"#include #include #include using namespace std;\nstruct edge { int t, v; edge *next; };\ntypedef pair \u0026lt;int, int\u0026gt; dpr; struct seg { dpr d; int l, r; seg *ls, *rs; };\nstruct ptrec { dpr d; int l, r, du; seg *rt; }; inline bool operator \u0026lt;(const ptrec\u0026amp; a, const ptrec\u0026amp; b) { return a. d. first \u0026lt; b. d. first; }\nconst int maxn = 50009; const int maxl = 17; const int maxbuf = maxn * maxl;","title":"bzoj3784.cc"},{"content":"又是idy开的坑。感觉回去要被他吊打致残。\n树分治。最开始想用二分，然后直接去每个分治点上查询。这样的总复杂度是O(n*log3n)的。不过感觉常数比较小而且绝对省代码，只用二分不用数据结构。然后发现要输出所有的边。这个算法要用容斥一样的东西来减，根本搞不定。\n于是向mhy学习。使用类似noi那个超级钢琴的思路，每次把最大的一条路径找出来，然后找它的替代品。树分治后，对于每一个树上的团，算出它的dfs序。默认一个点与dfs序在它前面的区间中最深的连边。这样就可以保证不重，也比较好写。然后用堆来维护。堆中一个点需要记录的信息是这个点的答案，线段树的根，左右端点，这个点到分治团的根的距离。然后每次找出一个最大的之后把它的区间再折成两半扔回堆里就好啦。\n比较神的做法。感觉我自己是想不出来的。要是考场上遇到还真会出事呢。郁闷ing。\n","permalink":"/oi/dbimport_208/","summary":"又是idy开的坑。感觉回去要被他吊打致残。\n树分治。最开始想用二分，然后直接去每个分治点上查询。这样的总复杂度是O(n*log3n)的。不过感觉常数比较小而且绝对省代码，只用二分不用数据结构。然后发现要输出所有的边。这个算法要用容斥一样的东西来减，根本搞不定。\n于是向mhy学习。使用类似noi那个超级钢琴的思路，每次把最大的一条路径找出来，然后找它的替代品。树分治后，对于每一个树上的团，算出它的dfs序。默认一个点与dfs序在它前面的区间中最深的连边。这样就可以保证不重，也比较好写。然后用堆来维护。堆中一个点需要记录的信息是这个点的答案，线段树的根，左右端点，这个点到分治团的根的距离。然后每次找出一个最大的之后把它的区间再折成两半扔回堆里就好啦。\n比较神的做法。感觉我自己是想不出来的。要是考场上遇到还真会出事呢。郁闷ing。","title":"bzoj3784 树上的路径"},{"content":"没有五笔好烦。\n无语的期望题。AC第一页最长。\n首先用像借教室一样的做法去求每个位置被覆盖了多少次。然后一个下降的序列需要求导再积回来。然后发现要加回来，这个东西是不能积的。于是坑了我好久。\n最后期望就是∑1-Pim。其中Pi表示第i个点被任意一个区间覆盖的概率。\n水过去啦。\n","permalink":"/oi/dbimport_155/","summary":"没有五笔好烦。\n无语的期望题。AC第一页最长。\n首先用像借教室一样的做法去求每个位置被覆盖了多少次。然后一个下降的序列需要求导再积回来。然后发现要加回来，这个东西是不能积的。于是坑了我好久。\n最后期望就是∑1-Pim。其中Pi表示第i个点被任意一个区间覆盖的概率。\n水过去啦。","title":"bzoj2698 染色"},{"content":"#include #include #include #include using namespace std;\ntypedef long long dint;\nconst int maxn = 1000009;\nint n, m, l, r; dint a[maxn], b[maxn], ss[maxn], sv[maxn], sa[maxn], sr[maxn], tot; double ans;\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d%d%d\u0026quot;, \u0026amp;n, \u0026amp;m, \u0026amp;l, \u0026amp;r); memset(sv, 0, sizeof(sv)); memset(sa, 0, sizeof(sa)); tot = 0; for (int i = 1; i + l - 1 \u0026lt;= n; ++ i) { int li(i + l - 1), ri(min(n, i + r - 1)); tot += ri - li + 1; sv[i] += ri - li + 1; sv[ri + 1] -= ri - li + 1; if (li \u0026lt; ri) { sa[li + 1] -= 1; sa[ri + 1] += 1; sr[ri + 1] += ri - li; } } a[0] = b[0] = 0; dint ad(0); for (int i = 1; i \u0026lt;= n; ++ i) { ad += sa[i]; a[i] = a[i - 1] + sv[i]; b[i] = b[i - 1] + ad + sr[i]; } for (int i = 1; i \u0026lt;= n; ++ i) a[i] += b[i]; ans = 0; for (int i = 1; i \u0026lt;= n; ++ i) ans += 1.0 - pow(((double)tot - a[i]) / (double)tot, m); printf(\u0026quot;%.3lf\\n\u0026quot;, ans); }\n","permalink":"/code/dbimport_154/","summary":"#include #include #include #include using namespace std;\ntypedef long long dint;\nconst int maxn = 1000009;\nint n, m, l, r; dint a[maxn], b[maxn], ss[maxn], sv[maxn], sa[maxn], sr[maxn], tot; double ans;\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d%d%d\u0026quot;, \u0026amp;n, \u0026amp;m, \u0026amp;l, \u0026amp;r); memset(sv, 0, sizeof(sv)); memset(sa, 0, sizeof(sa)); tot = 0; for (int i = 1; i + l - 1 \u0026lt;= n; ++ i) { int li(i + l - 1), ri(min(n, i + r - 1)); tot += ri - li + 1; sv[i] += ri - li + 1; sv[ri + 1] -= ri - li + 1; if (li \u0026lt; ri) { sa[li + 1] -= 1; sa[ri + 1] += 1; sr[ri + 1] += ri - li; } } a[0] = b[0] = 0; dint ad(0); for (int i = 1; i \u0026lt;= n; ++ i) { ad += sa[i]; a[i] = a[i - 1] + sv[i]; b[i] = b[i - 1] + ad + sr[i]; } for (int i = 1; i \u0026lt;= n; ++ i) a[i] += b[i]; ans = 0; for (int i = 1; i \u0026lt;= n; ++ i) ans += 1.","title":"bzoj2698.cc"},{"content":"迷一样的欧拉序列的题。然后似乎只有岛君的题解能看啊233。\n其实就是在欧拉序列上，两点u,v之间的距离=(dfb[u], dfe[v]]之间未匹配的括号数（左开右闭）。其中dfb表示左括号的位置，dfe表示右括号的位置。\n然后就是写一个线段树去维护了。写得比较丑，把所有数对都记下来了。其实只用记和跟差就行了。然后要强制如果一端是空的那么这个点就不能作为端点。完了。\n然后dfs这一步越写越短了，开心hhh。\n于是代码巨长还巨丑还巨慢。\n","permalink":"/oi/dbimport_114/","summary":"迷一样的欧拉序列的题。然后似乎只有岛君的题解能看啊233。\n其实就是在欧拉序列上，两点u,v之间的距离=(dfb[u], dfe[v]]之间未匹配的括号数（左开右闭）。其中dfb表示左括号的位置，dfe表示右括号的位置。\n然后就是写一个线段树去维护了。写得比较丑，把所有数对都记下来了。其实只用记和跟差就行了。然后要强制如果一端是空的那么这个点就不能作为端点。完了。\n然后dfs这一步越写越短了，开心hhh。\n于是代码巨长还巨丑还巨慢。","title":"bzoj1095 [ZJOI2007]Hide 捉迷藏"},{"content":"#include #include #include #include #include using namespace std;\nconst int buf_len = 4567; char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; } #define readOpt(x) { do { readBuf(); } while (*bufb != \u0026lsquo;G\u0026rsquo; \u0026amp;\u0026amp; *bufb != \u0026lsquo;C\u0026rsquo;); x = *bufb; }\nconst int inf = 0x3f3f3f3f;\nstruct dat { int a, b; dat() {} dat(int ao, int bo) { a = ao, b = bo; } inline int sum() { return (a \u0026lt; 0 || b \u0026lt; 0) ? -inf : (a + b); } inline int amb() { return (a \u0026lt; 0 || b \u0026lt; 0) ? -inf : (a - b); } inline int bma() { return (a \u0026lt; 0 || b \u0026lt; 0) ? -inf : (b - a); } };\ninline bool operator ==(const dat\u0026amp; a, const dat\u0026amp; b) { return a. a == b. a \u0026amp;\u0026amp; a. b == b. b; } inline bool operator !=(const dat\u0026amp; a, const dat\u0026amp; b) { return a. a != b. a || a. b != b. b; }\nstruct seg { dat al, ml, ar, mr, wh; int l, r, ans; seg *ls, *rs; inline void update(); inline void init(); }; struct edge { int t; edge *next; };\nconst int maxn = 100009; const int maxa = 200009; const dat null_dat(-inf, -inf);\nint n, m, c[maxn], cnt; int d[maxn], dfb[maxn], dfe[maxn], dfo[maxa]; edge ebuf_arr[maxa], *ebuf(ebuf_arr), *head[maxn]; seg sbuf_arr[maxa * 3], *sbuf(sbuf_arr), *rt;\ninline void addEdge(int u, int v) { ebuf-\u0026gt; t = v; ebuf-\u0026gt; next = head[u]; head[u] = ebuf ++; }\ninline dat combDat(const dat\u0026amp; a, const dat\u0026amp; b) { if (a == null_dat || b == null_dat) return null_dat; else if (a. b \u0026gt; b. a) return dat(a. a, a. b - b. a + b. b); else return dat(a. a + b. a - a. b, b. b); }\ninline void seg :: update() { register dat tmp; ans = max(ls-\u0026gt; ans, rs-\u0026gt; ans); wh = combDat(ls-\u0026gt; wh, rs-\u0026gt; wh); if (ls-\u0026gt; ar != null_dat \u0026amp;\u0026amp; rs-\u0026gt; ml != null_dat) ans = max(ans, combDat(ls-\u0026gt; ar, rs-\u0026gt; ml). sum()); if (ls-\u0026gt; mr != null_dat \u0026amp;\u0026amp; rs-\u0026gt; al != null_dat) ans = max(ans, combDat(ls-\u0026gt; mr, rs-\u0026gt; al). sum()); //update al al = ls-\u0026gt; al; if (al. sum() \u0026lt; (tmp = combDat(ls-\u0026gt; wh, rs-\u0026gt; al)). sum()) al = tmp; if (al. sum() \u0026lt; (tmp = combDat(ls-\u0026gt; wh, rs-\u0026gt; ml)). sum()) al = tmp; //update ml ml = ls-\u0026gt; ml; if (ml. bma() \u0026lt; (tmp = combDat(ls-\u0026gt; wh, rs-\u0026gt; al)). bma()) ml = tmp; if (ml. bma() \u0026lt; (tmp = combDat(ls-\u0026gt; wh, rs-\u0026gt; ml)). bma()) ml = tmp; //update ar ar = rs-\u0026gt; ar; if (ar. sum() \u0026lt; (tmp = combDat(ls-\u0026gt; ar, rs-\u0026gt; wh)). sum()) ar = tmp; if (ar. sum() \u0026lt; (tmp = combDat(ls-\u0026gt; mr, rs-\u0026gt; wh)). sum()) ar = tmp; //update mr mr = rs-\u0026gt; mr; if (mr. amb() \u0026lt; (tmp = combDat(ls-\u0026gt; ar, rs-\u0026gt; wh)). amb()) mr = tmp; if (mr. amb() \u0026lt; (tmp = combDat(ls-\u0026gt; mr, rs-\u0026gt; wh)). amb()) mr = tmp; }\ninline void seg :: init() { if (dfo[l - 1] \u0026gt; 0 \u0026amp;\u0026amp; !c[dfo[l - 1]]) { if (dfo[l] \u0026gt; 0) ar = mr = dat(0, 1); else ar = mr = dat(1, 0); } else { ar = mr = null_dat; } if (dfo[l] \u0026gt; 0 \u0026amp;\u0026amp; !c[dfo[l]]) al = ml = dat(0, 1); else al = ml = null_dat; if (al != null_dat \u0026amp;\u0026amp; ar != null_dat) ans = 1; else ans = -inf; }\n#define midp ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1) inline seg* sgtBuild(int l, int r) { seg *p(sbuf ++); p-\u0026gt; l = l; p-\u0026gt; r = r; if (p-\u0026gt; l + 1 == p-\u0026gt; r) { if (dfo[p-\u0026gt; l] \u0026lt; 0) p-\u0026gt; wh = dat(1, 0); else p-\u0026gt; wh = dat(0, 1); p-\u0026gt; init(); } else { p-\u0026gt; ls = sgtBuild(l, midp); p-\u0026gt; rs = sgtBuild(midp, r); p-\u0026gt; update(); } return p; }\ninline void sgtUpd(seg* p, int po) { if (p-\u0026gt; l + 1 == p-\u0026gt; r) { p-\u0026gt; init(); } else { if (po \u0026lt; midp) sgtUpd(p-\u0026gt; ls, po); else sgtUpd(p-\u0026gt; rs, po); p-\u0026gt; update(); } }\nvoid build() { static int stc[maxn], stv[maxn]; int tsc(1), tsv(0), dfn(0); memset(d, 0, sizeof(d)); d[stc[1] = 1] = 1; while (tsc) { int u(stc[tsc \u0026ndash;]); for (; tsv \u0026amp;\u0026amp; d[stv[tsv]] \u0026gt;= d[u]; \u0026ndash; tsv) dfo[dfe[stv[tsv]] = ++ dfn] = -stv[tsv]; stv[++ tsv] = dfo[dfb[u] = ++ dfn] = u; for (edge* e = head[u]; e; e = e-\u0026gt; next) if (!d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[u] + 1; stc[++ tsc] = e-\u0026gt; t; } } for (; tsv; \u0026ndash; tsv) dfo[dfe[stv[tsv]] = ++ dfn] = -stv[tsv]; rt = sgtBuild(1, n * 2 + 1); }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nreadInt(n); cnt = n; c[0] = 1; memset(head, 0, sizeof(head)); for (int i = 1; i \u0026lt; n; ++ i) { int u, v; readInt(u); readInt(v); addEdge(u, v); addEdge(v, u); } build(); readInt(m); while (m --) { char opt; readOpt(opt); if (opt == 'G') { if (cnt == 0) puts(\u0026quot;-1\u0026quot;); else if (cnt == 1) puts(\u0026quot;0\u0026quot;); else printf(\u0026quot;%d\\n\u0026quot;, rt-\u0026gt; ans); } else { int u; readInt(u); if (c[u]) ++ cnt; else -- cnt; c[u] ^= 1; sgtUpd(rt, dfb[u]); sgtUpd(rt, dfb[u] + 1); sgtUpd(rt, dfe[u]); if (dfe[u] \u0026lt; n * 2) sgtUpd(rt, dfe[u] + 1); } } }\n","permalink":"/code/dbimport_113/","summary":"#include #include #include #include #include using namespace std;\nconst int buf_len = 4567; char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; } #define readOpt(x) { do { readBuf(); } while (*bufb !","title":"bzoj1095.cc"},{"content":"考试。然后是膜拜已久的vfk神牛牛牛牛亲自讲课。比较感动。\n上午的题是原题大战。的确是。\n第一题感觉bzoj上见过，虽然花了一中午也没有找到。然后写了60分。其实100分和60分也差得不多了。只不过想不到嘛。这种做法还是比较通用的。要记下来。\n第二题感觉是个数学题啊。推出式子去优化。不过最后也没有能把∑里的n给拿出来。原来正解需要结合原问题去化简。这个嘛，orz烂的感觉。然后一堆式子最后还得用fft去求1~n的所有第二类斯特林数。要用取模的fft。这个东西以前都不会。可以学习一下。\n第三题是bzoj上原题啊。虽然还是不会做。然后写的时候有地方没有想对，所以连10分都没有拿到。比较郁闷。正解是一个分很多种情况讨论的贪心。唯一的想法是vfk真的好神。\n然后还讲了一道thu集训的文学。发现demi guo早就过了，而且还只有她一个人过了。感觉又orz了。然后过了一会机房的山东同学把她给hack掉了。这个就更orz了。这题讲了之后感觉还是可以一做的吖。\n最近发生了一些事情吧。关于sctsc的。据说时间推前了，而且还加上了一段时间的集训。其实也没有什么好抱怨的，因为在这件事情上我没有话语权。hbw倒是显得比较烦躁，感觉好像就是不想退役一样。其实也要有自信吧。要相信付出总是会有回报的。这么年就这样过来了。从noip完开始每一场都是最后一场了。似乎我也没有过机会让它不是。总之觉得这么些年搞OI没有让我后悔过，就已经很好了吧。好多东西都已经预习过了。现在是时候去创造自己的辉煌了。\n也看到消息说no4的某wc金牌同学被挖角去了ns。好像因为作风啥的no7的同学一直和ns就走得很远，总有一种淡淡的鄙视的感觉。就算人家去年四块金牌只能引起仇恨。然而我觉得还是应该良性竞争吧。至少不是一种互相敌视的感觉。人总是要有自己的选择的。祝该君在ns愉快。虽然我知道他看不到我些文字的。或者也许这个博客就不会再被人看到。不过无所谓吧。只是一个说说话的地方而已。\n所以我还是太年轻了，赶紧去刷题吧。\n","permalink":"/diary/dbimport_008/","summary":"考试。然后是膜拜已久的vfk神牛牛牛牛亲自讲课。比较感动。\n上午的题是原题大战。的确是。\n第一题感觉bzoj上见过，虽然花了一中午也没有找到。然后写了60分。其实100分和60分也差得不多了。只不过想不到嘛。这种做法还是比较通用的。要记下来。\n第二题感觉是个数学题啊。推出式子去优化。不过最后也没有能把∑里的n给拿出来。原来正解需要结合原问题去化简。这个嘛，orz烂的感觉。然后一堆式子最后还得用fft去求1~n的所有第二类斯特林数。要用取模的fft。这个东西以前都不会。可以学习一下。\n第三题是bzoj上原题啊。虽然还是不会做。然后写的时候有地方没有想对，所以连10分都没有拿到。比较郁闷。正解是一个分很多种情况讨论的贪心。唯一的想法是vfk真的好神。\n然后还讲了一道thu集训的文学。发现demi guo早就过了，而且还只有她一个人过了。感觉又orz了。然后过了一会机房的山东同学把她给hack掉了。这个就更orz了。这题讲了之后感觉还是可以一做的吖。\n最近发生了一些事情吧。关于sctsc的。据说时间推前了，而且还加上了一段时间的集训。其实也没有什么好抱怨的，因为在这件事情上我没有话语权。hbw倒是显得比较烦躁，感觉好像就是不想退役一样。其实也要有自信吧。要相信付出总是会有回报的。这么年就这样过来了。从noip完开始每一场都是最后一场了。似乎我也没有过机会让它不是。总之觉得这么些年搞OI没有让我后悔过，就已经很好了吧。好多东西都已经预习过了。现在是时候去创造自己的辉煌了。\n也看到消息说no4的某wc金牌同学被挖角去了ns。好像因为作风啥的no7的同学一直和ns就走得很远，总有一种淡淡的鄙视的感觉。就算人家去年四块金牌只能引起仇恨。然而我觉得还是应该良性竞争吧。至少不是一种互相敌视的感觉。人总是要有自己的选择的。祝该君在ns愉快。虽然我知道他看不到我些文字的。或者也许这个博客就不会再被人看到。不过无所谓吧。只是一个说说话的地方而已。\n所以我还是太年轻了，赶紧去刷题吧。","title":"20150326"},{"content":"来到长沙的第二天。昨天晚上感觉被子没有被晒干？\n今天早上先考一发试。开始的时候感觉这个读题复杂度略高啊。然后每个题都是一堆东西套起来，根本不会做。\n于是第一题先放一放。于是第二题和第三题可以暴力。赶紧先拿。第三题本来以为要写最小圆覆盖，几何类的模板都打好了然后发现不用写，直接输出就能30。开心。\n第二题过了一会发现hbw在swap，于是知道了那些矩阵是出题人的诡计。是可以交换的。于是直接朴素维护就行了。懒得写平衡树了，反正跑得挺快。\n然后去写第一题。yy了一会发现可以简单地搞出每个图形。于是敲，改，过。然后发现没有办法找点。于是想了一会想到一个O(n3)的东西。不管了先扔上去。然后发现和起点没有关系，虽然也不会，于是把平方的朴素又扔上去了。然后一看，原来50%的数据是x,y≤1000而不是n,m≤1000。那玩ball啊。不管了交了。\n下午看成绩，20+100+30。第一题好像拿得到分的人都不多。感觉还是挺值。虽然也只是一小步。然后后面的找点的做法比较神。等会去敲risk去。第二题被抽上去讲了hhhhhhh。第三题原来有个啥东西可以把期望降下来。然后那个矩阵还有特别的规律，行列式推起来很简单，直接乘还会乘着乘着就变成0。晕。\n然后讲的题感觉虽然少但是都很有营养。然后刚过了一道虽然被网络把题解给吞掉了。不知道有没有保存表单这种功能。\n据说同学们在南充很厉害orz。毕竟我还是太弱，\n","permalink":"/diary/dbimport_005/","summary":"来到长沙的第二天。昨天晚上感觉被子没有被晒干？\n今天早上先考一发试。开始的时候感觉这个读题复杂度略高啊。然后每个题都是一堆东西套起来，根本不会做。\n于是第一题先放一放。于是第二题和第三题可以暴力。赶紧先拿。第三题本来以为要写最小圆覆盖，几何类的模板都打好了然后发现不用写，直接输出就能30。开心。\n第二题过了一会发现hbw在swap，于是知道了那些矩阵是出题人的诡计。是可以交换的。于是直接朴素维护就行了。懒得写平衡树了，反正跑得挺快。\n然后去写第一题。yy了一会发现可以简单地搞出每个图形。于是敲，改，过。然后发现没有办法找点。于是想了一会想到一个O(n3)的东西。不管了先扔上去。然后发现和起点没有关系，虽然也不会，于是把平方的朴素又扔上去了。然后一看，原来50%的数据是x,y≤1000而不是n,m≤1000。那玩ball啊。不管了交了。\n下午看成绩，20+100+30。第一题好像拿得到分的人都不多。感觉还是挺值。虽然也只是一小步。然后后面的找点的做法比较神。等会去敲risk去。第二题被抽上去讲了hhhhhhh。第三题原来有个啥东西可以把期望降下来。然后那个矩阵还有特别的规律，行列式推起来很简单，直接乘还会乘着乘着就变成0。晕。\n然后讲的题感觉虽然少但是都很有营养。然后刚过了一道虽然被网络把题解给吞掉了。不知道有没有保存表单这种功能。\n据说同学们在南充很厉害orz。毕竟我还是太弱，","title":"20150322"},{"content":"#include #include #include using namespace std;\n#define _l (long long int)\nstruct node { int l; node *pr, *t[3]; node() { l = 0; pr = 0; memset(t, 0, sizeof(t)); } };\nconst int maxn = 1100009;\nnode nbuf_arr[maxn \u0026laquo; 1], *nbuf(nbuf_arr), *srt, *scur; int n, m, f[maxn], ml[maxn]; char a[maxn];\nvoid samIns(int w) { node *np(nbuf ++), *p; np-\u0026gt; l = scur-\u0026gt; l + 1; for (p = scur; p \u0026amp;\u0026amp; !p-\u0026gt; t[w]; p = p-\u0026gt; pr) p-\u0026gt; t[w] = np; if (p) { node *q(p-\u0026gt; t[w]); if (q-\u0026gt; l != p-\u0026gt; l + 1) { node *nq(nbuf ++); memcpy(nq, q, sizeof(node)); nq-\u0026gt; l = p-\u0026gt; l + 1; np-\u0026gt; pr = q-\u0026gt; pr = nq; for (; p \u0026amp;\u0026amp; p-\u0026gt; t[w] == q; p = p-\u0026gt; pr) p-\u0026gt; t[w] = nq; } else np-\u0026gt; pr = q; } else np-\u0026gt; pr = srt; scur = np; }\nvoid samMatch() { int cl(0); node *p(srt); for (int i = 0; i \u0026lt; n; ++ i) { int w(a[i] - 48); if (p-\u0026gt; t[w]) { ++ cl; p = p-\u0026gt; t[w]; } else { for (; p \u0026amp;\u0026amp; !p-\u0026gt; t[w]; p = p-\u0026gt; pr); if (p) { cl = p-\u0026gt; l + 1; p = p-\u0026gt; t[w]; } else { p = srt; cl = 0; } } ml[i + 1] = cl; } }\nbool checkDP(int lm) { static int q[maxn]; int hd(0), tl(0); f[0] = 0; q[0] = 0; for (int i = 1; i \u0026lt;= n; ++ i) { f[i] = f[i - 1]; int p(i - lm); if (p \u0026gt;= 0) { while (hd \u0026lt; tl \u0026amp;\u0026amp; f[q[tl - 1]] - q[tl - 1] \u0026lt; f[p] - p) \u0026ndash; tl; q[tl ++] = p; } while (hd \u0026lt; tl \u0026amp;\u0026amp; q[hd] \u0026lt; i - ml[i]) ++ hd; if (hd \u0026lt; tl) f[i] = max(f[i], f[q[hd]] + i - q[hd]); } return f[n] * 10 \u0026gt;= n * 9; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;m, \u0026amp;n); srt = scur = nbuf ++; srt-\u0026gt; l = 0; srt-\u0026gt; pr = 0; while (n --) { scanf(\u0026quot;%s\u0026quot;, a); for (char* i = a; *i; ++ i) samIns(*i - 48); samIns(2); } while (m --) { scanf(\u0026quot;%s\u0026quot;, a); n = strlen(a); samMatch(); int l(0), r(n); while (l \u0026lt; r) { int mid((l + r + 1) \u0026gt;\u0026gt; 1); if (checkDP(mid)) l = mid; else r = mid - 1; } printf(\u0026quot;%d\\n\u0026quot;, l); } }\n","permalink":"/code/dbimport_160/","summary":"#include #include #include using namespace std;\n#define _l (long long int)\nstruct node { int l; node *pr, *t[3]; node() { l = 0; pr = 0; memset(t, 0, sizeof(t)); } };\nconst int maxn = 1100009;\nnode nbuf_arr[maxn \u0026laquo; 1], *nbuf(nbuf_arr), *srt, *scur; int n, m, f[maxn], ml[maxn]; char a[maxn];\nvoid samIns(int w) { node *np(nbuf ++), *p; np-\u0026gt; l = scur-\u0026gt; l + 1; for (p = scur; p \u0026amp;\u0026amp; !","title":"bzoj2806.cc"},{"content":"我的SAM第一题。按照惯例几乎是照着std抄的OVO。本来以为是要在SAM上DP，后来发现好像是并列的，于是比较开心。\nSAM这个东西主要就是用来匹配子串用的。建法详见clj的课件，然后现在我还处于消化状态中。\nSAM匹配多个串的话也比较好弄，直接在串末再加一个字符集里没有的元素就好了。\n现在假设已经用SAM匹配出了第i个位置往左ml[i]个位置都是可以匹配的，那么可以二分一个答案，然后用单调队列来DP判断。写法比较简单，虽然我急着去写SAM所以这部分也是蒙过去的。\n然后网上的2个std就有2种不同的答案还和我不一样。最后还是wd学长的代码靠谱orz。\n现在我可以说我是写过SAM的人了哈哈。\n","permalink":"/oi/dbimport_161/","summary":"我的SAM第一题。按照惯例几乎是照着std抄的OVO。本来以为是要在SAM上DP，后来发现好像是并列的，于是比较开心。\nSAM这个东西主要就是用来匹配子串用的。建法详见clj的课件，然后现在我还处于消化状态中。\nSAM匹配多个串的话也比较好弄，直接在串末再加一个字符集里没有的元素就好了。\n现在假设已经用SAM匹配出了第i个位置往左ml[i]个位置都是可以匹配的，那么可以二分一个答案，然后用单调队列来DP判断。写法比较简单，虽然我急着去写SAM所以这部分也是蒙过去的。\n然后网上的2个std就有2种不同的答案还和我不一样。最后还是wd学长的代码靠谱orz。\n现在我可以说我是写过SAM的人了哈哈。","title":"bzoj2806 ctsc2012 Cheat"},{"content":"今天考得比较不开心啊。\n第一题似乎做过？不敢再写O(nlognsqrt(n))了，想起上回被jcvb怒斥。线段树前几天写过也不难。\n第二题似乎也见过？翻了一下原来的代码发现是tarjan然后拓补排序。于是没有想就敲了然后发现环的情况处理错了。晕啊。\n第三题直接想到了KM。然后就去写了，然后发现各种bug。打了一堆补丁之后终于能过了，然后常数被卡成和朴素一个分。我还有啥可说的呢。\n所以啊，我还是太年轻了。\n然后sam继续跪。决定去写一道题。我看有点悬。\n","permalink":"/diary/dbimport_007/","summary":"今天考得比较不开心啊。\n第一题似乎做过？不敢再写O(nlognsqrt(n))了，想起上回被jcvb怒斥。线段树前几天写过也不难。\n第二题似乎也见过？翻了一下原来的代码发现是tarjan然后拓补排序。于是没有想就敲了然后发现环的情况处理错了。晕啊。\n第三题直接想到了KM。然后就去写了，然后发现各种bug。打了一堆补丁之后终于能过了，然后常数被卡成和朴素一个分。我还有啥可说的呢。\n所以啊，我还是太年轻了。\n然后sam继续跪。决定去写一道题。我看有点悬。","title":"20150325"},{"content":"很早之前就看过的题。一直被数据范围吓到，然后感觉也比较难写所以都没写。后来发现还是挺好的。\n就重链dfs序维护一下每个位置的和，然后可持久化一下就完了。然后一个常数优化是如果这个点是在这次修改的时候建的，那么就直接覆盖而不是新建点。然后跑得就比较快了。\n","permalink":"/oi/dbimport_182/","summary":"很早之前就看过的题。一直被数据范围吓到，然后感觉也比较难写所以都没写。后来发现还是挺好的。\n就重链dfs序维护一下每个位置的和，然后可持久化一下就完了。然后一个常数优化是如果这个点是在这次修改的时候建的，那么就直接覆盖而不是新建点。然后跑得就比较快了。","title":"bzoj3221 Codechef FEB13 Obserbing the tree树上询问"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct edge { int t; edge *next; }; struct seg { dint a, b, s; int t; seg *ls, *rs; }; #define sgt_root 1,n+1 #define midp ((pl+pr)\u0026raquo;1) #define pls pl,midp #define prs midp,pr\nconst int maxn = 100009;\nint n, m, p; int d[maxn], sz[maxn], fa[maxn], tc, fc[maxn], ch[maxn], fs[maxn]; int dfb[maxn], dfe[maxn], dfo[maxn], ci, ti; edge elst[maxn \u0026laquo; 1], *ep(elst), *head[maxn]; seg *rt[0];\ninline seg* newSeg() { static const int bsz = 1000000; static int cb(1); static seg* sp; if (!\u0026ndash; cb) return cb = bsz - 1, sp = new seg[bsz]; else return ++ sp; } inline seg* cpSeg(seg* p) { seg* q(newSeg()); memcpy(q, p, sizeof(seg)); return q; }\ninline void addEdge(int u, int v) { ep-\u0026gt; t = v; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\ninline seg* sgtBuild(int pl, int pr) { seg *p(newSeg()); p-\u0026gt; t = 0; p-\u0026gt; a = p-\u0026gt; b = p-\u0026gt; s = 0; if (pl + 1 \u0026lt; pr) { p-\u0026gt; ls = sgtBuild(pls); p-\u0026gt; rs = sgtBuild(prs); } return p; }\ninline seg* sgtChg(seg* p, int pl, int pr, int l, int r, dint va, dint vb) { seg *g; if (p-\u0026gt; t == ti) { g = p; } else { g = cpSeg(p); g-\u0026gt; t = ti; } g-\u0026gt; s += va * (r - l) + ((vb * (r - l) * (r - l - 1))\u0026raquo; 1); if (pl == l \u0026amp;\u0026amp; pr == r) { g-\u0026gt; a += va; g-\u0026gt; b += vb; } else if (r \u0026lt;= midp) g-\u0026gt; ls = sgtChg(p-\u0026gt; ls, pls, l, r, va, vb); else if (l \u0026gt;= midp) g-\u0026gt; rs = sgtChg(p-\u0026gt; rs, prs, l, r, va, vb); else { g-\u0026gt; ls = sgtChg(p-\u0026gt; ls, pls, l, midp, va, vb); g-\u0026gt; rs = sgtChg(p-\u0026gt; rs, prs, midp, r, va + vb * (midp - l), vb); } return g; }\ninline dint sgtQry(seg* p, int pl, int pr, int l, int r) { if (pl == l \u0026amp;\u0026amp; pr == r) return p-\u0026gt; s; else { dint sa(p-\u0026gt; a * (r - l) + ((p-\u0026gt; b * (l + r - 1 - pl * 2) * (r - l)) \u0026raquo; 1)); if (r \u0026lt;= midp) return sgtQry(p-\u0026gt; ls, pls, l, r) + sa; else if (l \u0026gt;= midp) return sgtQry(p-\u0026gt; rs, prs, l, r) + sa; else return sgtQry(p-\u0026gt; ls, pls, l, midp) + sgtQry(p-\u0026gt; rs, prs, midp, r) + sa; } }\n#define cpos(p) (d[p]-d[ch[fc[p]]])\nvoid divide() { static int stc[maxn]; int tst(1), dfn(0); memset(d, 0, sizeof(d)); d[stc[1] = 1] = 1; fa[1] = 0; while (tst) { int p(stc[tst \u0026ndash;]); dfo[++ dfn] = p; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (!d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; fa[e-\u0026gt; t] = p; stc[++ tst] = e-\u0026gt; t; } } tc = 0; for (int i = n; i; \u0026ndash; i) { int p(dfo[i]); fs[p] = -1; sz[p] = 1; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (fa[e-\u0026gt; t] == p) { sz[p] += sz[e-\u0026gt; t]; if (fs[p] == -1 || sz[e-\u0026gt; t] \u0026gt; sz[fs[p]]) fs[p] = e-\u0026gt; t; } if (fs[p] == -1) fc[p] = ++ tc; else fc[p] = fc[fs[p]]; ch[fc[p]] = p; } stc[tst = 1] = 1; dfn = 0; while (tst) { int p(stc[tst \u0026ndash;]); dfo[dfb[p] = ++ dfn] = p; dfe[p] = dfb[p]; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (fa[e-\u0026gt; t] == p \u0026amp;\u0026amp; e-\u0026gt; t != fs[p]) stc[++ tst] = e-\u0026gt; t; if (fs[p] \u0026gt; -1) stc[++ tst] = fs[p]; } for (int i = n; i \u0026gt; 1; \u0026ndash; i) { int p(dfo[i]); dfe[fa[p]] = max(dfe[fa[p]], dfe[p]); } rt[ti = ci = 0] = sgtBuild(sgt_root); }\nint LCA(int u, int v) { while (fc[u] ^ fc[v]) if (d[ch[fc[u]]] \u0026gt; d[ch[fc[v]]]) u = fa[ch[fc[u]]]; else v = fa[ch[fc[v]]]; if (d[u] \u0026lt; d[v]) return u; else return v; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); for (int i = 1; i \u0026lt; n; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); addEdge(u, v); addEdge(v, u); } divide(); dint lans(0); while (m --) { char opt[3]; dint xo, yo; int u, v; scanf(\u0026quot;%s\u0026quot;, opt); if (opt[0] == 'c') { dint a, b; scanf(lld lld lld lld, \u0026amp;xo, \u0026amp;yo, \u0026amp;a, \u0026amp;b); u = xo ^ lans; v = yo ^ lans; int w(LCA(u, v)); ++ ti; rt[ti] = rt[ci]; ci = ti; for (; fc[u] ^ fc[w]; u = fa[ch[fc[u]]]) { a += b * cpos(u); rt[ci] = sgtChg(rt[ci], sgt_root, dfb[ch[fc[u]]], dfb[u] + 1, a, -b); a += b; } if (u ^ w) { a += b * (d[u] - d[w] - 1); rt[ci] = sgtChg(rt[ci], sgt_root, dfb[w] + 1, dfb[u] + 1, a, -b); a += b; } a += b * (d[v] - d[w]); for (; fc[v] ^ fc[w]; v = fa[ch[fc[v]]]) { a -= b * cpos(v); rt[ci] = sgtChg(rt[ci], sgt_root, dfb[ch[fc[v]]], dfb[v] + 1, a, b); a -= b; } a -= b * (d[v] - d[w]); rt[ci] = sgtChg(rt[ci], sgt_root, dfb[w], dfb[v] + 1, a, b); } else if (opt[0] == 'q') { scanf(lld lld, \u0026amp;xo, \u0026amp;yo); u = xo ^ lans; v = yo ^ lans; dint ans(0); while (fc[u] ^ fc[v]) if (d[ch[fc[u]]] \u0026gt; d[ch[fc[v]]]) { ans += sgtQry(rt[ci], sgt_root, dfb[ch[fc[u]]], dfb[u] + 1); u = fa[ch[fc[u]]]; } else { ans += sgtQry(rt[ci], sgt_root, dfb[ch[fc[v]]], dfb[v] + 1); v = fa[ch[fc[v]]]; } if (d[u] \u0026lt; d[v]) ans += sgtQry(rt[ci], sgt_root, dfb[u], dfb[v] + 1); else ans += sgtQry(rt[ci], sgt_root, dfb[v], dfb[u] + 1); printf(lld \u0026quot;\\n\u0026quot;, (lans = ans)); } else if (opt[0] == 'l') { scanf(lld, \u0026amp;xo); ci = xo ^ lans; } //\tlans = 0; } }\n","permalink":"/code/dbimport_181/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct edge { int t; edge *next; }; struct seg { dint a, b, s; int t; seg *ls, *rs; }; #define sgt_root 1,n+1 #define midp ((pl+pr)\u0026raquo;1) #define pls pl,midp #define prs midp,pr\nconst int maxn = 100009;\nint n, m, p; int d[maxn], sz[maxn], fa[maxn], tc, fc[maxn], ch[maxn], fs[maxn]; int dfb[maxn], dfe[maxn], dfo[maxn], ci, ti; edge elst[maxn \u0026laquo; 1], *ep(elst), *head[maxn]; seg *rt[0];","title":"bzoj3221.cc"},{"content":"其实前几天已经发现状态不好了吧。不过昨天听了hbw一席话所以还是rank1。今天就暴露了。\n考试的时候感觉比较晕，也不想写代码。\n第一题想到树形DP，想到链剖，想到几种似乎可以维护的方式。然后又都否掉了。最后听说正解就是我否掉的解法中的一种。\n第二题想到了枚举环算树。不过对那个prufer序列并不熟悉，所以根本没有想到正确的东西。然后朴素打表还打错了。\n第三题在学军见过啊。不过当时只会指数dp现在也只会指数dp。似乎是一个很神奇的容斥？no save。\n所以我太弱了。\n每年春天似乎都会遇到这样一段日子，感觉整个人都不太顺。是不是应该想些什么办法去抵抗？我不是一个服输的人啊。嗯。\n","permalink":"/diary/dbimport_006/","summary":"其实前几天已经发现状态不好了吧。不过昨天听了hbw一席话所以还是rank1。今天就暴露了。\n考试的时候感觉比较晕，也不想写代码。\n第一题想到树形DP，想到链剖，想到几种似乎可以维护的方式。然后又都否掉了。最后听说正解就是我否掉的解法中的一种。\n第二题想到了枚举环算树。不过对那个prufer序列并不熟悉，所以根本没有想到正确的东西。然后朴素打表还打错了。\n第三题在学军见过啊。不过当时只会指数dp现在也只会指数dp。似乎是一个很神奇的容斥？no save。\n所以我太弱了。\n每年春天似乎都会遇到这样一段日子，感觉整个人都不太顺。是不是应该想些什么办法去抵抗？我不是一个服输的人啊。嗯。","title":"20150323"},{"content":"上课讲的神题。构造公式。本来用HTML写了一堆公式的。然后天杀的网就断了要我重新开然后就没了。很想骂人。那就不写了呗，自行翻课件或者yy。\n","permalink":"/oi/dbimport_190/","summary":"上课讲的神题。构造公式。本来用HTML写了一堆公式的。然后天杀的网就断了要我重新开然后就没了。很想骂人。那就不写了呗，自行翻课件或者yy。","title":"bzoj3328 PYXFIB"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int) #define mInc(a,b) { a += b; if (a \u0026gt;= mod) a -= mod; }\nconst int maxn = 40009;\ndint n; int k, mod;\nstruct matrix { static const int n = 2; int a[n][n]; matrix() {} void init() { memset(a, 0, sizeof(a)); } void setOne() { memset(a, 0, sizeof(a)); for (int i = 0; i \u0026lt; n; ++ i) a[i][i] = 1; } void operator =(const matrix\u0026amp; b) { memcpy(a, b. a, sizeof(a)); } void mul(int b) { for (int i = 0; i \u0026lt; n; ++ i) for (int j = 0; j \u0026lt; n; ++ j) a[i][j] = _l a[i][j] * b % mod; } void mul(const matrix\u0026amp; b) { static int s[n][n]; memset(s, 0, sizeof(s)); for (int k = 0; k \u0026lt; n; ++ k) for (int i = 0; i \u0026lt; n; ++ i) for (int j = 0; j \u0026lt; n; ++ j) s[i][j] = (s[i][j] + _l a[i][k] * b. a[k][j]) % mod; memcpy(a, s, sizeof(a)); } void add(const matrix\u0026amp; b) { for (int i = 0; i \u0026lt; n; ++ i) for (int j = 0; j \u0026lt; n; ++ j) mInc(a[i][j], b. a[i][j]); } };\nint modPow(int a, dint x) { int s(1); for (; x; x \u0026raquo;= 1, a = _l a * a % mod) if (x \u0026amp; 1) s = _l s * a % mod; return s; }\nint findRoot() { static int fac[maxn]; int tfac(0); for (int i = 1, v = mod - 1; i * i \u0026lt;= v; ++ i) if (v % i == 0) { fac[tfac ++] = i; if (i \u0026gt; 1 \u0026amp;\u0026amp; i * i \u0026lt; v) fac[tfac ++] = v / i; } for (int i = 1; 1; ++ i) { bool f(1); for (int j = 0; j \u0026lt; tfac \u0026amp;\u0026amp; f; ++ j) if (modPow(i, fac[j]) == 1) f = 0; if (f) return i; } }\nint sov() { int wo(modPow(findRoot(), (mod - 1) / k)), wi(modPow(wo, mod - 2)); int wf(1), w(1), s(0); matrix a, g; for (int i = 0; i \u0026lt; k; ++ i, w = _l w * wi % mod, wf = _l wf * wo % mod) { a. setOne(); a. mul(w); mInc(a. a[0][0], 1); mInc(a. a[0][1], 1); mInc(a. a[1][0], 1); g. setOne(); for (dint x = n; x; x \u0026raquo;= 1, a. mul(a)) if (x \u0026amp; 1) g. mul(a); g. mul(modPow(wf, n)); mInc(s, g. a[0][0]); } return _l s * modPow(k, mod - 2) % mod; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nint t; scanf(\u0026quot;%d\\n\u0026quot;, \u0026amp;t); while (t --) { scanf(lld \u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;k, \u0026amp;mod); printf(\u0026quot;%d\\n\u0026quot;, sov()); } }\n","permalink":"/code/dbimport_189/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int) #define mInc(a,b) { a += b; if (a \u0026gt;= mod) a -= mod; }\nconst int maxn = 40009;\ndint n; int k, mod;\nstruct matrix { static const int n = 2; int a[n][n]; matrix() {} void init() { memset(a, 0, sizeof(a)); } void setOne() { memset(a, 0, sizeof(a)); for (int i = 0; i \u0026lt; n; ++ i) a[i][i] = 1; } void operator =(const matrix\u0026amp; b) { memcpy(a, b.","title":"bzoj3328.cc"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 1009; const dint inf = 0x3f3f3f3f3f3f3f3fll;\nint n, m, ca[maxn], cb[maxn], ta, tb; dint f[maxn][maxn][5];\n#define upMin(a,b) { if (a \u0026gt; b) a = b; }\ndint dp() { memset(f, 0x3f, sizeof(f)); if (ta) f[1][0][0] = ca[0] * n; if (tb) f[0][1][2] = cb[0] * n; for (int i = 0; i \u0026lt;= ta; ++ i) for (int j = 0; j \u0026lt;= tb; ++ j) if (n - i - j \u0026gt; 0) { int cc(n - i - j); if (f[i][j][0] \u0026lt; inf) { if (i \u0026lt; ta) upMin(f[i + 1][j][1], f[i][j][0] + ca[i] * cc); if (j \u0026lt; tb) upMin(f[i][j + 1][2], f[i][j][0] + cb[j] * cc); } if (f[i][j][1] \u0026lt; inf) { if (j \u0026lt; tb) upMin(f[i][j + 1][2], f[i][j][1] + cb[j] * cc); } if (f[i][j][2] \u0026lt; inf) { if (i \u0026lt; ta) upMin(f[i + 1][j][0], f[i][j][2] + ca[i] * cc); if (j \u0026lt; tb) upMin(f[i][j + 1][3], f[i][j][2] + cb[j] * cc); } if (f[i][j][3] \u0026lt; inf) { if (i \u0026lt; ta) upMin(f[i + 1][j][0], f[i][j][3] + ca[i] * cc); } } dint ans(inf); for (int i = 0; i \u0026lt;= n; ++ i) for (int j = 0; j \u0026lt; 4; ++ j) upMin(ans, f[i][n - i][j]); return ans; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); ta = tb = 0; for (int i = 0; i \u0026lt; m; ++ i) { int co, ty; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;co, \u0026amp;ty); if (!ty) ca[ta ++] = co; else cb[tb ++] = co; } sort(ca, ca + ta); sort(cb, cb + tb); printf(lld \u0026quot;\\n\u0026quot;, dp()); }\n","permalink":"/code/dbimport_156/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 1009; const dint inf = 0x3f3f3f3f3f3f3f3fll;\nint n, m, ca[maxn], cb[maxn], ta, tb; dint f[maxn][maxn][5];\n#define upMin(a,b) { if (a \u0026gt; b) a = b; }\ndint dp() { memset(f, 0x3f, sizeof(f)); if (ta) f[1][0][0] = ca[0] * n; if (tb) f[0][1][2] = cb[0] * n; for (int i = 0; i \u0026lt;= ta; ++ i) for (int j = 0; j \u0026lt;= tb; ++ j) if (n - i - j \u0026gt; 0) { int cc(n - i - j); if (f[i][j][0] \u0026lt; inf) { if (i \u0026lt; ta) upMin(f[i + 1][j][1], f[i][j][0] + ca[i] * cc); if (j \u0026lt; tb) upMin(f[i][j + 1][2], f[i][j][0] + cb[j] * cc); } if (f[i][j][1] \u0026lt; inf) { if (j \u0026lt; tb) upMin(f[i][j + 1][2], f[i][j][1] + cb[j] * cc); } if (f[i][j][2] \u0026lt; inf) { if (i \u0026lt; ta) upMin(f[i + 1][j][0], f[i][j][2] + ca[i] * cc); if (j \u0026lt; tb) upMin(f[i][j + 1][3], f[i][j][2] + cb[j] * cc); } if (f[i][j][3] \u0026lt; inf) { if (i \u0026lt; ta) upMin(f[i + 1][j][0], f[i][j][3] + ca[i] * cc); } } dint ans(inf); for (int i = 0; i \u0026lt;= n; ++ i) for (int j = 0; j \u0026lt; 4; ++ j) upMin(ans, f[i][n - i][j]); return ans; }","title":"bzoj2700.cc"},{"content":"比较基础的dp。不过因为权限的原因好像做的人不多。\n首先肯定先泡便宜的茶再泡贵的茶。\n然后记一下上一种茶是啥，连续泡了几次。\n于是用f[i][j][k][l]表示泡了i个红茶，j个绿茶，上一种茶是k，连续泡了l次的最小花费。转移是O(1)的。然后后两个反正都要手拆开，所以干脆压下来了。\n似乎很水的样子。\n","permalink":"/oi/dbimport_157/","summary":"比较基础的dp。不过因为权限的原因好像做的人不多。\n首先肯定先泡便宜的茶再泡贵的茶。\n然后记一下上一种茶是啥，连续泡了几次。\n于是用f[i][j][k][l]表示泡了i个红茶，j个绿茶，上一种茶是k，连续泡了l次的最小花费。转移是O(1)的。然后后两个反正都要手拆开，所以干脆压下来了。\n似乎很水的样子。","title":"bzoj2700 聚会"},{"content":"#include #include #include #include using namespace std;\nconst int max_buf = 4567; char buf[max_buf], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; }\nstruct query { int t, x, y, v; };\nconst int maxn = 500009; const int maxm = 800009;\nint t[maxn], vis[maxn], ans[maxm], tvis, n, m, cq; query q[maxm], b[maxm];\nvoid btChg(int p, int v) { for (; p \u0026lt;= n; p += (p \u0026amp; -p)) if (vis[p] \u0026lt; tvis) vis[p] = tvis, t[p] = v; else t[p] += v; } int btQry(int p) { int s(0); for (; p; p -= (p \u0026amp; -p)) if (vis[p] == tvis) s += t[p]; return s; }\nvoid cdq(query* q, int n) { if (n \u0026lt;= 1) return; int md(n \u0026raquo; 1); cdq(q, md); cdq(q + md, n - md); ++ tvis; for (int i = 0, j = md, t = 0; i \u0026lt; md || j \u0026lt; n; ++ t) { if (i == md || (j \u0026lt; n \u0026amp;\u0026amp; q[j]. x \u0026lt; q[i]. x)) { b[t] = q[j ++]; if (b[t]. t == 1) ans[b[t]. v] += btQry(b[t]. y); else if (b[t]. t == 2) ans[b[t]. v] -= btQry(b[t]. y); } else { b[t] = q[i ++]; if (b[t]. t == 0) btChg(b[t]. y, b[t]. v); } } for (int i = 0; i \u0026lt; n; ++ i) q[i] = b[i]; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nreadInt(n); memset(vis, 0, sizeof(vis)); tvis = 0; m = 0; cq = 0; while (1) { int opt, u, v, p, q; readInt(opt); if (opt == 3) break; readInt(u); readInt(v); if (opt == 1) { :: q[m]. t = 0; :: q[m]. x = u; :: q[m]. y = v; readInt(:: q[m]. v); ++ m; } else { readInt(p); readInt(q); -- u; -- v; :: q[m]. t = 1; :: q[m]. v = cq; :: q[m]. x = u; :: q[m]. y = v; ++ m; :: q[m]. t = 1; :: q[m]. v = cq; :: q[m]. x = p; :: q[m]. y = q; ++ m; :: q[m]. t = 2; :: q[m]. v = cq; :: q[m]. x = u; :: q[m]. y = q; ++ m; :: q[m]. t = 2; :: q[m]. v = cq; :: q[m]. x = p; :: q[m]. y = v; ++ m; ans[cq ++] = 0; } } cdq(q, m); for (int i = 0; i \u0026lt; cq; ++ i) printf(\u0026quot;%d\\n\u0026quot;, ans[i]); }\n","permalink":"/code/dbimport_152/","summary":"#include #include #include #include using namespace std;\nconst int max_buf = 4567; char buf[max_buf], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; }\nstruct query { int t, x, y, v; };","title":"bzoj2683.cc"},{"content":"水水的cdq。久了不写练一下手。然后发现犯了一堆逗错。幸好没过样例不然就do big die了。\n","permalink":"/oi/dbimport_153/","summary":"水水的cdq。久了不写练一下手。然后发现犯了一堆逗错。幸好没过样例不然就do big die了。","title":"bzoj2683 简单题"},{"content":"怎么还审不过啊。打击积极性呢这。\n再次被虐。\n考试的时候总觉得题不可做啊。也许是心态异也？or多年的春季发冬？\n第一题一直在想怎么整体算一个数的贡献，就搞忘了去找找一对数的贡献。晕。\n第二题写的是三方的dp，然后记搜各种剪枝把随机数据给水过去了。mhy那种交替前移的才是正解。orz。这个题还是最后吃饭之前才发现写得有问题搞出来的。晕死了。\n第三题想对了矩阵转移的思路。但是被i≤k的情况烦到了一直没有搞定。最后也没有调出来于是只好交暴力。最后mhy一句话，说answer可以是s[k-1]，秒懂然后就过了。最近做题似乎总欠别人一句话的感觉。\n然后下午也没有心情再写题了。于是剩下的半天时间都花去码oj了。我是不是太颓废了。\n所以我还是太弱。\n","permalink":"/diary/dbimport_004/","summary":"怎么还审不过啊。打击积极性呢这。\n再次被虐。\n考试的时候总觉得题不可做啊。也许是心态异也？or多年的春季发冬？\n第一题一直在想怎么整体算一个数的贡献，就搞忘了去找找一对数的贡献。晕。\n第二题写的是三方的dp，然后记搜各种剪枝把随机数据给水过去了。mhy那种交替前移的才是正解。orz。这个题还是最后吃饭之前才发现写得有问题搞出来的。晕死了。\n第三题想对了矩阵转移的思路。但是被i≤k的情况烦到了一直没有搞定。最后也没有调出来于是只好交暴力。最后mhy一句话，说answer可以是s[k-1]，秒懂然后就过了。最近做题似乎总欠别人一句话的感觉。\n然后下午也没有心情再写题了。于是剩下的半天时间都花去码oj了。我是不是太颓废了。\n所以我还是太弱。","title":"20150319"},{"content":"多年之前讲过的最小割。\n比较好想啦。\n把每一位拆开。然后单独跑一遍最小割。各种连边。然后以答案为高位，数字和为低位跑就行了。\n好像也没说清楚怎么建图啊。\n对于原图中已经确定的点，如果它是1，就从源连过来，否则连向汇。对于每一个未知的点，把所有边建出来。然后再向汇连个1的边来表示它如果选1的话就要产生贡献。然后就差不多了吧。脑补一下。\n","permalink":"/oi/dbimport_140/","summary":"多年之前讲过的最小割。\n比较好想啦。\n把每一位拆开。然后单独跑一遍最小割。各种连边。然后以答案为高位，数字和为低位跑就行了。\n好像也没说清楚怎么建图啊。\n对于原图中已经确定的点，如果它是1，就从源连过来，否则连向汇。对于每一个未知的点，把所有边建出来。然后再向汇连个1的边来表示它如果选1的话就要产生贡献。然后就差不多了吧。脑补一下。","title":"bzoj2400 Spoj839 Optimal Marks"},{"content":"原来备案还没过。那之前是怎么成功访问的囧。\n写了一晚上。教训还是之前那个，写之前要想清楚。写完再去改就很烦。自己yy了很久，虽然最初是听了mhy的一句提醒。好有危机感。\n首先这个东西可以离线。之前一直在想在线怎么做然后也觉得没法做。\n把询问按右端点排序之后问题就转化成了左端点在一个范围里的时候的最大子段。\n然后用一个线段树表示从i到current right的时候的和，这个玩意可以直接区间加。然后再去维护这个东西的历史最大值。于是就变成了每个位置上接了一个add序列，要找它的前缀最大值。那么只需要存两个东西：当前的和以及当前的最大前缀和，就可以合并了。\n然后线段树上维护两个add序列，分别是对整个线段的lazy tag of add和max value of son。就可写了。\n然后好像跑得很慢啊TT。\n","permalink":"/oi/dbimport_146/","summary":"原来备案还没过。那之前是怎么成功访问的囧。\n写了一晚上。教训还是之前那个，写之前要想清楚。写完再去改就很烦。自己yy了很久，虽然最初是听了mhy的一句提醒。好有危机感。\n首先这个东西可以离线。之前一直在想在线怎么做然后也觉得没法做。\n把询问按右端点排序之后问题就转化成了左端点在一个范围里的时候的最大子段。\n然后用一个线段树表示从i到current right的时候的和，这个玩意可以直接区间加。然后再去维护这个东西的历史最大值。于是就变成了每个位置上接了一个add序列，要找它的前缀最大值。那么只需要存两个东西：当前的和以及当前的最大前缀和，就可以合并了。\n然后线段树上维护两个add序列，分别是对整个线段的lazy tag of add和max value of son。就可写了。\n然后好像跑得很慢啊TT。","title":"bzoj2482 Spoj1557 Can you answer these queries II"},{"content":"#include #include #include #include using namespace std;\nconst int max_buf = 4567; char buf[max_buf], *bufb(buf), *bufe(bufb + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0); register bool nag(0); do { readBuf(); } while (!isdigit(*bufb) \u0026amp;\u0026amp; *bufb != \u0026lsquo;-\u0026rsquo;); if (*bufb == \u0026lsquo;-\u0026rsquo;) { nag = 1; readBuf(); } do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); if (nag) x = -s; else x = s; }\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nstruct seg { dint s, v, a, z; int l, r; seg *ls, *rs; }; struct query { int l, r, i; }; inline bool operator \u0026lt;(const query\u0026amp; a, const query\u0026amp; b) { return a. r \u0026lt; b. r; }\ntypedef pair \u0026lt;dint, dint\u0026gt; dpr;\nconst int maxn = 100009;\nint n, m, a[maxn], rl[maxn \u0026laquo; 1]; dint ans[maxn]; seg slst[maxn * 3], *sp(slst), *rt; query q[maxn];\n#define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1) inline void update(seg* p) { p-\u0026gt; v = max(p-\u0026gt; ls-\u0026gt; v, p-\u0026gt; rs-\u0026gt; v); p-\u0026gt; s = max(p-\u0026gt; s, p-\u0026gt; v); }\n#define grabAdd(p, a, z) { p-\u0026gt; z = max(p-\u0026gt; z, p-\u0026gt; a + z); p-\u0026gt; a += a; p-\u0026gt; s = max(p-\u0026gt; s, p-\u0026gt; v + z); p-\u0026gt; v += a; } void pushDown(seg* p) { if (p-\u0026gt; l + 1 \u0026lt; p-\u0026gt; r) { grabAdd(p-\u0026gt; ls, p-\u0026gt; a, p-\u0026gt; z); grabAdd(p-\u0026gt; rs, p-\u0026gt; a, p-\u0026gt; z); p-\u0026gt; a = p-\u0026gt; z = 0; } }\ninline seg* sgtBuild(int l, int r) { seg p(sp ++); p-\u0026gt; s = p-\u0026gt; v = p-\u0026gt; a = p-\u0026gt; z = 0; p-\u0026gt; l = l; p-\u0026gt; r = r; if (l + 1 \u0026lt; r) { p-\u0026gt; ls = sgtBuild(l, midp(p)); p-\u0026gt; rs = sgtBuild(midp(p), r); } return p; } inline void sgtChg(seg p, int l, int r, int a) { pushDown(p); if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) { grabAdd(p, a, max(a, 0)); } else { if (r \u0026lt;= midp(p)) sgtChg(p-\u0026gt; ls, l, r, a); else if (l \u0026gt;= midp(p)) sgtChg(p-\u0026gt; rs, l, r, a); else { sgtChg(p-\u0026gt; ls, l, midp(p), a); sgtChg(p-\u0026gt; rs, midp(p), r, a); } update(p); } } inline dint sgtQry(seg* p, int l, int r) { pushDown(p); if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) return p-\u0026gt; s; else { if (r \u0026lt;= midp(p)) return sgtQry(p-\u0026gt; ls, l, r); else if (l \u0026gt;= midp(p)) return sgtQry(p-\u0026gt; rs, l, r); else return max(sgtQry(p-\u0026gt; ls, l, midp(p)), sgtQry(p-\u0026gt; rs, midp(p), r)); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nreadInt(n); for (int i = 1; i \u0026lt;= n; ++ i) readInt(a[i]); readInt(m); for (int i = 0; i \u0026lt; m; ++ i) { readInt(q[i]. l); readInt(q[i]. r); q[i]. i = i; } sort(q, q + m); rt = sgtBuild(1, n + 1); memset(rl, 0, sizeof(rl)); for (int i = 1, j = 0; j \u0026lt; m; ++ i) { sgtChg(rt, rl[a[i] + maxn] + 1, i + 1, a[i]); rl[a[i] + maxn] = i; for (; j \u0026lt; m \u0026amp;\u0026amp; q[j]. r == i; ++ j) ans[q[j]. i] = sgtQry(rt, q[j]. l, q[j]. r + 1); } for (int i = 0; i \u0026lt; m; ++ i) printf(lld \u0026quot;\\n\u0026quot;, ans[i]); }\n","permalink":"/code/dbimport_145/","summary":"#include #include #include #include using namespace std;\nconst int max_buf = 4567; char buf[max_buf], *bufb(buf), *bufe(bufb + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0); register bool nag(0); do { readBuf(); } while (!isdigit(*bufb) \u0026amp;\u0026amp; *bufb != \u0026lsquo;-\u0026rsquo;); if (*bufb == \u0026lsquo;-\u0026rsquo;) { nag = 1; readBuf(); } do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); if (nag) x = -s; else x = s; }","title":"bzoj2482.cc"},{"content":"#include #include #include using namespace std;\nstruct edge { int t, c, v; edge *next, *rv; };\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 509; const int maxm = 2009; const int maxe = 10009; const int inf = 0x3f3f3f3f;\ndint ansc, ansv; int n, m, ea[maxm], eb[maxm], v[maxn], st, te; int d[maxm], fp[maxn]; edge *ep, *head[maxn], elst[maxe], *fe[maxn];\ninline edge* newEdge(int u, int v, int c) { ep-\u0026gt; t = v; ep-\u0026gt; c = c; ep-\u0026gt; next = head[u]; return head[u] = ep ++; } inline void addEdge(int u, int v, int c) { edge *a(newEdge(u, v, c)); edge *b(newEdge(v, u, 0)); a-\u0026gt; rv = b; b-\u0026gt; rv = a; }\nbool bfsBuild() { static int q[maxn]; int hd(0), tl(1); memset(d, 0, sizeof(d)); d[q[0] = st] = 1; while (hd ^ tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; c \u0026amp;\u0026amp; !d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; q[tl ++] = e-\u0026gt; t; } } return d[te]; } int dfsFind(int p, int c) { if (p == te) return c; int s(0); edge *e; for (e = head[p]; e \u0026amp;\u0026amp; c; e = e-\u0026gt; next) if (e-\u0026gt; c \u0026amp;\u0026amp; d[e-\u0026gt; t] == d[p] + 1) { int x(dfsFind(e-\u0026gt; t, min(c, e-\u0026gt; c))); c -= x; s += x; e-\u0026gt; c -= x; e-\u0026gt; rv-\u0026gt; c += x; } if (!e) d[p] = 0; return s; }\n#define mkword(x,y) (((x)\u0026laquo;16)|(y)) #define hiword(x) ((x)\u0026raquo;16) #define loword(x) ((x)\u0026amp;0xffff)\nvoid flow(int lv) { st = n + 1; te = n + 2; ep = elst; memset(head, 0, sizeof(head)); for (int i = 1; i \u0026lt;= n; ++ i) if (v[i] \u0026gt;= 0) { if ((v[i] \u0026raquo; lv) \u0026amp; 1) addEdge(st, i, inf); else addEdge(i, te, inf); } else addEdge(i, te, mkword(0, 1)); for (int i = 0; i \u0026lt; m; ++ i) if (v[ea[i]] \u0026lt; 0 \u0026amp;\u0026amp; v[eb[i]] \u0026lt; 0) { addEdge(ea[i], eb[i], mkword(1, 0)); addEdge(eb[i], ea[i], mkword(1, 0)); } else if (v[ea[i]] \u0026lt; 0) { if ((v[eb[i]] \u0026raquo; lv) \u0026amp; 1) addEdge(eb[i], ea[i], mkword(1, 0)); else addEdge(ea[i], eb[i], mkword(1, 0)); } int ans(0); while (bfsBuild()) ans += dfsFind(st, inf); ansc += (_l hiword(ans)) \u0026laquo; lv; ansv += (_l loword(ans)) \u0026laquo; lv; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nansc = ansv = 0; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m); for (int i = 1; i \u0026lt;= n; ++ i) { scanf(\u0026quot;%d\u0026quot;, v + i); if (v[i] \u0026gt; 0) ansv += v[i]; } for (int i = 0; i \u0026lt; m; ++ i) { scanf(\u0026quot;%d%d\u0026quot;, ea + i, eb + i); if (v[ea[i]] \u0026gt;= 0 \u0026amp;\u0026amp; v[eb[i]] \u0026gt;= 0) ansc += v[ea[i]] ^ v[eb[i]]; if (v[eb[i]] \u0026lt; 0) swap(ea[i], eb[i]); } for (int i = 0; i \u0026lt; 31; ++ i) flow(i); printf(lld \u0026quot;\\n\u0026quot; lld \u0026quot;\\n\u0026quot;, ansc, ansv); }\n","permalink":"/code/dbimport_139/","summary":"#include #include #include using namespace std;\nstruct edge { int t, c, v; edge *next, *rv; };\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 509; const int maxm = 2009; const int maxe = 10009; const int inf = 0x3f3f3f3f;\ndint ansc, ansv; int n, m, ea[maxm], eb[maxm], v[maxn], st, te; int d[maxm], fp[maxn]; edge *ep, *head[maxn], elst[maxe], *fe[maxn];","title":"bzoj2400.cc"},{"content":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxp = 300009; const dint maxv = 1e11;\nint pn[maxp], tp; bool pr[maxp]; dint qv, x, cnt;\nvoid pre() { memset(pr, 0, sizeof(pr)); tp = 0; for (int i = 2; i \u0026lt; maxp; ++ i) { if (!pr[i]) pn[tp ++] = i; for (int j = 0; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j] \u0026lt; maxp; ++ j) { pr[i * pn[j]] = 1; if (i % pn[j] == 0) break; } } }\nvoid dfs(int pi, dint cv, int sgn) { cnt += (qv / cv) * sgn; if (pi == tp) return; for (int i = pi; i \u0026lt; tp; ++ i) { dint nv(cv * pn[i]); if (nv \u0026gt; qv) break; nv *= pn[i]; if (nv \u0026gt; qv) break; dfs(i + 1, nv, -sgn); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\npre(); dint l(1), r(maxv); scanf(lld, \u0026amp;x); while (l \u0026lt; r) { qv = (l + r) \u0026gt;\u0026gt; 1; cnt = 0; dfs(0, 1, 1); if (qv - cnt \u0026lt; x) l = qv + 1; else r = qv; } printf(lld \u0026quot;\\n\u0026quot;, l); }\n","permalink":"/code/dbimport_174/","summary":"#include #include #include using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxp = 300009; const dint maxv = 1e11;\nint pn[maxp], tp; bool pr[maxp]; dint qv, x, cnt;\nvoid pre() { memset(pr, 0, sizeof(pr)); tp = 0; for (int i = 2; i \u0026lt; maxp; ++ i) { if (!pr[i]) pn[tp ++] = i; for (int j = 0; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j] \u0026lt; maxp; ++ j) { pr[i * pn[j]] = 1; if (i % pn[j] == 0) break; } } }","title":"bzoj2986.cc"},{"content":"\u0026quot; local syntax file - set colors on a per-machine basis: \u0026quot; vim: tw=0 ts=4 sw=4 \u0026quot; Vim color file \u0026quot; Maintainer:\tlaekov laekov@163.com \u0026quot; Last Change:\t2015 Feb \u0026quot; hi clear set background=dark syntax reset let g:colors_name=\u0026lsquo;pineapple\u0026rsquo; if has(\u0026lsquo;gui\u0026rsquo;) hi Normal guibg=#000000 guifg=white hi SpecialKey term=bold ctermfg=4 guifg=Blue hi Directory term=bold ctermfg=4 guifg=Blue hi ErrorMsg term=standout cterm=bold ctermfg=7 ctermbg=1 gui=bold guifg=White guibg=Red hi IncSearch term=reverse cterm=reverse gui=reverse hi Search term=reverse guibg=Blue guifg=White hi MoreMsg term=bold ctermfg=2 gui=bold guifg=White hi ModeMsg term=bold cterm=bold gui=bold hi LineNr term=underline ctermfg=3 guifg=Pink hi Question term=standout ctermfg=2 gui=bold guifg=White hi StatusLine term=bold,reverse cterm=bold,reverse gui=bold guifg=White guibg=Grey35 hi StatusLineNC term=reverse cterm=reverse gui=bold guifg=Grey10 guibg=Gray85 hi VertSplit guibg=Pink guifg=Black hi Title term=bold ctermfg=5 gui=bold guifg=DeepPink3 hi Visual term=reverse cterm=reverse gui=reverse guifg=Grey80 guibg=fg hi VisualNOS term=bold,underline cterm=bold,underline gui=bold,underline hi WarningMsg term=standout ctermfg=1 gui=bold guifg=Red hi WildMenu term=standout ctermfg=0 ctermbg=3 guifg=Black guibg=Yellow hi Folded term=standout ctermfg=4 ctermbg=7 guifg=Black guibg=#e3c1a5 hi FoldColumn term=standout ctermfg=4 ctermbg=7 guifg=DarkBlue guibg=Gray80 hi DiffAdd term=bold ctermbg=4 guibg=White hi DiffChange term=bold ctermbg=5 guibg=#edb5cd hi DiffDelete term=bold cterm=bold ctermfg=4 ctermbg=6 gui=bold guifg=LightBlue guibg=#f6e8d0 hi DiffText term=reverse cterm=bold ctermbg=1 gui=bold guibg=#ff8060 hi Cursor guifg=black guibg=white hi lCursor guifg=bg guibg=fg hi NonText guifg=green guibg=#1a1a1a \u0026quot; Colors for syntax highlighting hi Comment term=bold ctermfg=4 guifg=Cyan hi Constant term=underline ctermfg=1 guifg=Yellow hi Special term=bold ctermfg=5 guifg=#ff9c3a hi Identifier term=underline ctermfg=6 guifg=#9999ff hi Statement term=bold ctermfg=3 gui=bold guifg=#09f93f hi PreProc term=underline ctermfg=5 guifg=#888888 hi Type term=underline ctermfg=2 gui=bold guifg=#598ff9 hi Ignore cterm=bold ctermfg=7 guifg=bg hi Error term=reverse cterm=bold ctermfg=7 ctermbg=1 gui=bold guifg=White guibg=Red hi Todo term=standout ctermfg=0 ctermbg=3 guifg=Blue guibg=Yellow else hi Normal ctermfg=white ctermbg=0 hi ErrorMsg cterm=standout cterm=bold ctermfg=7 ctermbg=1 hi IncSearch cterm=reverse ctermbg=1 ctermfg=7 hi Search cterm=reverse ctermbg=7 ctermfg=blue hi Visual cterm=reverse if $TERM == \u0026lsquo;xterm-256color\u0026rsquo; \u0026quot;\thi NonText cterm=bold ctermbg=232 ctermfg=2 \u0026quot;\thi Type cterm=bold ctermfg=4 \u0026quot;\thi Special cterm=bold ctermfg=172 hi NonText cterm=bold ctermbg=234 ctermfg=2 hi Type cterm=bold ctermfg=4 hi Special cterm=bold ctermfg=1 else hi NonText cterm=bold ctermbg=8 ctermfg=2 hi Type cterm=bold ctermfg=32 hi Special cterm=bold ctermfg=1 endif hi LineNr cterm=bold ctermfg=5 hi ModeMsg cterm=bold hi StatusLine cterm=bold ctermfg=7 ctermbg=8 hi StatusLineNC ctermfg=7 ctermbg=8 hi VertSplit ctermfg=0 ctermbg=5 hi Folded cterm=standout ctermfg=3 ctermbg=4 hi FoldedColumn cterm=standout ctermfg=3 ctermbg=4 \u0026ldquo;For syntax hilighter hi Comment cterm=bold ctermfg=6 hi Constant ctermfg=yellow hi Indentifier cterm=bold ctermfg=2 hi Statement cterm=bold ctermfg=2 hi PreProc cterm=bold ctermfg=darkgrey hi Ignore ctermfg=7 hi Error term=reverse cterm=bold ctermfg=7 ctermbg=1 hi Todo term=standout ctermbg=6 ctermfg=0 endif\n","permalink":"/code/dbimport_271/","summary":"\u0026quot; local syntax file - set colors on a per-machine basis: \u0026quot; vim: tw=0 ts=4 sw=4 \u0026quot; Vim color file \u0026quot; Maintainer:\tlaekov laekov@163.com \u0026quot; Last Change:\t2015 Feb \u0026quot; hi clear set background=dark syntax reset let g:colors_name=\u0026lsquo;pineapple\u0026rsquo; if has(\u0026lsquo;gui\u0026rsquo;) hi Normal guibg=#000000 guifg=white hi SpecialKey term=bold ctermfg=4 guifg=Blue hi Directory term=bold ctermfg=4 guifg=Blue hi ErrorMsg term=standout cterm=bold ctermfg=7 ctermbg=1 gui=bold guifg=White guibg=Red hi IncSearch term=reverse cterm=reverse gui=reverse hi Search term=reverse guibg=Blue guifg=White hi MoreMsg term=bold ctermfg=2 gui=bold guifg=White hi ModeMsg term=bold cterm=bold gui=bold hi LineNr term=underline ctermfg=3 guifg=Pink hi Question term=standout ctermfg=2 gui=bold guifg=White hi StatusLine term=bold,reverse cterm=bold,reverse gui=bold guifg=White guibg=Grey35 hi StatusLineNC term=reverse cterm=reverse gui=bold guifg=Grey10 guibg=Gray85 hi VertSplit guibg=Pink guifg=Black hi Title term=bold ctermfg=5 gui=bold guifg=DeepPink3 hi Visual term=reverse cterm=reverse gui=reverse guifg=Grey80 guibg=fg hi VisualNOS term=bold,underline cterm=bold,underline gui=bold,underline hi WarningMsg term=standout ctermfg=1 gui=bold guifg=Red hi WildMenu term=standout ctermfg=0 ctermbg=3 guifg=Black guibg=Yellow hi Folded term=standout ctermfg=4 ctermbg=7 guifg=Black guibg=#e3c1a5 hi FoldColumn term=standout ctermfg=4 ctermbg=7 guifg=DarkBlue guibg=Gray80 hi DiffAdd term=bold ctermbg=4 guibg=White hi DiffChange term=bold ctermbg=5 guibg=#edb5cd hi DiffDelete term=bold cterm=bold ctermfg=4 ctermbg=6 gui=bold guifg=LightBlue guibg=#f6e8d0 hi DiffText term=reverse cterm=bold ctermbg=1 gui=bold guibg=#ff8060 hi Cursor guifg=black guibg=white hi lCursor guifg=bg guibg=fg hi NonText guifg=green guibg=#1a1a1a \u0026quot; Colors for syntax highlighting hi Comment term=bold ctermfg=4 guifg=Cyan hi Constant term=underline ctermfg=1 guifg=Yellow hi Special term=bold ctermfg=5 guifg=#ff9c3a hi Identifier term=underline ctermfg=6 guifg=#9999ff hi Statement term=bold ctermfg=3 gui=bold guifg=#09f93f hi PreProc term=underline ctermfg=5 guifg=#888888 hi Type term=underline ctermfg=2 gui=bold guifg=#598ff9 hi Ignore cterm=bold ctermfg=7 guifg=bg hi Error term=reverse cterm=bold ctermfg=7 ctermbg=1 gui=bold guifg=White guibg=Red hi Todo term=standout ctermfg=0 ctermbg=3 guifg=Blue guibg=Yellow else hi Normal ctermfg=white ctermbg=0 hi ErrorMsg cterm=standout cterm=bold ctermfg=7 ctermbg=1 hi IncSearch cterm=reverse ctermbg=1 ctermfg=7 hi Search cterm=reverse ctermbg=7 ctermfg=blue hi Visual cterm=reverse if $TERM == \u0026lsquo;xterm-256color\u0026rsquo; \u0026quot;\thi NonText cterm=bold ctermbg=232 ctermfg=2 \u0026quot;\thi Type cterm=bold ctermfg=4 \u0026quot;\thi Special cterm=bold ctermfg=172 hi NonText cterm=bold ctermbg=234 ctermfg=2 hi Type cterm=bold ctermfg=4 hi Special cterm=bold ctermfg=1 else hi NonText cterm=bold ctermbg=8 ctermfg=2 hi Type cterm=bold ctermfg=32 hi Special cterm=bold ctermfg=1 endif hi LineNr cterm=bold ctermfg=5 hi ModeMsg cterm=bold hi StatusLine cterm=bold ctermfg=7 ctermbg=8 hi StatusLineNC ctermfg=7 ctermbg=8 hi VertSplit ctermfg=0 ctermbg=5 hi Folded cterm=standout ctermfg=3 ctermbg=4 hi FoldedColumn cterm=standout ctermfg=3 ctermbg=4 \u0026ldquo;For syntax hilighter hi Comment cterm=bold ctermfg=6 hi Constant ctermfg=yellow hi Indentifier cterm=bold ctermfg=2 hi Statement cterm=bold ctermfg=2 hi PreProc cterm=bold ctermfg=darkgrey hi Ignore ctermfg=7 hi Error term=reverse cterm=bold ctermfg=7 ctermbg=1 hi Todo term=standout ctermbg=6 ctermfg=0 endif","title":"pineapple.vim"},{"content":"set guioptions-=m set guioptions-=T\nsource $VIMRUNTIME/mswin.vim behave mswin\nset nu set softtabstop=4 set tabstop=4 set shiftwidth=4 set nobackup set mouse=a set fdm=marker set guifont=Source\\ Code\\ Pro\\ Semibold:h16 set hlsearch set ruler if has(\u0026lsquo;gui\u0026rsquo;) set columns=1000 set lines=1000 set cursorline endif\nmap : call Save() map : !mvim -ro % map : !gdb \u0026ndash;quiet %\u0026lt; map : call Compile() map : !bash check.sh map : !./%\u0026lt; \u0026lt;.in map : call Run() map : !echo % syn keyword Type dint syn keyword Special PROC syn keyword Special lld filetype plugin indent on syntax enable\ncolors pineapple\nset makeprg=g++\\ %\\ -o\\ %\u0026lt;\\ -g\\ -Wall\\ -Wextra\\ -DLAEKOV_LOCAL\nfunc Save() if \u0026amp;filetype==\u0026lsquo;javascript\u0026rsquo; set expandtab endif exec \u0026ldquo;w\u0026rdquo; endfunc\nfunc Compile() exec \u0026ldquo;w\u0026rdquo; if \u0026amp;filetype==\u0026lsquo;cpp\u0026rsquo; exec \u0026ldquo;!g++ % -o %\u0026lt; -g -Wall -Wextra -DLAEKOV_LOCAL \u0026amp;\u0026amp; size %\u0026lt;\u0026rdquo; elseif \u0026amp;filetype==\u0026lsquo;c\u0026rsquo; exec \u0026ldquo;!gcc % -o %\u0026lt; -g\u0026rdquo; elseif \u0026amp;filetype==\u0026lsquo;pascal\u0026rsquo; exec \u0026ldquo;!fpc % -g\u0026rdquo; elseif \u0026amp;filetype==\u0026lsquo;sh\u0026rsquo; exec \u0026ldquo;!chmod +x %\u0026rdquo; elseif \u0026amp;filetype==\u0026lsquo;java\u0026rsquo; exec \u0026ldquo;!javac %\u0026rdquo; elseif \u0026amp;filetype==\u0026lsquo;tex\u0026rsquo; exec \u0026ldquo;!xelatex %\u0026rdquo; endif endfunc\nfunc Run() if \u0026amp;filetype==\u0026lsquo;python\u0026rsquo; exec \u0026ldquo;!python %\u0026rdquo; elseif \u0026amp;filetype==\u0026lsquo;sh\u0026rsquo; exec \u0026ldquo;!bash ./%\u0026rdquo; elseif \u0026amp;filetype==\u0026lsquo;java\u0026rsquo; exec \u0026ldquo;!java Main\u0026rdquo; elseif \u0026amp;filetype==\u0026lsquo;html\u0026rsquo; exec \u0026ldquo;!open ./%\u0026rdquo; elseif \u0026amp;filetype==\u0026lsquo;tex\u0026rsquo; exec \u0026ldquo;!open %\u0026lt;.pdf\u0026rdquo; elseif \u0026amp;filetype==\u0026lsquo;javascript\u0026rsquo; exec \u0026ldquo;!node %\u0026rdquo; else exec \u0026ldquo;!./%\u0026lt;\u0026rdquo; endif endfunc\nvnoremap :w !pbcopy nmap :r !pbpaste\nHistorical Comments Unknown friend at 2015-12-08T12:40:27 @vimrc: yzyyzy?yzyyzy! \u0026mdash;- lyd\nUnknown friend at 2015-12-08T12:40:27 @vimrc: yzyyzy?yzyyzy! \u0026mdash;- lyd\n","permalink":"/code/dbimport_281/","summary":"set guioptions-=m set guioptions-=T\nsource $VIMRUNTIME/mswin.vim behave mswin\nset nu set softtabstop=4 set tabstop=4 set shiftwidth=4 set nobackup set mouse=a set fdm=marker set guifont=Source\\ Code\\ Pro\\ Semibold:h16 set hlsearch set ruler if has(\u0026lsquo;gui\u0026rsquo;) set columns=1000 set lines=1000 set cursorline endif\nmap : call Save() map : !mvim -ro % map : !gdb \u0026ndash;quiet %\u0026lt; map : call Compile() map : !bash check.sh map : !./%\u0026lt; \u0026lt;.in map : call Run() map : !","title":"vimrc"},{"content":"今天是正儿八经地被吊打了。\n早上看了题之后觉得好困。于是一趴就是俩小时。无语。\n第一题似乎是奇怪的数论？二次剩余？然后发现好像不是baby-step-gaint-step的题。然后就不会了。然后还错误地以为只有两个解，于是写个常数优化的暴力就交上去了。\n第二题感觉是个数位dp？依然不会。于是30分暴力。比较厉害的是有人用比较快的匹配方式拿了50分。\n第三题其实是个简单的线段树的。然后我就想复杂了。我认为用线段树下放标记是会变成O(n)单次的。于是没敢写。于是写了个分块+splay。调度到最后一分钟无果。晕。知道正解之后眼泪掉下来。\n下午讨论完就在改oj，然后就回去上班会了，也没有空继续调题。\n倒是把oj的页宽终于调对了。然后也把代码高亮搞上了。于是就移植到这来了。什么时候才能过审核啊TT。\n今天晚上要早些睡。不能再搞今天这种飞机了。\n","permalink":"/diary/dbimport_003/","summary":"今天是正儿八经地被吊打了。\n早上看了题之后觉得好困。于是一趴就是俩小时。无语。\n第一题似乎是奇怪的数论？二次剩余？然后发现好像不是baby-step-gaint-step的题。然后就不会了。然后还错误地以为只有两个解，于是写个常数优化的暴力就交上去了。\n第二题感觉是个数位dp？依然不会。于是30分暴力。比较厉害的是有人用比较快的匹配方式拿了50分。\n第三题其实是个简单的线段树的。然后我就想复杂了。我认为用线段树下放标记是会变成O(n)单次的。于是没敢写。于是写了个分块+splay。调度到最后一分钟无果。晕。知道正解之后眼泪掉下来。\n下午讨论完就在改oj，然后就回去上班会了，也没有空继续调题。\n倒是把oj的页宽终于调对了。然后也把代码高亮搞上了。于是就移植到这来了。什么时候才能过审核啊TT。\n今天晚上要早些睡。不能再搞今天这种飞机了。","title":"20150316"},{"content":"#include #include #include #include using namespace std;\ntypedef pair \u0026lt;double, int\u0026gt; dpr;\nconst int maxn = 30009; const int maxl = 15; const int max_buf = maxn * maxl * 2; const double eps = 1e-7; const double finf = 1e20;\nint ibuf_arr[max_buf], *ibuf; double fbuf_arr[max_buf], *fbuf;\nstruct edge { int t; edge *next; };\nstruct line { double k, b; inline double xCross(const line\u0026amp; a) { return (a. b - b) / (k - a. k); } inline double f(double x) { return k * x + b; } }; line a[maxn \u0026laquo; 1];\nstruct hull { int t; int *l; double *cx; void init(int x) { t = 1; l = ibuf ++; l[0] = x; cx = 0; } void merge(const hull\u0026amp; x, const hull\u0026amp; y) { static int stc[maxn]; static double tx[maxn]; t = 0; for (int i = 0, j = 0, c; i \u0026lt; x. t || j \u0026lt; y. t; ) { if (i == x. t || (j \u0026lt; y. t \u0026amp;\u0026amp; a[x. l[i]]. k \u0026gt; a[y. l[j]]. k)) c = y. l[j ++]; else c = x. l[i ++]; if (t \u0026amp;\u0026amp; fabs(a[c]. k - a[stc[t - 1]]. k) \u0026lt; eps) { if (a[c]. b \u0026gt;= a[stc[t - 1]]. b) \u0026ndash; t; else continue; } while (t \u0026gt; 1 \u0026amp;\u0026amp; a[c]. xCross(a[stc[t - 2]]) \u0026lt;= tx[t - 2]) \u0026ndash; t; if (t) tx[t - 1] = a[c]. xCross(a[stc[t - 1]]); stc[t ++] = c; } l = ibuf; ibuf += t; cx = fbuf; fbuf += t - 1; for (int i = 0; i \u0026lt; t; ++ i) { l[i] = stc[i]; if (i \u0026lt; t - 1) cx[i] = a[stc[i]]. xCross(a[stc[i + 1]]); } } dpr qry(double x) { int p(lower_bound(cx, cx + t - 1, x) - cx); return dpr(a[l[p]]. f(x), l[p]); } }; struct seg { hull h[2]; int l, r; seg *ls, *rs; };\nint n, m, k1[maxn], b1[maxn], k2[maxn], b2[maxn]; dpr qans[2]; double qx; int fa[maxn], d[maxn], sz[maxn], tc, fc[maxn], ch[maxn], cl[maxn], *ci[maxn]; edge elst[maxn \u0026laquo; 1], *ep, *head[maxn]; seg slst[maxn \u0026laquo; 2], *sp, *rt[maxn];\ninline void upMax(double\u0026amp; a, double b) { if (a \u0026lt; b) a = b; } inline void upMax(dpr\u0026amp; a, dpr b) { if (a \u0026lt; b) a = b; } inline void addEdge(int u, int v) { ep-\u0026gt; t = v; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\n#define cpos(p) (d[p]-d[ch[fc[p]]]) #define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026raquo;1)\ninline seg* sgtBuild(int l, int r, int* ci) { seg p(sp ++); p-\u0026gt; l = l; p-\u0026gt; r = r; if (l + 1 == r) { p-\u0026gt; h[0]. init(ci[l]); p-\u0026gt; h[1]. init(ci[l] + n); } else { p-\u0026gt; ls = sgtBuild(l, midp(p), ci); p-\u0026gt; rs = sgtBuild(midp(p), r, ci); p-\u0026gt; h[0]. merge(p-\u0026gt; ls-\u0026gt; h[0], p-\u0026gt; rs-\u0026gt; h[0]); p-\u0026gt; h[1]. merge(p-\u0026gt; ls-\u0026gt; h[1], p-\u0026gt; rs-\u0026gt; h[1]); } return p; } inline void sgtQry(seg p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) { upMax(qans[0], p-\u0026gt; h[0]. qry(qx)); upMax(qans[1], p-\u0026gt; h[1]. qry(qx)); } else if (r \u0026lt;= midp(p)) sgtQry(p-\u0026gt; ls, l, r); else if (l \u0026gt;= midp(p)) sgtQry(p-\u0026gt; rs, l, r); else { sgtQry(p-\u0026gt; ls, l, midp(p)); sgtQry(p-\u0026gt; rs, midp(p), r); } }\nvoid divide() { static int q[maxn]; int hd(0), tl(1); memset(d, 0, sizeof(d)); d[q[0] = 1] = 1; fa[1] = 0; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (!d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; fa[e-\u0026gt; t] = p; q[tl ++] = e-\u0026gt; t; } } tc = 0; for (int i = tl - 1; i \u0026gt;= 0; \u0026ndash; i) { int p(q[i]), z(-1); sz[p] = 1; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (fa[e-\u0026gt; t] == p) { sz[p] += sz[e-\u0026gt; t]; if (z == -1 || sz[e-\u0026gt; t] \u0026gt; sz[z]) z = e-\u0026gt; t; } if (z == -1) cl[fc[p] = ++ tc] = 1; else ++ cl[fc[p] = fc[z]]; ch[fc[p]] = p; } for (int i = 1; i \u0026lt;= tc; ++ i) { ci[i] = ibuf; ibuf += cl[i]; } for (int i = 1; i \u0026lt;= n; ++ i) ci[fc[i]][cpos(i)] = i; for (int i = 1; i \u0026lt;= tc; ++ i) rt[i] = sgtBuild(0, cl[i], ci[i]); }\nbool check(int u, int v, double x) { qans[0] = qans[1] = dpr(-finf, 0); qx = -x; while (fc[u] ^ fc[v]) if (d[ch[fc[u]]] \u0026gt; d[ch[fc[v]]]) { sgtQry(rt[fc[u]], 0, cpos(u) + 1); u = fa[ch[fc[u]]]; } else { sgtQry(rt[fc[v]], 0, cpos(v) + 1); v = fa[ch[fc[v]]]; } if (d[u] \u0026lt; d[v]) sgtQry(rt[fc[u]], cpos(u), cpos(v) + 1); else sgtQry(rt[fc[u]], cpos(v), cpos(u) + 1); return qans[0]. first + qans[1]. first \u0026gt;= 0; }\nint gcd(int a, int b) { while (a) { int c(b % a); b = a; a = c; } return b; }\nint main() { while (scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;m) != EOF) { for (int i = 1; i \u0026lt;= n; ++ i) { scanf(\u0026quot;%d%d%d%d\u0026quot;, k1 + i, b1 + i, k2 + i, b2 + i); a[i]. k = k1[i]; a[i]. b = a[i]. k * b1[i]; a[i + n]. k = k2[i]; a[i + n]. b = a[i + n]. k * b2[i]; } memset(head, 0, sizeof(head)); ibuf = ibuf_arr; fbuf = fbuf_arr; ep = elst; sp = slst; for (int i = 1; i \u0026lt; n; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); addEdge(u, v); addEdge(v, u); } divide(); while (m \u0026ndash;) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); double l(1e-3), r(1e3); while (l + eps \u0026lt; r) { double mid((l + r + eps) / 2.0); if (check(u, v, mid)) l = mid; else r = mid - eps; } int x(qans[0]. second), y(qans[1]. second - n); int fu((k1[x] * b1[x] + k2[y] * b2[y])); int fd(k1[x] + k2[y]); int g(gcd(fu, fd)); fu /= g, fd /= g; printf(\u0026quot;%d/%d\\n\u0026quot;, fu, fd); } } }\n","permalink":"/code/dbimport_251/","summary":"#include #include #include #include using namespace std;\ntypedef pair \u0026lt;double, int\u0026gt; dpr;\nconst int maxn = 30009; const int maxl = 15; const int max_buf = maxn * maxl * 2; const double eps = 1e-7; const double finf = 1e20;\nint ibuf_arr[max_buf], *ibuf; double fbuf_arr[max_buf], *fbuf;\nstruct edge { int t; edge *next; };\nstruct line { double k, b; inline double xCross(const line\u0026amp; a) { return (a. b - b) / (k - a.","title":"hdu5189.cc"},{"content":"自己出的题还要写题解。\n就是化成可以二分的形式，然后发现是找凸壳上x=x0的时候的最大值的和，看它是否大于0。\n于是就写呗。据说很难写。我觉得写起来还行啊。\n其实主要是为了测试系统用的。\n","permalink":"/oi/dbimport_252/","summary":"自己出的题还要写题解。\n就是化成可以二分的形式，然后发现是找凸壳上x=x0的时候的最大值的和，看它是否大于0。\n于是就写呗。据说很难写。我觉得写起来还行啊。\n其实主要是为了测试系统用的。","title":"hdu5189 zhx's tree"},{"content":"#include #include #include #include using namespace std;\nconst int maxn = 100009; const int maxl = 19;\ntypedef struct node { int t; node *next; } edge; node nlst[maxn], *np(nlst); struct chain { int sz; node *hd, *tl; chain() { hd = tl = 0; sz = 0; } inline void clear() { hd = tl = 0; sz = 0; } inline void push(int x) { np-\u0026gt; t = x; np-\u0026gt; next = 0; if (sz) { tl-\u0026gt; next = np; tl = np; } else { hd = np; tl = np; } ++ np; ++ sz; } inline void merge(chain a) { sz += a. sz; if (a. sz) { if (hd) { tl-\u0026gt; next = a. hd; tl = a. tl; } else { hd = a. hd; tl = a. tl; } } } }; struct query { int a, b, i, pa, pb, pi; }; inline bool operator \u0026lt;(const query\u0026amp; a, const query\u0026amp; b) { return (a. pa \u0026lt; b. pa) || (a. pa == b. pa \u0026amp;\u0026amp; a. pb \u0026lt; b. pb) || (a. pa == b. pa \u0026amp;\u0026amp; a. pb == b. pb \u0026amp;\u0026amp; a. i \u0026lt; b. i); }\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif\nint n, m, q, tq, tc, ty[maxn], fb[maxn], tb, bsz; int d[maxn], ath[maxn][maxl]; bool oc[maxn]; dint w[maxn], v[maxn], ans[maxn], cnt[maxn]; edge elst[maxn \u0026laquo; 1], *ep(elst), *head[maxn]; query qr[maxn], cg[maxn];\ninline void addEdge(int u, int v) { ep-\u0026gt; t = v; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\nchain dfs(int p) { chain w; for (int i = 1; i \u0026lt; maxl; ++ i) ath[p][i] = ath[ath[p][i - 1]][i - 1]; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (!d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; ath[e-\u0026gt; t][0] = p; chain g(dfs(e-\u0026gt; t)); w. merge(g); if (w. sz \u0026gt;= bsz) { ++ tb; for (node* it = w. hd; it; it = it-\u0026gt; next) fb[it-\u0026gt; t] = tb; w. clear(); } } w. push(p); return w; } void divide() { memset(d, 0, sizeof(d)); tb = 0; d[1] = 1; chain g(dfs(1)); for (node* it = g. hd; it; it = it-\u0026gt; next) fb[it-\u0026gt; t] = tb; }\nint LCA(int u, int v) { if (d[u] \u0026lt; d[v]) swap(u, v); for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (d[ath[u][i]] \u0026gt;= d[v]) u = ath[u][i]; if (u == v) return u; for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (ath[u][i] ^ ath[v][i]) { u = ath[u][i]; v = ath[v][i]; } return ath[u][0]; } bool onChain(int u, int v, int p) { if (p == u || p == v) return 1; int a(LCA(u, v)); if (p == a) return 1; if (LCA(p, a) != a) return 0; else return LCA(p, u) == p || LCA(p, v) == p; }\ninline void rmVertex(int p, dint\u0026amp; ans) { if (oc[p]) { ans -= w[cnt[ty[p]]] * v[ty[p]]; \u0026ndash; cnt[ty[p]]; ans += w[cnt[ty[p]]] * v[ty[p]]; oc[p] = 0; } } inline void insVertex(int p, dint\u0026amp; ans) { if (!oc[p]) { ans -= w[cnt[ty[p]]] * v[ty[p]]; ++ cnt[ty[p]]; ans += w[cnt[ty[p]]] * v[ty[p]]; oc[p] = 1; } } void moveVertex(int\u0026amp; u, int v, int g, dint\u0026amp; ans) { int p(u), q(g), a(LCA(u, v)), t(LCA(a, g)); if (t == a) { int x(LCA(u, g)), y(LCA(v, g)); if (d[x] \u0026gt; d[y]) t = x; else t = y; if (LCA(u, t) == t) { for (; q ^ t; q = ath[q][0]) insVertex(q, ans); for (; p ^ t; p = ath[p][0]) rmVertex(p, ans); } else { for (; q ^ t; q = ath[q][0]) insVertex(q, ans); for (; p ^ a; p = ath[p][0]) rmVertex(p, ans); rmVertex(a, ans); for (q = ath[t][0]; q ^ a; q = ath[q][0]) rmVertex(q, ans); } } else { for (; p ^ a; p = ath[p][0]) rmVertex(p, ans); for (p = ath[a][0]; p ^ t; p = ath[p][0]) insVertex(p, ans); for (; q ^ t; q = ath[q][0]) insVertex(q, ans); insVertex(t, ans); } u = g; }\ninline void chgType(int p, int tn, dint\u0026amp; ans) { if (oc[p]) { ans -= :: v[ty[p]] * w[cnt[ty[p]]]; \u0026ndash; cnt[ty[p]]; ans += :: v[ty[p]] * w[cnt[ty[p]]]; ty[p] = tn; ans -= :: v[ty[p]] * w[cnt[ty[p]]]; ++ cnt[ty[p]]; ans += :: v[ty[p]] * w[cnt[ty[p]]]; } else { ty[p] = tn; } } void moveChgTime(int\u0026amp; t, int g, dint\u0026amp; ans) { for (; t + 1 \u0026lt; tc \u0026amp;\u0026amp; cg[t + 1]. i \u0026lt; g; ++ t) chgType(cg[t + 1]. a, cg[t + 1]. b, ans); for (; t \u0026gt; -1 \u0026amp;\u0026amp; cg[t]. i \u0026gt; g; \u0026ndash; t) chgType(cg[t]. a, cg[t]. pb, ans); }\nvoid cptMo() { memset(ans, -1, sizeof(ans)); sort(qr, qr + tq); int u(1), v(1), t(-1); dint cans(:: v[ty[1]] * w[1]); memset(cnt, 0, sizeof(cnt)); memset(oc, 0, sizeof(oc)); oc[1] = 1; cnt[ty[1]] = 1; for (int i = 0; i \u0026lt; tq; ++ i) { moveVertex(u, v, qr[i]. a, cans); moveVertex(v, u, qr[i]. b, cans); moveChgTime(t, qr[i]. i, cans); ans[qr[i]. i] = cans; } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;n, \u0026amp;m, \u0026amp;q); bsz = (int)pow(n, 0.66) + 1; for (int i = 1; i \u0026lt;= m; ++ i) scanf(lld, v + i); w[0] = 0; for (int i = 1; i \u0026lt;= n; ++ i) { scanf(lld, w + i); w[i] += w[i - 1]; } memset(head, 0, sizeof(head)); for (int i = 1; i \u0026lt; n; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); addEdge(u, v); addEdge(v, u); } for (int i = 1; i \u0026lt;= n; ++ i) scanf(\u0026quot;%d\u0026quot;, ty + i); divide(); tc = tq = 0; for (int i = 0; i \u0026lt; q; ++ i) { int t, a, b; scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;t, \u0026amp;a, \u0026amp;b); if (!t) { cg[tc]. i = i; cg[tc]. a = a; cg[tc]. b = b; cg[tc]. pb = ty[a]; ty[a] = b; ++ tc; } else { if (a \u0026gt; b) swap(a, b); qr[tq]. i = i; qr[tq]. pi = i / bsz; qr[tq]. a = a; qr[tq]. pa = fb[a]; qr[tq]. b = b; qr[tq]. pb = fb[b]; ++ tq; } } for (int i = tc - 1; i \u0026gt;= 0; -- i) ty[cg[i]. a] = cg[i]. pb; cptMo(); for (int i = 0; i \u0026lt; q; ++ i) if (ans[i] \u0026gt; -1) printf(lld \u0026quot;\\n\u0026quot;, ans[i]); }\n","permalink":"/code/dbimport_176/","summary":"#include #include #include #include using namespace std;\nconst int maxn = 100009; const int maxl = 19;\ntypedef struct node { int t; node *next; } edge; node nlst[maxn], *np(nlst); struct chain { int sz; node *hd, *tl; chain() { hd = tl = 0; sz = 0; } inline void clear() { hd = tl = 0; sz = 0; } inline void push(int x) { np-\u0026gt; t = x; np-\u0026gt; next = 0; if (sz) { tl-\u0026gt; next = np; tl = np; } else { hd = np; tl = np; } ++ np; ++ sz; } inline void merge(chain a) { sz += a.","title":"bzoj3052.cc"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 这回我是出题人。第一次出给这么多人做。\u0026lt;/p\u0026gt; \u0026nbsp;\n好像是一个很有意思的故事。我猜看到的人会喷死我。不过反正已经身败名裂了。大概我能作为bc史上最逗逼的出题人被记录下来了。\n\u0026nbsp;\n还是记下来这个悲伤的故事吧。也许未来某天还可以愉快地回忆一下。\n\u0026nbsp;\n要从去年12月强行退役开始说。当时觉得生活太无聊了于是yy了四道题去找bestcoder。当时的四道题分别是高精加，现在的第三题数据弱化版，一道灭绝树的裸题，一道动态dfs序。然后审了一下说我题太难了。于是把灭绝树扔了把第三题换成第二题，把第二题改成单峰序列这个坑题。然后听说可以出数据了。\n退役的日子，时间也不多，于是拖到wc之前才在宾馆里把数据出出来了。发过去了。然后让我等一个月。\n\u0026nbsp;\n于是就等到开学了。周二晚上快睡觉的时候，qq上发来消息说，“下周用你的题”。于是我就被拉进了一个验题组。\n\u0026nbsp;\n有人对我说：1001高精，即使b进制也可以强行用java水的。于是开始郁闷了。因为早上要考试所以比他们都睡得早，当然比平时睡得晚很多。比较开心的是某君说了一句“高中生的数据结构都好强”。\n\u0026nbsp;\n第二天早上起来，发现他们说1004在bzoj上有原题，我还是它的弱化版。那题我都没仔细看完过题啊- -b。不开心了。那既然是原题就得换。于是与某队友一起yy良久出了一道d。后来事实证明这是个悲剧。下午把题给验题组看，说是可以。于是去写std，造数据，不亦乐乎。最后发现std因为复杂度太高，所以得把数据出弱，会不会给暴力？不管嘛。扔hdoj服务器上好像还挺快的样子。然后就因为精度误差对拍出各种错。好郁闷。然后想起还有一套给高一的题？熬夜把数据造了。\n\u0026nbsp;\n第三天早上起来，看到有人说第三题数据范围可以加到30，用分两半的方法。想想的确可以。于是就去写了个分两半的东西。然后悲伤地发现已经搞忘之前的datamaker的参数是怎么设计的了。于是随便传了几个参数进去，发现能造出无解的数据。那就这样呗。然后发现第一题可以改一改让高精板废掉。于是就去改了呗。然后晚上的时候第三题又挑出bug了。用c++能过，而用g++怎么都是wa。去找了个cena的g++之后发现还真wa了。然后觉得大概那个方法是错的吧。于是先把数据范围改回16好喽。又是十二点。\n\u0026nbsp;\n第四天早上考试脑子都不清醒了。犯了一堆逗逼错自坑110分。感觉不太好。下午的时候看到有人批斗了我的1003，原来是我排序的关键字搞错了。又改回来吧。然后又有人提醒我1004可以用分数。赶紧改。晚上感觉好累。去跑了3000之后好了一些。\n\u0026nbsp;\n第五天也就是今天了。怎么感觉像是审判一样。早上很晚才起。然后就发现有人又告诉我1004的精度还是不够。然后提出可以换他的1004。决定任性一把，自立deadline。最后提出的解决方案是提高std的精度，同时把数据范围从1e6降到1e3。拍了上万组之后觉得无误了。虽然最后还是徒劳。\n\u0026nbsp;\n下午的时候传来消息说给高一出的数据里三道有两道有问题。不是个好兆头啊。\n\u0026nbsp;\n晚上比赛前怎么觉得比做题还紧张。从开始到等来第一个submission的五分钟感觉是我人生中最慢的五分钟了。\n\u0026nbsp;\n还好1001有人过了。然后1002有人过了。至少这两个题是没有事了。（其实有）然后发现1003怎么前几次都在wa？看看怎么都写的dfs！？然后居然有dfs就过了。郁闷ing。\n\u0026nbsp;\n然后另一项工作是答疑。有人说我中文第二题到底是两个都要满足还是只满足一个？根本没看想了一想说只要满足一个。我想成只要是峰或者谷就行了。然后还顺便发了一发通知。几分钟过后才意识过来发错了赶紧改。据说这一下坑了很多人。\n\u0026nbsp;\n然后就渐渐有人过题了。感觉1003数据给水了啊。好像还真是水。看来没有成功理解当时写的datamaker。\n\u0026nbsp;\n直到结束也没有人交最后一题。虽然听zhx说有人在写。\n\u0026nbsp;\n然后，code time结束。hack开始。然后服务器就崩了。之后的20多分钟没有成功打开网站。看到不同的群里吐槽颇多。\n\u0026nbsp;\n然后再打开网页的时候已经完了。好像很惨的样子。\n\u0026nbsp;\n然后有人开始说数据水了。第二题只有一组1 1，没有成功卡掉忘减1的人。第三题what鬼，暴力随便过。\n\u0026nbsp;\n好吧是疏忽了。\n\u0026nbsp;\n所以就身败名裂了呗。\n\u0026nbsp;\n估计当初想骗些出题费也是无望了。\n\u0026nbsp;\n估计不久之后出去的时候还会被狂吐槽。\n\u0026nbsp;\n所以说毕竟我还是太弱了。还是好好刷题去吧。不要天天想着骗钱。\n","permalink":"/diary/i11rimport_000/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 这回我是出题人。第一次出给这么多人做。\u0026lt;/p\u0026gt; \u0026nbsp;\n好像是一个很有意思的故事。我猜看到的人会喷死我。不过反正已经身败名裂了。大概我能作为bc史上最逗逼的出题人被记录下来了。\n\u0026nbsp;\n还是记下来这个悲伤的故事吧。也许未来某天还可以愉快地回忆一下。\n\u0026nbsp;\n要从去年12月强行退役开始说。当时觉得生活太无聊了于是yy了四道题去找bestcoder。当时的四道题分别是高精加，现在的第三题数据弱化版，一道灭绝树的裸题，一道动态dfs序。然后审了一下说我题太难了。于是把灭绝树扔了把第三题换成第二题，把第二题改成单峰序列这个坑题。然后听说可以出数据了。\n退役的日子，时间也不多，于是拖到wc之前才在宾馆里把数据出出来了。发过去了。然后让我等一个月。\n\u0026nbsp;\n于是就等到开学了。周二晚上快睡觉的时候，qq上发来消息说，“下周用你的题”。于是我就被拉进了一个验题组。\n\u0026nbsp;\n有人对我说：1001高精，即使b进制也可以强行用java水的。于是开始郁闷了。因为早上要考试所以比他们都睡得早，当然比平时睡得晚很多。比较开心的是某君说了一句“高中生的数据结构都好强”。\n\u0026nbsp;\n第二天早上起来，发现他们说1004在bzoj上有原题，我还是它的弱化版。那题我都没仔细看完过题啊- -b。不开心了。那既然是原题就得换。于是与某队友一起yy良久出了一道d。后来事实证明这是个悲剧。下午把题给验题组看，说是可以。于是去写std，造数据，不亦乐乎。最后发现std因为复杂度太高，所以得把数据出弱，会不会给暴力？不管嘛。扔hdoj服务器上好像还挺快的样子。然后就因为精度误差对拍出各种错。好郁闷。然后想起还有一套给高一的题？熬夜把数据造了。\n\u0026nbsp;\n第三天早上起来，看到有人说第三题数据范围可以加到30，用分两半的方法。想想的确可以。于是就去写了个分两半的东西。然后悲伤地发现已经搞忘之前的datamaker的参数是怎么设计的了。于是随便传了几个参数进去，发现能造出无解的数据。那就这样呗。然后发现第一题可以改一改让高精板废掉。于是就去改了呗。然后晚上的时候第三题又挑出bug了。用c++能过，而用g++怎么都是wa。去找了个cena的g++之后发现还真wa了。然后觉得大概那个方法是错的吧。于是先把数据范围改回16好喽。又是十二点。\n\u0026nbsp;\n第四天早上考试脑子都不清醒了。犯了一堆逗逼错自坑110分。感觉不太好。下午的时候看到有人批斗了我的1003，原来是我排序的关键字搞错了。又改回来吧。然后又有人提醒我1004可以用分数。赶紧改。晚上感觉好累。去跑了3000之后好了一些。\n\u0026nbsp;\n第五天也就是今天了。怎么感觉像是审判一样。早上很晚才起。然后就发现有人又告诉我1004的精度还是不够。然后提出可以换他的1004。决定任性一把，自立deadline。最后提出的解决方案是提高std的精度，同时把数据范围从1e6降到1e3。拍了上万组之后觉得无误了。虽然最后还是徒劳。\n\u0026nbsp;\n下午的时候传来消息说给高一出的数据里三道有两道有问题。不是个好兆头啊。\n\u0026nbsp;\n晚上比赛前怎么觉得比做题还紧张。从开始到等来第一个submission的五分钟感觉是我人生中最慢的五分钟了。\n\u0026nbsp;\n还好1001有人过了。然后1002有人过了。至少这两个题是没有事了。（其实有）然后发现1003怎么前几次都在wa？看看怎么都写的dfs！？然后居然有dfs就过了。郁闷ing。\n\u0026nbsp;\n然后另一项工作是答疑。有人说我中文第二题到底是两个都要满足还是只满足一个？根本没看想了一想说只要满足一个。我想成只要是峰或者谷就行了。然后还顺便发了一发通知。几分钟过后才意识过来发错了赶紧改。据说这一下坑了很多人。\n\u0026nbsp;\n然后就渐渐有人过题了。感觉1003数据给水了啊。好像还真是水。看来没有成功理解当时写的datamaker。\n\u0026nbsp;\n直到结束也没有人交最后一题。虽然听zhx说有人在写。\n\u0026nbsp;\n然后，code time结束。hack开始。然后服务器就崩了。之后的20多分钟没有成功打开网站。看到不同的群里吐槽颇多。\n\u0026nbsp;\n然后再打开网页的时候已经完了。好像很惨的样子。\n\u0026nbsp;\n然后有人开始说数据水了。第二题只有一组1 1，没有成功卡掉忘减1的人。第三题what鬼，暴力随便过。\n\u0026nbsp;\n好吧是疏忽了。\n\u0026nbsp;\n所以就身败名裂了呗。\n\u0026nbsp;\n估计当初想骗些出题费也是无望了。\n\u0026nbsp;\n估计不久之后出去的时候还会被狂吐槽。\n\u0026nbsp;\n所以说毕竟我还是太弱了。还是好好刷题去吧。不要天天想着骗钱。","title":"20150314 BC33"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; \u0026amp;nbsp;今天是强行把270吃成了160。\u0026lt;/p\u0026gt; \u0026nbsp;\n第一题，水水的单调性。然后就以为只有小写字母。想想能得20分真是神奇。\n\u0026nbsp;\n第二题不是个暴搜题嘛。加个最优性剪枝就能过。然后就没有注意到顺子的长度是不小于5而不是等于5。再见。\n\u0026nbsp;\n第三题满分做法没看懂。自己想出来的dfs能过70分。然后就判素数的时候强行int了。不开心啊。\n\u0026nbsp;\n所以今天是太粗心了。也许昨天晚上睡眠不足也有关系吧。\n\u0026nbsp;\n毕竟我太弱了。\n","permalink":"/diary/i11rimport_001/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; \u0026amp;nbsp;今天是强行把270吃成了160。\u0026lt;/p\u0026gt; \u0026nbsp;\n第一题，水水的单调性。然后就以为只有小写字母。想想能得20分真是神奇。\n\u0026nbsp;\n第二题不是个暴搜题嘛。加个最优性剪枝就能过。然后就没有注意到顺子的长度是不小于5而不是等于5。再见。\n\u0026nbsp;\n第三题满分做法没看懂。自己想出来的dfs能过70分。然后就判素数的时候强行int了。不开心啊。\n\u0026nbsp;\n所以今天是太粗心了。也许昨天晚上睡眠不足也有关系吧。\n\u0026nbsp;\n毕竟我太弱了。","title":"20150313"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 题目名字好长。\u0026lt;/p\u0026gt; \u0026nbsp;\n当年在考场上只会分块打表的题。\n\u0026nbsp;\n前几天有人讲之后觉得大概可做。而且好像那个方法很优秀。\n\u0026nbsp;\n于是我难得地去写了一回不用记搜且不记上界的数位dp。感觉这个玩意写出来很短，但是思考和调试的复杂度变高了。我觉得是状态定义变得不明确的原因。也许再补一些题就好了。\n\u0026nbsp;\n考虑先让所有都合并到最低位，一个基础数位dp。（然后写丑了好久）\n\u0026nbsp;\n然后考虑如果把一个数字的集合位置从p移动到p+1，设这个数字从低位到高位是a[0]..a[n-1]，那么贡献就是∑a[0..p]-∑a[p+1..n-1]。显然当p从右往左移动的时候它是会先负后正的。如果它负的话就减，否则就不玩了。可以发现它们互相不影响。于是对于每一个p单独计算一遍贡献就行了。\n\u0026nbsp;\n然后还是没有原版跑得快。OTL。\n\u0026nbsp;\n#define PROC \"shop\" #include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 53; const int maxm = 509; const int mb = 253;\ndint l, r; int n, m, bs, a[maxn];\ndint dpBeginning() { static dint f[maxn], c[maxn], g[maxn], cr[maxn]; c[0] = bs; f[0] = 0; for (int i = 1; i \u0026lt; n; ++ i) { c[i] = c[i - 1] * bs; f[i] = f[i - 1] * bs; for (int j = 1; j \u0026lt; bs; ++ j) f[i] = f[i] + c[i - 1] * i * j; } cr[0] = g[0] = 0; cr[1] = a[0] + 1; g[1] = a[1] * cr[1]; for (int i = 2; i \u0026lt;= n; ++ i) { cr[i] = g[i] = 0; for (int d = 0; d \u0026lt; a[i - 1]; ++ d) { cr[i] += c[i - 2]; g[i] += f[i - 2] + c[i - 2] * (d * (i - 1) + a[i] * i); } cr[i] += cr[i - 1]; g[i] += cr[i - 1] * a[i] * i + g[i - 1]; } return g[n]; }\ndint dp(dint v) { static dint c[maxn][maxm]; static dint cr[maxn][maxm]; m = 0; for (n = 0; v; v /= bs) a[n ++] = v % bs; a[n] = 0; m = n * bs; dint ans(dpBeginning()); //printf(lld \u0026ldquo;\\n\u0026rdquo;, ans); for (int p = 1; p \u0026lt; n; ++ p) { memset(c, 0, sizeof(c)); for (int i = 0; i \u0026lt; bs; ++ i) c[0][mb - i] = 1; for (int i = 1; i \u0026lt; n; ++ i) for (int j = mb - m; j \u0026lt;= mb + m; ++ j) if (c[i - 1][j]) for (int d = 0; d \u0026lt; bs; ++ d) { int t((i \u0026lt; p) ? j - d : j + d); c[i][t] += c[i - 1][j]; } memset(cr, 0, sizeof(cr)); cr[0][mb - a[0]] = 1; for (int i = 1; i \u0026lt;= n; ++ i) { for (int d = 0; d \u0026lt; a[i - 1]; ++ d) if (i \u0026gt; 1) { for (int j = mb - m; j \u0026lt;= mb + m; ++ j) if (c[i - 2][j]) { int t((i - 1 \u0026lt; p) ? j - d : j + d); t = (i \u0026lt; p) ? t - a[i] : t + a[i]; cr[i][t] += c[i - 2][j]; } } else { int t((i \u0026lt; p) ? mb - d - a[i] : mb - d + a[i]); ++ cr[i][t]; } for (int j = mb - m; j \u0026lt;= mb + m; ++ j) if (cr[i - 1][j]) { int t((i \u0026lt; p) ? j - a[i] : j + a[i]); cr[i][t] += cr[i - 1][j]; } } for (int i = 1; i \u0026lt;= m; ++ i) ans -= cr[n][i + mb] * i; } return ans; }\nint main() { #ifndef ONLINE_JUDGE freopen(PROC \u0026ldquo;.in\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); freopen(PROC \u0026ldquo;.out\u0026rdquo;, \u0026ldquo;w\u0026rdquo;, stdout); #endif\nscanf(lld lld \u0026quot;%d\u0026quot;, \u0026amp;amp;l, \u0026amp;amp;r, \u0026amp;amp;bs); printf(lld \u0026quot;\\n\u0026quot;, dp(r) - dp(l - 1)); } ","permalink":"/oi/i11rimport_002/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 题目名字好长。\u0026lt;/p\u0026gt; \u0026nbsp;\n当年在考场上只会分块打表的题。\n\u0026nbsp;\n前几天有人讲之后觉得大概可做。而且好像那个方法很优秀。\n\u0026nbsp;\n于是我难得地去写了一回不用记搜且不记上界的数位dp。感觉这个玩意写出来很短，但是思考和调试的复杂度变高了。我觉得是状态定义变得不明确的原因。也许再补一些题就好了。\n\u0026nbsp;\n考虑先让所有都合并到最低位，一个基础数位dp。（然后写丑了好久）\n\u0026nbsp;\n然后考虑如果把一个数字的集合位置从p移动到p+1，设这个数字从低位到高位是a[0]..a[n-1]，那么贡献就是∑a[0..p]-∑a[p+1..n-1]。显然当p从右往左移动的时候它是会先负后正的。如果它负的话就减，否则就不玩了。可以发现它们互相不影响。于是对于每一个p单独计算一遍贡献就行了。\n\u0026nbsp;\n然后还是没有原版跑得快。OTL。\n\u0026nbsp;\n#define PROC \"shop\" #include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 53; const int maxm = 509; const int mb = 253;\ndint l, r; int n, m, bs, a[maxn];","title":"BZOJ3598 [Scoi2014]方伯伯的商场之旅"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 在一道usaco的题上wa了三次。我也是厉害。\u0026lt;/p\u0026gt; \u0026nbsp;\n其实好像有简单做法的。不过我是要脑补一下曼哈顿最小生成树。\n\u0026nbsp;\n对于一个平面图上的点的曼哈顿最小生成树，一定存在一种方案，使得每个点的度数至多为8。也就是说以斜率为0,inf,1,-1的四条直线分出来的八个区域里各有一个点就行了。然后是可以保证的。\n\u0026nbsp;\n于是就是拿俩树状数组扫四遍就行了。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstdlib\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int inf = 0x3f3f3f3f;\nstruct point { int x, y, i; point() { x = -inf, y = -1; } point(int xo, int yo) { x = xo, y = yo; } inline void init(int ix) { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;x, \u0026amp;y); i = ix; } };\ninline bool operator \u0026lt;(const point\u0026amp; a, const point\u0026amp; b) { return (a. x \u0026lt; b. x) || (a. x == b. x \u0026amp;\u0026amp; a. y \u0026lt; b. y); }\nconst int maxn = 100009; const int maxx = 1e9;\nint n, c, r[maxn], sz[maxn], cnt, msz; int v[maxn], tv, w[maxn], tw; point a[maxn], ta[maxn], tb[maxn];\nint getRoot(int x) { register int p, q; for (p = r[x]; p ^ r[p]; p = r[p]); for (; x ^ p; q = r[x], r[x] = p, x = q); return x; } inline void join(int u, int v) { r[getRoot(u)] = getRoot(v); }\npoint btQry(point* t, int p) { point s(-inf, -1); for (++ p; p; p -= (p \u0026amp; -p)) if (s \u0026lt; t[p]) s = t[p]; return s; } void btChg(point* t, int p, point v) { for (++ p; p \u0026lt; maxn; p += (p \u0026amp; -p)) if (t[p] \u0026lt; v) t[p] = v; }\ninline bool isNeighbour(const point\u0026amp; a, const point\u0026amp; b) { return abs(a. x - b. x) + abs(a. y - b. y) \u0026lt;= c; }\nvoid span() { sort(a, a + n); tv = tw; for (int i = 0; i \u0026lt; n; ++ i) { v[i] = a[i]. y - a[i]. x; w[i] = - a[i]. x - a[i]. y; } sort(v, v + n); tv = unique(v, v + n) - v; sort(w, w + n); tw = unique(w, w + n) - w; for (int i = 1; i \u0026lt;= tv || i \u0026lt;= tw; ++ i) ta[i] = tb[i] = point(); for (int i = 0; i \u0026lt; n; ++ i) { int p(lower_bound(v, v + tv, a[i]. y - a[i]. x) - v); point g(btQry(ta, p)); if (g. y \u0026gt; -1 \u0026amp;\u0026amp; isNeighbour(a[i], a[g. y])) join(a[i]. i, a[g. y]. i); btChg(ta, p, point(a[i]. x + a[i]. y, i)); p = lower_bound(w, w + tw, - a[i]. x - a[i]. y) - w; g = btQry(tb, p); if (g. y \u0026gt; -1 \u0026amp;\u0026amp; isNeighbour(a[i], a[g. y])) join(a[i]. i, a[g. y]. i); btChg(tb, p, point(a[i]. x - a[i]. y, i)); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;c); for (int i = 0; i \u0026amp;lt; n; ++ i) { a[i]. init(i); r[i] = i; } span(); for (int i = 0; i \u0026amp;lt; n; ++ i) a[i]. x = maxx - a[i]. x; span(); for (int i = 0; i \u0026amp;lt; n; ++ i) swap(a[i]. x, a[i]. y); span(); for (int i = 0; i \u0026amp;lt; n; ++ i) a[i]. x = maxx - a[i]. x; span(); memset(sz, 0, sizeof(sz)); for (int i = 0; i \u0026amp;lt; n; ++ i) { if (r[i] == i) ++ cnt; ++ sz[getRoot(i)]; } for (int i = 0; i \u0026amp;lt; n; ++ i) if (r[i] == i \u0026amp;amp;\u0026amp;amp; sz[i] \u0026amp;gt; msz) msz = sz[i]; printf(\u0026quot;%d %d\\n\u0026quot;, cnt, msz); } ","permalink":"/oi/i11rimport_003/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 在一道usaco的题上wa了三次。我也是厉害。\u0026lt;/p\u0026gt; \u0026nbsp;\n其实好像有简单做法的。不过我是要脑补一下曼哈顿最小生成树。\n\u0026nbsp;\n对于一个平面图上的点的曼哈顿最小生成树，一定存在一种方案，使得每个点的度数至多为8。也就是说以斜率为0,inf,1,-1的四条直线分出来的八个区域里各有一个点就行了。然后是可以保证的。\n\u0026nbsp;\n于是就是拿俩树状数组扫四遍就行了。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstdlib\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int inf = 0x3f3f3f3f;\nstruct point { int x, y, i; point() { x = -inf, y = -1; } point(int xo, int yo) { x = xo, y = yo; } inline void init(int ix) { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;x, \u0026amp;y); i = ix; } };\ninline bool operator \u0026lt;(const point\u0026amp; a, const point\u0026amp; b) { return (a.","title":"BZOJ1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 继续傻。\u0026lt;/p\u0026gt; \u0026nbsp;\n早上考试。因为事情比较多所以有些心不在焉。\n\u0026nbsp;\n第一题似乎很水？直接线段树搞定。拍都没拍。然后似乎有一堆人理解错题意了。\n\u0026nbsp;\n第二题是个最大权闭合子图一类的东西。前几天做过小m的作物，所以很快就反应出了建图的方法。\n\u0026nbsp;\n第三题是个数学题。打了几个小数据在oeis上找到了通项。不过这种行为搞出来的公式显然是不能拿出来用的。其实我也没细看。然后在各种郁闷下想了一会没想对，于是就交了个30分的暴力。\n\u0026nbsp;\n然后他们都把前两题中的至少一题写挂了。然后他们第三题都比我高。所以我还是太弱了。\n\u0026nbsp;\n然后花了这一天中剩下的所有时间来出题。\n\u0026nbsp;\n原来出题是这么郁闷的一件事情，尤其是出的题会涉及到很多的利益关系的时候。\n\u0026nbsp;\n感觉今天也没做什么。是我的效率太低了吧。\n","permalink":"/diary/i11rimport_004/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 继续傻。\u0026lt;/p\u0026gt; \u0026nbsp;\n早上考试。因为事情比较多所以有些心不在焉。\n\u0026nbsp;\n第一题似乎很水？直接线段树搞定。拍都没拍。然后似乎有一堆人理解错题意了。\n\u0026nbsp;\n第二题是个最大权闭合子图一类的东西。前几天做过小m的作物，所以很快就反应出了建图的方法。\n\u0026nbsp;\n第三题是个数学题。打了几个小数据在oeis上找到了通项。不过这种行为搞出来的公式显然是不能拿出来用的。其实我也没细看。然后在各种郁闷下想了一会没想对，于是就交了个30分的暴力。\n\u0026nbsp;\n然后他们都把前两题中的至少一题写挂了。然后他们第三题都比我高。所以我还是太弱了。\n\u0026nbsp;\n然后花了这一天中剩下的所有时间来出题。\n\u0026nbsp;\n原来出题是这么郁闷的一件事情，尤其是出的题会涉及到很多的利益关系的时候。\n\u0026nbsp;\n感觉今天也没做什么。是我的效率太低了吧。","title":"20150311"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天比较傻嘛。写了个奇怪的东西还自以为能AK。\u0026lt;/p\u0026gt; \u0026nbsp;\n第一题明明已经想到正确的结论了，然后又觉得它不太靠谱，于是就没敢写。晕。\n\u0026nbsp;\n第二题原题，虽然已经快忘了。\n\u0026nbsp;\n第三题原题。当年不太会，不过现在想一想就会了。然后他们暴力就过了，不开心。反正写线段树保不TLE，虽然考场上幸好随便对拍了一发不然就惨了。\n\u0026nbsp;\n下午讲课让我觉得有必要去补一些最近scoi的题。\n\u0026nbsp;\n所以我还是太弱了。\n","permalink":"/diary/i11rimport_005/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天比较傻嘛。写了个奇怪的东西还自以为能AK。\u0026lt;/p\u0026gt; \u0026nbsp;\n第一题明明已经想到正确的结论了，然后又觉得它不太靠谱，于是就没敢写。晕。\n\u0026nbsp;\n第二题原题，虽然已经快忘了。\n\u0026nbsp;\n第三题原题。当年不太会，不过现在想一想就会了。然后他们暴力就过了，不开心。反正写线段树保不TLE，虽然考场上幸好随便对拍了一发不然就惨了。\n\u0026nbsp;\n下午讲课让我觉得有必要去补一些最近scoi的题。\n\u0026nbsp;\n所以我还是太弱了。","title":"20150310"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 晚上在家效率好低啊。什么都不想干。\u0026lt;/p\u0026gt; \u0026nbsp;\n于是今天考试还是死得挺惨。\n\u0026nbsp;\n第一题没想。然后乱写得了20分。居然能得20分。然后正解比较神奇的感觉，虽然抄了一遍但是还是没有很好地理解跳的那一步。\n\u0026nbsp;\n第二题想了很久才发现比较简单。之前想复杂了。其实转到值域上之后就会好做许多。\n\u0026nbsp;\n第三题水水水水水水水水水水。然后题意。什么鬼。\n\u0026nbsp;\n所以我还是太弱啦。这个样子怎么省选TT。\n","permalink":"/diary/i11rimport_006/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 晚上在家效率好低啊。什么都不想干。\u0026lt;/p\u0026gt; \u0026nbsp;\n于是今天考试还是死得挺惨。\n\u0026nbsp;\n第一题没想。然后乱写得了20分。居然能得20分。然后正解比较神奇的感觉，虽然抄了一遍但是还是没有很好地理解跳的那一步。\n\u0026nbsp;\n第二题想了很久才发现比较简单。之前想复杂了。其实转到值域上之后就会好做许多。\n\u0026nbsp;\n第三题水水水水水水水水水水。然后题意。什么鬼。\n\u0026nbsp;\n所以我还是太弱啦。这个样子怎么省选TT。","title":"20150309"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 毕竟uoj还是缺人么，比赛比较稀疏。\u0026lt;/p\u0026gt; \u0026nbsp;\n然后觉得我在这种智商向的题面前无力了。\n\u0026nbsp;\n第一题， 一看，不就是a[i]*(26n-1)=26*h[i]-h[i+1]么，水，敲。然后就没有考虑到26n-1≡0(mod p)的情况。于是gg。\n\u0026nbsp;\n第二题，居然是构造矩阵的题？首先我连基尔霍夫矩阵都要忘了。手推了一下发现消元消出来不对？原来是这一行的系数不能变。晕。然后就这样也只会暴力枚举图。20分走人。\n\u0026nbsp;\n第三题，似乎见过？不对啊，只见过完全图的解法。好像有10分。随手写一个吧。怎么今天三道题都有modPow。不管了弃疗。\n\u0026nbsp;\n结局是50+10+20=80=一个很惨的rank。所以我还是太弱啊。\n\u0026nbsp;\n昨天打球的时候，教练说，这一年我打球就像在赶场，没有找到自己的节奏。想想，不只是打球吧。很多时候都是在被拖着走，很没有目标感。不知道自己要去哪里，也不知道怎么去。似乎好像也做了规划，不过也没有真正去实现。到底是世界太复杂，还是我太简单？\n\u0026nbsp;\n不论如何，既然选择了自己的路，那爬也要爬完。\n","permalink":"/diary/i11rimport_007/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 毕竟uoj还是缺人么，比赛比较稀疏。\u0026lt;/p\u0026gt; \u0026nbsp;\n然后觉得我在这种智商向的题面前无力了。\n\u0026nbsp;\n第一题， 一看，不就是a[i]*(26n-1)=26*h[i]-h[i+1]么，水，敲。然后就没有考虑到26n-1≡0(mod p)的情况。于是gg。\n\u0026nbsp;\n第二题，居然是构造矩阵的题？首先我连基尔霍夫矩阵都要忘了。手推了一下发现消元消出来不对？原来是这一行的系数不能变。晕。然后就这样也只会暴力枚举图。20分走人。\n\u0026nbsp;\n第三题，似乎见过？不对啊，只见过完全图的解法。好像有10分。随手写一个吧。怎么今天三道题都有modPow。不管了弃疗。\n\u0026nbsp;\n结局是50+10+20=80=一个很惨的rank。所以我还是太弱啊。\n\u0026nbsp;\n昨天打球的时候，教练说，这一年我打球就像在赶场，没有找到自己的节奏。想想，不只是打球吧。很多时候都是在被拖着走，很没有目标感。不知道自己要去哪里，也不知道怎么去。似乎好像也做了规划，不过也没有真正去实现。到底是世界太复杂，还是我太简单？\n\u0026nbsp;\n不论如何，既然选择了自己的路，那爬也要爬完。","title":"20150308 ur6"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 插头dp的练手题么。虽然之前还没写过哈密顿回路的题。\u0026lt;/p\u0026gt; \u0026nbsp;\n学习了一下广义括号法。发现状态数比之前记连通性的方法要少。仔细想想发现，两个连通的插头的顺序有关。不能存在1212这种东西。所以连通性的方法记了很多废状态。那把连通性方法改进一下会不会变得更快呢？可以研究一下。我觉得应该是等效了吧。\n\u0026nbsp;\n今天的debug时间明显缩短了。虽然还是debug了老半天。然后怎么代码还是那么长。想起我每次都觉得把东西挤到一起看起来很不雅观，于是去写一堆找转移的函数。晕。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 15; const int maxst = 50009;\n#define mbit(x,y) ((x)\u0026lt;\u0026lt;((y)\u0026lt;\u0026lt;1)) #define gbit(x,y) (((x)\u0026gt;\u0026gt;((y)\u0026lt;\u0026lt;1))\u0026amp;3) #define cbit(x,y) ((x)\u0026amp;(~(3\u0026lt;\u0026lt;((y)\u0026lt;\u0026lt;1))))\nint n, m, tots, slst[maxst]; bool mp[maxn][maxn]; dint f[2][maxst];\nvoid dfsState(int l, int c, int z) { if (l == m + 1) { if (!c) slst[tots ++] = z; } else { dfsState(l + 1, c, z); dfsState(l + 1, c + 1, z | mbit(1, l)); if (c) dfsState(l + 1, c - 1, z | mbit(2, l)); } } void preState() { tots = 0; dfsState(0, 0, 0); sort(slst, slst + tots); } inline int fState(int s) { register int ret(lower_bound(slst, slst + tots, s) - slst); if (slst[ret] != s) puts(\u0026ldquo;naive\u0026rdquo;); return ret; }\n#define inc(a,b) (a+=b) inline int brv(int x) { if (!x) return 0; else return (x == 1) ? 1 : -1; }\nbool isEnd(int s, int y) { for (int i = 0; i \u0026lt; y; ++ i) if (gbit(s, i)) return 0; for (int i = y + 2; i \u0026lt;= m; ++ i) if (gbit(s, i)) return 0; return 1; } inline int mergePlug(int s, int y) { int p, c; if (gbit(s, y) != gbit(s, y + 1)) { s = cbit(s, y); s = cbit(s, y + 1); return fState(s); } else if (gbit(s, y) == 1) { for (c = 1, p = y + 1; c; ++ p, c += brv(gbit(s, p))); s = cbit(s, y); s = cbit(s, y + 1); s = cbit(s, p); return fState(s | mbit(1, p)); } else { for (c = -1, p = y; c; \u0026ndash; p, c += brv(gbit(s, p))); s = cbit(s, y); s = cbit(s, y + 1); s = cbit(s, p); return fState(s | mbit(2, p)); } } inline int extPlugRight(int s, int y) { s |= mbit(gbit(s, y), y + 1); s = cbit(s, y); return fState(s); } inline int extPlugDown(int s, int y) { s |= mbit(gbit(s, y + 1), y); s = cbit(s, y + 1); return fState(s); } inline int forkPlug(int s, int y) { s |= mbit(1, y); s |= mbit(2, y + 1); return fState(s); } inline int nextRow(int s) { int r(0); for (int i = 0; i \u0026lt; m; ++ i) r |= mbit(gbit(s, i), i + 1); return fState(r); }\ndint dp() { int cur(0), prv(1); dint ans; memset(f, 0, sizeof(f)); f[cur][0] = 1; for (int x = 0; x \u0026lt; n; ++ x) { for (int y = 0; y \u0026lt; m; ++ y) { if (mp[x][y]) ans = 0; swap(cur, prv); memset(f[cur], 0, sizeof(f[cur])); for (int i = 0; i \u0026lt; tots; ++ i) if (f[prv][i]) { int s(slst[i]);; if (mp[x][y]) { if (gbit(s, y) \u0026amp;\u0026amp; gbit(s, y + 1)) { if (gbit(s, y) == 1 \u0026amp;\u0026amp; gbit(s, y + 1) == 2) { if (isEnd(s, y)) inc(ans, f[prv][i]); } else inc(f[cur][mergePlug(s, y)], f[prv][i]); } else if (gbit(s, y)) { inc(f[cur][i], f[prv][i]); inc(f[cur][extPlugRight(s, y)], f[prv][i]); } else if (gbit(s, y + 1)) { inc(f[cur][i], f[prv][i]); inc(f[cur][extPlugDown(s, y)], f[prv][i]); } else inc(f[cur][forkPlug(s, y)], f[prv][i]); } else { if (!gbit(s, y) \u0026amp;\u0026amp; !gbit(s, y + 1)) inc(f[cur][i], f[prv][i]); } } } swap(cur, prv); memset(f[cur], 0, sizeof(f[cur])); for (int i = 0; i \u0026lt; tots; ++ i) if (f[prv][i] \u0026amp;\u0026amp; !gbit(slst[i], m)) inc(f[cur][nextRow(slst[i])], f[prv][i]); } return ans; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m); for (int i = 0; i \u0026amp;lt; n; ++ i) { char g[maxn]; scanf(\u0026quot;%s\u0026quot;, g); for (int j = 0; j \u0026amp;lt; m; ++ j) mp[i][j] = (g[j] == '.'); } preState(); printf(lld \u0026quot;\\n\u0026quot;, dp()); } ","permalink":"/oi/i11rimport_008/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 插头dp的练手题么。虽然之前还没写过哈密顿回路的题。\u0026lt;/p\u0026gt; \u0026nbsp;\n学习了一下广义括号法。发现状态数比之前记连通性的方法要少。仔细想想发现，两个连通的插头的顺序有关。不能存在1212这种东西。所以连通性的方法记了很多废状态。那把连通性方法改进一下会不会变得更快呢？可以研究一下。我觉得应该是等效了吧。\n\u0026nbsp;\n今天的debug时间明显缩短了。虽然还是debug了老半天。然后怎么代码还是那么长。想起我每次都觉得把东西挤到一起看起来很不雅观，于是去写一堆找转移的函数。晕。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 15; const int maxst = 50009;\n#define mbit(x,y) ((x)\u0026lt;\u0026lt;((y)\u0026lt;\u0026lt;1)) #define gbit(x,y) (((x)\u0026gt;\u0026gt;((y)\u0026lt;\u0026lt;1))\u0026amp;3) #define cbit(x,y) ((x)\u0026amp;(~(3\u0026lt;\u0026lt;((y)\u0026lt;\u0026lt;1))))\nint n, m, tots, slst[maxst]; bool mp[maxn][maxn]; dint f[2][maxst];\nvoid dfsState(int l, int c, int z) { if (l == m + 1) { if (!","title":"BZOJ1814 Ural 1519 Formula 1"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; orz mhy。看mhy的刷题记录成为了我成天的刷题方向了。\u0026lt;/p\u0026gt; \u0026nbsp;\n其实最初也没有想清楚。然后看了一眼mhy写的题解写了凸壳，秒懂。\n\u0026nbsp;\n二分一个答案，设它是ans。如果ans≥realAns的话，那么就会存在yi-ans*xi+qj-ans*pj≥0。然后i和j就分开了。于是变成了求一条路径上yi-ans*xi的最大值。把xi看作k，把yi看作b，就变成半平面交了。于是开归并式线段树把凸壳给记录下来就好了。然后复杂度大约是单次询问O(lg3(n))的？链剖后每棵树单独建树，然后复杂度我就不会算了TT。\n\u0026nbsp;\n于是就硬着头皮写了，然后发现跑得还挺快。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 30009; const int maxl = 15; const int max_buf = maxn * maxl * 2; const double eps = 1e-6; const double finf = 1e10;\nint ibuf_arr[max_buf], *ibuf(ibuf_arr); double fbuf_arr[max_buf], *fbuf(fbuf_arr);\nstruct edge { int t; edge *next; };\nstruct line { double k, b; inline double xCross(const line\u0026amp; a) { return (a. b - b) / (k - a. k); } inline double f(double x) { return k * x + b; } }; line a[maxn \u0026lt;\u0026lt; 1];\nstruct hull { int t; int *l; double *cx; void init(int x) { t = 1; l = ibuf ++; l[0] = x; cx = 0; } void merge(const hull\u0026amp; x, const hull\u0026amp; y) { static int stc[maxn]; static double tx[maxn]; t = 0; for (int i = 0, j = 0, c; i \u0026lt; x. t || j \u0026lt; y. t; ) { if (i == x. t || (j \u0026lt; y. t \u0026amp;\u0026amp; a[x. l[i]]. k \u0026gt; a[y. l[j]]. k)) c = y. l[j ++]; else c = x. l[i ++]; if (t \u0026amp;\u0026amp; fabs(a[c]. k - a[stc[t - 1]]. k) \u0026lt; eps) { if (a[c]. b \u0026gt;= a[stc[t - 1]]. b) \u0026ndash; t; else continue; } while (t \u0026gt; 1 \u0026amp;\u0026amp; a[c]. xCross(a[stc[t - 2]]) \u0026lt;= tx[t - 2]) \u0026ndash; t; if (t) tx[t - 1] = a[c]. xCross(a[stc[t - 1]]); stc[t ++] = c; } l = ibuf; ibuf += t; cx = fbuf; fbuf += t - 1; for (int i = 0; i \u0026lt; t; ++ i) { l[i] = stc[i]; if (i \u0026lt; t - 1) cx[i] = a[stc[i]]. xCross(a[stc[i + 1]]); } } double qry(double x) { int p(lower_bound(cx, cx + t - 1, x) - cx); return a[l[p]]. f(x); } }; struct seg { hull h[2]; int l, r; seg *ls, *rs; };\nint n, m; double qans[2], qx; int fa[maxn], d[maxn], sz[maxn], tc, fc[maxn], ch[maxn], cl[maxn], *ci[maxn]; edge elst[maxn \u0026lt;\u0026lt; 1], *ep(elst), *head[maxn]; seg slst[maxn \u0026lt;\u0026lt; 2], *sp(slst), *rt[maxn];\ninline void upMax(double\u0026amp; a, double b) { if (a \u0026lt; b) a = b; } inline void addEdge(int u, int v) { ep-\u0026gt; t = v; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\n#define cpos(p) (d[p]-d[ch[fc[p]]]) #define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\ninline seg* sgtBuild(int l, int r, int* ci) { seg p(sp ++); p-\u0026gt; l = l; p-\u0026gt; r = r; if (l + 1 == r) { p-\u0026gt; h[0]. init(ci[l]); p-\u0026gt; h[1]. init(ci[l] + n); } else { p-\u0026gt; ls = sgtBuild(l, midp(p), ci); p-\u0026gt; rs = sgtBuild(midp(p), r, ci); p-\u0026gt; h[0]. merge(p-\u0026gt; ls-\u0026gt; h[0], p-\u0026gt; rs-\u0026gt; h[0]); p-\u0026gt; h[1]. merge(p-\u0026gt; ls-\u0026gt; h[1], p-\u0026gt; rs-\u0026gt; h[1]); } return p; } inline void sgtQry(seg p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) { upMax(qans[0], p-\u0026gt; h[0]. qry(qx)); upMax(qans[1], p-\u0026gt; h[1]. qry(qx)); } else if (r \u0026lt;= midp(p)) sgtQry(p-\u0026gt; ls, l, r); else if (l \u0026gt;= midp(p)) sgtQry(p-\u0026gt; rs, l, r); else { sgtQry(p-\u0026gt; ls, l, midp(p)); sgtQry(p-\u0026gt; rs, midp(p), r); } }\nvoid divide() { static int q[maxn]; int hd(0), tl(1); memset(d, 0, sizeof(d)); d[q[0] = 1] = 1; fa[1] = 0; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (!d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; fa[e-\u0026gt; t] = p; q[tl ++] = e-\u0026gt; t; } } tc = 0; for (int i = tl - 1; i \u0026gt;= 0; \u0026ndash; i) { int p(q[i]), z(-1); sz[p] = 1; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (fa[e-\u0026gt; t] == p) { sz[p] += sz[e-\u0026gt; t]; if (z == -1 || sz[e-\u0026gt; t] \u0026gt; sz[z]) z = e-\u0026gt; t; } if (z == -1) cl[fc[p] = ++ tc] = 1; else ++ cl[fc[p] = fc[z]]; ch[fc[p]] = p; } for (int i = 1; i \u0026lt;= tc; ++ i) { ci[i] = ibuf; ibuf += cl[i]; } for (int i = 1; i \u0026lt;= n; ++ i) ci[fc[i]][cpos(i)] = i; for (int i = 1; i \u0026lt;= tc; ++ i) rt[i] = sgtBuild(0, cl[i], ci[i]); }\nbool check(int u, int v, double x) { qans[0] = qans[1] = -finf; qx = -x; while (fc[u] ^ fc[v]) if (d[ch[fc[u]]] \u0026gt; d[ch[fc[v]]]) { sgtQry(rt[fc[u]], 0, cpos(u) + 1); u = fa[ch[fc[u]]]; } else { sgtQry(rt[fc[v]], 0, cpos(v) + 1); v = fa[ch[fc[v]]]; } if (d[u] \u0026lt; d[v]) sgtQry(rt[fc[u]], cpos(u), cpos(v) + 1); else sgtQry(rt[fc[u]], cpos(v), cpos(u) + 1); return qans[0] + qans[1] \u0026gt;= 0; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); for (int i = 1; i \u0026amp;lt;= n; ++ i) scanf(\u0026quot;%lf\u0026quot;, \u0026amp;amp;a[i]. k); for (int i = 1; i \u0026amp;lt;= n; ++ i) scanf(\u0026quot;%lf\u0026quot;, \u0026amp;amp;a[i]. b); for (int i = 1; i \u0026amp;lt;= n; ++ i) scanf(\u0026quot;%lf\u0026quot;, \u0026amp;amp;a[i + n]. k); for (int i = 1; i \u0026amp;lt;= n; ++ i) scanf(\u0026quot;%lf\u0026quot;, \u0026amp;amp;a[i + n]. b); memset(head, 0, sizeof(head)); for (int i = 1; i \u0026amp;lt; n; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v); addEdge(u, v); addEdge(v, u); } divide(); scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;m); while (m --) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v); double l(1e-8), r(1e8); while (l + eps \u0026amp;lt; r) { double mid((l + r + eps) / 2.0); if (check(u, v, mid)) l = mid; else r = mid - eps; } printf(\u0026quot;%.4lf\\n\u0026quot;, l); } } ","permalink":"/oi/i11rimport_009/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; orz mhy。看mhy的刷题记录成为了我成天的刷题方向了。\u0026lt;/p\u0026gt; \u0026nbsp;\n其实最初也没有想清楚。然后看了一眼mhy写的题解写了凸壳，秒懂。\n\u0026nbsp;\n二分一个答案，设它是ans。如果ans≥realAns的话，那么就会存在yi-ans*xi+qj-ans*pj≥0。然后i和j就分开了。于是变成了求一条路径上yi-ans*xi的最大值。把xi看作k，把yi看作b，就变成半平面交了。于是开归并式线段树把凸壳给记录下来就好了。然后复杂度大约是单次询问O(lg3(n))的？链剖后每棵树单独建树，然后复杂度我就不会算了TT。\n\u0026nbsp;\n于是就硬着头皮写了，然后发现跑得还挺快。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 30009; const int maxl = 15; const int max_buf = maxn * maxl * 2; const double eps = 1e-6; const double finf = 1e10;\nint ibuf_arr[max_buf], *ibuf(ibuf_arr); double fbuf_arr[max_buf], *fbuf(fbuf_arr);\nstruct edge { int t; edge *next; };\nstruct line { double k, b; inline double xCross(const line\u0026amp; a) { return (a.","title":"BZOJ2402 陶陶的难题II"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 这么水的题居然还要写题解。要不要说我写了半个下午+半个晚上。\u0026lt;/p\u0026gt; \u0026nbsp;\n丧心病狂想写一发zkw去抢速度rank。然后发现zkw怎么支持区间修改查询TT。课件根本没讲懂。而且max怎么区间加。\n\u0026nbsp;\n想了很久终于想出了来了。然后交上去发现常数巨大比普通线段树还要慢TT。到头来想想如果我直接写普通线段树说不定十多分钟就能过，而且代码量还会小一些。因为那个是可以直接通用的，但是这个比较麻烦。\n\u0026nbsp;\n其实写这个就题解就是想记录一下我yy出来的zkw区间修改区间查询的方法。\n\u0026nbsp;\n这道题是区间查询最大值+区间修改。如果是写一般的线段树，需要记录两个值a和v（至于为啥我用了这俩神奇的字母我也不知道），分别表示当前区间被完整覆盖的修改的最大值（又称lazy标记）和当前区间的最大值。然后所以zkw也要记这两个东西。\n\u0026nbsp;\n如果我们把zkw看作一棵树，那么每次修改和询问操作的时候都是对一些线段的a和v进行操作。（废话）\n\u0026nbsp;\n首先考虑修改。zkw经典的变为开区间取中间能处理a值的改变，但是不能处理v值的改变。因为v值改变的线段不一定会被当前区间包含。然后仔细考虑发现a值没有变但是v值变了的点只可能存在于两个端点到根的路径上。那就直接强行更新一发就好了啊。然后更新的区域就变成了一个有点像倒置漏斗的形状。\n\u0026nbsp;\n再考虑询问。a要覆盖当前区间，v要被当前区间覆盖。那不就是修改把a和v的做法反一下么。\n\u0026nbsp;\n然后好像也不是很麻烦的样子哈。\n\u0026nbsp;\n然后常数很大哈。\n\u0026nbsp;\n那还拿zkw做何用。\n\u0026nbsp;\n晕。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cctype\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int buf_len = 4567; char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; }\nconst int maxn = 2049;\nint q, n, m, bn, bm;\ninline void upMax(int\u0026amp; a, int b) { if (a \u0026lt; b) a = b; } #define upMax_d(a,b) { if (a \u0026lt; b) a = b; }\nstruct zkw_tree_y { int v[maxn], a[maxn]; zkw_tree_y() { memset(v, 0, sizeof(v)); memset(a, 0, sizeof(a)); } int qry(int lo, int ro) { int s(0), l, r; for (l = lo + bm; l; l \u0026gt;\u0026gt;= 1) upMax_d(s, a[l]); for (r = ro + bm; r; r \u0026gt;\u0026gt;= 1) upMax_d(s, a[r]); for (l = lo + bm - 1, r = ro + bm + 1; l ^ r ^ 1; l \u0026gt;\u0026gt;= 1, r \u0026gt;\u0026gt;= 1) { if (!(l \u0026amp; 1)) upMax_d(s, v[l ^ 1]); if (r \u0026amp; 1) upMax_d(s, v[r ^ 1]); } return s; } void chg(int lo, int ro, int h) { int l, r; for (l = lo + bm; l; l \u0026gt;\u0026gt;= 1) upMax_d(v[l], h); for (r = ro + bm; r; r \u0026gt;\u0026gt;= 1) upMax_d(v[r], h); for (l = lo + bm - 1, r += ro + bm + 1; l ^ r ^ 1; l \u0026gt;\u0026gt;= 1, r \u0026gt;\u0026gt;= 1) { if (!(l \u0026amp; 1)) { upMax_d(a[l ^ 1], h); upMax_d(v[l ^ 1], h); } if (r \u0026amp; 1) { upMax_d(a[r ^ 1], h); upMax_d(v[r ^ 1], h); } } } };\nzkw_tree_y v[maxn], a[maxn];\nint zkwQryX(int lo, int ro, int yl, int yr) { int s(0), l, r; for (l = lo + bn; l; l \u0026gt;\u0026gt;= 1) upMax(s, a[l]. qry(yl, yr)); for (r = ro + bn; r; r \u0026gt;\u0026gt;= 1) upMax(s, a[r]. qry(yl, yr)); for (l = lo + bn - 1, r = ro + bn + 1; l ^ r ^ 1; l \u0026gt;\u0026gt;= 1, r \u0026gt;\u0026gt;= 1) { if (!(l \u0026amp; 1)) upMax(s, v[l ^ 1]. qry(yl, yr)); if (r \u0026amp; 1) upMax(s, v[r ^ 1]. qry(yl, yr)); } return s; } void zkwChgX(int lo, int ro, int yl, int yr, int h) { int l, r; for (l = lo + bn; l; l \u0026gt;\u0026gt;= 1) v[l]. chg(yl, yr, h); for (r = ro + bn; r; r \u0026gt;\u0026gt;= 1) v[r]. chg(yl, yr, h); for (l = lo + bn - 1, r = ro + bn + 1; l ^ r ^ 1; l \u0026gt;\u0026gt;= 1, r \u0026gt;\u0026gt;= 1) { if (!(l \u0026amp; 1)) { a[l ^ 1]. chg(yl, yr, h); v[l ^ 1]. chg(yl, yr, h); } if (r \u0026amp; 1) { a[r ^ 1]. chg(yl, yr, h); v[r ^ 1]. chg(yl, yr, h); } } }\nint main() { #ifndef ONLINE_JUDGE //\tfreopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nreadInt(n); readInt(m); readInt(q); memset(a, 0, sizeof(a)); memset(v, 0, sizeof(v)); for (bn = 1; bn \u0026amp;lt; n + 2; bn \u0026amp;lt;\u0026amp;lt;= 1); for (bm = 1; bm \u0026amp;lt; m + 2; bm \u0026amp;lt;\u0026amp;lt;= 1); while (q --) { int x, y, p, q, h; readInt(p); readInt(q); readInt(h); readInt(x); readInt(y); p += x ++, q += y ++; h += zkwQryX(x, p, y, q); zkwChgX(x, p, y, q, h); } printf(\u0026quot;%d\\n\u0026quot;, zkwQryX(1, n, 1, m)); } ","permalink":"/oi/i11rimport_010/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 这么水的题居然还要写题解。要不要说我写了半个下午+半个晚上。\u0026lt;/p\u0026gt; \u0026nbsp;\n丧心病狂想写一发zkw去抢速度rank。然后发现zkw怎么支持区间修改查询TT。课件根本没讲懂。而且max怎么区间加。\n\u0026nbsp;\n想了很久终于想出了来了。然后交上去发现常数巨大比普通线段树还要慢TT。到头来想想如果我直接写普通线段树说不定十多分钟就能过，而且代码量还会小一些。因为那个是可以直接通用的，但是这个比较麻烦。\n\u0026nbsp;\n其实写这个就题解就是想记录一下我yy出来的zkw区间修改区间查询的方法。\n\u0026nbsp;\n这道题是区间查询最大值+区间修改。如果是写一般的线段树，需要记录两个值a和v（至于为啥我用了这俩神奇的字母我也不知道），分别表示当前区间被完整覆盖的修改的最大值（又称lazy标记）和当前区间的最大值。然后所以zkw也要记这两个东西。\n\u0026nbsp;\n如果我们把zkw看作一棵树，那么每次修改和询问操作的时候都是对一些线段的a和v进行操作。（废话）\n\u0026nbsp;\n首先考虑修改。zkw经典的变为开区间取中间能处理a值的改变，但是不能处理v值的改变。因为v值改变的线段不一定会被当前区间包含。然后仔细考虑发现a值没有变但是v值变了的点只可能存在于两个端点到根的路径上。那就直接强行更新一发就好了啊。然后更新的区域就变成了一个有点像倒置漏斗的形状。\n\u0026nbsp;\n再考虑询问。a要覆盖当前区间，v要被当前区间覆盖。那不就是修改把a和v的做法反一下么。\n\u0026nbsp;\n然后好像也不是很麻烦的样子哈。\n\u0026nbsp;\n然后常数很大哈。\n\u0026nbsp;\n那还拿zkw做何用。\n\u0026nbsp;\n晕。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cctype\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int buf_len = 4567; char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!","title":"BZOJ1513 [POI2006]Tet-Tetris 3D"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 居然网上都没有找到程序来和我拍。好吧其实它是一道权限题而且过的人也不多。\u0026lt;/p\u0026gt; \u0026nbsp;\n其实就是裸的插头DP。本来想学一下广义括号的然后被状态数吓到了于是只好还是写最小表示。连通性。\n\u0026nbsp;\n然后我发现最小表示连通性很容易写挂。而在findstate的时候检查一下是个不错的办法。至少这道题靠这个就可以直接debug出来问题了。\n\u0026nbsp;\n比上次写插头要好许多了。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef long long dint; #define _l (long long int) #define mbit(x,y) ((_l x)\u0026lt;\u0026lt;((y)\u0026lt;\u0026lt;2)) #define gbit(x,y) (((x)\u0026gt;\u0026gt;((y)\u0026lt;\u0026lt;2))\u0026amp;0xf)\nconst int maxn = 13; const int maxst = 570009;\ndint slst[maxst]; int n, m, v[maxn][maxn], tots, f[2][maxst], cnt[17]; bool av[2][maxst];\nvoid dfsState(int l, int tot, dint z) { if (l == m) { for (int i = 1; i \u0026lt;= tot; ++ i) if (cnt[i] != 2) return; slst[tots ++] = z; } else { for (int i = 0; i \u0026lt;= tot; ++ i) if (!i || cnt[i] == 1) { ++ cnt[i]; dfsState(l + 1, tot, z | mbit(i, l)); \u0026ndash; cnt[i]; } ++ cnt[tot + 1]; dfsState(l + 1, tot + 1, z | mbit(tot + 1, l)); \u0026ndash; cnt[tot + 1]; if (!cnt[15] \u0026amp;\u0026amp; l \u0026lt; m - 1) { ++ cnt[15]; dfsState(l + 1, tot, z | mbit(15, l)); \u0026ndash; cnt[15]; }\n} }\nvoid preState() { tots = 0; memset(cnt, 0, sizeof(cnt)); dfsState(0, 0, 0); sort(slst, slst + tots); }\ninline int fState(dint x) { return lower_bound(slst, slst + tots, x) - slst; //if (slst[ret] != x) //puts(\u0026ldquo;naive\u0026rdquo;); //return ret; }\n#define fUpMax(sa,sv) { register int a(sa), v(sv); if (!av[cur][a]) { av[cur][a] = 1; f[cur][a] = v; } else if (v \u0026gt; f[cur][a]) f[cur][a] = v; } #define upMax(a,b) { if (a \u0026lt; b) a = b; }\nvoid unzipState(dint z, int* a) { for (int i = 0; i \u0026lt; m; ++ i) a[i] = gbit(z, i); }\ndint zipState(int* a) { dint s(0); for (int i = 0; i \u0026lt; m; ++ i) s |= mbit(a[i], i); return s; }\nbool isFinalPlug(int *a, int y) { for (int i = 0; i \u0026lt; y - 1; ++ i) if (a[i]) return 0; for (int i = y + 1; i \u0026lt;m; ++ i) if (a[i]) return 0; return 1; }\nint mergePlug(int* a, int y) { static int b[maxn], c[17]; memcpy(b, a, sizeof(b)); if (a[y - 1] == 15) { b[y - 1] = b[y]; b[y] = 0; } else { int f(a[y - 1]), t(a[y]); for (int i = 0; i \u0026lt; m; ++ i) if (b[i] == f) b[i] = t; b[y - 1] = b[y] = 0; memset(c, 0, sizeof(c)); f = 0; for (int i = 0; i \u0026lt; m; ++ i) if (b[i]) { if (c[b[i]]) b[i] = c[b[i]]; else b[i] = c[b[i]] = ++ f; } } return fState(zipState(b)); }\nint extendPlugRight(int* a, int y) { static int b[maxn]; memcpy(b, a, sizeof(b)); if (a[y - 1] == 15) { int t(1); for (int i = 0; i \u0026lt; y - 1; ++ i) if (a[i] \u0026lt; 15 \u0026amp;\u0026amp; a[i] + 1 \u0026gt; t) t = a[i] + 1; for (int i = y + 1; i \u0026lt; m; ++ i) if (a[i] \u0026lt; 15 \u0026amp;\u0026amp; a[i] \u0026gt;= t) ++ b[i]; b[y - 1] = b[y] = t; } else { b[y] = b[y - 1]; b[y - 1] = 0; } return fState(zipState(b)); }\nint newPlug(int* a, int y) { static int b[maxn]; memcpy(b, a, sizeof(b)); b[y] = 15; return fState(zipState(b)); }\nint dp() { int prv(0), cur(1), so(fState(15)), ans(0); memset(av, 0, sizeof(av)); av[cur][so] = 1; f[cur][so] = v[0][0]; for (int x = 0; x \u0026lt; n; ++ x) for (int y = !x ? 1 : 0; y \u0026lt; m; ++ y) { swap(prv, cur); memset(av[cur], 0, sizeof(av[cur])); for (int i = 0; i \u0026lt; tots; ++ i) if (av[prv][i]) { dint s(slst[i]); static int a[maxn]; unzipState(s, a); if (v[x][y]) { if (y \u0026amp;\u0026amp; a[y - 1] \u0026amp;\u0026amp; a[y]) { if (a[y - 1] == a[y]) { if (isFinalPlug(a, y)) upMax(ans, f[prv][i] + v[x][y]); } else { fUpMax(mergePlug(a, y), f[prv][i] + v[x][y]); } } if (y \u0026amp;\u0026amp; a[y - 1] \u0026amp;\u0026amp; !a[y]) fUpMax(extendPlugRight(a, y), f[prv][i] + v[x][y]); if (a[y] \u0026amp;\u0026amp; (!y || a[y - 1] != 15)) fUpMax(i, f[prv][i] + v[x][y]); if (!a[y] \u0026amp;\u0026amp; (!y || a[y - 1] != 15) \u0026amp;\u0026amp; y \u0026lt; m - 1) fUpMax(newPlug(a, y), f[prv][i] + v[x][y]); } if (!a[y] \u0026amp;\u0026amp; (!y || a[y - 1] != 15)) fUpMax(i, f[prv][i]); } } return ans; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nbool sw(0); scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m); if (n \u0026amp;lt; m) sw = 1; for (int i = 0; i \u0026amp;lt; n; ++ i) for (int j = 0; j \u0026amp;lt; m; ++ j) if (sw) scanf(\u0026quot;%d\u0026quot;, v[j] + i); else scanf(\u0026quot;%d\u0026quot;, v[i] + j); if (sw) swap(n, m); preState(); printf(\u0026quot;%d\\n\u0026quot;, dp()); } ","permalink":"/oi/i11rimport_011/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 居然网上都没有找到程序来和我拍。好吧其实它是一道权限题而且过的人也不多。\u0026lt;/p\u0026gt; \u0026nbsp;\n其实就是裸的插头DP。本来想学一下广义括号的然后被状态数吓到了于是只好还是写最小表示。连通性。\n\u0026nbsp;\n然后我发现最小表示连通性很容易写挂。而在findstate的时候检查一下是个不错的办法。至少这道题靠这个就可以直接debug出来问题了。\n\u0026nbsp;\n比上次写插头要好许多了。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef long long dint; #define _l (long long int) #define mbit(x,y) ((_l x)\u0026lt;\u0026lt;((y)\u0026lt;\u0026lt;2)) #define gbit(x,y) (((x)\u0026gt;\u0026gt;((y)\u0026lt;\u0026lt;2))\u0026amp;0xf)\nconst int maxn = 13; const int maxst = 570009;\ndint slst[maxst]; int n, m, v[maxn][maxn], tots, f[2][maxst], cnt[17]; bool av[2][maxst];\nvoid dfsState(int l, int tot, dint z) { if (l == m) { for (int i = 1; i \u0026lt;= tot; ++ i) if (cnt[i] !","title":"BZOJ2704 旅游"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 计算几何题。别人都用simpson搞。然后我决定不水一发，用hwd神犇在wc上讲的关键点法做。\u0026lt;/p\u0026gt; \u0026nbsp;\n然后就搞到了12点半。发现坑数次。还专门用js写了个画圆的。当然我现在知道怎么画圆了。过两天去把oj7的统计图改一改。\n\u0026nbsp;\n思路是把所有圆的左右端点和所有圆的两两交的x提出来，unique一发（不然会tle显然的）。这样两个x之间的部分的圆弧是不会有交的。那么就可以视为一堆弓形和梯形了。然后扫描一下中位线的有效长度算梯形。每次新进入一个连通区域和出来的时候加相应弓形的面积。\n\u0026nbsp;\n需要注意按y排序的时候是按弓形与竖线的交点的y，而不是梯形的y，否则会有非常神奇的精度误差。另外算弓形面积必需要用反三角函数（至少我没研究出怎么不用）。如果用acos的话会暴精度暴得很惨。要用atan2来提高精度。\n\u0026nbsp;\n然后这样写连样例都会tle。仔细感受一下发现好像如果有一堆同心圆的话都会tle。然后考虑去掉包含的圆之后似乎就快了。然后就交了，然后居然跑过了。\n\u0026nbsp;\n然后来欣赏一下我的时间巨大，空间巨大，长度巨大。挤在一堆simpson里显得特别郁闷的代码。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst double eps = 1e-8; const double pi = acos(-1);\ninline int sgn(double x) { return (x \u0026gt; eps) - (x \u0026lt; -eps); } inline double sqr(double x) { return x * x; }\ntypedef struct geo_obj { double x, y; geo_obj() {} geo_obj(double xo, double yo) { x = xo, y = yo; } inline void read() { scanf(\u0026quot;%lf%lf\u0026quot;, \u0026amp;x, \u0026amp;y); } inline geo_obj vertical() { return geo_obj(-y, x); } inline double len() { return sqrt(sqr(x) + sqr(y)); } } point, vect; inline geo_obj operator +(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return geo_obj(a. x + b. x, a. y + b. y); } inline geo_obj operator -(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return geo_obj(a. x - b. x, a. y - b. y); } inline geo_obj operator *(const geo_obj\u0026amp; a, const double\u0026amp; b) { return geo_obj(a. x * b, a. y * b); } inline double operator *(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return a. x * b. y - a. y * b. x; } inline double operator \u0026amp;(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return a. x * b. x + a. y * b. y; } inline double sqDist(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return sqr(a. x - b. x) + sqr(a. y - b. y); }\nstruct circle { point o; double r, sr; inline void read() { o. read(); scanf(\u0026quot;%lf\u0026quot;, \u0026amp;r); sr = sqr(r); } };\ninline double helenSqr(double a, double b, double c) { double p((a + b + c) / 2.0); return sqrt(p * (p - a) * (p - b) * (p - c)); }\nstruct ypr { double y, s, yv; int v; }; inline bool operator \u0026lt;(const ypr\u0026amp; a, const ypr\u0026amp; b) { return (a. yv \u0026lt; b. yv) || (a. yv == b. yv \u0026amp;\u0026amp; a. v \u0026gt; b. v); }\nconst int maxn = 1009; const int maxx = 1002009;\nint n, totx; double x[maxx], ans; circle a[maxn]; ypr y[maxn \u0026lt;\u0026lt; 1];\ndouble arcSqr(circle c, point a, point b) { vect x(a - c. o), y(b - c. o); double sqt(fabs(x * y)); double d(sqrt(sqDist(a, b))); double tht(atan2(d / 2, sqt / d) * 2); //double tht(acos((x \u0026amp; y) / c. sr)); sqt /= 2; return tht * c. sr / 2 - sqt; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); totx = 0; for (int i = 0; i \u0026amp;lt; n; ++ i) { a[i]. read(); bool thr(0); for (int j = 0; j \u0026amp;lt; i \u0026amp;amp;\u0026amp;amp; !thr; ++ j) if (sqDist(a[i]. o, a[j]. o) \u0026amp;lt;= sqr(a[i]. r - a[j]. r)) { if (a[i]. r \u0026amp;gt; a[j]. r) swap(a[i], a[j]); thr = 1; } if (thr) { -- i; -- n; } } for (int i = 0; i \u0026amp;lt; n; ++ i) { x[totx ++] = a[i]. o. x - a[i]. r; x[totx ++] = a[i]. o. x + a[i]. r; } for (int i = 1; i \u0026amp;lt; n; ++ i) for (int j = 0; j \u0026amp;lt; i; ++ j) { double sd(sqDist(a[i]. o, a[j]. o)); if (sd \u0026amp;lt;= sqr(a[i]. r + a[j]. r) \u0026amp;amp;\u0026amp;amp; sd \u0026amp;gt;= sqr(a[i]. r - a[j]. r)) { double d(sqrt(sd)); double s(helenSqr(a[i]. r, a[j]. r, d)); double h(s * 2 / d); double l(sqrt(a[i]. sr - sqr(h))); if (sqr(a[j]. r) \u0026amp;gt; sd + sqr(a[i]. r)) l = -l; point p(a[i]. o + (a[j]. o - a[i]. o) * (l / d)); vect v((a[j]. o - a[i]. o). vertical()); v = v * (h / v. len()); x[totx ++] = p. x + v. x; x[totx ++] = p. x - v. x; } } sort(x, x + totx); totx = unique(x, x + totx) - x; ans = 0; for (int i = 0; i \u0026amp;lt; totx - 1; ++ i) { double xl(x[i]), xr(x[i + 1]); int cy(0); for (int j = 0; j \u0026amp;lt; n; ++ j) if (a[j]. o. x - a[j]. r \u0026amp;lt; xr \u0026amp;amp;\u0026amp;amp; a[j]. o. x + a[j]. r \u0026amp;gt; xl) { double yl(sqrt(a[j]. sr - sqr(a[j]. o. x - xl))); double yv(sqrt(a[j]. sr - sqr(a[j]. o. x - (xl + xr) / 2.0))); double yr(sqrt(a[j]. sr - sqr(a[j]. o. x - xr))); double ar(arcSqr(a[j], point(xl, a[j]. o. y - yl), point(xr, a[j]. o. y - yr))); double ym((yl + yr) / 2); y[cy]. y = a[j]. o. y - ym; y[cy]. yv = a[j]. o. y - yv; y[cy]. v = 1; y[cy]. s = ar; ++ cy; y[cy]. y = a[j]. o. y + ym; y[cy]. yv = a[j]. o. y + yv; y[cy]. v = -1; y[cy]. s = ar; ++ cy; } double ml(0); sort(y, y + cy); for (int j = 0, cnt = 0; j \u0026amp;lt; cy - 1; ++ j) { if ((y[j]. v == 1 \u0026amp;amp;\u0026amp;amp; !cnt) || (y[j]. v == -1 \u0026amp;amp;\u0026amp;amp; cnt == 1)) ans += y[j]. s; cnt += y[j]. v; if (cnt) ml += y[j + 1]. y - y[j]. y; } ans += y[cy - 1]. s; ans += ml * (xr - xl); } printf(\u0026quot;%.3lf\\n\u0026quot;, ans); } ","permalink":"/oi/i11rimport_012/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 计算几何题。别人都用simpson搞。然后我决定不水一发，用hwd神犇在wc上讲的关键点法做。\u0026lt;/p\u0026gt; \u0026nbsp;\n然后就搞到了12点半。发现坑数次。还专门用js写了个画圆的。当然我现在知道怎么画圆了。过两天去把oj7的统计图改一改。\n\u0026nbsp;\n思路是把所有圆的左右端点和所有圆的两两交的x提出来，unique一发（不然会tle显然的）。这样两个x之间的部分的圆弧是不会有交的。那么就可以视为一堆弓形和梯形了。然后扫描一下中位线的有效长度算梯形。每次新进入一个连通区域和出来的时候加相应弓形的面积。\n\u0026nbsp;\n需要注意按y排序的时候是按弓形与竖线的交点的y，而不是梯形的y，否则会有非常神奇的精度误差。另外算弓形面积必需要用反三角函数（至少我没研究出怎么不用）。如果用acos的话会暴精度暴得很惨。要用atan2来提高精度。\n\u0026nbsp;\n然后这样写连样例都会tle。仔细感受一下发现好像如果有一堆同心圆的话都会tle。然后考虑去掉包含的圆之后似乎就快了。然后就交了，然后居然跑过了。\n\u0026nbsp;\n然后来欣赏一下我的时间巨大，空间巨大，长度巨大。挤在一堆simpson里显得特别郁闷的代码。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst double eps = 1e-8; const double pi = acos(-1);\ninline int sgn(double x) { return (x \u0026gt; eps) - (x \u0026lt; -eps); } inline double sqr(double x) { return x * x; }\ntypedef struct geo_obj { double x, y; geo_obj() {} geo_obj(double xo, double yo) { x = xo, y = yo; } inline void read() { scanf(\u0026quot;%lf%lf\u0026quot;, \u0026amp;x, \u0026amp;y); } inline geo_obj vertical() { return geo_obj(-y, x); } inline double len() { return sqrt(sqr(x) + sqr(y)); } } point, vect; inline geo_obj operator +(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return geo_obj(a.","title":"BZOJ2178 圆的面积并"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 严重地被虐了。\u0026lt;/p\u0026gt; \u0026nbsp;\n今天考试=一道奇怪题+一道普及题+一道无脑题。然后就挂了。\n\u0026nbsp;\n第一题直接就想到了上次的变异最小圆覆盖。然后那道题没有过。然后这道题也比较神奇。感觉是可以用那个题的方法搞的。不过粘过来std居然错了。无语。然后居然放过了很逗的写法。更无语。\n\u0026nbsp;\n第二题也比较无语。普及组题。\n\u0026nbsp;\n第三题想一想就知道只要贪心就完了。然后边权是可以为0的于是WA傻了。完全是自己加了一句没有用的话结果就100变60了。\n\u0026nbsp;\n所以我还是太弱了。\n","permalink":"/diary/i11rimport_013/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 严重地被虐了。\u0026lt;/p\u0026gt; \u0026nbsp;\n今天考试=一道奇怪题+一道普及题+一道无脑题。然后就挂了。\n\u0026nbsp;\n第一题直接就想到了上次的变异最小圆覆盖。然后那道题没有过。然后这道题也比较神奇。感觉是可以用那个题的方法搞的。不过粘过来std居然错了。无语。然后居然放过了很逗的写法。更无语。\n\u0026nbsp;\n第二题也比较无语。普及组题。\n\u0026nbsp;\n第三题想一想就知道只要贪心就完了。然后边权是可以为0的于是WA傻了。完全是自己加了一句没有用的话结果就100变60了。\n\u0026nbsp;\n所以我还是太弱了。","title":"20150306"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 比较神奇的数学题。首先你要知道这个函数的意思是把它的二进制flip。至于怎么来的我也是听说的。然后推一下发现的确是这么回事。\u0026lt;/p\u0026gt; \u0026nbsp;\n于是就变成数位dp了。然后我发现数位dp常常可以用奇奇怪怪的方法水过去。然后又发现数组从0开始标号也会造成麻烦。+1-1啥的最讨厌了。\n\u0026nbsp;\n于是这题就变成高精度练习题了。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 409;\nstruct BigInt { int l, a[maxn], base; BigInt(int b = 10) { l = 0; base = b; } void push() { for (int i = 0; i \u0026lt; l - 1; ++ i) { a[i + 1] += a[i] / base; a[i] %= base; } for (; a[l - 1] \u0026gt;= base; ++ l) { a[l] = a[l - 1] / base; a[l - 1] %= base; } } void pull() { for (; l \u0026amp;\u0026amp; !a[l - 1]; \u0026ndash; l); } void read() { static char g[maxn]; base = 10; scanf(\u0026quot;%s\u0026quot;, g); l = strlen(g); for (int i = 0; i \u0026lt; l; ++ i) a[i] = g[l - i - 1] - 48; pull(); }\ninline void setOne() { l = 1; a[0] = 1; } inline void setZero() { l = 0; } void assAdd(const BigInt\u0026amp;amp; x) { for (int i = 0; i \u0026amp;lt; l \u0026amp;amp;\u0026amp;amp; i \u0026amp;lt; x. l; ++ i) a[i] += x. a[i]; for (int i = l; i \u0026amp;lt; x. l; ++ i) a[i] = x. a[i]; if (x. l \u0026amp;gt; l) l = x. l; push(); } void assDec() { -- a[0]; for (int i = 0; a[i] \u0026amp;lt; 0; ++ i) { a[i] += base; -- a[i + 1]; } pull(); } void assMul(int x) { for (int i = 0; i \u0026amp;lt; l; ++ i) a[i] *= x; push(); } int mod(int x) const { int s(0); for (int i = l - 1; i \u0026amp;gt;= 0; -- i) s = (s * base + a[i]) % x; return s; } void assDiv(int x) { for (int i = l - 1; i \u0026amp;gt;= 0; -- i) { if (i) a[i - 1] += a[i] % x * base; a[i] /= x; } pull(); } int compareTo(const BigInt\u0026amp;amp; x) const { if (l \u0026amp;gt; x. l) return 1; else if (l \u0026amp;lt; x. l) return -1; for (int i = l - 1; i \u0026amp;gt;= 0; -- i) if (a[i] \u0026amp;gt; x. a[i]) return 1; else if (a[i] \u0026amp;lt; x. a[i]) return -1; return 0; } void ass(const BigInt\u0026amp;amp; x) { static BigInt tmp; if (base == x. base) { l = x. l; memcpy(a, x. a, sizeof(a)); } else { tmp. base = x. base; tmp. ass(x); for (l = 0; tmp. l; ++ l) { a[l] = tmp. mod(base); tmp. assDiv(base); } } } void print(char eon = 10) { for (int i = l - 1; i \u0026amp;gt;= 0; -- i) putchar(a[i] + 48); if (!l) putchar(48); if (eon) putchar(eon); } void flip() { for (int i = 0; (i \u0026amp;lt;\u0026amp;lt; 1) \u0026amp;lt; l; ++ i) swap(a[i], a[l - i - 1]); pull(); } };\nBigInt tmp, m, bm(2), br(2), ans, p2[maxn], ONE;\nbool checkFlip(const BigInt\u0026amp; a) { int q(a. l \u0026gt;\u0026gt; 1), p(a. l - q - 1); for (int i = 0; p - i \u0026gt;= 0; ++ i) if (a. a[p - i] \u0026gt; a. a[q + i]) return 1; else if (a. a[p - i] \u0026lt; a. a[q + i]) return 0; return 1; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nONE. setOne(); tmp. read(); m. ass(tmp); bm. ass(tmp); int l((bm. l + 1) \u0026amp;gt;\u0026amp;gt; 1); p2[0]. setOne(); for (int i = 1; i \u0026amp;lt;= l; ++ i) { p2[i]. ass(p2[i - 1]); p2[i]. assMul(2); } for (int i = 1; i \u0026amp;lt; bm. l; ++ i) ans. assAdd(p2[((i + 1) \u0026amp;gt;\u0026amp;gt; 1) - 1]); for (int i = bm. l - 2; i \u0026amp;gt; bm. l - l - 1; -- i) if (bm. a[i]) ans. assAdd(p2[i - (bm. l \u0026amp;gt;\u0026amp;gt; 1)]); if (checkFlip(bm)) ans. assAdd(ONE); ans. print(); } ","permalink":"/oi/i11rimport_014/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 比较神奇的数学题。首先你要知道这个函数的意思是把它的二进制flip。至于怎么来的我也是听说的。然后推一下发现的确是这么回事。\u0026lt;/p\u0026gt; \u0026nbsp;\n于是就变成数位dp了。然后我发现数位dp常常可以用奇奇怪怪的方法水过去。然后又发现数组从0开始标号也会造成麻烦。+1-1啥的最讨厌了。\n\u0026nbsp;\n于是这题就变成高精度练习题了。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 409;\nstruct BigInt { int l, a[maxn], base; BigInt(int b = 10) { l = 0; base = b; } void push() { for (int i = 0; i \u0026lt; l - 1; ++ i) { a[i + 1] += a[i] / base; a[i] %= base; } for (; a[l - 1] \u0026gt;= base; ++ l) { a[l] = a[l - 1] / base; a[l - 1] %= base; } } void pull() { for (; l \u0026amp;\u0026amp; !","title":"BZOJ1223 [HNOI2002]Kathy函数"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 第六百道题一定要不水！虽然离第一页还有几十道题的距离。\u0026lt;/p\u0026gt; \u0026nbsp;\n很早之前见过的题吧。然后一直觉得特别难写所以都没写。以前写点不重复的仙人掌都觉得挺痛苦，更不要说这个了。\n\u0026nbsp;\n现在想想还行，因为我yy出了化简的方法。先搞出dfs树。然后一个顶点如果是一个环里深度最浅的，那么称它为这个环的头。可以证明一个顶点最多在一个不以它为头的环上。把这个环记下来，其它的环都从这个顶点去找边来找就行了。这样的话可以比较节省代码量，写起来也比较明了。虽然还是比mhy长。\n\u0026nbsp;\n然后因为我在最后一步dp的时候写了一个static的f数组，所以光荣了。debug了好久。晕。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct edge { int t, av; edge *next, *rv; }; struct ball { int l, *a, h; };\nconst int maxn = 50009; const int maxm = 200009; const int maxarr = 400009;\nint n, m, cb, fb[maxn], d[maxn]; int f[maxn], ans, fd[maxn], fe[maxn]; int stc[maxn], tst; int ibuf_arr[maxarr], *ibuf(ibuf_arr); bool vis[maxn]; edge elst[maxm], *ep(elst), *head[maxn]; ball b[maxm];\ninline edge* addEdge(int u, int v) { ep-\u0026gt; t = v; ep-\u0026gt; av = 1; ep-\u0026gt; next = head[u]; return head[u] = ep ++; }\ninline void upMax(int\u0026amp; a, int b) { if (a \u0026lt; b) a = b; }\nvoid dfsBall(int p) { vis[p] = 1; stc[++ tst] = p; for (edge *e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; av) { e-\u0026gt; rv-\u0026gt; av = 0; if (vis[e-\u0026gt; t] \u0026amp;\u0026amp; (!fb[p])) { e-\u0026gt; av = 0; b[++ cb]. l = 0; b[cb]. a = ibuf; for (int i = tst; 1; \u0026ndash; i) { b[cb]. a[b[cb]. l ++] = stc[i]; if (stc[i] != e-\u0026gt; t) fb[stc[i]] = cb; else break; } b[cb]. h = e-\u0026gt; t; ibuf += b[cb]. l; } else { d[e-\u0026gt; t] = d[p] + 1; dfsBall(e-\u0026gt; t); } } \u0026ndash; tst; }\nvoid downDP(int p) { fd[p] = fe[p] = 0; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; av) { if (fb[e-\u0026gt; t] \u0026amp;\u0026amp; p == b[fb[e-\u0026gt; t]]. h) { int bi(fb[e-\u0026gt; t]), fl(0); for (int i = 0; i \u0026lt; b[bi]. l; ++ i) if (b[bi]. a[i] != b[bi]. h) { int q(b[bi]. a[i]); downDP(q); upMax(fl, fd[q] + min(d[q] - d[p], b[bi]. l - d[q] + d[p])); } if (fl \u0026gt; fd[p]) { fe[p] = fd[p]; fd[p] = fl; } else if (fl \u0026gt; fe[p]) fe[p] = fl; } else if (!fb[p] || fb[p] != fb[e-\u0026gt; t]) { downDP(e-\u0026gt; t); int v(fd[e-\u0026gt; t] + 1); if (v \u0026gt; fd[p]) { fe[p] = fd[p]; fd[p] = v; } else if (v \u0026gt; fe[p]) fe[p] = v; } } upMax(ans, fd[p] + fe[p]); }\n#define modi(i) (((i)\u0026gt;=b[bi].l)?((i)-b[bi].l):(i)) void upDP(int p, int u) { static int q[maxn \u0026lt;\u0026lt; 1], fu[maxn \u0026lt;\u0026lt; 1]; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; av) { if (fb[e-\u0026gt; t] \u0026amp;\u0026amp; p == b[fb[e-\u0026gt; t]]. h) { int bi(fb[e-\u0026gt; t]), fl(0); int *f(ibuf); ibuf += b[bi]. l; for (int i = 0; i \u0026lt; b[bi]. l; ++ i) { int q(b[bi]. a[i]); f[i] = 0; if (q == p) break; fu[i] = fd[q]; upMax(fl, fd[q] + min(d[q] - d[p], b[bi]. l - d[q] + d[p])); } if (fl == fd[p]) fu[b[bi]. l - 1] = max(u, fe[p]); else fu[b[bi]. l - 1] = max(u, fd[p]); int hd(0), tl(1), hl(b[bi]. l \u0026gt;\u0026gt; 1); q[0] = 0; for (int i = 1; i \u0026lt; (b[bi]. l \u0026lt;\u0026lt; 1); ++ i) { int fi(modi(i)); while (hd \u0026lt; tl \u0026amp;\u0026amp; i - q[hd] \u0026gt; hl) ++ hd; if (hd \u0026lt; tl) upMax(f[fi], fu[modi(q[hd])] + i - q[hd]); while (hd \u0026lt; tl \u0026amp;\u0026amp; fu[modi(q[tl - 1])] - q[tl - 1] \u0026lt;= fu[fi] - i) \u0026ndash; tl; q[tl ++] = i; } hd = 0; tl = 1; q[0] = (b[bi]. l \u0026lt;\u0026lt; 1) - 1; for (int i = (b[bi]. l \u0026lt;\u0026lt; 1) - 2; i \u0026gt;= 0; \u0026ndash; i) { int fi(modi(i)); while (hd \u0026lt; tl \u0026amp;\u0026amp; q[hd] - i \u0026gt; hl) ++ hd; if (hd \u0026lt; tl) upMax(f[fi], fu[modi(q[hd])] + q[hd] - i); while (hd \u0026lt; tl \u0026amp;\u0026amp; fu[modi(q[tl - 1])] + q[tl - 1] \u0026lt;= fu[fi] + i) \u0026ndash; tl; q[tl ++] = i; } for (int i = 0; i \u0026lt; b[bi]. l - 1; ++ i) { upMax(ans, f[i] + fd[b[bi]. a[i]]); upDP(b[bi]. a[i], f[i]); } ibuf -= b[bi]. l; } else if (!fb[p] || fb[e-\u0026gt; t] != fb[p]) { int v((fd[e-\u0026gt; t] + 1 == fd[p]) ? fe[p] : fd[p]); upDP(e-\u0026gt; t, max(u, v) + 1); } } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m); memset(head, 0, sizeof(head)); for (int i = 0; i \u0026amp;lt; m; ++ i) { int c, u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;c, \u0026amp;amp;u); while (-- c) { scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;v); edge *a(addEdge(u, v)), *b(addEdge(v, u)); a-\u0026amp;gt; rv = b; b-\u0026amp;gt; rv = a; u = v; } } memset(vis, 0, sizeof(vis)); memset(fb, 0, sizeof(fb)); cb = 0; tst = 0; d[1] = 1; dfsBall(1); ans = 0; downDP(1); upDP(1, 0); printf(\u0026quot;%d\\n\u0026quot;, ans); } ","permalink":"/oi/i11rimport_015/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 第六百道题一定要不水！虽然离第一页还有几十道题的距离。\u0026lt;/p\u0026gt; \u0026nbsp;\n很早之前见过的题吧。然后一直觉得特别难写所以都没写。以前写点不重复的仙人掌都觉得挺痛苦，更不要说这个了。\n\u0026nbsp;\n现在想想还行，因为我yy出了化简的方法。先搞出dfs树。然后一个顶点如果是一个环里深度最浅的，那么称它为这个环的头。可以证明一个顶点最多在一个不以它为头的环上。把这个环记下来，其它的环都从这个顶点去找边来找就行了。这样的话可以比较节省代码量，写起来也比较明了。虽然还是比mhy长。\n\u0026nbsp;\n然后因为我在最后一步dp的时候写了一个static的f数组，所以光荣了。debug了好久。晕。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct edge { int t, av; edge *next, *rv; }; struct ball { int l, *a, h; };\nconst int maxn = 50009; const int maxm = 200009; const int maxarr = 400009;\nint n, m, cb, fb[maxn], d[maxn]; int f[maxn], ans, fd[maxn], fe[maxn]; int stc[maxn], tst; int ibuf_arr[maxarr], *ibuf(ibuf_arr); bool vis[maxn]; edge elst[maxm], *ep(elst), *head[maxn]; ball b[maxm];","title":"BZOJ1023 [SHOI2008]cactus仙人掌图"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 最初感觉好多状态怎么做。\u0026lt;/p\u0026gt; \u0026nbsp;\n然后发现（其实是瞟了一下题解）如果把一个数分成2a*3b*c，那么c只影响上界。2a*3b中a最大是16，b最大是10，列一张17*11的表出来，然后发现右下方还有很多空东西。于是直接像插头一样状压一下轮廓线呗。反正对一个数有影响的只有它的上面和左边。最近写插头写得有点疯啊。其实它的很多思想都是可以推广出来用的。比如最小表示啥的。\n\u0026nbsp;\n于是如果直接这样写的话大概要跑30000多次dp，还是比较悬。然后再想想发现只有表里能取的数的形状发生改变的时候才会改变dp的答案。表里面的数很少所以改变次数也应该很少。所以记一下上一次的形状是什么然后比较相不相同，相同就直接沿用。\n\u0026nbsp;\n然后跑得飞快。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\n#define _l (long long int) #define pow2(x) (1\u0026lt;\u0026lt;(x))\nconst int maxn = 19; const int maxm = 15; const int maxv = 100000; const int maxst = pow2(11) + 9; const int mod = 1e9 + 1;\nint f[2][maxst], vl[maxn][maxm], n, m, v; int dis[maxn], ldis[maxn], lans, ans;\nvoid pre() { for (int i = 0; i \u0026lt; maxn; ++ i) { vl[i][0] = (1 \u0026lt;\u0026lt; i); if (vl[i][0] \u0026gt; maxv) vl[i][0] = -1; for (int j = 1; j \u0026lt; maxm; ++ j) if (vl[i][j - 1] \u0026gt; -1) { vl[i][j] = vl[i][j - 1] * 3; if (vl[i][j] \u0026gt; maxv) vl[i][j] = -1; } else vl[i][j] = -1; } }\nbool getDis(int x) { memset(dis, 0, sizeof(dis)); for (int i = 0; i \u0026lt; maxn; ++ i) while (vl[i][dis[i]] \u0026gt; -1 \u0026amp;\u0026amp; x \u0026gt;= vl[i][dis[i]]) ++ dis[i]; bool eq(1); for (int i = 0; i \u0026lt; maxn \u0026amp;\u0026amp; eq; ++ i) if (dis[i] != ldis[i]) eq = 0; if (!eq) memcpy(ldis, dis, sizeof(dis)); return eq; }\ninline void incm(int\u0026amp; a, int b) { a += b; if (a \u0026gt;= mod) a -= mod; }\nint dp() { int prv(1), cur(0), m(dis[0]), e(pow2(m)); memset(f, 0, sizeof(f)); f[cur][0] = 1; for (int i = 0; dis[i]; ++ i) for (int j = 0; j \u0026lt; dis[i]; ++ j) { swap(cur, prv); memset(f[cur], 0, sizeof(f[cur])); for (int k = 0; k \u0026lt; e; ++ k) if (f[prv][k]) { if (!(k \u0026amp; pow2(j)) \u0026amp;\u0026amp; (!j || !(k \u0026amp; pow2(j - 1)))) incm(f[cur][k | pow2(j)], f[prv][k]); incm(f[cur][k \u0026amp; (~pow2(j))], f[prv][k]); } } int ans(0); for (int i = 0; i \u0026lt; e; ++ i) incm(ans, f[cur][i]); return ans; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\npre(); scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;v); ans = 1; lans = 0; memset(ldis, -1, sizeof(ldis)); ans = 1; for (int i = 1; i \u0026amp;lt;= v; ++ i) if (i % 2 \u0026amp;amp;\u0026amp;amp; i % 3) { if (getDis(v / i)) ans = _l ans * lans % mod; else ans = _l ans * (lans = dp()) % mod; } printf(\u0026quot;%d\\n\u0026quot;, ans); } ","permalink":"/oi/i11rimport_016/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 最初感觉好多状态怎么做。\u0026lt;/p\u0026gt; \u0026nbsp;\n然后发现（其实是瞟了一下题解）如果把一个数分成2a*3b*c，那么c只影响上界。2a*3b中a最大是16，b最大是10，列一张17*11的表出来，然后发现右下方还有很多空东西。于是直接像插头一样状压一下轮廓线呗。反正对一个数有影响的只有它的上面和左边。最近写插头写得有点疯啊。其实它的很多思想都是可以推广出来用的。比如最小表示啥的。\n\u0026nbsp;\n于是如果直接这样写的话大概要跑30000多次dp，还是比较悬。然后再想想发现只有表里能取的数的形状发生改变的时候才会改变dp的答案。表里面的数很少所以改变次数也应该很少。所以记一下上一次的形状是什么然后比较相不相同，相同就直接沿用。\n\u0026nbsp;\n然后跑得飞快。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\n#define _l (long long int) #define pow2(x) (1\u0026lt;\u0026lt;(x))\nconst int maxn = 19; const int maxm = 15; const int maxv = 100000; const int maxst = pow2(11) + 9; const int mod = 1e9 + 1;\nint f[2][maxst], vl[maxn][maxm], n, m, v; int dis[maxn], ldis[maxn], lans, ans;\nvoid pre() { for (int i = 0; i \u0026lt; maxn; ++ i) { vl[i][0] = (1 \u0026lt;\u0026lt; i); if (vl[i][0] \u0026gt; maxv) vl[i][0] = -1; for (int j = 1; j \u0026lt; maxm; ++ j) if (vl[i][j - 1] \u0026gt; -1) { vl[i][j] = vl[i][j - 1] * 3; if (vl[i][j] \u0026gt; maxv) vl[i][j] = -1; } else vl[i][j] = -1; } }","title":"BZOJ2734 [HNOI2012]集合选数"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 好吧我的本意是想学习一下dp的。然后发现了这道纠结了一年半还多的题。\u0026lt;/p\u0026gt; \u0026nbsp;\n首先把环找出来。然后环上会长一些树。先把树的答案求了，因为它很好求。\n\u0026nbsp;\n然后考虑环，那么答案应该是随便断一条边之后答案的最小值（而不是最大值）。于是乎记录一下每个点按某个方向到起点的距离，记为d[i]。算一下每个点的树的深度，记为l[i]。于是每次要最大化l[i]+l[j]+|d[i]-d[j]|。反正是最大化所以顺序是没有关系的，但是不能自交。这是个比较容易错的地方。于是就去写个线段树来维护吧。只查询不修改让我总有能线性搞的想法，虽然没想清楚具体怎么实现。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; #include \u0026lt;set\u0026gt; using namespace std;\nstruct edge { int t, v; edge *next; };\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 100009;\nedge elst[maxn \u0026lt;\u0026lt; 1], *ep(elst), *head[maxn]; int n, fa[maxn], df[maxn], ol[maxn], d[maxn]; int tlp, lp[maxn \u0026lt;\u0026lt; 1]; dint lv[maxn \u0026lt;\u0026lt; 1], le[maxn \u0026lt;\u0026lt; 1], md[maxn], ans;\ninline void addEdge(int u, int v, int w) { ep-\u0026gt; t = v; ep-\u0026gt; v = w; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\nvoid findLoop() { static int q[maxn]; int hd(0), tl(1); int uo(0), vo(0), dx, a; q[0] = 1; fa[1] = -1; d[1] = 1; memset(ol, 0, sizeof(ol)); memset(fa, 0, sizeof(fa)); while (hd \u0026lt; tl \u0026amp;\u0026amp; !uo) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; t ^ fa[p]) { if (fa[e-\u0026gt; t]) { uo = p; vo = e-\u0026gt; t; dx = e-\u0026gt; v; break; } else { d[e-\u0026gt; t] = d[p] + 1; fa[e-\u0026gt; t] = p; df[e-\u0026gt; t] = e-\u0026gt; v; q[tl ++] = e-\u0026gt; t; } } } tlp = 0; for (int u = uo, v = vo; u ^ v; ++ tlp) if (d[u] \u0026gt; d[v]) a = u = fa[u]; else a = v = fa[v]; ++ tlp; for (int u = uo, v = vo; u ^ v; ) if (d[u] \u0026gt; d[v]) { int i(d[uo] - d[u]); lp[i] = u; le[i] = df[u]; u = fa[u]; } else { int i(tlp - d[vo] + d[v] - 1); lp[i] = v; le[i - 1] = df[v]; v = fa[v]; } lp[d[uo] - d[a]] = a; le[tlp - 1] = dx; for (int i = 0; i \u0026lt; tlp; ++ i) ol[lp[i]] = 1; }\nvoid dpTree(int p0) { static int q[maxn]; int hd(0), tl(1); q[0] = p0; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (!ol[e-\u0026gt; t]) { ol[e-\u0026gt; t] = ol[p] + 1; q[tl ++] = e-\u0026gt; t; } } for (int i = tl - 1; i \u0026gt;= 0; \u0026ndash; i) { int p(q[i]); dint s2(0); md[p] = 0; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (ol[e-\u0026gt; t] == ol[p] + 1) { dint v(md[e-\u0026gt; t] + e-\u0026gt; v); if (v \u0026gt; md[p]) { s2 = md[p]; md[p] = v; } else if (v \u0026gt; s2) s2 = v; } if (md[p] + s2 \u0026gt; ans) ans = md[p] + s2; } }\nstruct dat { dint x, y, s; dat() {} dat(dint x0, dint y0) { x = x0, y = y0, s = 0; } dat(dat a, dat b) { s = max(max(a. s, b. s), a. x + b. y); x = max(a. x, b. x); y = max(a. y, b. y); } }; struct seg { int l, r; dat d; seg *ls, *rs; }; seg slst[maxn * 5], *sp(slst), *rt;\n#define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1) inline seg* sgtBuild(int l, int r) { seg p(sp ++); p-\u0026gt; l = l; p-\u0026gt; r = r; if (l + 1 == r) { p-\u0026gt; d = dat(lv[l] + le[l], lv[l] - le[l]); } else { p-\u0026gt; ls = sgtBuild(l, midp(p)); p-\u0026gt; rs = sgtBuild(midp(p), r); p-\u0026gt; d = dat(p-\u0026gt; ls-\u0026gt; d, p-\u0026gt; rs-\u0026gt; d); } return p; } inline dat sgtQry(seg p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) return p-\u0026gt; d; else if (r \u0026lt;= midp(p)) return sgtQry(p-\u0026gt; ls, l, r); else if (l \u0026gt;= midp(p)) return sgtQry(p-\u0026gt; rs, l, r); else return dat(sgtQry(p-\u0026gt; ls, l, midp(p)), sgtQry(p-\u0026gt; rs, midp(p), r)); }\nvoid dpLoop() { dint totl(0); for (int i = 0; i \u0026lt; tlp; ++ i) { lv[i + tlp] = lv[i]; le[i + tlp] = le[i]; lp[i + tlp] = lp[i]; totl += le[i]; } le[tlp * 2] = 0; for (int i = tlp * 2 - 1; i \u0026gt;= 0; \u0026ndash; i) le[i] += le[i + 1]; rt = sgtBuild(0, tlp * 2); dint cans(0x7fffffffffffffffll); for (int i = 0; i \u0026lt; tlp; ++ i) { cans = min(cans, sgtQry(rt, i, i + tlp). s); } ans = max(ans, cans); }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); memset(head, 0, sizeof(head)); for (int i = 0; i \u0026amp;lt; n; ++ i) { int u, v, w; scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v, \u0026amp;amp;w); addEdge(u, v, w); addEdge(v, u, w); } findLoop(); ans = 0; for (int i = 0; i \u0026amp;lt; tlp; ++ i) { dpTree(lp[i]); lv[i] = md[lp[i]]; } dpLoop(); printf(\u0026quot;%.1lf\\n\u0026quot;, (double)ans / 2.0); } ","permalink":"/oi/i11rimport_017/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 好吧我的本意是想学习一下dp的。然后发现了这道纠结了一年半还多的题。\u0026lt;/p\u0026gt; \u0026nbsp;\n首先把环找出来。然后环上会长一些树。先把树的答案求了，因为它很好求。\n\u0026nbsp;\n然后考虑环，那么答案应该是随便断一条边之后答案的最小值（而不是最大值）。于是乎记录一下每个点按某个方向到起点的距离，记为d[i]。算一下每个点的树的深度，记为l[i]。于是每次要最大化l[i]+l[j]+|d[i]-d[j]|。反正是最大化所以顺序是没有关系的，但是不能自交。这是个比较容易错的地方。于是就去写个线段树来维护吧。只查询不修改让我总有能线性搞的想法，虽然没想清楚具体怎么实现。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; #include \u0026lt;set\u0026gt; using namespace std;\nstruct edge { int t, v; edge *next; };\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 100009;\nedge elst[maxn \u0026lt;\u0026lt; 1], *ep(elst), *head[maxn]; int n, fa[maxn], df[maxn], ol[maxn], d[maxn]; int tlp, lp[maxn \u0026lt;\u0026lt; 1]; dint lv[maxn \u0026lt;\u0026lt; 1], le[maxn \u0026lt;\u0026lt; 1], md[maxn], ans;","title":"BZOJ3242 [Noi2013]快餐店"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 又被虐了。\u0026lt;/p\u0026gt; \u0026nbsp;\n第一题感受了一下感觉线段树会被卡成平方？然后果断了一个分块+smt维护凸壳。然后调了很久。舍点的地方一直有点问题。于是还写了个js来画图。然后最后还是怎么就错了两个点。完了之后发现线段树是可以保证时间复杂度的。naive了我。\n\u0026nbsp;\n第二题当时觉得不太可做也没有认真想。其实就是根据a[1]+a[2]的值的不同取值去推前三个数，这个我都想到了。然后就没去想a[0]+a[3]一定是剩下的最小的。然后就又naive了。想通后秒过。\n\u0026nbsp;\n第三题想对了。淘汰的顺序是无关的。只要有一种行就行，否则就不行。然后中间cnt写错了居然还有91分，好神奇。然后100个点把我的页面撑得也是难看啊。\n\u0026nbsp;\n然后又花了一个下午去思考。还好晚上可以再干点别的了。\n\u0026nbsp;\n所以我还是太年轻了。\n","permalink":"/diary/i11rimport_018/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 又被虐了。\u0026lt;/p\u0026gt; \u0026nbsp;\n第一题感受了一下感觉线段树会被卡成平方？然后果断了一个分块+smt维护凸壳。然后调了很久。舍点的地方一直有点问题。于是还写了个js来画图。然后最后还是怎么就错了两个点。完了之后发现线段树是可以保证时间复杂度的。naive了我。\n\u0026nbsp;\n第二题当时觉得不太可做也没有认真想。其实就是根据a[1]+a[2]的值的不同取值去推前三个数，这个我都想到了。然后就没去想a[0]+a[3]一定是剩下的最小的。然后就又naive了。想通后秒过。\n\u0026nbsp;\n第三题想对了。淘汰的顺序是无关的。只要有一种行就行，否则就不行。然后中间cnt写错了居然还有91分，好神奇。然后100个点把我的页面撑得也是难看啊。\n\u0026nbsp;\n然后又花了一个下午去思考。还好晚上可以再干点别的了。\n\u0026nbsp;\n所以我还是太年轻了。","title":"20150304"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 看上去比较不可做的DP。好像别人写的记搜跑得飞快。\u0026lt;/p\u0026gt; \u0026nbsp;\n我看我是写最小表示写上瘾了。\n\u0026nbsp;\n压一下状态，有点像今天第二题。算每种值的有多少。然后直接跑。\n\u0026nbsp;\n感觉废状态比较多啊，跑得好慢。另外用memset清空高维数组会比较快。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int mod = 1e9 + 7; const int maxn = 17; const int maxst = 16009;\n#define mbit(a,b) ((a)\u0026lt;\u0026lt;((b)\u0026lt;\u0026lt;2)) #define gbit(a,b) (((a)\u0026gt;\u0026gt;((b)\u0026lt;\u0026lt;2))\u0026amp;0xf) #define _l (long long int)\nint m, c[maxn], n, mt, tots, slst[maxst]; int f[2][7][maxst];\nvoid dfsState(int t, int l, int v) { if (l == mt + 1) { slst[tots ++] = v | t; } else { for (int i = 0; i \u0026lt;= t; ++ i) dfsState(t - i, l + 1, v | mbit(i, l)); } }\ninline int fState(int x) { return lower_bound(slst, slst + tots, x) - slst; }\ninline void incm(int\u0026amp; a, int b) { a += b; if (a \u0026gt;= mod) a -= mod; }\n#define clearFCur() { for (int i = 1; i \u0026lt;= mt; ++ i) for (int j = 0; j \u0026lt; tots; ++ j) f[cur][i][j] = 0; }\nint dp() { int cur(0), prv(1); int sb(0); for (int i = 0; i \u0026lt;= mt; ++ i) sb |= mbit(c[i], i); memset(f, 0, sizeof(f)); for (int i = 1; i \u0026lt;= mt; ++ i) if (gbit(sb, i) \u0026gt; 0) f[cur][i - 1][fState(sb - mbit(1, i) + mbit(1, i - 1))] = gbit(sb, i); for (int ti = 1; ti \u0026lt; n; ++ ti) { swap(cur, prv); //\tclearFCur(); memset(f[cur], 0, sizeof(f[cur])); for (int i = 0; i \u0026lt;= mt; ++ i) for (int j = 0; j \u0026lt; tots; ++ j) if (f[prv][i][j]) { int s(slst[j]), c; for (int k = 1; k \u0026lt;= mt; ++ k) if ((c = gbit(s, k) - (k == i))) incm(f[cur][k - 1][fState(s - mbit(1, k) + mbit(1, k - 1))], _l f[prv][i][j] * c % mod); } } return f[cur][0][fState(m)]; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;m); memset(c, 0, sizeof(c)); mt = 0; n = 0; for (int i = 0; i \u0026amp;lt; m; ++ i) { int tmp; scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;tmp); n += tmp; ++ c[tmp]; if (tmp \u0026amp;gt; mt) mt = tmp; } tots = 0; dfsState(m, 1, 0); sort(slst, slst + tots); printf(\u0026quot;%d\\n\u0026quot;, dp()); }\n","permalink":"/oi/i11rimport_019/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 看上去比较不可做的DP。好像别人写的记搜跑得飞快。\u0026lt;/p\u0026gt; \u0026nbsp;\n我看我是写最小表示写上瘾了。\n\u0026nbsp;\n压一下状态，有点像今天第二题。算每种值的有多少。然后直接跑。\n\u0026nbsp;\n感觉废状态比较多啊，跑得好慢。另外用memset清空高维数组会比较快。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int mod = 1e9 + 7; const int maxn = 17; const int maxst = 16009;\n#define mbit(a,b) ((a)\u0026lt;\u0026lt;((b)\u0026lt;\u0026lt;2)) #define gbit(a,b) (((a)\u0026gt;\u0026gt;((b)\u0026lt;\u0026lt;2))\u0026amp;0xf) #define _l (long long int)\nint m, c[maxn], n, mt, tots, slst[maxst]; int f[2][7][maxst];\nvoid dfsState(int t, int l, int v) { if (l == mt + 1) { slst[tots ++] = v | t; } else { for (int i = 0; i \u0026lt;= t; ++ i) dfsState(t - i, l + 1, v | mbit(i, l)); } }","title":"BZOJ1079 [SCOI2008]着色方案"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 被痛虐。\u0026lt;/p\u0026gt; \u0026nbsp;\nzhx的出题风格越来越水了。\n\u0026nbsp;\n第一题最关键的结论是两个不能与当前块同字母的块也一定不能同字母。没推出来于是暴力了。然后再见。orz mhy。\n\u0026nbsp;\n第二题矩阵快速幂。因为昨天才写了插头所以优化还是比较在行。然后就被卡常数了。然后才知道矩阵乘还有这么神奇的优化。应该是废转移比较多。加上之后飞快虐std。\n\u0026nbsp;\n第三题又是想对了方向没有想到底。平衡树上的数据结构题还是比较有意思的碰到可以多做做。\n\u0026nbsp;\n然后一下午加大半个晚上就花在第三题和它的变形上了。\n\u0026nbsp;\n然后死得有点惨。\n\u0026nbsp;\n是我太年轻了啊。\n","permalink":"/diary/i11rimport_020/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 被痛虐。\u0026lt;/p\u0026gt; \u0026nbsp;\nzhx的出题风格越来越水了。\n\u0026nbsp;\n第一题最关键的结论是两个不能与当前块同字母的块也一定不能同字母。没推出来于是暴力了。然后再见。orz mhy。\n\u0026nbsp;\n第二题矩阵快速幂。因为昨天才写了插头所以优化还是比较在行。然后就被卡常数了。然后才知道矩阵乘还有这么神奇的优化。应该是废转移比较多。加上之后飞快虐std。\n\u0026nbsp;\n第三题又是想对了方向没有想到底。平衡树上的数据结构题还是比较有意思的碰到可以多做做。\n\u0026nbsp;\n然后一下午加大半个晚上就花在第三题和它的变形上了。\n\u0026nbsp;\n然后死得有点惨。\n\u0026nbsp;\n是我太年轻了啊。","title":"20150303"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天考试题的弱化版。只用求LCA是谁，不用求它的深度。所以直接用线段树找下区间最值就搞定了。然后long的范围有负数坑了一发。\u0026lt;/p\u0026gt; \u0026nbsp;\n好像在不平衡的平衡树上的题也比较热啊。而且我还做得比较少。是要补一补。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef pair \u0026lt;int, int\u0026gt; vpr; typedef pair \u0026lt;bool, vpr\u0026gt; dpr; struct seg { int l, r; dpr d; seg *ls, *rs; }; struct query { int t, a, b; };\nconst int maxn = 400009;\nint n, m, vl[maxn], tv; vpr a[maxn]; query q[maxn]; seg slst[maxn * 3], *sp(slst), *rt;\ninline int gpos(int x) { return lower_bound(vl, vl + tv, x) - vl; }\n#define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1) inline seg* sgtBuild(int l, int r) { seg* p(sp ++); p-\u0026gt; l = l; p-\u0026gt; r = r; p-\u0026gt; d = dpr(1, vpr(0, 0)); if (l + 1 \u0026lt; r) { p-\u0026gt; ls = sgtBuild(l, midp(p)); p-\u0026gt; rs = sgtBuild(midp(p), r); } return p; } inline void sgtChg(seg* p, int p0, dpr v0) { if (p-\u0026gt; l + 1 == p-\u0026gt; r) p-\u0026gt; d = v0; else { if (p0 \u0026lt; midp(p)) sgtChg(p-\u0026gt; ls, p0, v0); else sgtChg(p-\u0026gt; rs, p0, v0); p-\u0026gt; d = min(p-\u0026gt; ls-\u0026gt; d, p-\u0026gt; rs-\u0026gt; d); } } inline dpr sgtQry(seg* p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) return p-\u0026gt; d; else if (r \u0026lt;= midp(p)) return sgtQry(p-\u0026gt; ls, l, r); else if (l \u0026gt;= midp(p)) return sgtQry(p-\u0026gt; rs, l, r); else return min(sgtQry(p-\u0026gt; ls, l, midp(p)), sgtQry(p-\u0026gt; rs, midp(p), r)); }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m); tv = 0; for (int i = 0; i \u0026amp;lt; n; ++ i) { scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;a[i]. second); vl[tv ++] = a[i]. second; } for (int i = 0; i \u0026amp;lt; n; ++ i) scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;a[i]. first); for (int i = 0; i \u0026amp;lt; m; ++ i) { char opt[3]; scanf(\u0026quot;%s\u0026quot;, opt); if (opt[0] == 'I') { q[i]. t = 1; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;q[i]. a, \u0026amp;amp;q[i]. b); vl[tv ++] = q[i]. a; } else if (opt[0] == 'D') { q[i]. t = 2; scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;q[i]. a); } else { q[i]. t = 3; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;q[i]. a, \u0026amp;amp;q[i]. b); } } sort(vl, vl + tv); tv = unique(vl, vl + tv) - vl; rt = sgtBuild(0, tv); for (int i = 0; i \u0026amp;lt; n; ++ i) sgtChg(rt, gpos(a[i]. second), dpr(0, a[i])); for (int i = 0; i \u0026amp;lt; m; ++ i) if (q[i]. t == 1) sgtChg(rt, gpos(q[i]. a), dpr(0, vpr(q[i]. b, q[i]. a))); else if (q[i]. t == 2) sgtChg(rt, gpos(q[i]. a), dpr(1, vpr(0, 0))); else { int u(gpos(q[i]. a)), v(gpos(q[i]. b)); if (u \u0026amp;gt; v) swap(u, v); printf(\u0026quot;%d\\n\u0026quot;, sgtQry(rt, u, v + 1). second. second); } } ","permalink":"/oi/i11rimport_021/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天考试题的弱化版。只用求LCA是谁，不用求它的深度。所以直接用线段树找下区间最值就搞定了。然后long的范围有负数坑了一发。\u0026lt;/p\u0026gt; \u0026nbsp;\n好像在不平衡的平衡树上的题也比较热啊。而且我还做得比较少。是要补一补。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef pair \u0026lt;int, int\u0026gt; vpr; typedef pair \u0026lt;bool, vpr\u0026gt; dpr; struct seg { int l, r; dpr d; seg *ls, *rs; }; struct query { int t, a, b; };\nconst int maxn = 400009;\nint n, m, vl[maxn], tv; vpr a[maxn]; query q[maxn]; seg slst[maxn * 3], *sp(slst), *rt;\ninline int gpos(int x) { return lower_bound(vl, vl + tv, x) - vl; }","title":"BZOJ2770 YY的Treap"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 算是新学期开始的第一天吧。\u0026lt;/p\u0026gt; \u0026nbsp;\n上午写了道水题，然后开始纠结插头。一上午都没有写出一道插头来。\n\u0026nbsp;\n下午有cf。状态还是和昨天一样比较差。写挫了好多次。各种WA一时爽还导致罚时很多。\n\u0026nbsp;\n第一题逗你玩。就看最多的字母有几种。然后乘一下都不用快速幂，虽然我顺手就写了一个。已经不会用非快速幂了么。\n\u0026nbsp;\n第二题用map来存位置，然后用两个堆搞一下就完了。可以证明状态变化量是线性的所以不会出事。\n\u0026nbsp;\n第三题逗你玩。每个位置在第j位的贡献可以用组合数算出来。然后用前缀和就行。然后各种细节导致WA傻了。\n\u0026nbsp;\n后面两道神题不可做。\n\u0026nbsp;\nORZ xyz大爷。然后看到jcvb又在我上面很近的地方。\n\u0026nbsp;\n晚上写了道水题继续纠结插头，一直纠结到回家终于在11:05:56的时候过了。开心中。\n\u0026nbsp;\n看来还是就怕写长代码啊。怎么能这样呢。\n\u0026nbsp;\n看来我还是太年轻了。\n","permalink":"/diary/i11rimport_022/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 算是新学期开始的第一天吧。\u0026lt;/p\u0026gt; \u0026nbsp;\n上午写了道水题，然后开始纠结插头。一上午都没有写出一道插头来。\n\u0026nbsp;\n下午有cf。状态还是和昨天一样比较差。写挫了好多次。各种WA一时爽还导致罚时很多。\n\u0026nbsp;\n第一题逗你玩。就看最多的字母有几种。然后乘一下都不用快速幂，虽然我顺手就写了一个。已经不会用非快速幂了么。\n\u0026nbsp;\n第二题用map来存位置，然后用两个堆搞一下就完了。可以证明状态变化量是线性的所以不会出事。\n\u0026nbsp;\n第三题逗你玩。每个位置在第j位的贡献可以用组合数算出来。然后用前缀和就行。然后各种细节导致WA傻了。\n\u0026nbsp;\n后面两道神题不可做。\n\u0026nbsp;\nORZ xyz大爷。然后看到jcvb又在我上面很近的地方。\n\u0026nbsp;\n晚上写了道水题继续纠结插头，一直纠结到回家终于在11:05:56的时候过了。开心中。\n\u0026nbsp;\n看来还是就怕写长代码啊。怎么能这样呢。\n\u0026nbsp;\n看来我还是太年轻了。","title":"20150302"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 我的第二道插头DP。差不多纠结了一天。\u0026lt;/p\u0026gt; \u0026nbsp;\n这道题网上的题解都讲的好简略啊。最后还得自己yy。没有用括号序列法让我觉得自己比较厉害。\n\u0026nbsp;\n考虑轮廓线上的m个格子，有3种情况：没有插头，有且只能往一边走，有且要往两边走。对于第二种，要用最多3个不同的值来记录连通性。还要有两个不同的值来表示第一种情况和第三种情况。我比较懒，所以直接用一个八进制数去表示，然后每次二分找编号。\n\u0026nbsp;\n考虑转移，分一堆情况进行讨论。默认从左上朝右下走。\n\u0026nbsp;\n首先是要走当前格子的情况。\n\u0026nbsp;\n如果左边和上面都有插头，那么看它们是否连通。如果不连通则把它们连通，如果已经连通，看是否还有其它插头。没有就更新答案，否则忽略。\n\u0026nbsp;\n如果只有左边有插头，再分类。如果它是第二种，那么这个格子可以新建一个第三种插头，或者把左边格子的插头接过来。如果它是第三种那么它必需把左边格子接过来。\n\u0026nbsp;\n如果只有上面有插头，那么必需把上面的插头接上来。\n\u0026nbsp;\n如果左边和上面都没有插头，那么可以新建一个第三种插头。\n\u0026nbsp;\n然后如果不走这个格子的话，要求上面没有插头，且左边不是第三种插头。\n\u0026nbsp;\n按mhy的话说，插头dp就是写起来很麻烦。的确。不过写出来也还是挺高兴的。\n\u0026nbsp;\n然后代码丑到不能看了。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 109; const int maxm = 9; const int maxst = 50009; const int inf = 0x3f3f3f3f;\n#define pow8(x) (1\u0026lt;\u0026lt;(x)\u0026lt;\u0026lt;(x)\u0026lt;\u0026lt;(x)) #define mbit(x,y) ((x)\u0026lt;\u0026lt;(y)\u0026lt;\u0026lt;(y)\u0026lt;\u0026lt;(y)) #define gbit(x,y) (((x)\u0026gt;\u0026gt;(y)\u0026gt;\u0026gt;(y)\u0026gt;\u0026gt;(y))\u0026amp;7)\nint f[2][maxst], n, m, a[maxn][maxm], ans; int slst[maxst], tots;\ninline void upMax(int\u0026amp; a, int b) { if (a \u0026lt; b) a = b; }\nvoid dfsState(int cur, int tot, int val, int e) { if (cur == m) { static int cnt[maxm]; memset(cnt, 0, sizeof(cnt)); for (int i = 0; i \u0026lt; m; ++ i) ++ cnt[gbit(val, i)]; bool lg(1); for (int i = 1; i \u0026lt;= tot \u0026amp;\u0026amp; lg; ++ i) if (cnt[i] != 0 \u0026amp;\u0026amp; cnt[i] != 2) lg = 0; if (lg) slst[tots ++] = val; } else { for (int i = 0; i \u0026lt;= tot; ++ i) dfsState(cur + 1, tot, val | mbit(i, cur), e); dfsState(cur + 1, tot + 1, val | mbit(tot + 1, cur), e); if (e) dfsState(cur + 1, tot, val | mbit(7, cur), 0); } } void preState() { tots = 0; dfsState(0, 0, 0, 1); sort(slst, slst + tots); }\nint fState(int s) { int ret(lower_bound(slst, slst + tots, s) - slst); if (slst[ret] != s) puts(\u0026ldquo;naive\u0026rdquo;); return ret; }\nint joinState(int s, int p) { static int z[maxm], y[maxn], c; for (int i = 0; i \u0026lt; m; ++ i) z[i] = gbit(s, i); if (z[p - 1] == 7) { z[p - 1] = z[p]; z[p] = 0; } else { int f(z[p]), t(z[p - 1]); for (int i = 0; i \u0026lt; m; ++ i) if (z[i] == f) z[i] = t; z[p - 1] = 0; z[p] = 0; memset(y, 0, sizeof(y)); c = 0; for (int i = 0; i \u0026lt; m; ++ i) if (z[i] \u0026amp;\u0026amp; z[i] \u0026lt; 7) { if (y[z[i]]) { z[i] = y[z[i]]; } else { y[z[i]] = ++ c; z[i] = y[z[i]]; } } } int f(0); for (int i = 0; i \u0026lt; m; ++ i) f |= mbit(z[i], i); return fState(f); }\nint expState(int s, int p) { static int z[maxm]; for (int i = 0; i \u0026lt; m; ++ i) z[i] = gbit(s, i); int f(1); for (int i = 0; i \u0026lt; p - 1; ++ i) if (z[i] \u0026lt; 7 \u0026amp;\u0026amp; z[i] + 1 \u0026gt; f) f = z[i] + 1; for (int i = 0; i \u0026lt; m; ++ i) if (z[i] \u0026lt; 7 \u0026amp;\u0026amp; z[i] \u0026gt;= f) ++ z[i]; z[p - 1] = f; z[p] = f; f = 0; for (int i = 0; i \u0026lt; m; ++ i) f |= mbit(z[i], i); return fState(f); } int extState(int s, int p) { static int z[maxm]; for (int i = 0; i \u0026lt; m; ++ i) z[i] = gbit(s, i); z[p] = z[p - 1]; z[p - 1] = 0; int f(0); for (int i = 0; i \u0026lt; m; ++ i) f |= mbit(z[i], i); return fState(f); }\nint forkState(int s, int p) { return fState(s | mbit(7, p)); }\nbool legalState(int s, int p) { static int z[maxm]; for (int i = 0; i \u0026lt; m; ++ i) z[i] = gbit(s, i); for (int i = 0; i \u0026lt; p - 1; ++ i) if (z[i]) return 0; for (int i = p + 1; i \u0026lt; m; ++ i) if (z[i]) return 0; return 1; }\nvoid fillArr(int* a, int sz, int v) { for (int i = 0; i \u0026lt; sz; ++ i) a[i] = v; }\nvoid dp() { int cur(0), prv(1); fillArr(f[cur], tots, -inf); f[cur][0] = 0; for (int x = 0; x \u0026lt; n; ++ x) { for (int y = 0; y \u0026lt; m; ++ y) { swap(cur, prv); fillArr(f[cur], tots, -inf); f[cur][0] = 0; for (int i = 0; i \u0026lt; tots; ++ i) if (f[prv][i] \u0026gt; -inf) { int s(slst[i]); if (gbit(s, y) \u0026amp;\u0026amp; y \u0026amp;\u0026amp; gbit(s, y - 1)) { if (gbit(s, y) == gbit(s, y - 1)) { if (legalState(s, y)) upMax(ans, f[prv][i] + a[x][y]); } else { upMax(f[cur][joinState(s, y)], f[prv][i] + a[x][y]); } } if (!gbit(s, y) \u0026amp;\u0026amp; y \u0026amp;\u0026amp; gbit(s, y - 1)) { if (gbit(s, y - 1) == 7) upMax(f[cur][expState(s, y)], f[prv][i] + a[x][y]); else upMax(f[cur][extState(s, y)], f[prv][i] + a[x][y]); } if (gbit(s, y) \u0026amp;\u0026amp; (!y || gbit(s, y - 1) != 7)) upMax(f[cur][i], f[prv][i] + a[x][y]); if (y \u0026lt; m - 1 \u0026amp;\u0026amp; !gbit(s, y) \u0026amp;\u0026amp; (!y || gbit(s, y - 1) != 7)) upMax(f[cur][forkState(s, y)], f[prv][i] + a[x][y]); if (!gbit(s, y) \u0026amp;\u0026amp; (!y || gbit(s, y - 1) != 7)) upMax(f[cur][i], f[prv][i]); } } } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m); preState(); ans = -inf; for (int i = 0; i \u0026amp;lt; n; ++ i) for (int j = 0; j \u0026amp;lt; m; ++ j) scanf(\u0026quot;%d\u0026quot;, a[i] + j); ans = -inf; dp(); printf(\u0026quot;%d\\n\u0026quot;, ans); } ","permalink":"/oi/i11rimport_023/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 我的第二道插头DP。差不多纠结了一天。\u0026lt;/p\u0026gt; \u0026nbsp;\n这道题网上的题解都讲的好简略啊。最后还得自己yy。没有用括号序列法让我觉得自己比较厉害。\n\u0026nbsp;\n考虑轮廓线上的m个格子，有3种情况：没有插头，有且只能往一边走，有且要往两边走。对于第二种，要用最多3个不同的值来记录连通性。还要有两个不同的值来表示第一种情况和第三种情况。我比较懒，所以直接用一个八进制数去表示，然后每次二分找编号。\n\u0026nbsp;\n考虑转移，分一堆情况进行讨论。默认从左上朝右下走。\n\u0026nbsp;\n首先是要走当前格子的情况。\n\u0026nbsp;\n如果左边和上面都有插头，那么看它们是否连通。如果不连通则把它们连通，如果已经连通，看是否还有其它插头。没有就更新答案，否则忽略。\n\u0026nbsp;\n如果只有左边有插头，再分类。如果它是第二种，那么这个格子可以新建一个第三种插头，或者把左边格子的插头接过来。如果它是第三种那么它必需把左边格子接过来。\n\u0026nbsp;\n如果只有上面有插头，那么必需把上面的插头接上来。\n\u0026nbsp;\n如果左边和上面都没有插头，那么可以新建一个第三种插头。\n\u0026nbsp;\n然后如果不走这个格子的话，要求上面没有插头，且左边不是第三种插头。\n\u0026nbsp;\n按mhy的话说，插头dp就是写起来很麻烦。的确。不过写出来也还是挺高兴的。\n\u0026nbsp;\n然后代码丑到不能看了。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 109; const int maxm = 9; const int maxst = 50009; const int inf = 0x3f3f3f3f;\n#define pow8(x) (1\u0026lt;\u0026lt;(x)\u0026lt;\u0026lt;(x)\u0026lt;\u0026lt;(x)) #define mbit(x,y) ((x)\u0026lt;\u0026lt;(y)\u0026lt;\u0026lt;(y)\u0026lt;\u0026lt;(y)) #define gbit(x,y) (((x)\u0026gt;\u0026gt;(y)\u0026gt;\u0026gt;(y)\u0026gt;\u0026gt;(y))\u0026amp;7)\nint f[2][maxst], n, m, a[maxn][maxm], ans; int slst[maxst], tots;","title":"BZOJ1187 [HNOI2007]神奇游乐园"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 我以为是最大权闭合子图来着。然后好像就直接最小割就行了吧。突然觉得我的网络流好弱。\u0026lt;/p\u0026gt; \u0026nbsp;\n建源汇，分别连每个作物。对于每个组合建两个点分别边源汇，然后中间像源汇一样连它的成员。如果全在一边，那么会有一条边不用割。这也是一个集合都选对答案有贡献的建图方式。\n\u0026nbsp;\n然后就完了。建图和dinic都写得有些丑，所以调了半天。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct edge { int t, c; edge *next, *rv; };\nconst int maxn = 3009; const int inf = 0x3f3f3f3f;\nint n, m, c, d[maxn], t, st, te; edge *head[maxn];\ninline edge* newEdge(int u, int v, int c) { edge* e(new edge); e-\u0026gt; t = v; e-\u0026gt; c = c; e-\u0026gt; next = head[u]; return head[u] = e; } inline void addEdge(int u, int v, int c) { edge *a(newEdge(u, v, c)), *b(newEdge(v, u, 0)); a-\u0026gt; rv = b; b-\u0026gt; rv = a; }\nbool bfsBuild() { static int q[maxn]; int hd(0), tl(1); memset(d, 0, sizeof(d)); d[q[0] = st] = 1; while (hd \u0026lt; tl \u0026amp;\u0026amp; !d[te]) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; c \u0026amp;\u0026amp; !d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; q[tl ++] = e-\u0026gt; t; } } return d[te]; } int dfsFind(int p, int c) { if (p == te) return c; int s(0); edge *e; for (e = head[p]; e \u0026amp;\u0026amp; c; e = e-\u0026gt; next) if (e-\u0026gt; c \u0026amp;\u0026amp; d[e-\u0026gt; t] == d[p] + 1) { int x(dfsFind(e-\u0026gt; t, min(c, e-\u0026gt; c))); s += x; c -= x; e-\u0026gt; c -= x; e-\u0026gt; rv-\u0026gt; c += x; } if (!e) d[p] = 0; return s; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nc = 0; scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); st = n; te = n + 1; c = n + 2; t = 0; memset(head, 0, sizeof(head)); for (int i = 0; i \u0026amp;lt; n; ++ i) { int a; scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;a); t += a; addEdge(st, i, a); } for (int i = 0; i \u0026amp;lt; n; ++ i) { int a; scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;a); t += a; addEdge(i, te, a); } scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;m); for (int i = 0; i \u0026amp;lt; m; ++ i) { int k, c1, c2, u, v; scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;amp;k, \u0026amp;amp;c1, \u0026amp;amp;c2); t += c1 + c2; u = c ++; v = c ++; addEdge(st, u, c1); addEdge(v, te, c2); for (int i = 0; i \u0026amp;lt; k; ++ i) { int x; scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;x); -- x; addEdge(u, x, inf); addEdge(x, v, inf); } } while (bfsBuild()) t -= dfsFind(st, inf); printf(\u0026quot;%d\\n\u0026quot;, t); } ","permalink":"/oi/i11rimport_024/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 我以为是最大权闭合子图来着。然后好像就直接最小割就行了吧。突然觉得我的网络流好弱。\u0026lt;/p\u0026gt; \u0026nbsp;\n建源汇，分别连每个作物。对于每个组合建两个点分别边源汇，然后中间像源汇一样连它的成员。如果全在一边，那么会有一条边不用割。这也是一个集合都选对答案有贡献的建图方式。\n\u0026nbsp;\n然后就完了。建图和dinic都写得有些丑，所以调了半天。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct edge { int t, c; edge *next, *rv; };\nconst int maxn = 3009; const int inf = 0x3f3f3f3f;\nint n, m, c, d[maxn], t, st, te; edge *head[maxn];\ninline edge* newEdge(int u, int v, int c) { edge* e(new edge); e-\u0026gt; t = v; e-\u0026gt; c = c; e-\u0026gt; next = head[u]; return head[u] = e; } inline void addEdge(int u, int v, int c) { edge *a(newEdge(u, v, c)), *b(newEdge(v, u, 0)); a-\u0026gt; rv = b; b-\u0026gt; rv = a; }","title":"BZOJ3438 小M的作物"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; usaco的银组都开始考这种题了么。其实还是挺水的，不过题号比较好。\u0026lt;/p\u0026gt; \u0026nbsp;\n就按y排序，挨个把时间轴上的东西扔掉就完了。写离散可能还没有直接写smt快呢。\n\u0026nbsp;\n然后线段有一边要减1有点坑。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstdlib\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef long long dint; #define _l (long long int)\nstruct cow { int y; int ta, tb; };\nstruct node { int l, r, w; node ls, rs; }; typedef pair \u0026lt;node, node \u0026gt; npr;\nconst int maxn = 50009;\ninline bool operator \u0026lt;(const cow\u0026amp; a, const cow\u0026amp; b) { return a. y \u0026lt; b. y; }\nint n, ans; cow a[maxn]; node nlst[maxn \u0026lt;\u0026lt; 1], *np(nlst), *rt;\nnode* newNode(int l, int r) { np-\u0026gt; l = l; np-\u0026gt; r = r; #ifdef WIN32 np-\u0026gt; w = (rand() \u0026lt;\u0026lt; 16) | rand(); #else np-\u0026gt; w = rand(); #endif np-\u0026gt; ls = np-\u0026gt; rs = 0; return np ++; }\nnpr split(node* p, int x) { if (!p) return npr(0, 0); else if (x \u0026lt; p-\u0026gt; l) { npr g(split(p-\u0026gt; ls, x)); p-\u0026gt; ls = g. second; return npr(g. first, p); } else if (x \u0026gt;= p-\u0026gt; r) { npr g(split(p-\u0026gt; rs, x)); p-\u0026gt; rs = g. first; return npr(p, g. second); } else { node q(newNode(p-\u0026gt; l, x)); q-\u0026gt; ls = p-\u0026gt; ls; p-\u0026gt; ls = 0; p-\u0026gt; l = x + 1; return npr(q, p); } } node merge(node p, node q) { if (!p) return q; else if (!q) return p; else if (p-\u0026gt; w \u0026gt; q-\u0026gt; w) { p-\u0026gt; rs = merge(p-\u0026gt; rs, q); return p; } else { q-\u0026gt; ls = merge(p, q-\u0026gt; ls); return q; } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nsrand(239473); scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); for (int i = 0; i \u0026amp;lt; n; ++ i) { int x, r; scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;amp;x, \u0026amp;amp;a[i]. y, \u0026amp;amp;r); a[i]. ta = - x * r - r + 1; a[i]. tb = - x * r; } rt = newNode(-1, 1000000009); ans = 0; sort(a, a + n); for (int i = 0; i \u0026amp;lt; n; ++ i) { npr x(split(rt, a[i]. ta - 1)); npr y(split(x. second, a[i]. tb)); if (y. first) ++ ans; rt = merge(x. first, y. second); } printf(\u0026quot;%d\\n\u0026quot;, ans); } ","permalink":"/oi/i11rimport_025/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; usaco的银组都开始考这种题了么。其实还是挺水的，不过题号比较好。\u0026lt;/p\u0026gt; \u0026nbsp;\n就按y排序，挨个把时间轴上的东西扔掉就完了。写离散可能还没有直接写smt快呢。\n\u0026nbsp;\n然后线段有一边要减1有点坑。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstdlib\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef long long dint; #define _l (long long int)\nstruct cow { int y; int ta, tb; };\nstruct node { int l, r, w; node ls, rs; }; typedef pair \u0026lt;node, node \u0026gt; npr;\nconst int maxn = 50009;\ninline bool operator \u0026lt;(const cow\u0026amp; a, const cow\u0026amp; b) { return a.","title":"BZOJ3888 [Usaco2015 Jan]Stampede"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 连续两天都是一天两场。\u0026lt;/p\u0026gt; \u0026nbsp;\n上午考试比较naive。\n\u0026nbsp;\n第一题反正也不会，就随便写了个乱枚举的东西，还骗到80分。正解比较神奇，不过今天是没有时间写了。\n\u0026nbsp;\n第二题想到了正确的解法，但是没有优化好，加上高精写挂了，于是只有85分。\n\u0026nbsp;\n第三题数据结构那一部分想的是对的，但是前面对期望不熟没有想清楚，于是直接想简单了。也就是把我的链剖再改得更麻烦一些。\n\u0026nbsp;\n所以说在学长们出的比较难的题面前我还是很无力的。\n\u0026nbsp;\n下午讨论，改第二题。状态不好啊，改东西改了好久。\n\u0026nbsp;\n晚上hihoc9去拿github玩偶。\n\u0026nbsp;\n第一题小学生题么。然后排序的时候把m写成n于是挂了一次。所以虽然一血但是分也不高。\n\u0026nbsp;\n第二题有点像中国象棋棋盘上放炮的那个题。唯一的区别是这题两个炮可以放在一起。用dp，f[i][j][k]表示做了i列，有j行和为2，有k行和为1的方案数。对于每一个高度可以O(n3)预处理出答案。中间有一个转移写错了调了好久。幸好样例比较良心。于是总时间复杂度是四方的。n=100感觉很悬。本机不开O2的话会TLE一点。想到mac比较慢于是交了然后过了。\n\u0026nbsp;\n第三题神题。\n\u0026nbsp;\n第四题感觉可做，于是交了16次最后没有过。首先要判合法。最初没有判。然后建出树之后归并，用组合数。然后求阶乘的逆元的时候千万不要再像今天这样naive去线性筛了。我觉得我的思路是对的啊。不开心。（upd：看了题解之后觉得我的想法好像也不是太对）\n\u0026nbsp;\n于是今天被一堆人虐了。-16真心不好看。\n\u0026nbsp;\n我还是太年轻了啊。\n\u0026nbsp;\n明天下午有cf，比较开心。\n","permalink":"/diary/i11rimport_026/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 连续两天都是一天两场。\u0026lt;/p\u0026gt; \u0026nbsp;\n上午考试比较naive。\n\u0026nbsp;\n第一题反正也不会，就随便写了个乱枚举的东西，还骗到80分。正解比较神奇，不过今天是没有时间写了。\n\u0026nbsp;\n第二题想到了正确的解法，但是没有优化好，加上高精写挂了，于是只有85分。\n\u0026nbsp;\n第三题数据结构那一部分想的是对的，但是前面对期望不熟没有想清楚，于是直接想简单了。也就是把我的链剖再改得更麻烦一些。\n\u0026nbsp;\n所以说在学长们出的比较难的题面前我还是很无力的。\n\u0026nbsp;\n下午讨论，改第二题。状态不好啊，改东西改了好久。\n\u0026nbsp;\n晚上hihoc9去拿github玩偶。\n\u0026nbsp;\n第一题小学生题么。然后排序的时候把m写成n于是挂了一次。所以虽然一血但是分也不高。\n\u0026nbsp;\n第二题有点像中国象棋棋盘上放炮的那个题。唯一的区别是这题两个炮可以放在一起。用dp，f[i][j][k]表示做了i列，有j行和为2，有k行和为1的方案数。对于每一个高度可以O(n3)预处理出答案。中间有一个转移写错了调了好久。幸好样例比较良心。于是总时间复杂度是四方的。n=100感觉很悬。本机不开O2的话会TLE一点。想到mac比较慢于是交了然后过了。\n\u0026nbsp;\n第三题神题。\n\u0026nbsp;\n第四题感觉可做，于是交了16次最后没有过。首先要判合法。最初没有判。然后建出树之后归并，用组合数。然后求阶乘的逆元的时候千万不要再像今天这样naive去线性筛了。我觉得我的思路是对的啊。不开心。（upd：看了题解之后觉得我的想法好像也不是太对）\n\u0026nbsp;\n于是今天被一堆人虐了。-16真心不好看。\n\u0026nbsp;\n我还是太年轻了啊。\n\u0026nbsp;\n明天下午有cf，比较开心。","title":"20150301 hihoc9"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 不是之前写过长期计划么？然后发现自己完成计划的水平和美工水平差不多。\u0026lt;/p\u0026gt; \u0026nbsp;\n之前总觉得省选离开学是件很遥远的事情。直到这最后一次面对它，才发现原来它这么近。\n\u0026nbsp;\n第三次考省选了吧。之前对省选的感觉还是以不会做的骗分题居多。唯一一道会做的ds题还因为数组少开一倍而少了30分。去年省选的时候，听说省选题是可以想ac的，那么也只有抓紧最后一次机会了。\n\u0026nbsp;\n三月有4.5个星期。估计大约每周白天正式考试3-4场，晚上网赛若干。考试的时候就专心考试。然后尽量在当天把三道题都搞懂写过。晚上如果不是太晚的话也可以玩一玩。剩下的时间就去刷题好了。\n\u0026nbsp;\n每天要保证一道bzoj，不管是水题还是什么的。也不要太功利去想600道喽第一页喽。埋头写代码，面包总会有的。剩下的也不要老盯着bzoj，hdu、poj、spoj啥的只要有没做过的好题就要写。\n\u0026nbsp;\n第一周去学习DP。把插头DP再加强一下，数位DP也要写一写。正好有MHY的专题是吧。然后有可能会考到DS+DP的题，还有单调队列和斜率优化啥的再加CDQ之类的，如果还能翻到的话也写写好了。\n\u0026nbsp;\nUpd:插头dp做了几道题，写得相对比较熟了。数位dp练了一道水水的kathy函数。然后ds+dp的奇怪题还有仙人掌啥的都写了一点。感觉这个周的任务完成得还是不错。\n\u0026nbsp;\n第二周去复习图论。不要只盯着数据范围是105的题。也要涉及一些n相对小而复杂度的指数高一些的题。要仔细思考。图论里也有不少的论题，比如弦图，平面图，完美消啥的，不妨复习一下。还有网络流。最大流最小割，费用流，分数规划，对偶啥的。\n\u0026nbsp;\n第三周去写一些字符串以及ds的题。字符串的几个常用算法要再熟悉一遍，不要看到题就想hash。但是不会做的时候能拿hash水那就水呗，拿个不常用的素数试试。然后后缀自动机这种东西还是留到noi之前再去想办法弄懂吧。\n\u0026nbsp;\n第四周复习数论和杂题。再写写fft。然后bzoj上有些比较奇怪的数学题啥的，可以参考一下题解。然后O(n2/3)求前缀和v那个玩意也要学习一下，我预感有可能会考到。\n\u0026nbsp;\n计划的关键在于落实。不要天天沉浸于水题也不要天天浪费在不可做的题上。\n\u0026nbsp;\nFor my dream, fighting.\n","permalink":"/diary/i11rimport_027/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 不是之前写过长期计划么？然后发现自己完成计划的水平和美工水平差不多。\u0026lt;/p\u0026gt; \u0026nbsp;\n之前总觉得省选离开学是件很遥远的事情。直到这最后一次面对它，才发现原来它这么近。\n\u0026nbsp;\n第三次考省选了吧。之前对省选的感觉还是以不会做的骗分题居多。唯一一道会做的ds题还因为数组少开一倍而少了30分。去年省选的时候，听说省选题是可以想ac的，那么也只有抓紧最后一次机会了。\n\u0026nbsp;\n三月有4.5个星期。估计大约每周白天正式考试3-4场，晚上网赛若干。考试的时候就专心考试。然后尽量在当天把三道题都搞懂写过。晚上如果不是太晚的话也可以玩一玩。剩下的时间就去刷题好了。\n\u0026nbsp;\n每天要保证一道bzoj，不管是水题还是什么的。也不要太功利去想600道喽第一页喽。埋头写代码，面包总会有的。剩下的也不要老盯着bzoj，hdu、poj、spoj啥的只要有没做过的好题就要写。\n\u0026nbsp;\n第一周去学习DP。把插头DP再加强一下，数位DP也要写一写。正好有MHY的专题是吧。然后有可能会考到DS+DP的题，还有单调队列和斜率优化啥的再加CDQ之类的，如果还能翻到的话也写写好了。\n\u0026nbsp;\nUpd:插头dp做了几道题，写得相对比较熟了。数位dp练了一道水水的kathy函数。然后ds+dp的奇怪题还有仙人掌啥的都写了一点。感觉这个周的任务完成得还是不错。\n\u0026nbsp;\n第二周去复习图论。不要只盯着数据范围是105的题。也要涉及一些n相对小而复杂度的指数高一些的题。要仔细思考。图论里也有不少的论题，比如弦图，平面图，完美消啥的，不妨复习一下。还有网络流。最大流最小割，费用流，分数规划，对偶啥的。\n\u0026nbsp;\n第三周去写一些字符串以及ds的题。字符串的几个常用算法要再熟悉一遍，不要看到题就想hash。但是不会做的时候能拿hash水那就水呗，拿个不常用的素数试试。然后后缀自动机这种东西还是留到noi之前再去想办法弄懂吧。\n\u0026nbsp;\n第四周复习数论和杂题。再写写fft。然后bzoj上有些比较奇怪的数学题啥的，可以参考一下题解。然后O(n2/3)求前缀和v那个玩意也要学习一下，我预感有可能会考到。\n\u0026nbsp;\n计划的关键在于落实。不要天天沉浸于水题也不要天天浪费在不可做的题上。\n\u0026nbsp;\nFor my dream, fighting.","title":"201503xx plan"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 又是愉快的一天两场。\u0026lt;/p\u0026gt; \u0026nbsp;\n早上是高三众出了一套据称是NOIP模拟题的玩意。感觉比较坑，不过还是可做。\n\u0026nbsp;\n第一题是个简单的思考题，除了高精以外没啥恶心的地方。但是当时觉得有点麻烦，想对了方向但是没有继续想下去。当然一个重要的原因是第二题和第三题比较吸引人。\n\u0026nbsp;\n第二题是个灭绝树的比较裸的题。这玩意比较简单不过比较偏。这种考点就是要严防的。建树还比较简单。问题是求一堆链的并比较麻烦。当然我直接上链剖了反正最近写得比较多，半个小时就搞定了整道题。然后也可以不用链剖用DFS序的，不过我觉得可能我思考和调试的时间会比直接无脑码链剖的时间还要长。\n\u0026nbsp;\n第三题是去年冬令营前模拟的时候考过的原题吧，大概日期是20140122？印象比较深的原因是时空穿梭有这个部分分不过那题我还是暴0了。一年过去了，于是我决定硬推mobius，然后推了若干页草稿纸，中间还经历了一次重启之后最终还是推出来了。中间重启的原因还是对mobius反演不够熟悉。不过感觉经过上次在80ms的学习之后，自己的数论水平还是有些进步吧。至少现在看到mobius不会昏了。\n\u0026nbsp;\n于是考试的时候第一题30暴力+100+100。没写丑东西还是比较欣慰的。\n\u0026nbsp;\n下午各种事情没有刷题没有改题没有写总结。\n\u0026nbsp;\n晚上7点17分想起有BC。\n\u0026nbsp;\na题小学生题水。\n\u0026nbsp;\nb题中学生题数位DP水。然后写了半天。久了不写手生。怎么感觉说这句话说了整整一个寒假了。\n\u0026nbsp;\nc题不是当年SCOI那个题的升级版吗？然后naive了一次因为如果有车把两行隔开的话两个王就不会产生影响了。然后发现要先处理出所有大小方块的王的放法数，然后枚举一下n的正整数拆分，还要用在xj学到的枚举排列去重的方法。细节各种麻烦。写之交之过pt之玩之fst之，错因未知。\n\u0026nbsp;\nd题不会。题解都那么长一定是神题。\n\u0026nbsp;\n然后去写上午的第一题，然后脑洞大开写了个java，然后去补bzoj，然后写总结。事情好多TT\n\u0026nbsp;\n所以我还是太年轻了啊。\n","permalink":"/diary/i11rimport_028/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 又是愉快的一天两场。\u0026lt;/p\u0026gt; \u0026nbsp;\n早上是高三众出了一套据称是NOIP模拟题的玩意。感觉比较坑，不过还是可做。\n\u0026nbsp;\n第一题是个简单的思考题，除了高精以外没啥恶心的地方。但是当时觉得有点麻烦，想对了方向但是没有继续想下去。当然一个重要的原因是第二题和第三题比较吸引人。\n\u0026nbsp;\n第二题是个灭绝树的比较裸的题。这玩意比较简单不过比较偏。这种考点就是要严防的。建树还比较简单。问题是求一堆链的并比较麻烦。当然我直接上链剖了反正最近写得比较多，半个小时就搞定了整道题。然后也可以不用链剖用DFS序的，不过我觉得可能我思考和调试的时间会比直接无脑码链剖的时间还要长。\n\u0026nbsp;\n第三题是去年冬令营前模拟的时候考过的原题吧，大概日期是20140122？印象比较深的原因是时空穿梭有这个部分分不过那题我还是暴0了。一年过去了，于是我决定硬推mobius，然后推了若干页草稿纸，中间还经历了一次重启之后最终还是推出来了。中间重启的原因还是对mobius反演不够熟悉。不过感觉经过上次在80ms的学习之后，自己的数论水平还是有些进步吧。至少现在看到mobius不会昏了。\n\u0026nbsp;\n于是考试的时候第一题30暴力+100+100。没写丑东西还是比较欣慰的。\n\u0026nbsp;\n下午各种事情没有刷题没有改题没有写总结。\n\u0026nbsp;\n晚上7点17分想起有BC。\n\u0026nbsp;\na题小学生题水。\n\u0026nbsp;\nb题中学生题数位DP水。然后写了半天。久了不写手生。怎么感觉说这句话说了整整一个寒假了。\n\u0026nbsp;\nc题不是当年SCOI那个题的升级版吗？然后naive了一次因为如果有车把两行隔开的话两个王就不会产生影响了。然后发现要先处理出所有大小方块的王的放法数，然后枚举一下n的正整数拆分，还要用在xj学到的枚举排列去重的方法。细节各种麻烦。写之交之过pt之玩之fst之，错因未知。\n\u0026nbsp;\nd题不会。题解都那么长一定是神题。\n\u0026nbsp;\n然后去写上午的第一题，然后脑洞大开写了个java，然后去补bzoj，然后写总结。事情好多TT\n\u0026nbsp;\n所以我还是太年轻了啊。","title":"20150228 bc31"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 左偏树+并查集的一眼题嘛。然后合并的时候搞忘了如果两个人已经在同一个团里要跳过，于是左偏树自交去了。\u0026lt;/p\u0026gt; \u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\n#define szof(p) ((p)?(p-\u0026gt;sz):0) struct node { int sz, vl, id; node *ls, rs; node() {} node(int v, int i) { vl = v; id = i; sz = 1; ls = rs = 0; } inline void update() { if (szof(ls) \u0026lt; szof(rs)) swap(ls, rs); } }; node merge(node p, node q) { if (!p) return q; else if (!q) return p; else if (p-\u0026gt; vl \u0026lt; q-\u0026gt; vl) { p-\u0026gt; rs = merge(p-\u0026gt; rs, q); p-\u0026gt; update(); return p; } else { q-\u0026gt; rs = merge(q-\u0026gt; rs, p); q-\u0026gt; update(); return q; } } node pop(node p) { if (p) return merge(p-\u0026gt; ls, p-\u0026gt; rs); else return 0; }\nconst int maxn = 1000009;\nint n, m, r[maxn]; bool al[maxn]; node nlst[maxn], *rt[maxn];\nint getRoot(int x) { register int p, q; for (p = r[x]; p ^ r[p]; p = r[p]); for (; x ^ p; q = r[x], r[x] = p, x = q); return x; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); for (int i = 1; i \u0026amp;lt;= n; ++ i) { int w; scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;w); nlst[i] = node(w, i); rt[i] = \u0026amp;amp;nlst[i]; al[i] = 1; r[i] = i; } scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;m); while (m --) { char opt[3]; int a, b; scanf(\u0026quot;%s\u0026quot;, opt); if (opt[0] == 'M') { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;a, \u0026amp;amp;b); if (al[a] \u0026amp;amp;\u0026amp;amp; al[b]) { a = getRoot(a); b = getRoot(b); if (a == b) continue; r[a] = b; rt[b] = merge(rt[b], rt[a]); } } else if (opt[0] == 'K') { scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;a); if (!al[a]) puts(\u0026quot;0\u0026quot;); else { a = getRoot(a); printf(\u0026quot;%d\\n\u0026quot;, rt[a]-\u0026amp;gt; vl); al[rt[a]-\u0026amp;gt; id] = 0; rt[a] = pop(rt[a]); } } } } ","permalink":"/oi/i11rimport_029/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 左偏树+并查集的一眼题嘛。然后合并的时候搞忘了如果两个人已经在同一个团里要跳过，于是左偏树自交去了。\u0026lt;/p\u0026gt; \u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\n#define szof(p) ((p)?(p-\u0026gt;sz):0) struct node { int sz, vl, id; node *ls, rs; node() {} node(int v, int i) { vl = v; id = i; sz = 1; ls = rs = 0; } inline void update() { if (szof(ls) \u0026lt; szof(rs)) swap(ls, rs); } }; node merge(node p, node q) { if (!p) return q; else if (!","title":"BZOJ1455 罗马游戏"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 多老的省选题了。\u0026lt;/p\u0026gt; \u0026nbsp;\n就处理一下任意两个格子之间最少要经过几个1，如果小于等于t就更新答案。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\n#define mkword(x,y) (((x)\u0026lt;\u0026lt;16)|(y)) #define hiword(x) ((x)\u0026gt;\u0026gt;16) #define loword(x) ((x)\u0026amp;0x0000ffff)\nconst int maxn = 33; const int maxnd = 909; const int movx[4] = {0, 0, 1, -1}; const int movy[4] = {1, -1, 0, 0};\ntypedef pair \u0026lt;int, int\u0026gt; dpr;\ninline int sqr(int x) { return x * x; }\nint n, m, t, d[maxn][maxn], ans; int mp[maxn][maxn]; dpr hp[maxnd \u0026lt;\u0026lt; 2];\nvoid dijkstra(int i0, int j0) { int th(1); hp[0] = dpr(-mp[i0][j0], mkword(i0, j0)); memset(d, -1, sizeof(d)); while (th) { dpr g(hp[0]); pop_heap(hp, hp + th \u0026ndash;); int x(hiword(g. second)), y(loword(g. second)); if (d[x][y] \u0026gt; -1) continue; d[x][y] = - g. first; for (int mi = 0; mi \u0026lt; 4; ++ mi) { int i(x + movx[mi]), j(y + movy[mi]); if (i \u0026gt; 0 \u0026amp;\u0026amp; i \u0026lt;= n \u0026amp;\u0026amp; j \u0026gt; 0 \u0026amp;\u0026amp; j \u0026lt;= m \u0026amp;\u0026amp; d[i][j] == -1) { hp[th] = dpr(g. first - mp[i][j], mkword(i, j)); push_heap(hp, hp + ++ th); } } } for (int i = 1; i \u0026lt;= n; ++ i) for (int j = 1; j \u0026lt;= m; ++ j) if (d[i][j] \u0026lt;= t) { int ds(sqr(i - i0) + sqr(j - j0)); if (ds \u0026gt; ans) ans = ds; } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m, \u0026amp;amp;t); for (int i = 1; i \u0026amp;lt;= n; ++ i) { char g[maxn]; scanf(\u0026quot;%s\u0026quot;, g + 1); for (int j = 1; j \u0026amp;lt;= m; ++ j) mp[i][j] = g[j] - 48; } ans = 0; for (int i = 1; i \u0026amp;lt;= n; ++ i) for (int j = 1; j \u0026amp;lt;= m; ++ j) dijkstra(i, j); printf(\u0026quot;%.6lf\\n\u0026quot;, sqrt(ans)); } ","permalink":"/oi/i11rimport_030/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 多老的省选题了。\u0026lt;/p\u0026gt; \u0026nbsp;\n就处理一下任意两个格子之间最少要经过几个1，如果小于等于t就更新答案。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\n#define mkword(x,y) (((x)\u0026lt;\u0026lt;16)|(y)) #define hiword(x) ((x)\u0026gt;\u0026gt;16) #define loword(x) ((x)\u0026amp;0x0000ffff)\nconst int maxn = 33; const int maxnd = 909; const int movx[4] = {0, 0, 1, -1}; const int movy[4] = {1, -1, 0, 0};\ntypedef pair \u0026lt;int, int\u0026gt; dpr;\ninline int sqr(int x) { return x * x; }\nint n, m, t, d[maxn][maxn], ans; int mp[maxn][maxn]; dpr hp[maxnd \u0026lt;\u0026lt; 2];","title":"BZOJ1295 [SCOI2009]最长距离"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天晚上的效率比白天高啊。\u0026lt;/p\u0026gt; \u0026nbsp;\n树上莫队的另一道题。比糖果公园好写到哪里去了。\n\u0026nbsp;\n然后手写链表丑掉了导致调试半天+RE了一发。我还是太年轻了。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef struct node { int t; node *next; } edge; const int maxn = 50009; const int maxm = 100009; const int maxl = 17; node nlst[maxn], *np(nlst); struct chain { int sz; node *hd, *tl; chain() { hd = tl = 0; sz = 0; } inline void clear() { hd = tl = 0; sz = 0; } inline void push(int x) { np-\u0026gt; t = x; np-\u0026gt; next = 0; if (sz) { tl-\u0026gt; next = np; tl = np; } else { hd = np; tl = np; } ++ np; ++ sz; } inline void merge(chain a) { if (a. sz) { if (sz) { tl-\u0026gt; next = a. hd; tl = a. tl; } else { hd = a. hd; tl = a. tl; } sz += a. sz; } } }; struct query { int a, b, x, y, i; };\nint n, m, bsz, ans[maxm], cnt[maxn], fb[maxn], col[maxn], tb; int d[maxn], ath[maxn][maxl]; edge elst[maxn \u0026lt;\u0026lt; 1], *ep(elst), *head[maxn]; query q[maxm];\ninline bool operator \u0026lt;(const query\u0026amp; a, const query\u0026amp; b) { return (fb[a. a] \u0026lt; fb[b. a]) || (fb[a. a] == fb[b. a] \u0026amp;\u0026amp; fb[a. b] \u0026lt; fb[b. b]); }\ninline void addEdge(int u, int v) { ep-\u0026gt; t = v; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\nchain dfs(int p) { for (int i = 1; i \u0026lt; maxl; ++ i) ath[p][i] = ath[ath[p][i - 1]][i - 1]; chain w; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; t != ath[p][0]) { ath[e-\u0026gt; t][0] = p; d[e-\u0026gt; t] = d[p] + 1; chain g(dfs(e-\u0026gt; t)); w. merge(g); if (w. sz \u0026gt;= bsz) { ++ tb; for (node* it = w. hd; it; it = it-\u0026gt; next) fb[it-\u0026gt; t] = tb; w. clear(); } } w. push(p); return w; } void divide() { d[0] = 1; tb = 0; chain g(dfs(0)); for (node* it = g. hd; it; it = it-\u0026gt; next) fb[it-\u0026gt; t] = tb; }\nint LCA(int u, int v) { if (d[u] \u0026lt; d[v]) swap(u, v); for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (d[ath[u][i]] \u0026gt;= d[v]) u = ath[u][i]; if (u == v) return u; for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (ath[u][i] ^ ath[v][i]) { u = ath[u][i]; v = ath[v][i]; } return ath[u][0]; } inline void rmVertex(int p, int\u0026amp; ans) { if (p \u0026amp;\u0026amp; ! \u0026ndash; cnt[col[p]]) \u0026ndash; ans; } inline void insVertex(int p, int\u0026amp; ans) { if (p \u0026amp;\u0026amp; !(cnt[col[p]] ++)) ++ ans; } void moveVertex(int\u0026amp; u, int v, int g, int\u0026amp; ans) { int a(LCA(u, v)), t(LCA(a, g)); if (a == t) { int x(LCA(u, g)), y(LCA(v, g)); if (d[x] \u0026gt; d[y]) t = x; else t = y; if (LCA(t, u) == t) { for (int p = g; p ^ t; p = ath[p][0]) insVertex(p, ans); for (int p = u; p ^ t; p = ath[p][0]) rmVertex(p, ans); } else { for (int p = g; p ^ t; p = ath[p][0]) insVertex(p, ans); for (int p = u; p ^ a; p = ath[p][0]) rmVertex(p, ans); for (int p = ath[t][0]; p ^ a; p = ath[p][0]) rmVertex(p, ans); rmVertex(a, ans); } } else { for (int p = u; p ^ a; p = ath[p][0]) rmVertex(p, ans); for (int p = g; p ^ t; p = ath[p][0]) insVertex(p, ans); insVertex(t, ans); for (int p = ath[a][0]; p ^ t; p = ath[p][0]) insVertex(p, ans); } u = g; } void cptMo() { int u(1), v(1), cans(1); memset(cnt, 0, sizeof(cnt)); cnt[col[1]] = 1; sort(q, q + m); for (int i = 0; i \u0026lt; m; ++ i) { moveVertex(u, v, q[i]. a, cans); moveVertex(v, u, q[i]. b, cans); ans[q[i]. i] = cans; if ((q[i]. x || q[i]. y) \u0026amp;\u0026amp; q[i]. x != q[i]. y) ans[q[i]. i] -= (cnt[q[i]. x] \u0026amp;\u0026amp; cnt[q[i]. y]); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m); bsz = (int)pow(n, 0.5) + 1; for (int i = 1; i \u0026amp;lt;= n; ++ i) scanf(\u0026quot;%d\u0026quot;, col + i); memset(head, 0, sizeof(head)); for (int i = 0; i \u0026amp;lt; n; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v); addEdge(u, v); addEdge(v, u); } for (int i = 0; i \u0026amp;lt; m; ++ i) { scanf(\u0026quot;%d%d%d%d\u0026quot;, \u0026amp;amp;q[i]. a, \u0026amp;amp;q[i]. b, \u0026amp;amp;q[i]. x, \u0026amp;amp;q[i]. y); q[i]. i = i; } divide(); for (int i = 0; i \u0026amp;lt; m; ++ i) if (fb[q[i]. a] \u0026amp;gt; fb[q[i]. b]) swap(q[i]. a, q[i]. b); cptMo(); for (int i = 0; i \u0026amp;lt; m; ++ i) printf(\u0026quot;%d\\n\u0026quot;, ans[i]); } ","permalink":"/oi/i11rimport_031/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天晚上的效率比白天高啊。\u0026lt;/p\u0026gt; \u0026nbsp;\n树上莫队的另一道题。比糖果公园好写到哪里去了。\n\u0026nbsp;\n然后手写链表丑掉了导致调试半天+RE了一发。我还是太年轻了。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef struct node { int t; node *next; } edge; const int maxn = 50009; const int maxm = 100009; const int maxl = 17; node nlst[maxn], *np(nlst); struct chain { int sz; node *hd, *tl; chain() { hd = tl = 0; sz = 0; } inline void clear() { hd = tl = 0; sz = 0; } inline void push(int x) { np-\u0026gt; t = x; np-\u0026gt; next = 0; if (sz) { tl-\u0026gt; next = np; tl = np; } else { hd = np; tl = np; } ++ np; ++ sz; } inline void merge(chain a) { if (a.","title":"BZOJ3757 苹果树"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 最近很颓啊。\u0026lt;/p\u0026gt; \u0026nbsp;\n这题很久之前看过。当时以为是高消就没管。然后开坑之神idy做了之后仔细一想才知道不是。\n\u0026nbsp;\n这题的做法是dp。首先因为边数少所以不用floyd，直接bfs预处理出所有t[i][j]表狼在i，兔子在j的时候狼下一步去哪。然后有一个结论是每一步两个玩意的距离至少缩短1，所以状态是不会有环的，这也是为啥可以不用高消。然后坑点是不能直接开状态队列，因为那不是拓补序。要先把每个点的入度算出来再跑dp。结局是我的代码超长。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct edge { int t; edge *next; };\n#define mkword(x,y) (((x)\u0026lt;\u0026lt;16)|(y)) #define hiword(x) ((x)\u0026gt;\u0026gt;16) #define loword(x) ((x)\u0026amp;0x0000ffff)\nconst int maxn = 1009; const int maxst = 1000009; const int inf = 0x3f3f3f3f;\nint n, m, st, te, deg[maxn], d[maxn], t[maxn][maxn], ind[maxn][maxn]; edge elst[maxn \u0026lt;\u0026lt; 1], *ep(elst), *head[maxn]; double f[maxn][maxn], g[maxn][maxn], c[maxn], ans;\ninline void addEdge(int u, int v) { ep-\u0026gt; t = v; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\nvoid bfs(int p0) { static int q[maxn]; int hd(0), tl(1); memset(d, -1, sizeof(d)); d[q[0] = p0] = 0; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (d[e-\u0026gt; t] == -1) { d[e-\u0026gt; t] = d[p] + 1; q[tl ++] = e-\u0026gt; t; } } for (int p = 1; p \u0026lt;= n; ++ p) if (p == p0) { t[p][p] = p; } else { t[p][p0] = inf; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (d[p] == d[e-\u0026gt; t] + 1 \u0026amp;\u0026amp; e-\u0026gt; t \u0026lt; t[p][p0]) t[p][p0] = e-\u0026gt; t; } }\nvoid dp() { static int q[maxst]; static bool iq[maxn][maxn]; int hd(0), tl(1); memset(iq, 0, sizeof(iq)); memset(f, 0, sizeof(f)); memset(g, 0, sizeof(g)); memset(ind, 0, sizeof(ind)); ans = 0; q[0] = mkword(st, te); iq[st][te] = 1; while (hd \u0026lt; tl) { int i(hiword(q[hd])), j(loword(q[hd])), i0, j0; ++ hd; if (t[t[i][j]][j] != j) { for (edge* e = head[j]; e; e = e-\u0026gt; next) { i0 = t[t[i][j]][j]; j0 = e-\u0026gt; t; ++ ind[i0][j0]; int zn(mkword(i0, j0)); if (!iq[i0][j0]) { q[tl ++] = zn; iq[i0][j0] = 1; } } i0 = t[t[i][j]][j]; j0 = j; ++ ind[i0][j0]; int zn(mkword(i0, j0)); if (!iq[i0][j0]) { q[tl ++] = zn; iq[i0][j0] = 1; } } } memset(f, 0, sizeof(f)); memset(g, 0, sizeof(g)); g[st][te] = 1; ans = 0; q[0] = mkword(st, te); hd = 0; tl = 1; while (hd \u0026lt; tl) { int i(hiword(q[hd])), j(loword(q[hd])), i0, j0; ++ hd; if (i == j) { ans += f[i][j]; } else if (t[t[i][j]][j] == j) { ans += f[i][j] + g[i][j]; } else { for (edge* e = head[j]; e; e = e-\u0026gt; next) { i0 = t[t[i][j]][j]; j0 = e-\u0026gt; t; g[i0][j0] += g[i][j] * c[j]; f[i0][j0] += (f[i][j] + g[i][j]) * c[j]; int zn(mkword(i0, j0)); \u0026ndash; ind[i0][j0]; if (!ind[i0][j0]) q[tl ++] = zn; } i0 = t[t[i][j]][j]; j0 = j; g[i0][j0] += g[i][j] * c[j]; f[i0][j0] += (f[i][j] + g[i][j]) * c[j]; int zn(mkword(i0, j0)); \u0026ndash; ind[i0][j0]; if (!ind[i0][j0]) q[tl ++] = zn; } } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m, \u0026amp;amp;st, \u0026amp;amp;te); memset(d, 0x3f, sizeof(d)); memset(deg, 0, sizeof(deg)); for (int i = 0; i \u0026amp;lt; m; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v); addEdge(u, v); addEdge(v, u); ++ deg[u]; ++ deg[v]; } for (int i = 1; i \u0026amp;lt;= n; ++ i) { bfs(i); c[i] = 1.0 / (deg[i] + 1); } dp(); printf(\u0026quot;%.3lf\\n\u0026quot;, ans); } ","permalink":"/oi/i11rimport_032/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 最近很颓啊。\u0026lt;/p\u0026gt; \u0026nbsp;\n这题很久之前看过。当时以为是高消就没管。然后开坑之神idy做了之后仔细一想才知道不是。\n\u0026nbsp;\n这题的做法是dp。首先因为边数少所以不用floyd，直接bfs预处理出所有t[i][j]表狼在i，兔子在j的时候狼下一步去哪。然后有一个结论是每一步两个玩意的距离至少缩短1，所以状态是不会有环的，这也是为啥可以不用高消。然后坑点是不能直接开状态队列，因为那不是拓补序。要先把每个点的入度算出来再跑dp。结局是我的代码超长。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct edge { int t; edge *next; };\n#define mkword(x,y) (((x)\u0026lt;\u0026lt;16)|(y)) #define hiword(x) ((x)\u0026gt;\u0026gt;16) #define loword(x) ((x)\u0026amp;0x0000ffff)\nconst int maxn = 1009; const int maxst = 1000009; const int inf = 0x3f3f3f3f;\nint n, m, st, te, deg[maxn], d[maxn], t[maxn][maxn], ind[maxn][maxn]; edge elst[maxn \u0026lt;\u0026lt; 1], *ep(elst), *head[maxn]; double f[maxn][maxn], g[maxn][maxn], c[maxn], ans;","title":"BZOJ1415 [Noi2005]聪聪和可可"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 盯idy发现的题，之前想学然后放弃了，于是今天几乎写了一天。有种紧迫感啊。然后发现好多认识的人都是最近过的。\u0026lt;/p\u0026gt; \u0026nbsp;\n思路比较简单，树上莫队。因为要修改，所以要把块的大小变成n2/3，然后用1086的方法分块。好像也可以直接按dfs序分块。两个端点和时间为三个关键字跑莫队。复杂度可以感受一下反正我也不会证。\n\u0026nbsp;\n要注意千万要控制LCA的用量，必需只能是O(n)级别的。在爬树的时候必需O(1)。我就是在移动时间的时候不小心手贱每次用一遍LCA，然后去检查在移动端点花了好久的时间。\n\u0026nbsp;\n比较不开心的是发现mac没法改栈空间？有两个点始终暴栈。而且拿另一台电脑的openSUSE跑，结果发现它的cpu没有mac好，跑得还比mac快！我猜是操作系统在捣鬼。mac还是比较坑啊不开心。然后在bzoj上跑的时间几乎是本地的5倍也是比较厉害啊。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 100009; const int maxl = 19;\ntypedef struct node { int t; node *next; } edge; node nlst[maxn], *np(nlst); struct chain { int sz; node *hd, *tl; chain() { hd = tl = 0; sz = 0; } inline void clear() { hd = tl = 0; sz = 0; } inline void push(int x) { np-\u0026gt; t = x; np-\u0026gt; next = 0; if (sz) { tl-\u0026gt; next = np; tl = np; } else { hd = np; tl = np; } ++ np; ++ sz; } inline void merge(chain a) { sz += a. sz; if (a. sz) { if (hd) { tl-\u0026gt; next = a. hd; tl = a. tl; } else { hd = a. hd; tl = a. tl; } } } }; struct query { int a, b, i, pa, pb, pi; }; inline bool operator \u0026lt;(const query\u0026amp; a, const query\u0026amp; b) { return (a. pa \u0026lt; b. pa) || (a. pa == b. pa \u0026amp;\u0026amp; a. pb \u0026lt; b. pb) || (a. pa == b. pa \u0026amp;\u0026amp; a. pb == b. pb \u0026amp;\u0026amp; a. i \u0026lt; b. i); }\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif\nint n, m, q, tq, tc, ty[maxn], fb[maxn], tb, bsz; int d[maxn], ath[maxn][maxl]; bool oc[maxn]; dint w[maxn], v[maxn], ans[maxn], cnt[maxn]; edge elst[maxn \u0026lt;\u0026lt; 1], *ep(elst), *head[maxn]; query qr[maxn], cg[maxn];\ninline void addEdge(int u, int v) { ep-\u0026gt; t = v; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\nchain dfs(int p) { chain w; for (int i = 1; i \u0026lt; maxl; ++ i) ath[p][i] = ath[ath[p][i - 1]][i - 1]; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (!d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; ath[e-\u0026gt; t][0] = p; chain g(dfs(e-\u0026gt; t)); w. merge(g); if (w. sz \u0026gt;= bsz) { ++ tb; for (node* it = w. hd; it; it = it-\u0026gt; next) fb[it-\u0026gt; t] = tb; w. clear(); } } w. push(p); return w; } void divide() { memset(d, 0, sizeof(d)); tb = 0; d[1] = 1; chain g(dfs(1)); for (node* it = g. hd; it; it = it-\u0026gt; next) fb[it-\u0026gt; t] = tb; }\nint LCA(int u, int v) { if (d[u] \u0026lt; d[v]) swap(u, v); for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (d[ath[u][i]] \u0026gt;= d[v]) u = ath[u][i]; if (u == v) return u; for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (ath[u][i] ^ ath[v][i]) { u = ath[u][i]; v = ath[v][i]; } return ath[u][0]; } bool onChain(int u, int v, int p) { if (p == u || p == v) return 1; int a(LCA(u, v)); if (p == a) return 1; if (LCA(p, a) != a) return 0; else return LCA(p, u) == p || LCA(p, v) == p; }\ninline void rmVertex(int p, dint\u0026amp; ans) { if (oc[p]) { ans -= w[cnt[ty[p]]] * v[ty[p]]; \u0026ndash; cnt[ty[p]]; ans += w[cnt[ty[p]]] * v[ty[p]]; oc[p] = 0; } } inline void insVertex(int p, dint\u0026amp; ans) { if (!oc[p]) { ans -= w[cnt[ty[p]]] * v[ty[p]]; ++ cnt[ty[p]]; ans += w[cnt[ty[p]]] * v[ty[p]]; oc[p] = 1; } } void moveVertex(int\u0026amp; u, int v, int g, dint\u0026amp; ans) { int p(u), q(g), a(LCA(u, v)), t(LCA(a, g)); if (t == a) { int x(LCA(u, g)), y(LCA(v, g)); if (d[x] \u0026gt; d[y]) t = x; else t = y; if (LCA(u, t) == t) { for (; q ^ t; q = ath[q][0]) insVertex(q, ans); for (; p ^ t; p = ath[p][0]) rmVertex(p, ans); } else { for (; q ^ t; q = ath[q][0]) insVertex(q, ans); for (; p ^ a; p = ath[p][0]) rmVertex(p, ans); rmVertex(a, ans); for (q = ath[t][0]; q ^ a; q = ath[q][0]) rmVertex(q, ans); } } else { for (; p ^ a; p = ath[p][0]) rmVertex(p, ans); for (p = ath[a][0]; p ^ t; p = ath[p][0]) insVertex(p, ans); for (; q ^ t; q = ath[q][0]) insVertex(q, ans); insVertex(t, ans); } u = g; }\ninline void chgType(int p, int tn, dint\u0026amp; ans) { if (oc[p]) { ans -= :: v[ty[p]] * w[cnt[ty[p]]]; \u0026ndash; cnt[ty[p]]; ans += :: v[ty[p]] * w[cnt[ty[p]]]; ty[p] = tn; ans -= :: v[ty[p]] * w[cnt[ty[p]]]; ++ cnt[ty[p]]; ans += :: v[ty[p]] * w[cnt[ty[p]]]; } else { ty[p] = tn; } } void moveChgTime(int\u0026amp; t, int g, dint\u0026amp; ans) { for (; t + 1 \u0026lt; tc \u0026amp;\u0026amp; cg[t + 1]. i \u0026lt; g; ++ t) chgType(cg[t + 1]. a, cg[t + 1]. b, ans); for (; t \u0026gt; -1 \u0026amp;\u0026amp; cg[t]. i \u0026gt; g; \u0026ndash; t) chgType(cg[t]. a, cg[t]. pb, ans); }\nvoid cptMo() { memset(ans, -1, sizeof(ans)); sort(qr, qr + tq); int u(1), v(1), t(-1); dint cans(:: v[ty[1]] * w[1]); memset(cnt, 0, sizeof(cnt)); memset(oc, 0, sizeof(oc)); oc[1] = 1; cnt[ty[1]] = 1; for (int i = 0; i \u0026lt; tq; ++ i) { moveVertex(u, v, qr[i]. a, cans); moveVertex(v, u, qr[i]. b, cans); moveChgTime(t, qr[i]. i, cans); ans[qr[i]. i] = cans; } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m, \u0026amp;amp;q); bsz = (int)pow(n, 0.66) + 1; for (int i = 1; i \u0026amp;lt;= m; ++ i) scanf(lld, v + i); w[0] = 0; for (int i = 1; i \u0026amp;lt;= n; ++ i) { scanf(lld, w + i); w[i] += w[i - 1]; } memset(head, 0, sizeof(head)); for (int i = 1; i \u0026amp;lt; n; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v); addEdge(u, v); addEdge(v, u); } for (int i = 1; i \u0026amp;lt;= n; ++ i) scanf(\u0026quot;%d\u0026quot;, ty + i); divide(); tc = tq = 0; for (int i = 0; i \u0026amp;lt; q; ++ i) { int t, a, b; scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;amp;t, \u0026amp;amp;a, \u0026amp;amp;b); if (!t) { cg[tc]. i = i; cg[tc]. a = a; cg[tc]. b = b\u000f cg[tc]. pb = ty[a]; ty[a] = b; ++ tc; } else { if (a \u0026amp;gt; b) swap(a, b); qr[tq]. i = i; qr[tq]. pi = i / bsz; qr[tq]. a = a; qr[tq]. pa = fb[a]; qr[tq]. b = b; qr[tq]. pb = fb[b]; ++ tq; } } for (int i = tc - 1; i \u0026amp;gt;= 0; -- i) ty[cg[i]. a] = cg[i]. pb; cptMo(); for (int i = 0; i \u0026amp;lt; q; ++ i) if (ans[i] \u0026amp;gt; -1) printf(lld \u0026quot;\\n\u0026quot;, ans[i]); } ","permalink":"/oi/i11rimport_033/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 盯idy发现的题，之前想学然后放弃了，于是今天几乎写了一天。有种紧迫感啊。然后发现好多认识的人都是最近过的。\u0026lt;/p\u0026gt; \u0026nbsp;\n思路比较简单，树上莫队。因为要修改，所以要把块的大小变成n2/3，然后用1086的方法分块。好像也可以直接按dfs序分块。两个端点和时间为三个关键字跑莫队。复杂度可以感受一下反正我也不会证。\n\u0026nbsp;\n要注意千万要控制LCA的用量，必需只能是O(n)级别的。在爬树的时候必需O(1)。我就是在移动时间的时候不小心手贱每次用一遍LCA，然后去检查在移动端点花了好久的时间。\n\u0026nbsp;\n比较不开心的是发现mac没法改栈空间？有两个点始终暴栈。而且拿另一台电脑的openSUSE跑，结果发现它的cpu没有mac好，跑得还比mac快！我猜是操作系统在捣鬼。mac还是比较坑啊不开心。然后在bzoj上跑的时间几乎是本地的5倍也是比较厉害啊。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 100009; const int maxl = 19;\ntypedef struct node { int t; node *next; } edge; node nlst[maxn], *np(nlst); struct chain { int sz; node *hd, *tl; chain() { hd = tl = 0; sz = 0; } inline void clear() { hd = tl = 0; sz = 0; } inline void push(int x) { np-\u0026gt; t = x; np-\u0026gt; next = 0; if (sz) { tl-\u0026gt; next = np; tl = np; } else { hd = np; tl = np; } ++ np; ++ sz; } inline void merge(chain a) { sz += a.","title":"BZOJ3052 [wc2013]糖果公园"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 每日一水。不过这题还比较有意思。最初没看清题，觉得没法数总三角形个数。\u0026lt;/p\u0026gt; \u0026nbsp;\n同色=总-不同色。对于一个不同色，会有两个顶点的两边颜色不同。直接按照顶点统计一下不同色的边组数，然后减一下就完了。\n\u0026nbsp;\n说好的糖果呢。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 1009;\nint n, m, t, c, w[maxn];\nint main() { #ifndef ONLINE_JUDGE //freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m); memset(w, 0, sizeof(w)); t = n * (n - 1) * (n - 2) / 6; for (int i = 0; i \u0026amp;lt; m; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v); ++ w[u]; ++ w[v]; } c = 0; for (int i = 1; i \u0026amp;lt;= n; ++ i) c += w[i] * (n - w[i] - 1); c \u0026amp;gt;\u0026amp;gt;= 1; printf(\u0026quot;%d\\n\u0026quot;, t - c); } ","permalink":"/oi/i11rimport_034/","summary":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 每日一水。不过这题还比较有意思。最初没看清题，觉得没法数总三角形个数。\u0026lt;/p\u0026gt; \u0026nbsp;\n同色=总-不同色。对于一个不同色，会有两个顶点的两边颜色不同。直接按照顶点统计一下不同色的边组数，然后减一下就完了。\n\u0026nbsp;\n说好的糖果呢。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 1009;\nint n, m, t, c, w[maxn];\nint main() { #ifndef ONLINE_JUDGE //freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m); memset(w, 0, sizeof(w)); t = n * (n - 1) * (n - 2) / 6; for (int i = 0; i \u0026amp;lt; m; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v); ++ w[u]; ++ w[v]; } c = 0; for (int i = 1; i \u0026amp;lt;= n; ++ i) c += w[i] * (n - w[i] - 1); c \u0026amp;gt;\u0026amp;gt;= 1; printf(\u0026quot;%d\\n\u0026quot;, t - c); } ","title":"BZOJ2916 [Poi1997]Monochromatic Triangles"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 难得的水水的双倍题。\u0026lt;/p\u0026gt; \u0026nbsp;\n看上去是想考lct然后忘强制在线了么？那就直接预处理出形态然后链剖呗。当然我还没有达到mhy这种认为lct比tcd好写的水平。\n\u0026nbsp;\n中间还把修改写挂了一次，然后1180的询问数是2843的3倍又re了一次。晕。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct edge { int t; edge *next; }; struct seg { int l, r, s[2]; seg *ls, *rs; }; struct query { char o; int a, b, s; };\nconst int maxn = 30009; const int maxm = 300009;\nint n, m, r[maxn], d[maxn], v[maxn], u[maxn]; int fa[maxn], sz[maxn], tc, fc[maxn], ch[maxn], cl[maxn]; int qret[2]; seg slst[maxn \u0026lt;\u0026lt; 2], *sp(slst), *rt[maxn]; edge elst[maxn \u0026lt;\u0026lt; 1], *ep(elst), *head[maxn]; query q[maxm];\ninline void addEdge(int u, int v) { ep-\u0026gt; t = v; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\nint getRoot(int x) { register int p, q; for (p = r[x]; r[p] ^ p; p = r[p]); for (; x ^ p; q = r[x], r[x] = p, x = q); return x; }\nvoid divide(int p0) { static int q[maxn]; int hd(0), tl(1); q[0] = p0; d[p0] = 1; fa[p0] = 0; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; t != fa[p]) { d[e-\u0026gt; t] = d[p] + 1; fa[e-\u0026gt; t] = p; q[tl ++] = e-\u0026gt; t; } } for (int i = tl - 1; i \u0026gt;= 0; \u0026ndash; i) { int p(q[i]), z(-1); sz[p] = 1; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; t != fa[p]) { sz[p] += sz[e-\u0026gt; t]; if (z == -1 || sz[e-\u0026gt; t] \u0026gt; sz[z]) z = e-\u0026gt; t; } if (z == -1) cl[fc[p] = ++ tc] = 1; else ++ cl[fc[p] = fc[z]]; ch[fc[p]] = p; } }\n#define cpos(p) (d[p]-d[ch[fc[p]]]) #define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\ninline seg* sgtBuild(int l, int r) { seg* p(sp ++); p-\u0026gt; l = l; p-\u0026gt; r = r; p-\u0026gt; s[0] = r - l; p-\u0026gt; s[1] = 0; if (l + 1 \u0026lt; r) { p-\u0026gt; ls = sgtBuild(l, midp(p)); p-\u0026gt; rs = sgtBuild(midp(p), r); } return p; } inline void sgtChg(seg* p, int p0, int i, int v) { if (p-\u0026gt; l + 1 == p-\u0026gt; r) p-\u0026gt; s[i] = v; else { if (p0 \u0026lt; midp(p)) sgtChg(p-\u0026gt; ls, p0, i, v); else sgtChg(p-\u0026gt; rs, p0, i, v); p-\u0026gt; s[i] = p-\u0026gt; ls-\u0026gt; s[i] + p-\u0026gt; rs-\u0026gt; s[i]; } } inline void sgtQry(seg* p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) { qret[0] += p-\u0026gt; s[0]; qret[1] += p-\u0026gt; s[1]; } else if (r \u0026lt;= midp(p)) sgtQry(p-\u0026gt; ls, l, r); else if (l \u0026gt;= midp(p)) sgtQry(p-\u0026gt; rs, l, r); else { sgtQry(p-\u0026gt; ls, l, midp(p)); sgtQry(p-\u0026gt; rs, midp(p), r); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); for (int i = 1; i \u0026amp;lt;= n; ++ i) { r[i] = i; scanf(\u0026quot;%d\u0026quot;, v + i); u[i] = 1; } scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;m); for (int i = 0; i \u0026amp;lt; m; ++ i) { char opt[11]; scanf(\u0026quot;%s%d%d\u0026quot;, opt, \u0026amp;amp;q[i]. a, \u0026amp;amp;q[i]. b); q[i]. o = opt[0]; if (q[i]. o == 'b') { if (getRoot(q[i]. a) ^ getRoot(q[i]. b)) { q[i]. s = 1; r[getRoot(q[i]. a)] = getRoot(q[i]. b); addEdge(q[i]. a, q[i]. b); addEdge(q[i]. b, q[i]. a); } else { q[i]. s = 0; } } } memset(d, 0, sizeof(d)); tc = 0; for (int i = 1; i \u0026amp;lt;= n; ++ i) if (!d[i]) divide(i); for (int i = 1; i \u0026amp;lt;= tc; ++ i) rt[i] = sgtBuild(0, cl[i]); for (int i = 1; i \u0026amp;lt;= n; ++ i) sgtChg(rt[fc[i]], cpos(i), 1, v[i]); for (int i = 0; i \u0026amp;lt; m; ++ i) if (q[i]. o == 'b') { if (q[i]. s) { if (d[q[i]. a] \u0026amp;gt; d[q[i]. b]) swap(q[i]. a, q[i]. b); u[q[i]. b] = 0; sgtChg(rt[fc[q[i]. b]], cpos(q[i]. b), 0, 0); puts(\u0026quot;yes\u0026quot;); } else puts(\u0026quot;no\u0026quot;); } else if (q[i]. o == 'p') { sgtChg(rt[fc[q[i]. a]], cpos(q[i]. a), 1, q[i]. b); } else if (q[i]. o == 'e') { int u(q[i]. a), v(q[i]. b); if (getRoot(u) != getRoot(v)) { puts(\u0026quot;impossible\u0026quot;); } else { qret[0] = qret[1] = 0; while (fc[u] ^ fc[v]) { if (d[ch[fc[u]]] \u0026amp;gt; d[ch[fc[v]]]) { sgtQry(rt[fc[u]], 0, cpos(u) + 1); u = fa[ch[fc[u]]]; } else { sgtQry(rt[fc[v]], 0, cpos(v) + 1); v = fa[ch[fc[v]]]; } } if (d[u] \u0026amp;gt; d[v]) swap(u, v); sgtQry(rt[fc[u]], cpos(u), cpos(v) + 1); qret[0] -= :: u[u]; if (qret[0]) puts(\u0026quot;impossible\u0026quot;); else printf(\u0026quot;%d\\n\u0026quot;, qret[1]); } } } ","permalink":"/oi/i11rimport_035/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 难得的水水的双倍题。\u0026lt;/p\u0026gt; \u0026nbsp;\n看上去是想考lct然后忘强制在线了么？那就直接预处理出形态然后链剖呗。当然我还没有达到mhy这种认为lct比tcd好写的水平。\n\u0026nbsp;\n中间还把修改写挂了一次，然后1180的询问数是2843的3倍又re了一次。晕。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct edge { int t; edge *next; }; struct seg { int l, r, s[2]; seg *ls, *rs; }; struct query { char o; int a, b, s; };\nconst int maxn = 30009; const int maxm = 300009;\nint n, m, r[maxn], d[maxn], v[maxn], u[maxn]; int fa[maxn], sz[maxn], tc, fc[maxn], ch[maxn], cl[maxn]; int qret[2]; seg slst[maxn \u0026lt;\u0026lt; 2], *sp(slst), *rt[maxn]; edge elst[maxn \u0026lt;\u0026lt; 1], *ep(elst), *head[maxn]; query q[maxm];","title":"BZOJ1180 [CROATIAN2009]OTOCI \u0026amp; BZOJ2843 极地旅行社"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 简单的算几+网络流么。然后花了将近两天。最近总和算几过不去啊。\u0026lt;/p\u0026gt; \u0026nbsp;\n判断线段和圆是否有交还是比较简单的。反正不要让我用解析。先找下垂线，然后找下垂足，然后点乘一下搞定。然后错得不知道怎么死的。搞了很久。\n\u0026nbsp;\n然后二分网络流水水水水水水水水。\n\u0026nbsp;\n感觉mac好卡啊，gdb巨卡，bash也非常卡。难道我又没有搞对打开方式？\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ninline long double sqr(long double x) { return x * x; }\ntypedef struct geo_obj { double x, y; geo_obj() {} geo_obj(double x0, double y0) { x = x0, y = y0; } inline void read() { scanf(\u0026quot;%lf%lf\u0026quot;, \u0026amp;x, \u0026amp;y); } inline geo_obj rev() { return geo_obj(-y, x); } inline double len() { return sqrt(sqr(x) + sqr(y)); } inline double sqLen() { return sqr(x) + sqr(y); } } point, vect; inline geo_obj operator +(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return geo_obj(a. x + b. x, a. y + b. y); } inline geo_obj operator -(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return geo_obj(a. x - b. x, a. y - b. y); } inline geo_obj operator *(const geo_obj\u0026amp; a, const double\u0026amp; b) { return geo_obj(a. x * b, a. y * b); } inline double operator *(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return a. x * b. y - a. y * b. x; } inline double operator \u0026amp;(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return a. x * b. x + a. y * b. y; }\nstruct line { point p; vect v; line(point a, point b) { p = a; v = b - a; } }; struct circle { point o; double r; void read() { o. read(); scanf(\u0026quot;%lf\u0026quot;, \u0026amp;r); } };\ninline point lineCross(const line\u0026amp; a, const line\u0026amp; b) { vect w(b. p - a. p); double rat((w * a. v) / (a. v * b. v)); return b. p + b. v * rat; }\nbool segInCircle(point a, point b, circle c) { line l(a, b); vect u(l. v. rev()); line r(c. o, c. o + u); point p(lineCross(l, r)); double x = (p - c. o). sqLen(); double sr(sqr(c. r)); if (x \u0026gt;= sr) return 0; if (((a - p) \u0026amp; (b - p)) \u0026lt;= 0) return 1; if ((a - c. o). sqLen() \u0026lt;= sr) return 1; if ((b - c. o). sqLen() \u0026lt;= sr) return 1; return 0; }\nstruct edge { int t, c; edge *next, *rv; };\nstruct wiz { point p; int r, t; void read() { p. read(); scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;r, \u0026amp;t); } };\nconst int maxn = 409; const int maxe = 80409; const int inf = 0x3f3f3f3f;\nint n, m, c, t, ea[maxe], eb[maxe], ou[maxn]; int d[maxn], st, te; wiz w[maxn]; circle tree[maxn]; point spi[maxn]; edge elst[maxe], *ep, *head[maxn \u0026lt;\u0026lt; 1];\ninline edge* newEdge(int u, int v, int c) { ep-\u0026gt; t = v; ep-\u0026gt; c = c; ep-\u0026gt; next = head[u]; head[u] = ep; return ep ++; } inline void addEdge(int u, int v, int c) { edge *a = newEdge(u, v, c); edge *b = newEdge(v, u, 0); a-\u0026gt; rv = b; b-\u0026gt; rv = a; }\nbool bfsBuild() { static int q[maxn]; int hd(0), tl(1); memset(d, 0, sizeof(d)); d[q[0] = st] = 1; while (hd \u0026lt; tl \u0026amp;\u0026amp; !d[te]) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; c \u0026amp;\u0026amp; !d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; q[tl ++] = e-\u0026gt; t; } } return d[te]; } int dfsFind(int p, int c) { if (p == te) return c; int s(0); edge* e; for (e = head[p]; e \u0026amp;\u0026amp; c; e = e-\u0026gt; next) if (e-\u0026gt; c \u0026amp;\u0026amp; d[e-\u0026gt; t] == d[p] + 1) { int x(dfsFind(e-\u0026gt; t, min(e-\u0026gt; c, c))); s += x; c -= x; e-\u0026gt; c -= x; e-\u0026gt; rv-\u0026gt; c += x; } if (!e) d[p] = -1; return s; }\nint binSearch() { int l(0), r(5000000); st = n + m; te = st + 1; while (l \u0026lt; r) { int mid((l + r) \u0026gt;\u0026gt; 1); ep = elst; memset(head, 0, sizeof(head)); for (int i = 0; i \u0026lt; t; ++ i) addEdge(ea[i], eb[i] + n, 1); for (int i = 0; i \u0026lt; n; ++ i) addEdge(st, i, (mid + w[i]. t) / w[i]. t); for (int i = 0; i \u0026lt; m; ++ i) addEdge(i + n, te, 1); int s(0); while (bfsBuild()) s += dfsFind(st, inf); if (s == m) r = mid; else l = mid + 1; } return l; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m, \u0026amp;amp;c); for (int i = 0; i \u0026amp;lt; n; ++ i) w[i]. read(); for (int i = 0; i \u0026amp;lt; m; ++ i) spi[i]. read(); for (int i = 0; i \u0026amp;lt; c; ++ i) tree[i]. read(); memset(ou, 0, sizeof(ou)); t = 0; for (int i = 0; i \u0026amp;lt; n; ++ i) for (int j = 0; j \u0026amp;lt; m; ++ j) { bool f(1); double ds(sqr(w[i]. p. x - spi[j]. x) + sqr(w[i]. p. y - spi[j]. y)); if (ds \u0026amp;gt; sqr(w[i]. r)) f = 0; for (int k = 0; k \u0026amp;lt; c \u0026amp;amp;\u0026amp;amp; f; ++ k) if (segInCircle(w[i]. p, spi[j], tree[k])) f = 0; if (f) { ea[t] = i; eb[t] = j; ++ t; ou[j] = 1; } } bool hs(1); for (int i = 0; i \u0026amp;lt; m \u0026amp;amp;\u0026amp;amp; hs; ++ i) if (!ou[i]) hs = 0; if (!hs || !n) puts(\u0026quot;-1\u0026quot;); else printf(\u0026quot;%d\\n\u0026quot;, binSearch()); } ","permalink":"/oi/i11rimport_036/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 简单的算几+网络流么。然后花了将近两天。最近总和算几过不去啊。\u0026lt;/p\u0026gt; \u0026nbsp;\n判断线段和圆是否有交还是比较简单的。反正不要让我用解析。先找下垂线，然后找下垂足，然后点乘一下搞定。然后错得不知道怎么死的。搞了很久。\n\u0026nbsp;\n然后二分网络流水水水水水水水水。\n\u0026nbsp;\n感觉mac好卡啊，gdb巨卡，bash也非常卡。难道我又没有搞对打开方式？\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ninline long double sqr(long double x) { return x * x; }\ntypedef struct geo_obj { double x, y; geo_obj() {} geo_obj(double x0, double y0) { x = x0, y = y0; } inline void read() { scanf(\u0026quot;%lf%lf\u0026quot;, \u0026amp;x, \u0026amp;y); } inline geo_obj rev() { return geo_obj(-y, x); } inline double len() { return sqrt(sqr(x) + sqr(y)); } inline double sqLen() { return sqr(x) + sqr(y); } } point, vect; inline geo_obj operator +(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return geo_obj(a.","title":"BZOJ1822 [JSOI2010]Frozen Nova 冷冻波"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 去找水题于是找到这么一道恶心的代码题。其实应该可以用函数指针来优化一下代码量，不过懒得了。虽然复制粘贴导致调试了老半天。\u0026lt;/p\u0026gt; \u0026nbsp;\n水水的链剖+线段树。然后tag打一打就好了。\n\u0026nbsp;\n最近是装备了高超的开坑技巧啊。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct seg { int l, r, s, a, b, rv; seg *ls, *rs; inline void update() { if (l + 1 \u0026lt; r) { s = ls-\u0026gt; s + rs-\u0026gt; s; a = min(ls-\u0026gt; a, rs-\u0026gt; a); b = max(ls-\u0026gt; b, rs-\u0026gt; b); if (rv) { s = -s; swap(a, b); a = -a; b = -b; } } else a = b = s; } inline void chgTag() { s = -s; swap(a, b); a = -a; b = -b; rv ^= 1; } inline void downTag() { if (rv) { rv = 0; if (l + 1 \u0026lt; r) { ls-\u0026gt; chgTag(); rs-\u0026gt; chgTag(); } } } }; struct edge { int t, v; edge *next; };\nconst int maxn = 20009;\nint n, m, fa[maxn], d[maxn], vl[maxn], ea[maxn], eb[maxn]; int sz[maxn], tc, fc[maxn], ch[maxn], cl[maxn]; edge elst[maxn \u0026lt;\u0026lt; 1], *ep(elst), *head[maxn]; seg slst[maxn \u0026lt;\u0026lt; 2], *sp(slst), *rt[maxn];\ninline void addEdge(int u, int v, int w) { ep-\u0026gt; t = v; ep-\u0026gt; v = w; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\n#define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1) inline seg* sgtBuild(int l, int r) { seg* p(sp ++); p-\u0026gt; l = l; p-\u0026gt; r = r; if (l + 1 \u0026lt; r) { p-\u0026gt; ls = sgtBuild(l, midp(p)); p-\u0026gt; rs = sgtBuild(midp(p), r); } return p; } inline void sgtChg(seg* p, int p0, int v0) { if (p-\u0026gt; l + 1 == p-\u0026gt; r) { p-\u0026gt; rv = 0; p-\u0026gt; s = v0; } else { p-\u0026gt; downTag(); if (p0 \u0026lt; midp(p)) sgtChg(p-\u0026gt; ls, p0, v0); else sgtChg(p-\u0026gt; rs, p0, v0); } p-\u0026gt; update(); } inline int sgtSum(seg* p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) return p-\u0026gt; s; else { p-\u0026gt; downTag(); if (r \u0026lt;= midp(p)) return sgtSum(p-\u0026gt; ls, l, r); else if (l \u0026gt;= midp(p)) return sgtSum(p-\u0026gt; rs, l, r); else return sgtSum(p-\u0026gt; ls, l, midp(p)) + sgtSum(p-\u0026gt; rs, midp(p), r); } } inline int sgtMin(seg* p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) return p-\u0026gt; a; else { p-\u0026gt; downTag(); if (r \u0026lt;= midp(p)) return sgtMin(p-\u0026gt; ls, l, r); else if (l \u0026gt;= midp(p)) return sgtMin(p-\u0026gt; rs, l, r); else return min(sgtMin(p-\u0026gt; ls, l, midp(p)), sgtMin(p-\u0026gt; rs, midp(p), r)); } } inline int sgtMax(seg* p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) return p-\u0026gt; b; else { p-\u0026gt; downTag(); if (r \u0026lt;= midp(p)) return sgtMax(p-\u0026gt; ls, l, r); else if (l \u0026gt;= midp(p)) return sgtMax(p-\u0026gt; rs, l, r); else return max(sgtMax(p-\u0026gt; ls, l, midp(p)), sgtMax(p-\u0026gt; rs, midp(p), r)); } } inline void sgtRev(seg* p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) p-\u0026gt; chgTag(); else { p-\u0026gt; downTag(); if (r \u0026lt;= midp(p)) sgtRev(p-\u0026gt; ls, l, r); else if (l \u0026gt;= midp(p)) sgtRev(p-\u0026gt; rs, l, r); else sgtRev(p-\u0026gt; ls, l, midp(p)), sgtRev(p-\u0026gt; rs, midp(p), r); } p-\u0026gt; update(); }\n#define cpos(p) (d[p]-d[ch[fc[p]]])\nvoid divide() { static int q[maxn]; int hd(0), tl(1); q[0] = 0; memset(d, 0, sizeof(d)); d[0] = 1; fa[0] = 0; vl[0] = 0; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (!d[e-\u0026gt; t]) { fa[e-\u0026gt; t] = p; d[e-\u0026gt; t] = d[p] + 1; q[tl ++] = e-\u0026gt; t; vl[e-\u0026gt; t] = e-\u0026gt; v; } } tc = 0; for (int ti = tl - 1; ti \u0026gt;= 0; \u0026ndash; ti) { int p(q[ti]), z(-1); sz[p] = 1; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; t != fa[p]) { sz[p] += sz[e-\u0026gt; t]; if (z == -1 || sz[e-\u0026gt; t] \u0026gt; sz[z]) z = e-\u0026gt; t; } if (z == -1) cl[fc[p] = ++ tc] = 1; else ++ cl[fc[p] = fc[z]]; ch[fc[p]] = p; } for (int i = 1; i \u0026lt;= tc; ++ i) rt[i] = sgtBuild(0, cl[i]); for (int i = 0; i \u0026lt; n; ++ i) sgtChg(rt[fc[i]], cpos(i), vl[i]); }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); memset(head, 0, sizeof(d)); for (int i = 1; i \u0026amp;lt; n; ++ i) { int w; scanf(\u0026quot;%d%d%d\u0026quot;, ea + i, eb + i, \u0026amp;amp;w); addEdge(ea[i], eb[i], w); addEdge(eb[i], ea[i], w); } divide(); scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;m); while (m --) { char opt[7]; int u, v, w; scanf(\u0026quot;%s\u0026quot;, opt); if (opt[0] == 'C') { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;w); if (d[ea[u]] \u0026amp;gt; d[eb[u]]) swap(ea[u], eb[u]); v = eb[u]; sgtChg(rt[fc[v]], cpos(v), w); } else if (opt[0] == 'N') { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v); while (fc[u] ^ fc[v]) if (d[ch[fc[u]]] \u0026amp;gt; d[ch[fc[v]]]) { sgtRev(rt[fc[u]], 0, cpos(u) + 1); u = fa[ch[fc[u]]]; } else { sgtRev(rt[fc[v]], 0, cpos(v) + 1); v = fa[ch[fc[v]]]; } if (d[u] \u0026amp;gt; d[v]) swap(u, v); if (u ^ v) sgtRev(rt[fc[u]], cpos(u) + 1, cpos(v) + 1); } else if (opt[0] == 'S') { int s(0); scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v); while (fc[u] ^ fc[v]) if (d[ch[fc[u]]] \u0026amp;gt; d[ch[fc[v]]]) { s += sgtSum(rt[fc[u]], 0, cpos(u) + 1); u = fa[ch[fc[u]]]; } else { s += sgtSum(rt[fc[v]], 0, cpos(v) + 1); v = fa[ch[fc[v]]]; } if (d[u] \u0026amp;gt; d[v]) swap(u, v); if (u ^ v) s += sgtSum(rt[fc[u]], cpos(u) + 1, cpos(v) + 1); printf(\u0026quot;%d\\n\u0026quot;, s); } else if (opt[1] == 'I') { int s(0x3f3f3f3f); scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v); while (fc[u] ^ fc[v]) if (d[ch[fc[u]]] \u0026amp;gt; d[ch[fc[v]]]) { s = min(s, sgtMin(rt[fc[u]], 0, cpos(u) + 1)); u = fa[ch[fc[u]]]; } else { s = min(s, sgtMin(rt[fc[v]], 0, cpos(v) + 1)); v = fa[ch[fc[v]]]; } if (d[u] \u0026amp;gt; d[v]) swap(u, v); if (u ^ v) s = min(s, sgtMin(rt[fc[u]], cpos(u) + 1, cpos(v) + 1)); printf(\u0026quot;%d\\n\u0026quot;, s); } else if (opt[1] == 'A') { int s(-0x3f3f3f3f); scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v); while (fc[u] ^ fc[v]) if (d[ch[fc[u]]] \u0026amp;gt; d[ch[fc[v]]]) { s = max(s, sgtMax(rt[fc[u]], 0, cpos(u) + 1)); u = fa[ch[fc[u]]]; } else { s = max(s, sgtMax(rt[fc[v]], 0, cpos(v) + 1)); v = fa[ch[fc[v]]]; } if (d[u] \u0026amp;gt; d[v]) swap(u, v); if (u ^ v) s = max(s, sgtMax(rt[fc[u]], cpos(u) + 1, cpos(v) + 1)); printf(\u0026quot;%d\\n\u0026quot;, s); } } } ","permalink":"/oi/i11rimport_037/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 去找水题于是找到这么一道恶心的代码题。其实应该可以用函数指针来优化一下代码量，不过懒得了。虽然复制粘贴导致调试了老半天。\u0026lt;/p\u0026gt; \u0026nbsp;\n水水的链剖+线段树。然后tag打一打就好了。\n\u0026nbsp;\n最近是装备了高超的开坑技巧啊。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct seg { int l, r, s, a, b, rv; seg *ls, *rs; inline void update() { if (l + 1 \u0026lt; r) { s = ls-\u0026gt; s + rs-\u0026gt; s; a = min(ls-\u0026gt; a, rs-\u0026gt; a); b = max(ls-\u0026gt; b, rs-\u0026gt; b); if (rv) { s = -s; swap(a, b); a = -a; b = -b; } } else a = b = s; } inline void chgTag() { s = -s; swap(a, b); a = -a; b = -b; rv ^= 1; } inline void downTag() { if (rv) { rv = 0; if (l + 1 \u0026lt; r) { ls-\u0026gt; chgTag(); rs-\u0026gt; chgTag(); } } } }; struct edge { int t, v; edge *next; };","title":"BZOJ2157 旅游"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 比较基础的算几。当是hwd在wc的时候讲的东西拿来练练吧。（都过去多久了）\u0026lt;/p\u0026gt; \u0026nbsp;\n算几的板比较长。然后记得还有道半平面交精度题至今没过！？什么效率。\n\u0026nbsp;\n这题的思路比较简单。找出所有的关键x，分段。每段内都是一堆边不相交的梯形，那么答案=∑(▵x*∑中位线并的长度)。总时间复杂度到了O(n3)。不过n才100显然可过。至于n等于1000的题暂时不会啊。我太弱了。\n\u0026nbsp;\n然后这题也有神奇的精度误差，答案要-1e-7才能过。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst double eps = 1e-7; inline int sgn(double x) { return (x \u0026gt; eps) - (x \u0026lt; -eps); } inline double sqr(double x) { return x * x; }\ntypedef struct geo_obj { double x, y; inline geo_obj() {} inline geo_obj(double x0, double y0) { x = x0, y = y0; } inline void read() { scanf(\u0026quot;%lf%lf\u0026quot;, \u0026amp;x, \u0026amp;y); } } point, vect; inline geo_obj operator +(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return geo_obj(a. x + b. x, a. y + b. y); } inline geo_obj operator -(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return geo_obj(a. x - b. x, a. y - b. y); } inline geo_obj operator *(const geo_obj\u0026amp; a, const double\u0026amp; b) { return geo_obj(a. x * b, a. y * b); } inline double operator *(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return a. x * b. y - a. y * b. x; } inline double operator \u0026amp;(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return a. x * b. x + a. y * b. y; } inline bool operator \u0026lt;(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return (a. x \u0026lt; b. x) || (a. x == b. x \u0026amp;\u0026amp; a. y \u0026lt; b. y); }\nstruct line { point p; vect v; inline line() {} inline line(const point\u0026amp; a, point\u0026amp; b) { p = a, v = b - a; } }; struct triangle { point a[3]; inline triangle() {} inline void read() { for (int i = 0; i \u0026lt; 3; ++ i) a[i]. read(); if (sgn((a[1] - a[0]) * (a[2] - a[0])) \u0026lt; 0) swap(a[1], a[2]); } };\ntypedef pair \u0026lt;double, int\u0026gt; ypr;\nconst int maxn = 109; const int maxp = 90009; const int ara[3] = {0, 1, 2}, arb[3] = {1, 2, 0};\nint n, t, c; triangle a[maxn]; double x[maxp], ans(0); ypr y[maxp];\npoint lineCross(line a, line b) { vect w(b. p - a. p); double rat((w * a. v) / (a. v * b. v)); return b. p + b. v * rat; }\nvoid addX(point a, point b, point c, point d) { if (!sgn((b - a) * (d - c))) return; point e(lineCross(line(a, b), line(c, d))); if (((a - e) \u0026amp; (b - e)) \u0026gt; 0 || ((c - e) \u0026amp; (d - e)) \u0026gt; 0) return; x[t ++] = e. x; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); for (int i = 0; i \u0026amp;lt; n; ++ i) a[i]. read(); t = 0; for (int i = 0; i \u0026amp;lt; n; ++ i) { for (int j = 0; j \u0026amp;lt; 3; ++ j) x[t ++] = a[i]. a[j]. x; for (int j = 0; j \u0026amp;lt; i; ++ j) for (int k = 0; k \u0026amp;lt; 3; ++ k) for (int l = 0; l \u0026amp;lt; 3; ++ l) addX(a[i]. a[ara[k]], a[i]. a[arb[k]], a[j]. a[ara[l]], a[j]. a[arb[l]]); } sort(x, x + t); t = unique(x, x + t) - x; for (int i = 0; i \u0026amp;lt; t - 1; ++ i) { double xm((x[i] + x[i + 1]) / 2.0); c = 0; for (int j = 0; j \u0026amp;lt; n; ++ j) for (int k = 0; k \u0026amp;lt; 3; ++ k) { point u(a[j]. a[ara[k]]), v(a[j]. a[arb[k]]); if ((xm - u. x) * (xm - v. x) \u0026amp;lt; 0) { point w(u + (v - u) * ((xm - u. x) / (v. x - u. x))); y[c ++] = ypr(w. y, (u. x \u0026amp;lt; v. x) ? 1 : -1); } } sort(y, y + c); int cnt(0); double len(0); for (int i = 0; i \u0026amp;lt; c - 1; ++ i) { cnt += y[i]. second; if (cnt) len += (y[i + 1]. first - y[i]. first); } ans += len * (x[i + 1] - x[i]); } printf(\u0026quot;%.2lf\\n\u0026quot;, ans - eps); } ","permalink":"/oi/i11rimport_038/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 比较基础的算几。当是hwd在wc的时候讲的东西拿来练练吧。（都过去多久了）\u0026lt;/p\u0026gt; \u0026nbsp;\n算几的板比较长。然后记得还有道半平面交精度题至今没过！？什么效率。\n\u0026nbsp;\n这题的思路比较简单。找出所有的关键x，分段。每段内都是一堆边不相交的梯形，那么答案=∑(▵x*∑中位线并的长度)。总时间复杂度到了O(n3)。不过n才100显然可过。至于n等于1000的题暂时不会啊。我太弱了。\n\u0026nbsp;\n然后这题也有神奇的精度误差，答案要-1e-7才能过。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst double eps = 1e-7; inline int sgn(double x) { return (x \u0026gt; eps) - (x \u0026lt; -eps); } inline double sqr(double x) { return x * x; }\ntypedef struct geo_obj { double x, y; inline geo_obj() {} inline geo_obj(double x0, double y0) { x = x0, y = y0; } inline void read() { scanf(\u0026quot;%lf%lf\u0026quot;, \u0026amp;x, \u0026amp;y); } } point, vect; inline geo_obj operator +(const geo_obj\u0026amp; a, const geo_obj\u0026amp; b) { return geo_obj(a.","title":"BZOJ1845 [Cqoi2005] 三角形面积并"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 久了不写manacher又手生了只好抄红书了。\u0026lt;/p\u0026gt; \u0026nbsp;\n后面的过程就是对每个位置i找一个最远的位置j满足j在i为中心的回文子串的一半以内且j最小。然后直接拿个set就能搞定。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; #include \u0026lt;set\u0026gt; using namespace std;\nconst int maxn = 500009;\nchar a[maxn]; int d[maxn \u0026lt;\u0026lt; 1], n;\nvoid manacher() { d[0] = 1; for (int i = 1, j = 0; i \u0026lt; (n \u0026lt;\u0026lt; 1) - 1; ++ i) { int p(i \u0026gt;\u0026gt; 1), q(i - p), r(((j + 1) \u0026gt;\u0026gt; 1) + d[j] - 1); if (r \u0026lt; q) d[i] = 0; else d[i] = min(r - q + 1, d[(j \u0026lt;\u0026lt; 1) - i]); while (p - d[i] \u0026gt;= 0 \u0026amp;\u0026amp; q + d[i] \u0026lt; n \u0026amp;\u0026amp; a[p - d[i]] == a[q + d[i]]) ++ d[i]; if (q + d[i] - 1 \u0026gt; r) j = i; } }\nint pr[maxn]; inline int getr(int x) { return x+d[((x)\u0026lt;\u0026lt;1)+1]; } inline bool cmpRight(const int\u0026amp; a, const int\u0026amp; b) { return getr(a) \u0026lt; getr(b); }\nset \u0026lt;int\u0026gt; rg; int sov() { int ans(0); for (int i = 0; i \u0026lt; n - 1; ++ i) pr[i] = i; sort(pr, pr + n - 1, cmpRight); for (int i = 0, k = 0; k \u0026lt; n; ++ k) { for (; i \u0026lt; n - 1 \u0026amp;\u0026amp; getr(pr[i]) \u0026lt; k; ++ i) rg. erase(pr[i]); set \u0026lt;int\u0026gt; :: iterator it = rg. lower_bound(k - (d[(k \u0026lt;\u0026lt; 1) + 1] \u0026gt;\u0026gt; 1)); if (it != rg. end()) ans = max(ans, k - *it); rg. insert(k); } return ans * 4; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%s\u0026quot;, \u0026amp;amp;n, a); manacher(); printf(\u0026quot;%d\\n\u0026quot;, sov()); } ","permalink":"/oi/i11rimport_039/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 久了不写manacher又手生了只好抄红书了。\u0026lt;/p\u0026gt; \u0026nbsp;\n后面的过程就是对每个位置i找一个最远的位置j满足j在i为中心的回文子串的一半以内且j最小。然后直接拿个set就能搞定。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; #include \u0026lt;set\u0026gt; using namespace std;\nconst int maxn = 500009;\nchar a[maxn]; int d[maxn \u0026lt;\u0026lt; 1], n;\nvoid manacher() { d[0] = 1; for (int i = 1, j = 0; i \u0026lt; (n \u0026lt;\u0026lt; 1) - 1; ++ i) { int p(i \u0026gt;\u0026gt; 1), q(i - p), r(((j + 1) \u0026gt;\u0026gt; 1) + d[j] - 1); if (r \u0026lt; q) d[i] = 0; else d[i] = min(r - q + 1, d[(j \u0026lt;\u0026lt; 1) - i]); while (p - d[i] \u0026gt;= 0 \u0026amp;\u0026amp; q + d[i] \u0026lt; n \u0026amp;\u0026amp; a[p - d[i]] == a[q + d[i]]) ++ d[i]; if (q + d[i] - 1 \u0026gt; r) j = i; } }","title":"BZOJ2342 [Shoi2011]双倍回文"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 多少年前的坑了。\u0026lt;/p\u0026gt; \u0026nbsp;\n用mac写的第一篇题解呢。\n\u0026nbsp;\n环套树DP。先把树上的情况处理了，然后枚举取不取环上的第一个。\n\u0026nbsp;\n要注意会有重边的情况，比较恶心。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cctype\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int buf_len = 4000; char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; }\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif\nstruct edge { int t; edge *next; };\nconst int maxn = 1000009;\nint n, v[maxn]; int stc[maxn], tst, lpp[maxn], tlp; int vis[maxn], onl[maxn]; dint f[maxn], g[maxn]; edge elst[maxn \u0026lt;\u0026lt; 1], *ep(elst), *head[maxn];\ninline void addEdge(int u, int v) { ep-\u0026gt; t = v; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\nvoid dfsLoop(int p, int fr) { vis[p] = fr + 1; stc[tst ++] = p; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; t != fr) { if (!vis[e-\u0026gt; t]) { dfsLoop(e-\u0026gt; t, p); } else if (vis[e-\u0026gt; t] \u0026amp;\u0026amp; vis[e-\u0026gt; t] != p + 1) { if (onl[p]) continue; tlp = 0; do { \u0026ndash; tst; lpp[tlp ++] = stc[tst]; onl[stc[tst]] = 1; } while (stc[tst] != e-\u0026gt; t); } } if (stc[tst - 1] == p) \u0026ndash; tst; }\nvoid dfsDP(int p, int fr) { f[p] = 0; g[p] = v[p]; vis[p] = -1; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; t != fr \u0026amp;\u0026amp; !onl[e-\u0026gt; t] \u0026amp;\u0026amp; vis[e-\u0026gt; t] != -1) { dfsDP(e-\u0026gt; t, p); f[p] += max(f[e-\u0026gt; t], g[e-\u0026gt; t]); g[p] += f[e-\u0026gt; t]; } }\ndint calcCC(int p) { tst = 0; tlp = 0; dfsLoop(p, 0); if (!tlp) lpp[tlp ++] = p; for (int i = 0; i \u0026lt; tlp; ++ i) dfsDP(lpp[i], 0); dint s0(0), s1(0); if (tlp \u0026lt; 3) { for (int i = 0; i \u0026lt; tlp; ++ i) s0 = max(s0, g[lpp[i]] - f[lpp[i]]); for (int i = 0; i \u0026lt; tlp; ++ i) s0 += f[lpp[i]]; } else { dint f0(g[lpp[0]] + f[lpp[1]] + f[lpp[tlp - 1]]), g0(f0); for (int i = 2; i \u0026lt; tlp - 1; ++ i) { dint f1(f[lpp[i]] + max(f0, g0)), g1(g[lpp[i]] + f0); f0 = f1; g0 = g1; } s0 = max(f0, g0); } if (tlp \u0026lt; 3) { s1 = s0; } else { dint f0(f[lpp[0]]), g0(f0); for (int i = 1; i \u0026lt; tlp; ++ i) { dint f1(f[lpp[i]] + max(f0, g0)), g1(g[lpp[i]] + f0); f0 = f1; g0 = g1; } s1 = max(g0, f0); } return max(s0, s1); }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nreadInt(n); memset(head, 0, sizeof(head)); for (int i = 1; i \u0026amp;lt;= n; ++ i) { int x; readInt(v[i]); readInt(x); addEdge(i, x); addEdge(x, i); } memset(vis, 0, sizeof(vis)); memset(onl, 0, sizeof(onl)); dint ans(0); for (int i = 1; i \u0026amp;lt;= n; ++ i) if (!vis[i]) ans += calcCC(i); printf(lld \u0026quot;\\n\u0026quot;, ans); } ","permalink":"/oi/i11rimport_040/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 多少年前的坑了。\u0026lt;/p\u0026gt; \u0026nbsp;\n用mac写的第一篇题解呢。\n\u0026nbsp;\n环套树DP。先把树上的情况处理了，然后枚举取不取环上的第一个。\n\u0026nbsp;\n要注意会有重边的情况，比较恶心。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cctype\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int buf_len = 4000; char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, sizeof(buf), stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; }","title":"BZOJ1040 [ZJOI2008]骑士"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 数据水。填坑。语文阅读题，看到都不想做。\u0026lt;/p\u0026gt; \u0026nbsp;\n就一树形dp。f[i][j][k]表示第i个物品，上供j个，花k块钱的代价。背包转移是O(m2)的，因为是一棵树所以转移次数是O(n)的，但是还要考虑j最大为100。一个技巧是合并完所有的东西之后再考虑把上供的烧掉。虽然这样的复杂度还是有点高。\n\u0026nbsp;\n毕竟我还是太弱啊，居然又花了一个上午。（虽然睡到十点）\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct edge { int t, v; edge *next; };\nconst int maxm = 2009; const int maxn = 53; const int maxa = 103;\nint n, m, f[maxn][maxa][maxm], ans[maxm], vl[maxn], vmax[maxn]; bool lf[maxn], ir[maxn]; edge elst[maxn], *ep(elst), *head[maxn];\ninline void addEdge(int u, int v, int w) { ep-\u0026gt; t = v; ep-\u0026gt; v = w; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\ninline void upMax(int\u0026amp; a, int b) { if (a \u0026lt; b) a = b; }\nvoid mergeFunc(int* s, int* a, int* b) { static int r[maxm]; memset(r, -1, sizeof(r)); for (int i = 0; i \u0026lt;= m; ++ i) if (a[i] \u0026gt; -1) for (int j = 0; j + i \u0026lt;= m; ++ j) if (b[j] \u0026gt; -1) upMax(r[i + j], a[i] + b[j]); for (int i = 0; i \u0026lt;= m; ++ i) s[i] = r[i]; }\nvoid dfsVMax(int p) { if (lf[p]) return; vmax[p] = 100; for (edge* e = head[p]; e; e = e-\u0026gt; next) { dfsVMax(e-\u0026gt; t); vmax[p] = min(vmax[p], vmax[e-\u0026gt; t] / e-\u0026gt; v); } }\nvoid dfsDP(int p) { if (lf[p]) return; for (int i = 0; i \u0026lt;= vmax[p]; ++ i) f[p][i][0] = 0; for (edge* e = head[p]; e; e = e-\u0026gt; next) { dfsDP(e-\u0026gt; t); for (int j = 0; j \u0026lt;= vmax[p]; ++ j) mergeFunc(f[p][j], f[p][j], f[e-\u0026gt; t][j * e-\u0026gt; v]); } for (int j = 1; j \u0026lt;= vmax[p]; ++ j) for (int k = 0; k \u0026lt; j; ++ k) for (int l = 0; l \u0026lt;= m; ++ l) if (f[p][j][l] \u0026gt; -1) upMax(f[p][k][l], f[p][j][l] + vl[p] * (j - k)); }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m); memset(head, 0, sizeof(head)); memset(f, -1, sizeof(f)); memset(ir, 1, sizeof(ir)); for (int i = 1; i \u0026amp;lt;= n; ++ i) { char ty[3]; scanf(\u0026quot;%d%s\u0026quot;, vl + i, ty); lf[i] = (ty[0] == 'B'); if (lf[i]) { int b, c; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;c, \u0026amp;amp;b); for (int j = 0; j \u0026amp;lt;= b \u0026amp;amp;\u0026amp;amp; c * j \u0026amp;lt;= m; ++ j) for (int k = 0; k \u0026amp;lt;= j; ++ k) upMax(f[i][k][j * c], (j - k) * vl[i]); vmax[i] = b; } else { int t, v, w; scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;t); for (int j = 0; j \u0026amp;lt; t; ++ j) { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;v, \u0026amp;amp;w); addEdge(i, v, w); ir[v] = 0; } } } for (int i = 1; i \u0026amp;lt;= n; ++ i) if (ir[i]) dfsVMax(i); memset(ans, -1, sizeof(ans)); ans[0] = 0; for (int i = 1; i \u0026amp;lt;= n; ++ i) if (ir[i]) { dfsDP(i); mergeFunc(ans, ans, f[i][0]); } int s(0); for (int i = 0; i \u0026amp;lt;= m; ++ i) upMax(s, ans[i]); printf(\u0026quot;%d\\n\u0026quot;, s); } \u0026nbsp;\n\u0026nbsp;\n","permalink":"/oi/i11rimport_041/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 数据水。填坑。语文阅读题，看到都不想做。\u0026lt;/p\u0026gt; \u0026nbsp;\n就一树形dp。f[i][j][k]表示第i个物品，上供j个，花k块钱的代价。背包转移是O(m2)的，因为是一棵树所以转移次数是O(n)的，但是还要考虑j最大为100。一个技巧是合并完所有的东西之后再考虑把上供的烧掉。虽然这样的复杂度还是有点高。\n\u0026nbsp;\n毕竟我还是太弱啊，居然又花了一个上午。（虽然睡到十点）\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct edge { int t, v; edge *next; };\nconst int maxm = 2009; const int maxn = 53; const int maxa = 103;\nint n, m, f[maxn][maxa][maxm], ans[maxm], vl[maxn], vmax[maxn]; bool lf[maxn], ir[maxn]; edge elst[maxn], *ep(elst), *head[maxn];\ninline void addEdge(int u, int v, int w) { ep-\u0026gt; t = v; ep-\u0026gt; v = w; ep-\u0026gt; next = head[u]; head[u] = ep ++; }","title":"BZOJ1017 [JSOI2008]魔兽地图DotR"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 插头DP的基础题。想插头DP都是将军没走的时候给我讲的了，距今有大半年了吧。mhy已经写了无数道了，我才开始写。唉，还是效率太低。\u0026lt;/p\u0026gt; \u0026nbsp;\n插头DP的意思是把已经处理的部分的轮廓线上对后面状态有影响的东西状压下来，然后挨着处理每个格子的状态（比如方向，或者这里的地板怎么铺之类的）。\n\u0026nbsp;\n具体到这道题来说，考虑一个相邻格子之前的边，那么它可能没有连接两个相同的磁砖，有可能连接了两个还没有拐过弯的磁砖，有可能连接了两个已经拐过弯的磁砖，一共是3种情况，所以用一个三进制数把它压下来。然后直接一路转移过去就行了。要注意的是每行都处理完了之后要把最边上的那一条从右移动到左，所以还需要把所有的状态都改一下。\n\u0026nbsp;\n今天效率比较低，心不在焉，然后在最后一个转移的地方wa了大半天。插头DP的调试也比较麻烦。所以我还是naive。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 13; const int maxa = 109; const int maxs = 200009; const int mod = 20110520;\nbool mp[maxa][maxa]; int n, m, a[maxn], b[maxn], f[2][maxs];\n#define fc f[cur] #define fp f[prv] #define doNothing ; inline void mInc(int\u0026amp; a, int b) { a += b; if (a \u0026gt;= mod) a %= mod; }\nvoid unzipStatus(int z, int* a) { for (int i = 0; i \u0026lt;= m; ++ i) { a[i] = z % 3; z /= 3; } } int zipStatus(int* a) { int s(0); for (int i = m; i \u0026gt;= 0; \u0026ndash; i) s = s * 3 + a[i]; return s; }\nint plugDP() { int prv(0), cur(1), e(1); memset(f, 0, sizeof(f)); fc[0] = 1; for (int i = 0; i \u0026lt;= m; ++ i) e *= 3; for (int i = 0; i \u0026lt; n; ++ i) { for (int j = 0; j \u0026lt; m; ++ j) { swap(cur, prv); for (int z = 0; z \u0026lt; e; ++ z) fc[z] = 0; for (int z = 0; z \u0026lt; e; ++ z) if (fp[z]) { unzipStatus(z, a); if (mp[i][j]) { if (a[j] == 0) { if (a[j + 1] == 0) { memcpy(b, a, sizeof(a)); b[j] = b[j + 1] = 2; mInc(fc[zipStatus(b)], fp[z]); b[j] = 0; b[j + 1] = 1; mInc(fc[zipStatus(b)], fp[z]); b[j] = 1; b[j + 1] = 0; mInc(fc[zipStatus(b)], fp[z]); } else if (a[j + 1] == 1) { memcpy(b, a, sizeof(a)); b[j] = 0; b[j + 1] = 2; mInc(fc[zipStatus(b)], fp[z]); b[j] = 1; b[j + 1] = 0; mInc(fc[zipStatus(b)], fp[z]); } else if (a[j + 1] == 2) { memcpy(b, a, sizeof(a)); b[j] = 2; b[j + 1] = 0; mInc(fc[zipStatus(b)], fp[z]); b[j] = 0; mInc(fc[zipStatus(b)], fp[z]); } } else if (a[j] == 1) { if (a[j + 1] == 0) { memcpy(b, a, sizeof(a)); b[j] = 0; b[j + 1] = 1; mInc(fc[zipStatus(b)], fp[z]); b[j] = 2; b[j + 1] = 0; mInc(fc[zipStatus(b)], fp[z]); } else if (a[j + 1] == 1) { memcpy(b, a, sizeof(a)); b[j] = b[j + 1] = 0; mInc(fc[zipStatus(b)], fp[z]); } else if (a[j + 1] == 2) { doNothing } } else if (a[j] == 2) { if (a[j + 1] == 0) { memcpy(b, a, sizeof(a)); b[j] = b[j + 1] = 0; mInc(fc[zipStatus(b)], fp[z]); b[j + 1] = 2; mInc(fc[zipStatus(b)], fp[z]); } else if (a[j + 1] == 1) { doNothing } else if (a[j + 1] == 2) { doNothing } } } else { if (a[j] == 0 \u0026amp;\u0026amp; a[j + 1] == 0) mInc(fc[z], fp[z]); } } } swap(cur, prv); for (int z = 0; z \u0026lt; e; ++ z) fc[z] = 0; for (int z = 0; z \u0026lt; e; ++ z) if (fp[z]) { unzipStatus(z, a); if (a[m]) continue; for (int j = m; j; \u0026ndash; j) a[j] = a[j - 1]; a[0] = 0; fc[zipStatus(a)] = fp[z]; } } return fc[0]; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m); bool rev(n \u0026amp;lt; m); for (int i = 0; i \u0026amp;lt; n; ++ i) { static char g[maxa]; scanf(\u0026quot;%s\u0026quot;, g); for (int j = 0; j \u0026amp;lt; m; ++ j) if (rev) mp[j][i] = (g[j] == '_'); else mp[i][j] = (g[j] == '_'); } if (rev) swap(n, m); printf(\u0026quot;%d\\n\u0026quot;, plugDP()); } ","permalink":"/oi/i11rimport_042/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 插头DP的基础题。想插头DP都是将军没走的时候给我讲的了，距今有大半年了吧。mhy已经写了无数道了，我才开始写。唉，还是效率太低。\u0026lt;/p\u0026gt; \u0026nbsp;\n插头DP的意思是把已经处理的部分的轮廓线上对后面状态有影响的东西状压下来，然后挨着处理每个格子的状态（比如方向，或者这里的地板怎么铺之类的）。\n\u0026nbsp;\n具体到这道题来说，考虑一个相邻格子之前的边，那么它可能没有连接两个相同的磁砖，有可能连接了两个还没有拐过弯的磁砖，有可能连接了两个已经拐过弯的磁砖，一共是3种情况，所以用一个三进制数把它压下来。然后直接一路转移过去就行了。要注意的是每行都处理完了之后要把最边上的那一条从右移动到左，所以还需要把所有的状态都改一下。\n\u0026nbsp;\n今天效率比较低，心不在焉，然后在最后一个转移的地方wa了大半天。插头DP的调试也比较麻烦。所以我还是naive。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 13; const int maxa = 109; const int maxs = 200009; const int mod = 20110520;\nbool mp[maxa][maxa]; int n, m, a[maxn], b[maxn], f[2][maxs];\n#define fc f[cur] #define fp f[prv] #define doNothing ; inline void mInc(int\u0026amp; a, int b) { a += b; if (a \u0026gt;= mod) a %= mod; }","title":"BZOJ2331 [SCOI2011]地板"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 凌晨的cf到底算头天的还是当天的是个严重的问题。理论上说应该用睡觉作为两天的分界线啊。那万一今天我心情好不睡觉了怎么办。\u0026lt;/p\u0026gt; \u0026nbsp;\n虽然我还是太弱。弃b保c暴手速抢到了一个rank22，于是直接从紫变橙了。\n\u0026nbsp;\na题是个简单的贪心，把阶乘拆成2,3,5,7的幂的乘积，然后按7532的顺序贪心。至于为啥是对的不知道。\n\u0026nbsp;\nb题是个简单的贪心，找有没有度数为1的点，然后一直这样连下去看能不能连完。至于为啥是对的不知道。\n\u0026nbsp;\nc题是个简单的线段树，把区间复制一倍然后推个简单的式子每次只询问不修改。\n\u0026nbsp;\nd题e题神题不会完全没思路放弃了。然后发现jcvb和xyz111都过了d，看代码像是虚树一样的玩意？没懂。明天去看题解。\n\u0026nbsp;\n所以有两道题都是凭感觉蒙对的么？太神奇了。\n\u0026nbsp;\n然后今天只交了3次，比较欣慰，说明代码状态好些了。\n\u0026nbsp;\n虽然我还是太年轻。\n","permalink":"/diary/i11rimport_043/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 凌晨的cf到底算头天的还是当天的是个严重的问题。理论上说应该用睡觉作为两天的分界线啊。那万一今天我心情好不睡觉了怎么办。\u0026lt;/p\u0026gt; \u0026nbsp;\n虽然我还是太弱。弃b保c暴手速抢到了一个rank22，于是直接从紫变橙了。\n\u0026nbsp;\na题是个简单的贪心，把阶乘拆成2,3,5,7的幂的乘积，然后按7532的顺序贪心。至于为啥是对的不知道。\n\u0026nbsp;\nb题是个简单的贪心，找有没有度数为1的点，然后一直这样连下去看能不能连完。至于为啥是对的不知道。\n\u0026nbsp;\nc题是个简单的线段树，把区间复制一倍然后推个简单的式子每次只询问不修改。\n\u0026nbsp;\nd题e题神题不会完全没思路放弃了。然后发现jcvb和xyz111都过了d，看代码像是虚树一样的玩意？没懂。明天去看题解。\n\u0026nbsp;\n所以有两道题都是凭感觉蒙对的么？太神奇了。\n\u0026nbsp;\n然后今天只交了3次，比较欣慰，说明代码状态好些了。\n\u0026nbsp;\n虽然我还是太年轻。","title":"20150218 CF292"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 什么鬼。\u0026lt;/p\u0026gt; \u0026nbsp;\n很好想的dp。f[i][j]表示深度不超过i且大小为j的二叉树的个数。转移是f[i][j] = ∑(f[i - 1][k] * f[i - 1][j - k - 1])。\n\u0026nbsp;\n然后直接暴力是O(n3)的。在spoj上能过在bzoj上不能过。在bzoj上得用记忆化搜索来减掉一些无用的东西。虽然我觉得很烦。\n\u0026nbsp;\n然后试图用fft，发现fft比暴力还慢。然后试图用fnt，然后发现fnt好像不能对1e9+7这种质数用。因为1e9+6只有来一个2。真悲伤。我还是太弱啊。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 609; const int mod = 1000000007;\n#define _l (long long int)\nint f[maxn][maxn];\nint getf(int i, int j) { if (i == 0) return j \u0026lt;= 1; else if (j == 0) return 1; else if (f[i][j] == -1) { f[i][j] = 0; for (int k = 0; k \u0026lt; j; ++ k) f[i][j] = (f[i][j] + _l getf(i - 1, k) * getf(i - 1, j - k - 1)) % mod; } return f[i][j]; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nmemset(f, -1, sizeof(f)); int t, n, k, s; scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;t); while (t --) { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;k); if (!k) puts((n == 1) ? \u0026quot;1\u0026quot; : \u0026quot;0\u0026quot;); else { s = getf(k, n) - getf(k - 1, n); if (s \u0026amp;lt; 0) s += mod; printf(\u0026quot;%d\\n\u0026quot;, s); } } } ","permalink":"/oi/i11rimport_044/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 什么鬼。\u0026lt;/p\u0026gt; \u0026nbsp;\n很好想的dp。f[i][j]表示深度不超过i且大小为j的二叉树的个数。转移是f[i][j] = ∑(f[i - 1][k] * f[i - 1][j - k - 1])。\n\u0026nbsp;\n然后直接暴力是O(n3)的。在spoj上能过在bzoj上不能过。在bzoj上得用记忆化搜索来减掉一些无用的东西。虽然我觉得很烦。\n\u0026nbsp;\n然后试图用fft，发现fft比暴力还慢。然后试图用fnt，然后发现fnt好像不能对1e9+7这种质数用。因为1e9+6只有来一个2。真悲伤。我还是太弱啊。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 609; const int mod = 1000000007;\n#define _l (long long int)\nint f[maxn][maxn];\nint getf(int i, int j) { if (i == 0) return j \u0026lt;= 1; else if (j == 0) return 1; else if (f[i][j] == -1) { f[i][j] = 0; for (int k = 0; k \u0026lt; j; ++ k) f[i][j] = (f[i][j] + _l getf(i - 1, k) * getf(i - 1, j - k - 1)) % mod; } return f[i][j]; }","title":"BZOJ3769 SPOJ8549 BST again"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;div\u0026gt; 低烧，鼻炎以及疼痛的扁桃让我意识不太清醒。依稀记得昨天第一次登上ccf的领奖台。一年来对这一刻憧憬了太多，却也没有想过这样一种结局。\u0026lt;/div\u0026gt; \u0026nbsp; yzjc教授光荣地退役了。一年半一路走过，看到他的成长，在一次又一次的考试中最终生存下来，NOIP，省队，国家集训队。他既是我的好朋友，也是我的好老师。他的勤奋和认真教会了我很多。令我吃惊的是，在知道自己退役的消息之后，他是那样平静，如果是我也许会反应得很激烈吧。我想，那是一个已经实现了自己的梦想的OIer的表现。不论最终是否能站到IOI的赛场上，只要这些年，过得无悔，就已经是一件令人满意的事情了。 \u0026nbsp; 记得去年wc的时候，虽然分数也是个银牌，还超过了不少学长，不过毕竟连超额都不是，只能在台下眼巴巴地看。noi的时候又只有银牌。给d类金牌发奖的时候还激动了一下，然后就只听主持人向我许诺了一张至今也不曾拿到的奖状。人总是要成长的。 \u0026nbsp; 想想这一年，也渐渐地能从只会写骗分和高超的骗分，到能找出一些正解了。虽然wc的题注定不会让任何人有想出正解的机会，甚至就算想到了一些能得到部分分的算法，也会想方设法不给你好结果。我也出过题，出题人和做题人的矛盾，就是这样。 \u0026nbsp; 失败也不是偶然，成功才是。只要有短板，那它总会出现并造成致命一击。曾经无数次地说要平衡要平衡，然后从刷题记录看又只是写了更多的水题和数据结构。似乎总是有各种理由让自己换个时间再写这道不是那么好写的题。总是在下定决心然后把决心抛之脑后。我需要改变。 \u0026nbsp; 省选也不远了。过完寒假就只有一个月了。想当初觉得noip前的一个月也很长，期末考试前的一个月也很长，然而实际上来不及干什么，一个月就过去了。如果没有把任务安排到天的史无巨细的计划，时间是不会等人的。 \u0026nbsp; 学OI也已经整整六年了。指不定哪一场就是最后一场了。既然如此不舍，那就把自己的每一场都当作最后一战去战斗吧。 \u0026nbsp; ","permalink":"/diary/i11rimport_045/","summary":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;div\u0026gt; 低烧，鼻炎以及疼痛的扁桃让我意识不太清醒。依稀记得昨天第一次登上ccf的领奖台。一年来对这一刻憧憬了太多，却也没有想过这样一种结局。\u0026lt;/div\u0026gt; \u0026nbsp; yzjc教授光荣地退役了。一年半一路走过，看到他的成长，在一次又一次的考试中最终生存下来，NOIP，省队，国家集训队。他既是我的好朋友，也是我的好老师。他的勤奋和认真教会了我很多。令我吃惊的是，在知道自己退役的消息之后，他是那样平静，如果是我也许会反应得很激烈吧。我想，那是一个已经实现了自己的梦想的OIer的表现。不论最终是否能站到IOI的赛场上，只要这些年，过得无悔，就已经是一件令人满意的事情了。 \u0026nbsp; 记得去年wc的时候，虽然分数也是个银牌，还超过了不少学长，不过毕竟连超额都不是，只能在台下眼巴巴地看。noi的时候又只有银牌。给d类金牌发奖的时候还激动了一下，然后就只听主持人向我许诺了一张至今也不曾拿到的奖状。人总是要成长的。 \u0026nbsp; 想想这一年，也渐渐地能从只会写骗分和高超的骗分，到能找出一些正解了。虽然wc的题注定不会让任何人有想出正解的机会，甚至就算想到了一些能得到部分分的算法，也会想方设法不给你好结果。我也出过题，出题人和做题人的矛盾，就是这样。 \u0026nbsp; 失败也不是偶然，成功才是。只要有短板，那它总会出现并造成致命一击。曾经无数次地说要平衡要平衡，然后从刷题记录看又只是写了更多的水题和数据结构。似乎总是有各种理由让自己换个时间再写这道不是那么好写的题。总是在下定决心然后把决心抛之脑后。我需要改变。 \u0026nbsp; 省选也不远了。过完寒假就只有一个月了。想当初觉得noip前的一个月也很长，期末考试前的一个月也很长，然而实际上来不及干什么，一个月就过去了。如果没有把任务安排到天的史无巨细的计划，时间是不会等人的。 \u0026nbsp; 学OI也已经整整六年了。指不定哪一场就是最后一场了。既然如此不舍，那就把自己的每一场都当作最后一战去战斗吧。 \u0026nbsp; ","title":"20150215 WC2015 Summary"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;div\u0026gt; \u0026lt;div\u0026gt; Day1\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 考试才开始？不，考试已经结束了。这就是wc的感觉吧。早上起床的时候还感觉信心满满，对未来充满了希望。然后在考场上看到题后感觉心中一紧。再到看到成绩之后差点趴在键盘上。毕竟我还是太年轻了吧。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 考试，有三道题。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 第一题感觉不太会做，但是中间有40分看上去就像是数据结构可以解决的问题。然后思考了一下写了一个可持久化treap来当堆用。然后就debug了半天，虽然最后不会wa了。其实调试的时候已经发现会mle，但是总还是存着那一点侥幸，写了个动态alloc就交了。然后就痛失30分。其实如果认真想想应该能想到更好的做法的。当然还是太懒了。记得徐老师说过，再验证的代码也得写，不写就得死。这次，是侥幸心干掉了我。以后还是要记住，不完美的东西的期望就是0，切记。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 第二题看到小强和阿米吧就不想做了。仔细看了题之后发现的确不太好理解，或者说也不太好做。其实如果认真读 下题写个暴力。可惜了啊。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 然后第三题还是花了两个多小时，虽然最后也没有到集训附后平均分。主要是黑白最短距离那个点卡住了。高度了很久。我觉得是太久没有写各种不同的代码了吧。然后觉得如果认真再想想还是能想出更好的解法的吧。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 今天比较大的一个失误就是把时间分配给第一题了，然后它还挂了。虽然这种事情谁也说不清楚。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 所以说我还是太弱了。如果没有数据结构题的话就只能听天由命了。即使有数据结构题也不一定能拿到，那我还怎样拿分呢？不能这样！\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 下午看了成绩出来，很郁闷。坐在操场上看天。有架遥控飞机在天上试飞。不时地掉下来，然后又顽强地冲上天空。其实oi的路也一样，人生的路也一样，不时会有折翼，但是心是属于蓝天的。所以不论摔得再疼，也总要再爬起来，去与这个世界战斗。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 所以？如果不想消失，那就得去反抗。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 另外明天就是2月14号了。祝我爱的人和爱我的人还有许许多多素不相识的人幸福。虽然我相信没有人会看到这段话。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026nbsp;\n","permalink":"/diary/i11rimport_046/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;div\u0026gt; \u0026lt;div\u0026gt; Day1\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 考试才开始？不，考试已经结束了。这就是wc的感觉吧。早上起床的时候还感觉信心满满，对未来充满了希望。然后在考场上看到题后感觉心中一紧。再到看到成绩之后差点趴在键盘上。毕竟我还是太年轻了吧。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 考试，有三道题。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 第一题感觉不太会做，但是中间有40分看上去就像是数据结构可以解决的问题。然后思考了一下写了一个可持久化treap来当堆用。然后就debug了半天，虽然最后不会wa了。其实调试的时候已经发现会mle，但是总还是存着那一点侥幸，写了个动态alloc就交了。然后就痛失30分。其实如果认真想想应该能想到更好的做法的。当然还是太懒了。记得徐老师说过，再验证的代码也得写，不写就得死。这次，是侥幸心干掉了我。以后还是要记住，不完美的东西的期望就是0，切记。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 第二题看到小强和阿米吧就不想做了。仔细看了题之后发现的确不太好理解，或者说也不太好做。其实如果认真读 下题写个暴力。可惜了啊。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 然后第三题还是花了两个多小时，虽然最后也没有到集训附后平均分。主要是黑白最短距离那个点卡住了。高度了很久。我觉得是太久没有写各种不同的代码了吧。然后觉得如果认真再想想还是能想出更好的解法的吧。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 今天比较大的一个失误就是把时间分配给第一题了，然后它还挂了。虽然这种事情谁也说不清楚。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 所以说我还是太弱了。如果没有数据结构题的话就只能听天由命了。即使有数据结构题也不一定能拿到，那我还怎样拿分呢？不能这样！\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 下午看了成绩出来，很郁闷。坐在操场上看天。有架遥控飞机在天上试飞。不时地掉下来，然后又顽强地冲上天空。其实oi的路也一样，人生的路也一样，不时会有折翼，但是心是属于蓝天的。所以不论摔得再疼，也总要再爬起来，去与这个世界战斗。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 所以？如果不想消失，那就得去反抗。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; 另外明天就是2月14号了。祝我爱的人和爱我的人还有许许多多素不相识的人幸福。虽然我相信没有人会看到这段话。\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026nbsp;","title":"20150213 WC2015 Day1"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 最后一天的讲座了。时间好快。\u0026lt;/p\u0026gt; \u0026nbsp;\n早上小强的讲座，比去年有趣一些，不过还是只能orz而已。\n\u0026nbsp;\n下午clj的讲座，果断没有认真听，研究guavas去了。不过其实已经比去年生动多了。后面听了一些也觉得有一些收获，虽然都是陈题。\n\u0026nbsp;\n晚上先看了死神来了5，然后屯了两道bzoj的水题，然后继续颓。唉。\n\u0026nbsp;\n总之，明天，加油。for everyone\n","permalink":"/diary/i11rimport_047/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 最后一天的讲座了。时间好快。\u0026lt;/p\u0026gt; \u0026nbsp;\n早上小强的讲座，比去年有趣一些，不过还是只能orz而已。\n\u0026nbsp;\n下午clj的讲座，果断没有认真听，研究guavas去了。不过其实已经比去年生动多了。后面听了一些也觉得有一些收获，虽然都是陈题。\n\u0026nbsp;\n晚上先看了死神来了5，然后屯了两道bzoj的水题，然后继续颓。唉。\n\u0026nbsp;\n总之，明天，加油。for everyone","title":"20150212 WC2015 Day0.8"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 居然就超过0.5了。\u0026lt;/p\u0026gt; \u0026nbsp;\n今天讲的东西还比较可听啊。\n\u0026nbsp;\n上午hwd神牛讲的算几。毕竟是专业老师，讲东西就是不一样。比较有梯度，也不像其他人那样照着ppt念，于是比较可听，虽然前面的东西是不是过于有点基础了。不过有一个发现是直接把一个向量看作n维空间里的点求距离应该是比较靠谱的算法。可以向这个方向再试一下。\n\u0026nbsp;\n下午是沈洋讲构造。还是比较厉害吧。构造这玩意，感觉主要还是看题说话。最后一道题讲到了图形，想起了我们的guavas，什么时候才能搞出来啊。\n\u0026nbsp;\n晚上试机无话，只是差点忘了vimrc该怎么写。看完了Angel Beats，然后在整理文件也没有写题。是不是太颓废了一点啊不能这样，虽然bzoj挂了不开心。AB这些玩意也就是娱乐一下呗。虽然也没啥很吸引人的地方。以后出来无聊还是多刷题好了。\n\u0026nbsp;\n毕竟我还是太年轻啊。\n","permalink":"/diary/i11rimport_048/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 居然就超过0.5了。\u0026lt;/p\u0026gt; \u0026nbsp;\n今天讲的东西还比较可听啊。\n\u0026nbsp;\n上午hwd神牛讲的算几。毕竟是专业老师，讲东西就是不一样。比较有梯度，也不像其他人那样照着ppt念，于是比较可听，虽然前面的东西是不是过于有点基础了。不过有一个发现是直接把一个向量看作n维空间里的点求距离应该是比较靠谱的算法。可以向这个方向再试一下。\n\u0026nbsp;\n下午是沈洋讲构造。还是比较厉害吧。构造这玩意，感觉主要还是看题说话。最后一道题讲到了图形，想起了我们的guavas，什么时候才能搞出来啊。\n\u0026nbsp;\n晚上试机无话，只是差点忘了vimrc该怎么写。看完了Angel Beats，然后在整理文件也没有写题。是不是太颓废了一点啊不能这样，虽然bzoj挂了不开心。AB这些玩意也就是娱乐一下呗。虽然也没啥很吸引人的地方。以后出来无聊还是多刷题好了。\n\u0026nbsp;\n毕竟我还是太年轻啊。","title":"20150211 WC2015 Day0.6"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天好像比昨天下午好一点，吧。\u0026lt;/p\u0026gt; \u0026nbsp;\n上午是ydl讲ioi2014的题，感觉还是比较可想的。然后讲图的树分就再见了。感觉好麻烦。然后虽然也比较有用。有趣的是到了下课时间瞬间大伙都精神了冲出去抢饭。感受到了一年半前在jxfls的时候的感觉。\n\u0026nbsp;\n下午是dhh讲拟阵。这玩意好像还比较好玩，也比较好懂，虽然前一段走神了还是靠idy才搞懂的定义。汗。然后这玩意最大的（目前可知的）意义是证明贪心。然后顺便AC了一道题哈哈。然后继续抢饭。\n\u0026nbsp;\n晚上的营员交流是一个神奇的kd-tree的应用，虽然很娱乐向。然后是jcvb的生成函数只能看看根本不会。拉格朗日这个名字倒是听说过不少次，不过从来没有弄懂过。过两天有空了好好学习一下。接着是cyb神牛的均摊分析，终于懂得了原来只写路径压缩的dset是不对的，虽然估计还是照写不误。也比较惊讶那么麻烦的放缩和递归的式子居然有人有耐心推出来。最后是两个神牛讲pq-tree。这个比较不可听，感觉好厉害的样子，不过可能用处比较，呵。\n\u0026nbsp;\n所以毕竟我还是太弱了一些啊。\n","permalink":"/diary/i11rimport_049/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天好像比昨天下午好一点，吧。\u0026lt;/p\u0026gt; \u0026nbsp;\n上午是ydl讲ioi2014的题，感觉还是比较可想的。然后讲图的树分就再见了。感觉好麻烦。然后虽然也比较有用。有趣的是到了下课时间瞬间大伙都精神了冲出去抢饭。感受到了一年半前在jxfls的时候的感觉。\n\u0026nbsp;\n下午是dhh讲拟阵。这玩意好像还比较好玩，也比较好懂，虽然前一段走神了还是靠idy才搞懂的定义。汗。然后这玩意最大的（目前可知的）意义是证明贪心。然后顺便AC了一道题哈哈。然后继续抢饭。\n\u0026nbsp;\n晚上的营员交流是一个神奇的kd-tree的应用，虽然很娱乐向。然后是jcvb的生成函数只能看看根本不会。拉格朗日这个名字倒是听说过不少次，不过从来没有弄懂过。过两天有空了好好学习一下。接着是cyb神牛的均摊分析，终于懂得了原来只写路径压缩的dset是不对的，虽然估计还是照写不误。也比较惊讶那么麻烦的放缩和递归的式子居然有人有耐心推出来。最后是两个神牛讲pq-tree。这个比较不可听，感觉好厉害的样子，不过可能用处比较，呵。\n\u0026nbsp;\n所以毕竟我还是太弱了一些啊。","title":"20150210 WC2015 Day0.4"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天wc讲的题。主要其实是用拟阵来证明贪心的正确性。就构造一下就好了。不选的集合构成一个拟阵的基，如果基不能异或出0就是线性无关的。然后按照拟阵的贪心方法挨个加。\u0026lt;/p\u0026gt; \u0026nbsp;\n策略是从大到小排个序能不选就不选，用异或消元来判断一下就好了。许久没有写了，还好没有搞忘。\n\u0026nbsp;\n代码还是比较短的，开心ing。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 109;\nint n, a[maxn], b[maxn], c[maxn], t; dint s;\nbool hasZero() { for (int i = 0; i \u0026lt; t; ++ i) b[i] = c[i]; for (int i = 31, j = 0; i \u0026gt;= 0 \u0026amp;\u0026amp; j \u0026lt; t; \u0026ndash; i) { for (int k = j; k \u0026lt; n; ++ k) if ((b[k] \u0026gt;\u0026gt; i) \u0026amp; 1) { swap(b[k], b[j]); break; } if ((b[j] \u0026gt;\u0026gt; i) \u0026amp; 1) { for (int k = j + 1; k \u0026lt; n; ++ k) if ((b[k] \u0026gt;\u0026gt; i) \u0026amp; 1) { b[k] ^= b[j]; if (!b[k]) return 1; } ++ j; } } return 0; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\ns = 0; scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); for (int i = 0; i \u0026amp;lt; n; ++ i) scanf(\u0026quot;%d\u0026quot;, a + i); sort(a, a + n); t = 0; for (int i = n - 1; i \u0026amp;gt;= 0; -- i) { c[t ++] = a[i]; if (hasZero()) { -- t; s += a[i]; } } printf(lld \u0026quot;\\n\u0026quot;, s); } ","permalink":"/oi/i11rimport_050/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天wc讲的题。主要其实是用拟阵来证明贪心的正确性。就构造一下就好了。不选的集合构成一个拟阵的基，如果基不能异或出0就是线性无关的。然后按照拟阵的贪心方法挨个加。\u0026lt;/p\u0026gt; \u0026nbsp;\n策略是从大到小排个序能不选就不选，用异或消元来判断一下就好了。许久没有写了，还好没有搞忘。\n\u0026nbsp;\n代码还是比较短的，开心ing。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef long long dint; #ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 109;\nint n, a[maxn], b[maxn], c[maxn], t; dint s;\nbool hasZero() { for (int i = 0; i \u0026lt; t; ++ i) b[i] = c[i]; for (int i = 31, j = 0; i \u0026gt;= 0 \u0026amp;\u0026amp; j \u0026lt; t; \u0026ndash; i) { for (int k = j; k \u0026lt; n; ++ k) if ((b[k] \u0026gt;\u0026gt; i) \u0026amp; 1) { swap(b[k], b[j]); break; } if ((b[j] \u0026gt;\u0026gt; i) \u0026amp; 1) { for (int k = j + 1; k \u0026lt; n; ++ k) if ((b[k] \u0026gt;\u0026gt; i) \u0026amp; 1) { b[k] ^= b[j]; if (!","title":"BZOJ3105 [cqoi2013]新Nim游戏"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;div\u0026gt; 昨天晚上一直在搞wifi也没有搞定，把写日记都搞忘了。决定以后安安心心地用流量。\u0026lt;/div\u0026gt; \u0026nbsp; wc第一天。因为考试要被称为day1，所以只好压缩一下天的编号了。 \u0026nbsp; 上午xyz大爷讲动态图。本来只会O(m^2)的算法的。居然变成了O(sqrt(m))，是厉害。不过就考试的时候千万不要让我写。感觉好麻烦。然后后面5道cf之前讲过，虽然好像有点忘了。不能天天睡觉啊。 \u0026nbsp; 下午的素数测试真的只有发呆了。大概就是怎么怎么暴算怎么怎么怎么睁着眼就睡着了。确实是前沿科学，不过AKS大概在1s内是跑不出10^18的素数的。怎么玩啊。 \u0026nbsp; 晚上的营员交流比白天有趣，有点后悔上回在寝室打游戏。VFK玩转仙人掌！他玩转了我玩不溜啊。还是强行转换成LCT维护，1000行代码24KB怎么能看。后面讲的东西稍微好些，不过还是挺吓人的。 \u0026nbsp; 然后pb.ds这玩意哪天试试，不过还是要小心不要在考场上作死。毕竟敲个splay啥的也要不到多久是吧。而且毕竟是系统封装的，性能啥的估摸着还是比不过手写吧？毕竟咱们可是会丧心病狂常数优化的民族。 \u0026nbsp; 然后讲了平面图？呼。呼。 \u0026nbsp; 然后写oj的哥们orz。感觉我们自己的oj只能叫校内文件共享网站啊。啥沙箱没有，评测方式也比较单一，虽然我估计是很难遇到那样的非传统题的。然后也没有有数据库也没有用远程连接。 \u0026nbsp; 毕竟我还是太弱啊。明天不要睡觉不要睡觉不要睡觉。 ","permalink":"/diary/i11rimport_051/","summary":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;div\u0026gt; 昨天晚上一直在搞wifi也没有搞定，把写日记都搞忘了。决定以后安安心心地用流量。\u0026lt;/div\u0026gt; \u0026nbsp; wc第一天。因为考试要被称为day1，所以只好压缩一下天的编号了。 \u0026nbsp; 上午xyz大爷讲动态图。本来只会O(m^2)的算法的。居然变成了O(sqrt(m))，是厉害。不过就考试的时候千万不要让我写。感觉好麻烦。然后后面5道cf之前讲过，虽然好像有点忘了。不能天天睡觉啊。 \u0026nbsp; 下午的素数测试真的只有发呆了。大概就是怎么怎么暴算怎么怎么怎么睁着眼就睡着了。确实是前沿科学，不过AKS大概在1s内是跑不出10^18的素数的。怎么玩啊。 \u0026nbsp; 晚上的营员交流比白天有趣，有点后悔上回在寝室打游戏。VFK玩转仙人掌！他玩转了我玩不溜啊。还是强行转换成LCT维护，1000行代码24KB怎么能看。后面讲的东西稍微好些，不过还是挺吓人的。 \u0026nbsp; 然后pb.ds这玩意哪天试试，不过还是要小心不要在考场上作死。毕竟敲个splay啥的也要不到多久是吧。而且毕竟是系统封装的，性能啥的估摸着还是比不过手写吧？毕竟咱们可是会丧心病狂常数优化的民族。 \u0026nbsp; 然后讲了平面图？呼。呼。 \u0026nbsp; 然后写oj的哥们orz。感觉我们自己的oj只能叫校内文件共享网站啊。啥沙箱没有，评测方式也比较单一，虽然我估计是很难遇到那样的非传统题的。然后也没有有数据库也没有用远程连接。 \u0026nbsp; 毕竟我还是太弱啊。明天不要睡觉不要睡觉不要睡觉。 ","title":"20150209 WC2015 Day0.2"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 有离线镜像还是能省不少流量。开心。不过流量还是用得飞快啊。\u0026lt;/p\u0026gt; \u0026nbsp;\n这就是个cdq重构的题。学习了前几天xyz大爷讲的扔线段树的做法，省了不少代码。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct node { int v, c; node *next; }; struct seg { int l, r; node *head; seg *ls, *rs; };\nconst int maxa = 209; const int maxn = 40009; const int maxm = 10009; const int maxnd = maxn * 23; const int mov[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};\n#define upmax(a,b) { if (a \u0026lt; b) a = b; } #define mkpos(x,y) (((x)\u0026lt;\u0026lt;16)|(y)) #define getx(a) ((a)\u0026gt;\u0026gt;16) #define gety(a) ((a)\u0026amp;0x0000ffff) #define nid(x,y) (((x)*n)+(y))\nstruct disjoint_set { int r[maxn], h[maxn]; int vst[maxn], rst[maxn], ust[maxn], hst[maxn], tst; inline disjoint_set() { tst = 0; } void init(int n) { for (int i = 0; i \u0026lt; n; ++ i) r[i] = i, h[i] = 1; } int getRoot(int x) { for (; r[x] ^ x; x = r[x]); return x; } inline void merge(int u, int v) { u = getRoot(u), v = getRoot(v); if (h[u] \u0026lt; h[v]) swap(u, v); vst[++ tst] = v; rst[tst] = r[v]; r[v] = u; ust[tst] = u; hst[tst] = h[u]; upmax(h[u], h[v] + 1); } void recover(int x) { while (tst \u0026gt; x) { r[vst[tst]] = rst[tst]; h[vst[tst]] = hst[tst]; \u0026ndash; tst; } } };\nnode nlst[maxnd], *np(nlst); seg slst[maxn * 3], *sp(slst), *rt; int n, m, a[maxa][maxa], cc[maxa][maxa], pret[maxa][maxa], ansb[maxm], answ[maxm];\n#define midp(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\ninline seg* sgtBuild(int l, int r) { seg* p(sp ++); p-\u0026gt; l = l; p-\u0026gt; r = r; p-\u0026gt; head = 0; if (l + 1 \u0026lt; r) { p-\u0026gt; ls = sgtBuild(l, midp(p)); p-\u0026gt; rs = sgtBuild(midp(p), r); } return p; } inline void sgtIns(seg* p, int l, int r, int ps, int cl) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) { np-\u0026gt; v = ps; np-\u0026gt; c = cl; np-\u0026gt; next = p-\u0026gt; head; p-\u0026gt; head = np ++; } else if (r \u0026lt;= midp(p)) sgtIns(p-\u0026gt; ls, l, r, ps, cl); else if (l \u0026gt;= midp(p)) sgtIns(p-\u0026gt; rs, l, r, ps, cl); else { sgtIns(p-\u0026gt; ls, l, midp(p), ps, cl); sgtIns(p-\u0026gt; rs, midp(p), r, ps, cl); } }\ndisjoint_set r;\nvoid sgtDfs(seg* p, int cb, int cw) { int rp(r. tst); for (node* it = p-\u0026gt; head; it; it = it-\u0026gt; next) { int x(getx(it-\u0026gt; v)), y(gety(it-\u0026gt; v)), c(it-\u0026gt; c), *v; if (c == 0) v = \u0026amp;cw; else v = \u0026amp;cb; ++ *v; cc[x][y] = c; for (int mi = 0; mi \u0026lt; 4; ++ mi) { int x1(x + mov[mi][0]), y1(y + mov[mi][1]); if (x1 \u0026lt; 0 || x1 \u0026gt;= n || y1 \u0026lt; 0 || y1 \u0026gt;= n) continue; if (cc[x1][y1] == c \u0026amp;\u0026amp; r. getRoot(nid(x, y)) != r. getRoot(nid(x1, y1))) { \u0026ndash; v; r. merge(nid(x, y), nid(x1, y1)); } } } if (p-\u0026gt; l + 1 == p-\u0026gt; r) { ansb[p-\u0026gt; l] = cb; answ[p-\u0026gt; l] = cw; } else { sgtDfs(p-\u0026gt; ls, cb, cw); sgtDfs(p-\u0026gt; rs, cb, cw); } for (node it = p-\u0026gt; head; it; it = it-\u0026gt; next) { int x(getx(it-\u0026gt; v)), y(gety(it-\u0026gt; v)); cc[x][y] = -1; } r. recover(rp); }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); for (int i = 0; i \u0026amp;lt; n; ++ i) for (int j = 0; j \u0026amp;lt; n; ++ j) { scanf(\u0026quot;%d\u0026quot;, a[i] + j); pret[i][j] = 0; } scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;m); rt = sgtBuild(0, m + 1); for (int i = 1; i \u0026amp;lt;= m; ++ i) { int x, y; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;x, \u0026amp;amp;y); -- x; -- y; sgtIns(rt, pret[x][y], i, mkpos(x, y), a[x][y]); a[x][y] ^= 1; pret[x][y] = i; } for (int i = 0; i \u0026amp;lt; n; ++ i) for (int j = 0; j \u0026amp;lt; n; ++ j) sgtIns(rt, pret[i][j], m + 1, mkpos(i, j), a[i][j]); memset(cc, 0, sizeof(cc)); r. init(n * n); memset(cc, -1, sizeof(cc)); sgtDfs(rt, 0, 0); for (int i = 1; i \u0026amp;lt;= m; ++ i) printf(\u0026quot;%d %d\\n\u0026quot;, ansb[i], answ[i]); } ","permalink":"/oi/i11rimport_052/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 有离线镜像还是能省不少流量。开心。不过流量还是用得飞快啊。\u0026lt;/p\u0026gt; \u0026nbsp;\n这就是个cdq重构的题。学习了前几天xyz大爷讲的扔线段树的做法，省了不少代码。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct node { int v, c; node *next; }; struct seg { int l, r; node *head; seg *ls, *rs; };\nconst int maxa = 209; const int maxn = 40009; const int maxm = 10009; const int maxnd = maxn * 23; const int mov[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};","title":"BZOJ1453 [Wc]Dface双面棋盘"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 报道日。看到了很多人，的名字。\u0026lt;/p\u0026gt; \u0026nbsp;\n然后在宿舍里拿手机连网。\n\u0026nbsp;\n证明我还是以上网的yeah。\n","permalink":"/diary/i11rimport_053/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 报道日。看到了很多人，的名字。\u0026lt;/p\u0026gt; \u0026nbsp;\n然后在宿舍里拿手机连网。\n\u0026nbsp;\n证明我还是以上网的yeah。","title":"20150208 WC2015 Day-1"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; bc的题。今天bc又挂了。这题没有写完，然后b题fst了。伤心啊。\u0026lt;/p\u0026gt; \u0026nbsp;\n其实思路比较简单。直接链剖dfs序上把所有区间找出来swap就好了。不过代码实现起来还是比较麻烦的，很容易绕晕。加上smt久了没写手生了，于是就调了一晚上。唉，我还是太年轻了。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstdlib\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct node { int v, s, sz, w, rv; node ls, rs; inline void update() { sz = 1; s = v; if (ls) { sz += ls-\u0026gt; sz; s += ls-\u0026gt; s; } if (rs) { sz += rs-\u0026gt; sz; s += rs-\u0026gt; s; } } inline void fix() { if (rv) { swap(ls, rs); if (ls) ls-\u0026gt; rv ^= 1; if (rs) rs-\u0026gt; rv ^= 1; rv = 0; } } }; typedef pair \u0026lt;node, node\u0026gt; npr;\nconst int maxn = 80009;\n#define szof(p) ((p)?(p-\u0026gt;sz):0) #define sof(p) ((p)?(p-\u0026gt;s):0) node nlst[maxn \u0026lt;\u0026lt; 1], np(nlst); node newNode(int v) { np-\u0026gt; ls = np-\u0026gt; rs = 0; np-\u0026gt; v = np-\u0026gt; s = v; np-\u0026gt; sz = 1; np-\u0026gt; rv = 0; #ifdef WIN32 np-\u0026gt; w = (rand() \u0026lt;\u0026lt; 16) | rand(); #else np-\u0026gt; w = rand(); #endif return np ++; } node* merge(node* p, node* q) { if (p) p-\u0026gt; fix(); else return q; if (q) q-\u0026gt; fix(); else return p; if (p-\u0026gt; w \u0026gt; q-\u0026gt; w) { p-\u0026gt; rs = merge(p-\u0026gt; rs, q); p-\u0026gt; update(); return p; } else { q-\u0026gt; ls = merge(p, q-\u0026gt; ls); q-\u0026gt; update(); return q; } } npr split(node* p, int k) { if (!k) return npr(0, p); else if (!p || p-\u0026gt; sz == k) return npr(p, 0); else { p-\u0026gt; fix(); if (k \u0026lt;= szof(p-\u0026gt; ls)) { npr g(split(p-\u0026gt; ls, k)); p-\u0026gt; ls = g. second; p-\u0026gt; update(); return npr(g. first, p); } else { npr g(split(p-\u0026gt; rs, k - szof(p-\u0026gt; ls) - 1)); p-\u0026gt; rs = g. first; p-\u0026gt; update(); return npr(p, g. second); } } } int smtQry(node* p, int k) { int s(0); while (p \u0026amp;\u0026amp; k) { p-\u0026gt; fix(); if (k \u0026lt;= szof(p-\u0026gt; ls)) p = p-\u0026gt; ls; else s += sof(p-\u0026gt; ls) + p-\u0026gt; v, k -= szof(p-\u0026gt; ls) + 1, p = p-\u0026gt; rs; } return s; }\nstruct edge { int t; edge *next; }; edge *head[maxn], elst[maxn \u0026lt;\u0026lt; 1], *ep(elst); inline void addEdge(int u, int v) { ep-\u0026gt; t = v; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\nint v[maxn], n, m; int tc, fa[maxn], d[maxn], sz[maxn], fs[maxn], fc[maxn], ch[maxn]; int dfb[maxn], dfo[maxn]; node *rt, *remp;\nvoid divide() { static int stc[maxn]; int tst(1), dfn(0); memset(fa, 0, sizeof(fa)); stc[tst] = 1; while (tst) { int p(stc[tst \u0026ndash;]); dfo[++ dfn] = p; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (e-\u0026gt; t ^ fa[p]) { fa[e-\u0026gt; t] = p; d[e-\u0026gt; t] = d[p] + 1; stc[++ tst] = e-\u0026gt; t; } } tc = 0; for (int i = n; i; \u0026ndash; i) { int p(dfo[i]); fs[p] = -1; sz[p] = 1; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (fa[e-\u0026gt; t] == p) { sz[p] += sz[e-\u0026gt; t]; if (fs[p] == -1 || sz[e-\u0026gt; t] \u0026gt; sz[fs[p]]) fs[p] = e-\u0026gt; t; } if (fs[p] == -1) fc[p] = ++ tc; else fc[p] = fc[fs[p]]; ch[fc[p]] = p; } stc[tst = 1] = 1; dfn = 0; while (tst) { int p(stc[tst \u0026ndash;]); dfo[++ dfn] = p; dfb[p] = dfn; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (fa[e-\u0026gt; t] == p \u0026amp;\u0026amp; e-\u0026gt; t != fs[p]) stc[++ tst] = e-\u0026gt; t; if (fs[p] != -1) stc[++ tst] = fs[p]; } rt = 0; for (int i = 1; i \u0026lt;= n; ++ i) rt = merge(rt, newNode(v[dfo[i]])); remp = 0; for (int i = 1; i \u0026lt;= n; ++ i) remp = merge(remp, newNode(-1)); }\nint query(int u, int v) { int s(0); while (fc[u] ^ fc[v]) if (d[ch[fc[u]]] \u0026gt; d[ch[fc[v]]]) { s += smtQry(rt, dfb[u]) - smtQry(rt, dfb[ch[fc[u]]] - 1); u = fa[ch[fc[u]]]; } else { s += smtQry(rt, dfb[v]) - smtQry(rt, dfb[ch[fc[v]]] - 1); v = fa[ch[fc[v]]]; } if (d[u] \u0026lt; d[v]) s += smtQry(rt, dfb[v]) - smtQry(rt, dfb[u] - 1); else s += smtQry(rt, dfb[u]) - smtQry(rt, dfb[v] - 1); return s; }\nbool checkTree(node* p, char e) { if (p) { if (p-\u0026gt; rv) { checkTree(p-\u0026gt; rs, 32); printf(\u0026quot;%d%c\u0026quot;, p-\u0026gt; v, e); checkTree(p-\u0026gt; ls, 32); } else { checkTree(p-\u0026gt; ls, 32); printf(\u0026quot;%d%c\u0026quot;, p-\u0026gt; v, e); checkTree(p-\u0026gt; rs, 32); } } return 0; }\ntypedef pair \u0026lt;int, int\u0026gt; rpr; rpr ra[maxn], rb[maxn]; void flip(int u, int v) { int tra(0), trb(0); while (fc[u] ^ fc[v]) { if (d[ch[fc[u]]] \u0026gt; d[ch[fc[v]]]) { ra[tra ++] = rpr(dfb[ch[fc[u]]], dfb[u]); u = fa[ch[fc[u]]]; } else { rb[trb ++] = rpr(dfb[ch[fc[v]]], dfb[v]); v = fa[ch[fc[v]]]; } } if (d[u] \u0026lt; d[v]) rb[trb ++] = rpr(dfb[u], dfb[v]); else ra[tra ++] = rpr(dfb[v], dfb[u]); node *cr(0); for (int i = 0; i \u0026lt; tra; ++ i) { npr x = split(rt, ra[i]. first - 1); npr y = split(x. second, ra[i]. second - ra[i]. first + 1); cr = merge(y. first, cr); npr z = split(remp, ra[i]. second - ra[i]. first + 1); remp = z. second; x. second = merge(z. first, y. second); rt = merge(x. first, x. second); } if (cr) cr-\u0026gt; rv ^= 1; for (int i = trb - 1; i \u0026gt;= 0; \u0026ndash; i) { npr x = split(rt, rb[i]. first - 1); npr y = split(x. second, rb[i]. second - rb[i]. first + 1); cr = merge(cr, y. first); npr z = split(remp, rb[i]. second - rb[i]. first + 1); remp = z. second; x. second = merge(z. first, y. second); rt = merge(x. first, x. second); } if (cr) cr-\u0026gt; rv ^= 1; for (int i = 0; i \u0026lt; tra; ++ i) { npr x = split(rt, ra[i]. first - 1); npr y = split(x. second, ra[i]. second - ra[i]. first + 1); npr z = split(cr, ra[i]. second - ra[i]. first + 1); cr = z. second; if (z. first) z. first-\u0026gt; rv ^= 1; x. second = merge(z. first, y. second); rt = merge(x. first, x. second); remp = merge(remp, y. first); } if (cr) cr-\u0026gt; rv ^= 1; for (int i = 0; i \u0026lt; trb; ++ i) { npr x = split(rt, rb[i]. first - 1); npr y = split(x. second, rb[i]. second - rb[i]. first + 1); npr z = split(cr, rb[i]. second - rb[i]. first + 1); cr = z. second; if (z. first) z. first-\u0026gt; rv ^= 1; x. second = merge(z. first, y. second); rt = merge(x. first, x. second); remp = merge(remp, y. first); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nmemset(head, 0, sizeof(head)); scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m); for (int i = 1; i \u0026amp;lt;= n; ++ i) scanf(\u0026quot;%d\u0026quot;, v + i); for (int i = 1; i \u0026amp;lt; n; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v); addEdge(u, v); addEdge(v, u); } divide(); while (m --) { int opt, u, v; scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;amp;opt, \u0026amp;amp;u, \u0026amp;amp;v); if (opt == 0) printf(\u0026quot;%d\\n\u0026quot;, query(u, v)); else flip(u, v); } } ","permalink":"/oi/i11rimport_054/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; bc的题。今天bc又挂了。这题没有写完，然后b题fst了。伤心啊。\u0026lt;/p\u0026gt; \u0026nbsp;\n其实思路比较简单。直接链剖dfs序上把所有区间找出来swap就好了。不过代码实现起来还是比较麻烦的，很容易绕晕。加上smt久了没写手生了，于是就调了一晚上。唉，我还是太年轻了。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstdlib\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct node { int v, s, sz, w, rv; node ls, rs; inline void update() { sz = 1; s = v; if (ls) { sz += ls-\u0026gt; sz; s += ls-\u0026gt; s; } if (rs) { sz += rs-\u0026gt; sz; s += rs-\u0026gt; s; } } inline void fix() { if (rv) { swap(ls, rs); if (ls) ls-\u0026gt; rv ^= 1; if (rs) rs-\u0026gt; rv ^= 1; rv = 0; } } }; typedef pair \u0026lt;node, node\u0026gt; npr;","title":"HDU5173 GTY's game II"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 这两天wa傻了都忘写总结了。\u0026lt;/p\u0026gt; \u0026nbsp;\n5号考试。乱写骗分弄了个rank3。mhy直接暴力过a题，怒拿rank1，orz。\n\u0026nbsp;\n6号lc讲课。没怎么听。都去写题去了。\n\u0026nbsp;\n今天考试。太神了不可做。第一题只会暴力和最简单的矩阵。不，最简单的矩阵还推错了。第二题题面有错再见。第三题神题没法做再见。\n\u0026nbsp;\n看来我还是太弱了。\n","permalink":"/diary/i11rimport_055/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 这两天wa傻了都忘写总结了。\u0026lt;/p\u0026gt; \u0026nbsp;\n5号考试。乱写骗分弄了个rank3。mhy直接暴力过a题，怒拿rank1，orz。\n\u0026nbsp;\n6号lc讲课。没怎么听。都去写题去了。\n\u0026nbsp;\n今天考试。太神了不可做。第一题只会暴力和最简单的矩阵。不，最简单的矩阵还推错了。第二题题面有错再见。第三题神题没法做再见。\n\u0026nbsp;\n看来我还是太弱了。","title":"20150205~07"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 看mhy写了好几天了啊。然后研究了一下，居然过得比他早。\u0026lt;/p\u0026gt; \u0026nbsp;\n首先敌人一定可以炸连续的一段。然后就是要看炸掉任意连续一段之后还有没有剩下的公共部分，既半平面交。\n\u0026nbsp;\n然后我yy出了一个半平面交的做法。找出一条基准直线，按方向顺时针方向排序。然后按照正常半平面交的方法根据栈顶两个元素和当前直线的位置关系判断是否需要退栈。然后当找到一条与基准直线的角度大于等于π的直线（直线是有向的，也可以说是成负角）且它把栈里退到只剩基准直线一条的时候，这些半平面没有交。否则这些半平面有交。\n\u0026nbsp;\n至于证明嘛，我也不会（挠头），毕竟是感受出来的。然后感觉这次代码写得比较漂亮，开心。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ninline double sqr(double x) { return x * x; }\nstruct point { double x, y; inline point() {} inline point(double x0, double y0) { x = x0, y = y0; } inline void read() { scanf(\u0026quot;%lf%lf\u0026quot;, \u0026amp;x, \u0026amp;y); } }; struct vect { double x, y; inline vect() {} inline vect(double x0, double y0) { x = x0, y = y0; } inline vect(point a, point b) { x = b. x - a. x, y = b. y - a. y; } inline vect vertical() { return vect(y, - x); } inline double length() { return sqrt(sqr(x) + sqr(y)); } }; struct line { point a; vect d; inline line() {} inline line(point u, point v) { a = u; d = vect(u, v); } };\nconst double eps = 1e-8;\ninline point operator +(const point\u0026amp; a, const vect\u0026amp; b) { return point(a. x + b. x, a. y + b. y); } inline double operator *(const vect\u0026amp; a, const vect\u0026amp; b) { return a. x * b. y - a. y * b. x; } inline vect operator *(const vect\u0026amp; a, double r) { return vect(a. x * r, a. y * r); } inline int sgn(double x) { return (fabs(x) \u0026lt; eps) ? 0 : ((x \u0026gt; 0) ? 1 : -1); }\nconst int maxn = 50009;\nint n, t, li[maxn], tst; point a[maxn], b[maxn]; line l[maxn];\ninline bool outSide(line l, point p) { return sgn(vect(l. a, p) * l. d) \u0026lt;= 0; }\npoint getCross(line l1, line l2) { point a(l1. a), b(l1. a + l1. d); point c(l2. a), d(l2. a + l2. d); if (!sgn(vect(d, c) * vect(d, b))) { d = l2. a + l2. d * 2.0; b = l1. a + l1. d * 2.0; } if (!sgn(vect(d, a) * vect(d, c))) a = l1. a + l1. d * 3.0; double sa(vect(d, a) * vect(d, c)); double sb(vect(d, c) * vect(d, b)); double rat(sa / (sa + sb)); return point(a + vect(a, b) * rat); }\nbool check(int t) { for (int i = 0; i \u0026lt; n; ++ i) l[i] = line(a[i], a[(i + t + 1) % n]); tst = 2; li[1] = 0; b[2] = getCross(l[0], l[1]); li[2] = 1; for (int i = 2; i \u0026lt; n; ++ i) { while (tst \u0026gt; 1 \u0026amp;\u0026amp; outSide(l[i], b[tst])) \u0026ndash; tst; if (tst == 1 \u0026amp;\u0026amp; sgn(l[i]. d * l[0]. d) \u0026lt;= 0) return 0; li[++ tst] = i; b[tst] = getCross(l[li[tst - 1]], l[i]); } return tst \u0026gt; 2; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); for (int i = 0; i \u0026amp;lt;\tn; ++ i) a[i]. read(); int l(1), r(n - 2); while (l \u0026amp;lt; r) { int mid((l + r) \u0026amp;gt;\u0026amp;gt; 1); if (check(mid)) l = mid + 1; else r = mid; } printf(\u0026quot;%d\\n\u0026quot;, l); } 顺便把写的画图的js粘上来好了。以后说不定还有用。\nJS not supported 5 0 0 0 10 10 20 20 10 25 0 ","permalink":"/oi/i11rimport_056/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 看mhy写了好几天了啊。然后研究了一下，居然过得比他早。\u0026lt;/p\u0026gt; \u0026nbsp;\n首先敌人一定可以炸连续的一段。然后就是要看炸掉任意连续一段之后还有没有剩下的公共部分，既半平面交。\n\u0026nbsp;\n然后我yy出了一个半平面交的做法。找出一条基准直线，按方向顺时针方向排序。然后按照正常半平面交的方法根据栈顶两个元素和当前直线的位置关系判断是否需要退栈。然后当找到一条与基准直线的角度大于等于π的直线（直线是有向的，也可以说是成负角）且它把栈里退到只剩基准直线一条的时候，这些半平面没有交。否则这些半平面有交。\n\u0026nbsp;\n至于证明嘛，我也不会（挠头），毕竟是感受出来的。然后感觉这次代码写得比较漂亮，开心。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ninline double sqr(double x) { return x * x; }\nstruct point { double x, y; inline point() {} inline point(double x0, double y0) { x = x0, y = y0; } inline void read() { scanf(\u0026quot;%lf%lf\u0026quot;, \u0026amp;x, \u0026amp;y); } }; struct vect { double x, y; inline vect() {} inline vect(double x0, double y0) { x = x0, y = y0; } inline vect(point a, point b) { x = b.","title":"BZOJ2642 Pku3968 Jungle Outpost"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 一道burnside，做了几次之后感觉比较经典了。然后发现网上居然没有题解。\u0026lt;/p\u0026gt; \u0026nbsp;\n枚举正整数拆分，既每个质换的长度。然后枚举gcd算每类置换的贡献。再用错排公式来算每类置换的数量。然后求和。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\n#define _l (long long int)\nconst int maxn = 63;\nint n, m, mod, ans, g[maxn][maxn]; int sq[maxn], tq, fac[maxn], finv[maxn], vinv[maxn];\nint modPow(int a, int x) { int s(1); for (; x; x \u0026gt;\u0026gt;= 1, a = _l a * a % mod) if (x \u0026amp; 1) s = _l s * a % mod; return s; }\nint gcd(int a, int b) { while (a) { register int c(b % a); b = a; a = c; } return b; }\nvoid addAns() { int t(0); for (int i = 1; i \u0026lt;= tq; ++ i) { t += sq[i] \u0026gt;\u0026gt; 1; //\tif (sq[i] \u0026gt; 1) //\t++ t; for (int j = 1; j \u0026lt; i; ++ j) t += g[sq[i]][sq[j]]; } t = modPow(m, t); for (int i = 1, j; i \u0026lt;= tq; i = j) { for (j = i; j \u0026lt;= tq \u0026amp;\u0026amp; sq[i] == sq[j]; ++ j) t = _l t * vinv[sq[j]] % mod; t = _l t * finv[j - i] % mod; } ans = (ans + t) % mod; }\nvoid dfs(int v, int l) { if (!v) addAns(); else { ++ tq; for (int i = 1; i \u0026lt;= l \u0026amp;\u0026amp; i \u0026lt;= v; ++ i) { sq[tq] = i; dfs(v - i, i); } \u0026ndash; tq; } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m, \u0026amp;amp;mod); fac[0] = finv[0] = 1; for (int i = 1; i \u0026amp;lt;= n; ++ i) { fac[i] = _l fac[i - 1] * i % mod; finv[i] = modPow(fac[i], mod - 2); vinv[i] = modPow(i, mod - 2); for (int j = 1; j \u0026amp;lt;= n; ++ j) g[i][j] = gcd(i, j); } tq = 0; dfs(n, n); printf(\u0026quot;%d\\n\u0026quot;, ans); } ","permalink":"/oi/i11rimport_057/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 一道burnside，做了几次之后感觉比较经典了。然后发现网上居然没有题解。\u0026lt;/p\u0026gt; \u0026nbsp;\n枚举正整数拆分，既每个质换的长度。然后枚举gcd算每类置换的贡献。再用错排公式来算每类置换的数量。然后求和。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\n#define _l (long long int)\nconst int maxn = 63;\nint n, m, mod, ans, g[maxn][maxn]; int sq[maxn], tq, fac[maxn], finv[maxn], vinv[maxn];\nint modPow(int a, int x) { int s(1); for (; x; x \u0026gt;\u0026gt;= 1, a = _l a * a % mod) if (x \u0026amp; 1) s = _l s * a % mod; return s; }","title":"BZOJ1815 [Shoi2006]color 有色图"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天是xyz大爷讲课。感觉讲的好多东西的时间复杂度看上去好看，实际实现起来还是比较麻烦的。尤其是对于我这种人来说。\u0026lt;/p\u0026gt; \u0026nbsp;\n停停停不是昨天才说了多难的代码都得写吗？\n\u0026nbsp;\n然后今天把出的题给搞定了。不过据说要一个月后才能骗到钱。不开心。\n\u0026nbsp;\n所以我还是年轻啦。抓紧时间玩玩guavas吧。\n","permalink":"/diary/i11rimport_058/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天是xyz大爷讲课。感觉讲的好多东西的时间复杂度看上去好看，实际实现起来还是比较麻烦的。尤其是对于我这种人来说。\u0026lt;/p\u0026gt; \u0026nbsp;\n停停停不是昨天才说了多难的代码都得写吗？\n\u0026nbsp;\n然后今天把出的题给搞定了。不过据说要一个月后才能骗到钱。不开心。\n\u0026nbsp;\n所以我还是年轻啦。抓紧时间玩玩guavas吧。","title":"20150204"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 再次考试。考得稍有起色。\u0026lt;/p\u0026gt; \u0026nbsp;\n做出了一道数据结构题，虽然是拿分块水的。\n\u0026nbsp;\n第二题想了不少东西不过都不对。ETT不会。然后正解比较神。平面图求域？也不会。\n\u0026nbsp;\n答案提交题比较逗，checker被很厉害的某些同学直接反编译了。现装了wine，为了解决字符集的问题最后还用vbox装了个xp。然后也发现没有多大用处。也就写了最简单的两个点，算是标准暴力分吧。\n\u0026nbsp;\n下午徐老师讲的东西还是比较有启发性的。竞赛，比的不仅仅是知识和能力以及思维，还有策略。当然前三者是基础。但是在考试之前，更多的还是要明白，心静手热才是最好的状态。\n\u0026nbsp;\n晚上吃了肥牛。吃的时候一时爽，整晚上都是酱油味，略不爽。\n\u0026nbsp;\n看到了zhx写的情系母校学法指导。觉得竞赛的生活，唉。无言以表。\n\u0026nbsp;\n然后花了一晚上出题的数据，还找到了队友帮我验题。然后发现我的压轴题是不是有点太难写了。汗。\n\u0026nbsp;\n所以毕竟我还是太年轻啊。\n","permalink":"/diary/i11rimport_059/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 再次考试。考得稍有起色。\u0026lt;/p\u0026gt; \u0026nbsp;\n做出了一道数据结构题，虽然是拿分块水的。\n\u0026nbsp;\n第二题想了不少东西不过都不对。ETT不会。然后正解比较神。平面图求域？也不会。\n\u0026nbsp;\n答案提交题比较逗，checker被很厉害的某些同学直接反编译了。现装了wine，为了解决字符集的问题最后还用vbox装了个xp。然后也发现没有多大用处。也就写了最简单的两个点，算是标准暴力分吧。\n\u0026nbsp;\n下午徐老师讲的东西还是比较有启发性的。竞赛，比的不仅仅是知识和能力以及思维，还有策略。当然前三者是基础。但是在考试之前，更多的还是要明白，心静手热才是最好的状态。\n\u0026nbsp;\n晚上吃了肥牛。吃的时候一时爽，整晚上都是酱油味，略不爽。\n\u0026nbsp;\n看到了zhx写的情系母校学法指导。觉得竞赛的生活，唉。无言以表。\n\u0026nbsp;\n然后花了一晚上出题的数据，还找到了队友帮我验题。然后发现我的压轴题是不是有点太难写了。汗。\n\u0026nbsp;\n所以毕竟我还是太年轻啊。","title":"20150203"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天休息。\u0026lt;/p\u0026gt; \u0026nbsp;\n上午去了西湖，租了三辆自行车。感觉自己通电发光了，1018W呢。试图从桥上冲下去拍双手脱把，虽然没拍到自己。虽然平时不骑车，也从来没有骑车上过街，不过其实骑车玩还是多好玩的。\n\u0026nbsp;\n中午去书吧，吃饭。好文艺。没想到闹市边上也会有这样安静之所。下午去步行街买了点礼品。\n\u0026nbsp;\n下午晚上写了2道题。紫荆花没有花想像中的那么多时间。陶陶的题最后发现是在逗。效率还是低啊。\n\u0026nbsp;\n出题的任务也确定了，又得奋斗了。\n","permalink":"/diary/i11rimport_060/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天休息。\u0026lt;/p\u0026gt; \u0026nbsp;\n上午去了西湖，租了三辆自行车。感觉自己通电发光了，1018W呢。试图从桥上冲下去拍双手脱把，虽然没拍到自己。虽然平时不骑车，也从来没有骑车上过街，不过其实骑车玩还是多好玩的。\n\u0026nbsp;\n中午去书吧，吃饭。好文艺。没想到闹市边上也会有这样安静之所。下午去步行街买了点礼品。\n\u0026nbsp;\n下午晚上写了2道题。紫荆花没有花想像中的那么多时间。陶陶的题最后发现是在逗。效率还是低啊。\n\u0026nbsp;\n出题的任务也确定了，又得奋斗了。","title":"20150202"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 推了半天，发现还是得sqrt，过不到啊。\u0026lt;/p\u0026gt; \u0026nbsp;\n然后发现与经典的问题相比，就是n=n。然后这不是做过的那个LCM sum的前缀和就完了嘛。傻了。\n\u0026nbsp;\n然后第一次MLE是因为明明压了8位，还是开了30长的数组。第二次WA是因为高精输出的时候%08d写成了%8d。是不是明天又要逗极而死了。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef long long dint;\n#define _l (long long int)\nconst int maxlen = 7; const dint base = 1e8; struct BigInt { dint dig[maxlen], len; BigInt() { len = 0; } void set(dint x) { dig[0] = x; len = 1; while (dig[len - 1] \u0026gt;= base) { dig[len] = dig[len - 1] / base; dig[len - 1] %= base; ++ len; } } void copy(const BigInt\u0026amp; x) { len = x. len; for (int i = 0; i \u0026lt; len; ++ i) dig[i] = x. dig[i]; } void inc(dint x) { if (!len) { dig[0] = x; len = 1; } else dig[0] += x; for (int i = 0; i \u0026lt; len - 1 \u0026amp;\u0026amp; dig[i] \u0026gt;= base; ++ i) { dig[i + 1] += dig[i] / base; dig[i] %= base; } while (dig[len - 1] \u0026gt;= base) { dig[len] = dig[len - 1] / base; dig[len - 1] %= base; ++ len; } } void print() { printf(\u0026quot;%d\u0026quot;, (int)dig[len - 1]); for (int i = len - 2; i \u0026gt;= 0; \u0026ndash; i) printf(\u0026quot;%08d\u0026quot;, (int)dig[i]); putchar(10); } };\nconst int maxn = 1000009;\nint tp, pn[maxn], phi[maxn]; dint tot[maxn]; BigInt ans[maxn]; bool pr[maxn];\nvoid pre(int n) { memset(pr, 0, sizeof(pr)); tp = 0; phi[1] = 1; for (int i = 2; i \u0026lt;= n; ++ i) { if (!pr[i]) { pn[tp ++] = i; phi[i] = i - 1; } for (int j = 0, t; j \u0026lt; tp \u0026amp;\u0026amp; (t = i * pn[j]) \u0026lt;= n; ++ j) { pr[t] = 1; if (i % pn[j]) phi[t] = phi[i] * phi[pn[j]]; else { phi[t] = phi[i] * pn[j]; break; } } } for (int i = 1; i \u0026lt;= n; ++ i) { dint d = (i == 1) ? 1 : (_l i * phi[i] \u0026gt;\u0026gt; 1); for (int j = 1, t; (t = j * i) \u0026lt;= n; ++ j) tot[t] += d; } ans[1]. set(1); for (int i = 2; i \u0026lt;= n; ++ i) { tot[i] = tot[i] * i; ans[i]. copy(ans[i - 1]); ans[i]. inc(tot[i] * 2 - i); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nint t; scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;t); pre(1e6); while (t --) { int n; scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); ans[n]. print(); } } ","permalink":"/oi/i11rimport_061/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 推了半天，发现还是得sqrt，过不到啊。\u0026lt;/p\u0026gt; \u0026nbsp;\n然后发现与经典的问题相比，就是n=n。然后这不是做过的那个LCM sum的前缀和就完了嘛。傻了。\n\u0026nbsp;\n然后第一次MLE是因为明明压了8位，还是开了30长的数组。第二次WA是因为高精输出的时候%08d写成了%8d。是不是明天又要逗极而死了。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\ntypedef long long dint;\n#define _l (long long int)\nconst int maxlen = 7; const dint base = 1e8; struct BigInt { dint dig[maxlen], len; BigInt() { len = 0; } void set(dint x) { dig[0] = x; len = 1; while (dig[len - 1] \u0026gt;= base) { dig[len] = dig[len - 1] / base; dig[len - 1] %= base; ++ len; } } void copy(const BigInt\u0026amp; x) { len = x.","title":"BZOJ2401 陶陶的难题I"},{"content":" 想起去年在考场上完全没有思路不想写数据结构于是骗了30分。现在想想当初还是naive。\n\u0026nbsp;\n这题看上去就是点分治。因为要动态加点所以要动态。然后利用替罪羊树的方法重构树上的一团东西（不能叫团，否则命名重复了）。\n\u0026nbsp;\n本来以为要写很久，结果也没写多久。奇怪的是，把maintain展开到insert里面之后就跑得飞快了，否则过不到而且根本跑不下来9和10。又丑了郁闷。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cctype\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int buf_len = 4000; const size_t buf_size = buf_len * sizeof(char); char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, buf_size, stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; }\nstruct edge { int t, v; edge *next; }; struct sbt_node { int vl, sz; sbt_node *ls, *rs; };\ntypedef long long dint;\n#ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif #define _l (long long int)\nconst int maxn = 100009; const int fmod = 1e9; const int maxl = 19; const int maxnd = maxn * maxl * 2; const int balc = 3; const double ublim = 0.9; const int inf = 0x3f3f3f3f;\ndint lans; int n; int ath[maxn][maxl], drt[maxn], dep[maxn]; int bd[maxn], bsz[maxn], bfa[maxn], br[maxn], r[maxn]; int stsz[maxn], vis[maxn], vist; sbt_node slst[maxnd], *sstc[maxnd], **sp, *brt[maxn], *prt[maxn]; edge *head[maxn], elst[maxn \u0026lt;\u0026lt; 1], *ep(elst);\nvoid pre() { for (int i = 0; i \u0026lt; maxnd; ++ i) { sstc[i] = slst + i; slst[i]. ls = slst[i]. rs = 0; } sp = sstc; vist = 0; memset(vis, 0, sizeof(vis)); }\ninline void addEdge(int u, int v, int w) { ep-\u0026gt; t = v; ep-\u0026gt; v = w; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\n#define szof(p) ((p)?(p-\u0026gt;sz):0) inline sbt_node* allocNode() { static sbt_node* ret; ret = (sp ++); if (ret-\u0026gt; ls) (\u0026ndash; sp) = ret-\u0026gt; ls; if (ret-\u0026gt; rs) (\u0026ndash; sp) = ret-\u0026gt; rs; return ret; } inline void lRot(sbt_node \u0026amp;p) { register sbt_node q(p-\u0026gt; ls); p-\u0026gt; ls = q-\u0026gt; rs; q-\u0026gt; rs = p; q-\u0026gt; sz = p-\u0026gt; sz; p-\u0026gt; sz = szof(p-\u0026gt; ls) + szof(p-\u0026gt; rs) + 1; p = q; } inline void rRot(sbt_node \u0026amp;p) { register sbt_node* q(p-\u0026gt; rs); p-\u0026gt; rs = q-\u0026gt; ls; q-\u0026gt; ls = p; q-\u0026gt; sz = p-\u0026gt; sz; p-\u0026gt; sz = szof(p-\u0026gt; ls) + szof(p-\u0026gt; rs) + 1; p = q; } inline void sbtIns(sbt_node* \u0026amp;p, int v0) { if (!p) { p = allocNode(); p-\u0026gt; ls = p-\u0026gt; rs = 0; p-\u0026gt; sz = 1; p-\u0026gt; vl = v0; } else { ++ p-\u0026gt; sz; if (v0 \u0026lt; p-\u0026gt; vl) { sbtIns(p-\u0026gt; ls, v0); if (szof(p-\u0026gt; ls) \u0026gt; szof(p-\u0026gt; rs) + balc) lRot(p); } else { sbtIns(p-\u0026gt; rs, v0); if (szof(p-\u0026gt; ls) + balc \u0026lt; szof(p-\u0026gt; rs)) rRot(p); } } } int sbtCntLower(sbt_node* p, int v0) { int s(0); while (p) if (v0 \u0026lt; p-\u0026gt; vl) p = p-\u0026gt; ls; else s += szof(p-\u0026gt; ls) + 1, p = p-\u0026gt; rs; return s; }\nint LCA(int u, int v) { if (dep[u] \u0026lt; dep[v]) swap(u, v); for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (dep[ath[u][i]] \u0026gt;= dep[v]) u = ath[u][i]; if (u == v) return u; for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (ath[u][i] ^ ath[v][i]) { u = ath[u][i]; v = ath[v][i]; } return ath[u][0]; } inline int dist(int u, int v) { int a(LCA(u, v)); return drt[u] + drt[v] - drt[a] * 2; }\nvoid insEach(sbt_node* q, sbt_node* \u0026amp;x, int mn) { static sbt_node* stc[maxn]; int tst(1); stc[1] = q; while (tst) { sbt_node* p(stc[tst \u0026ndash;]); sbtIns(x, p-\u0026gt; vl + mn); if (p-\u0026gt; ls) stc[++ tst] = p-\u0026gt; ls; if (p-\u0026gt; rs) stc[++ tst] = p-\u0026gt; rs; } } int build(int pbd, int pbr, int pbf) { static int q[maxn], fr[maxn], dst[maxn]; int hd(0), tl(1), ct(0), cs(inf); q[0] = pbr; fr[pbr] = 0; dst[pbr] = 0; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (bd[e-\u0026gt; t] == inf \u0026amp;\u0026amp; e-\u0026gt; t != fr[p]) { fr[e-\u0026gt; t] = p; dst[e-\u0026gt; t] = dst[p] + e-\u0026gt; v; q[tl ++] = e-\u0026gt; t; } } for (int ti = tl - 1, p; ti \u0026gt;= 0; \u0026ndash; ti) { int ms(1); p = q[ti]; stsz[p] = 1; for (edge* e = head[p]; e; e = e-\u0026gt; next) if (bd[e-\u0026gt; t] == inf \u0026amp;\u0026amp; e-\u0026gt; t != fr[p]) { stsz[p] += stsz[e-\u0026gt; t]; if (ms \u0026lt; stsz[e-\u0026gt; t]) ms = stsz[e-\u0026gt; t]; } if (ms \u0026lt; tl - stsz[p]) ms = tl - stsz[p]; if (ms \u0026lt; cs) { cs = ms; ct = p; } } for (int ti = 0, p; ti \u0026lt; tl; ++ ti) { p = q[ti]; sbtIns(prt[ct], dst[p] - r[p]); } bd[ct] = pbd; bsz[ct] = tl; bfa[ct] = pbf; br[ct] = pbr; sbtIns(brt[ct], -r[ct]); for (edge* e = head[ct]; e; e = e-\u0026gt; next) if (bd[e-\u0026gt; t] == inf) { int nr(build(pbd + 1, e-\u0026gt; t, ct)); insEach(prt[nr], brt[ct], e-\u0026gt; v); } return ct; }\nvoid rebuild(int p0, int pbd, int pbr, int pbf) { static int q[maxn]; int hd(0), tl(1); ++ vist; vis[p0] = vist; q[0] = p0; while (hd \u0026lt; tl) { int p(q[hd ++]); *(\u0026ndash; sp) = brt[p]; (\u0026ndash; sp) = prt[p]; brt[p] = 0; prt[p] = 0; for (edge e = head[p]; e; e = e-\u0026gt; next) if (bd[e-\u0026gt; t] \u0026gt; pbd \u0026amp;\u0026amp; vis[e-\u0026gt; t] \u0026lt; vist) { vis[e-\u0026gt; t] = vist; q[tl ++] = e-\u0026gt; t; } } for (int i = 0; i \u0026lt; tl; ++ i) bd[q[i]] = inf; build(pbd, pbr, pbf); }\nvoid addNode(int p) { brt[p] = 0; sbtIns(brt[p], -r[p]); prt[p] = 0; sbtIns(prt[p], -r[p]); if (p == 1) { bd[p] = 1; bsz[p] = 1; bfa[p] = 0; br[p] = 1; } else { register int fa(ath[p][0]); bd[p] = bd[fa] + 1; bsz[p] = 1; bfa[p] = fa; br[p] = p; int q(fa), l(p), ubp, dt(0); double ubv(0); while (q) { ++ bsz[q]; if ((double)bsz[l] / bsz[q] \u0026gt; ubv) { ubv = (double)bsz[l] / bsz[q]; ubp = q; } int d0(dist(p, q)); sbtIns(brt[q], d0 - r[p]); sbtIns(prt[q], dist(br[q], p) - r[p]); dt += sbtCntLower(brt[q], r[p] - d0) - sbtCntLower(prt[l], r[p] - d0 - dist(br[l], q)); l = q; q = bfa[q]; } lans += dt; if (ubv \u0026gt; ublim) rebuild(ubp, bd[ubp], br[ubp], bfa[ubp]); } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\npre(); readInt(n); readInt(n); lans = 0; for (int i = 1; i \u0026amp;lt;= n; ++ i) { int fa; readInt(fa); readInt(drt[i]); readInt(r[i]); if (i \u0026amp;gt; 1) { fa ^= lans % fmod; dep[i] = dep[fa] + 1; addEdge(fa, i, drt[i]); addEdge(i, fa, drt[i]); drt[i] += drt[fa]; ath[i][0] = fa; for (int j = 1; j \u0026amp;lt; maxl; ++ j) ath[i][j] = ath[ath[i][j - 1]][j - 1]; } else { dep[i] = 1; } addNode(i); printf(lld \u0026quot;\\n\u0026quot;, lans); } } ","permalink":"/oi/i11rimport_062/","summary":"想起去年在考场上完全没有思路不想写数据结构于是骗了30分。现在想想当初还是naive。\n\u0026nbsp;\n这题看上去就是点分治。因为要动态加点所以要动态。然后利用替罪羊树的方法重构树上的一团东西（不能叫团，否则命名重复了）。\n\u0026nbsp;\n本来以为要写很久，结果也没写多久。奇怪的是，把maintain展开到insert里面之后就跑得飞快了，否则过不到而且根本跑不下来9和10。又丑了郁闷。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cctype\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int buf_len = 4000; const size_t buf_size = buf_len * sizeof(char); char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, buf_size, stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; }","title":"BZOJ3435 [Wc2014]紫荆花之恋"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 白天JZP讲课。上午讲数学之类的玩意然后又走神了发现听不懂。\u0026lt;/p\u0026gt; \u0026nbsp;\n下午讲了好多题都是做过的。比较开心。然后给noi-linux装上了ati的官方驱动，分辨率终于正常了。然后把gnome2的特效开到最高之后竟然发现窗口移动有果冻一样的效果，玩了好久。\n\u0026nbsp;\n晚上打hiho，果然又发现了jcvb的身影。好不容易暴手速敲完b，然后发现他早过了，虽然后来发现是我写复杂了，晕。然后当我敲完a的时候发现他敲完了c。然后c的分是a的三倍，晕。最后还是硬把c给yy出来了，感觉还是一道好题啊，以后出题啥的可以考虑。毕竟期望题一般我也懒得想。然后d题直接放弃了。感觉今天的hiho是在宣传一个叫啥忘了的卡牌游戏？然后a和d的题目质量稀撇。\n\u0026nbsp;\n三道题的做法么。\n\u0026nbsp;\na题直接dfs就好了。数据范围太小了点。虽然坑点略多。\n\u0026nbsp;\nb题就是维护一下左边的一堆玩意的啥乘积和一样的玩意？水水的线段树，发现每次我写线段树都写得比别人麻烦。\n\u0026nbsp;\nc题比较好玩。用f[i]表示i号点与它的父亲点不同色的概率，也就是它对答案造成+1贡献的概率，然后每次bfs一下，按它和它的父亲距起点的距离讨论一下就好了。\n\u0026nbsp;\n于是我还是太弱了又被吊打了。\n\u0026nbsp;\n明天休息，开心。\n","permalink":"/diary/i11rimport_063/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 白天JZP讲课。上午讲数学之类的玩意然后又走神了发现听不懂。\u0026lt;/p\u0026gt; \u0026nbsp;\n下午讲了好多题都是做过的。比较开心。然后给noi-linux装上了ati的官方驱动，分辨率终于正常了。然后把gnome2的特效开到最高之后竟然发现窗口移动有果冻一样的效果，玩了好久。\n\u0026nbsp;\n晚上打hiho，果然又发现了jcvb的身影。好不容易暴手速敲完b，然后发现他早过了，虽然后来发现是我写复杂了，晕。然后当我敲完a的时候发现他敲完了c。然后c的分是a的三倍，晕。最后还是硬把c给yy出来了，感觉还是一道好题啊，以后出题啥的可以考虑。毕竟期望题一般我也懒得想。然后d题直接放弃了。感觉今天的hiho是在宣传一个叫啥忘了的卡牌游戏？然后a和d的题目质量稀撇。\n\u0026nbsp;\n三道题的做法么。\n\u0026nbsp;\na题直接dfs就好了。数据范围太小了点。虽然坑点略多。\n\u0026nbsp;\nb题就是维护一下左边的一堆玩意的啥乘积和一样的玩意？水水的线段树，发现每次我写线段树都写得比别人麻烦。\n\u0026nbsp;\nc题比较好玩。用f[i]表示i号点与它的父亲点不同色的概率，也就是它对答案造成+1贡献的概率，然后每次bfs一下，按它和它的父亲距起点的距离讨论一下就好了。\n\u0026nbsp;\n于是我还是太弱了又被吊打了。\n\u0026nbsp;\n明天休息，开心。","title":"20150201"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 首先是burnside，对于旋转x下都要当作一个置换，所以总共有n个。然后第i个的不动点数量等于n\u0026lt;sup\u0026gt;gcd(n,i)\u0026lt;/sup\u0026gt;，然后统计一下个数是phi(gcd(n,i))个。\u0026lt;/p\u0026gt; \u0026nbsp;\n然后发现要用奇奇怪怪的东西来求phi。我用的方法是分解质因数然后DFS，跑得飞快。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\n#define _l (long long int)\nconst int maxn = 50009;\nint n, mod; int tp, pn[maxn], phi[maxn]; bool pr[maxn];\nvoid pre() { memset(pr, 0, sizeof(pr)); tp = 0; phi[1] = 1; for (int i = 2; i \u0026lt; maxn; ++ i) { if (!pr[i]) { pn[tp ++] = i; phi[i] = i - 1; } for (int j = 0; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j] \u0026lt; maxn; ++ j) { pr[i * pn[j]] = 1; if (i % pn[j] == 0) { phi[i * pn[j]] = phi[i] * pn[j]; break; } else phi[i * pn[j]] = phi[i] * phi[pn[j]]; } } }\nint modPow(int a, int x) { int s(1); for (a %= mod; x; x \u0026gt;\u0026gt;= 1, a = _l a * a % mod) if (x \u0026amp; 1) s = _l s * a % mod; return s; }\nint fv[maxn], fc[maxn], tv, ans;\nvoid dfs(int p, int pf, int pv) { if (p == tv) ans = (ans + _l modPow(n, pv - 1) * pf) % mod; else { dfs(p + 1, pf, pv); pf *= fv[p] - 1; pv /= fv[p]; dfs(p + 1, pf, pv); for (int i = 2; i \u0026lt;= fc[p]; ++ i) { pf *= fv[p]; pv /= fv[p]; dfs(p + 1, pf, pv); } } }\nint calc() { int x(n); tv = 0; for (int i = 0; i \u0026lt; tp \u0026amp;\u0026amp; x \u0026gt; 1; ++ i) if (x % pn[i] == 0) { fv[tv] = pn[i]; fc[tv] = 0; while (x % pn[i] == 0) { ++ fc[tv]; x /= pn[i]; } ++ tv; } if (x \u0026gt; 1) { fv[tv] = x; fc[tv] = 1; ++ tv; } ans = 0; dfs(0, 1, n); return ans; }\nint main() { //freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); int t; pre(); scanf(\u0026quot;%d\u0026quot;, \u0026amp;t); while (t \u0026ndash;) { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;n, \u0026amp;mod); if (mod == 1) puts(\u0026ldquo;0\u0026rdquo;); else printf(\u0026quot;%d\\n\u0026quot;, calc()); } }\n","permalink":"/oi/i11rimport_064/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 首先是burnside，对于旋转x下都要当作一个置换，所以总共有n个。然后第i个的不动点数量等于n\u0026lt;sup\u0026gt;gcd(n,i)\u0026lt;/sup\u0026gt;，然后统计一下个数是phi(gcd(n,i))个。\u0026lt;/p\u0026gt; \u0026nbsp;\n然后发现要用奇奇怪怪的东西来求phi。我用的方法是分解质因数然后DFS，跑得飞快。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\n#define _l (long long int)\nconst int maxn = 50009;\nint n, mod; int tp, pn[maxn], phi[maxn]; bool pr[maxn];\nvoid pre() { memset(pr, 0, sizeof(pr)); tp = 0; phi[1] = 1; for (int i = 2; i \u0026lt; maxn; ++ i) { if (!pr[i]) { pn[tp ++] = i; phi[i] = i - 1; } for (int j = 0; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j] \u0026lt; maxn; ++ j) { pr[i * pn[j]] = 1; if (i % pn[j] == 0) { phi[i * pn[j]] = phi[i] * pn[j]; break; } else phi[i * pn[j]] = phi[i] * phi[pn[j]]; } } }","title":"POJ2154 Color"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 又是考试的一天。JZP出的题ORZ。\u0026lt;/p\u0026gt; \u0026nbsp;\n因为有答案提交题所以其它题基本都弃疗了，不过答案提交题做得也比较惨。\n\u0026nbsp;\n第一题是burnside套burnside。最后15分钟的时候把内层写了，外层太难想就写了个暴力，然后用考试的1/20的时间得了接近一半的分。\n\u0026nbsp;\n第二题三维算几看上去就恶心。直接乱骗分显然是不行的。然后听讲之后发现我自己想得还是比较麻烦，解析几何里面有一些更简单的做法。\n\u0026nbsp;\n第三题还是停留在纯随机的水平上，也没有仔细分析数据，于是嘛，再见了。\n\u0026nbsp;\n晚上出去吃饭没有打成BC，然后回来之后看了下题发现不打是英明的因为我都不会做。\n\u0026nbsp;\n毕竟我还是太弱了。\n","permalink":"/diary/i11rimport_065/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 又是考试的一天。JZP出的题ORZ。\u0026lt;/p\u0026gt; \u0026nbsp;\n因为有答案提交题所以其它题基本都弃疗了，不过答案提交题做得也比较惨。\n\u0026nbsp;\n第一题是burnside套burnside。最后15分钟的时候把内层写了，外层太难想就写了个暴力，然后用考试的1/20的时间得了接近一半的分。\n\u0026nbsp;\n第二题三维算几看上去就恶心。直接乱骗分显然是不行的。然后听讲之后发现我自己想得还是比较麻烦，解析几何里面有一些更简单的做法。\n\u0026nbsp;\n第三题还是停留在纯随机的水平上，也没有仔细分析数据，于是嘛，再见了。\n\u0026nbsp;\n晚上出去吃饭没有打成BC，然后回来之后看了下题发现不打是英明的因为我都不会做。\n\u0026nbsp;\n毕竟我还是太弱了。","title":"20150131"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 立杰讲课orz。ioi金牌，讲的东西也比较深。因为去年wc的时候直接睡过去了，心怀欠意，于是还是认真做了下笔记。\u0026lt;/p\u0026gt; \u0026nbsp;\n讲了一堆东西。期望，DS，DP和DP套DP，网络流。然后感觉还是有很多新的不同的思路。以后要认真听课啊。而且发现做笔记是一个让自己不走神的好方法。勤动笔。\n\u0026nbsp;\n晚上去街上逛了一下，其实也只是到另一个街区里绕了点路而已。然后吃了碗大概有点辣味的酸菜牛肉面。开心。\n\u0026nbsp;\n然后晚上就调一道水水的MIDDLE就花了两个多小时。学会了函数指针的用法，感觉以后做标记维护比较复杂的题在代码上会稍微好些。然后只是在纠结一个很小的问题就是到底怎么二分，一直没有理清楚。\n\u0026nbsp;\n所以我还是太弱了。\n","permalink":"/diary/i11rimport_066/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 立杰讲课orz。ioi金牌，讲的东西也比较深。因为去年wc的时候直接睡过去了，心怀欠意，于是还是认真做了下笔记。\u0026lt;/p\u0026gt; \u0026nbsp;\n讲了一堆东西。期望，DS，DP和DP套DP，网络流。然后感觉还是有很多新的不同的思路。以后要认真听课啊。而且发现做笔记是一个让自己不走神的好方法。勤动笔。\n\u0026nbsp;\n晚上去街上逛了一下，其实也只是到另一个街区里绕了点路而已。然后吃了碗大概有点辣味的酸菜牛肉面。开心。\n\u0026nbsp;\n然后晚上就调一道水水的MIDDLE就花了两个多小时。学会了函数指针的用法，感觉以后做标记维护比较复杂的题在代码上会稍微好些。然后只是在纠结一个很小的问题就是到底怎么二分，一直没有理清楚。\n\u0026nbsp;\n所以我还是太弱了。","title":"20150130"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 老久之前就看到过的题，不过不会做。今天晚上也是花了差不多俩小时才调过，虽然大概一个半小时都在纠结二分怎么写的问题。我没救了。\u0026lt;/p\u0026gt; \u0026nbsp;\n考虑经典的中位数二分，是把≤x的数字取-1，\u0026gt;x的数取1，然后算最大子串看是否大于-1或1中的某一个，具体要看题目要求偶数是取上整还是下整什么的。\n\u0026nbsp;\n然后这题就把所有东西排序之后拿可持久化线段树把这个序列搞出来，然后照着之前的思路二分就好了。线段树用来维护最大和最小前缀和。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct dat { int sm, s; }; struct seg { int l, r; dat v[2]; seg *ls, *rs; };\n#define _l (long long int)\ntypedef pair \u0026lt;int, int\u0026gt; vpr; typedef dat(*dat_mf)(const dat\u0026amp;, const dat\u0026amp;);\nconst int maxn = 20009; const int maxnd = maxn * 19; const dat null_str = {0, 0}; const dat neg_str0 = {-1, -1}; const dat neg_str1 = {-1, -1}; const dat pos_str0 = {1, 1}; const dat pos_str1 = {1, 1};\nvpr a[maxn]; int n, m, q[4], lans, maxv; seg slst[maxnd], *sp(slst), *rt[maxn];\n#define mid(p) ((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\ndat ret; inline dat merd0(const dat\u0026amp; a, const dat\u0026amp; b) { ret. sm = a. sm + b. sm; ret. s = min(a. s, a. sm + b. s); return ret; } inline dat merd1(const dat\u0026amp; a, const dat\u0026amp; b) { ret. sm = a. sm + b. sm; ret. s = max(a. s, a. sm + b. s); return ret; } const dat_mf dmf[2] = {merd0, merd1}; inline dat addSum(const int\u0026amp; v, const dat\u0026amp; a) { ret. s = a. s + v; ret. sm = a. sm + v; return ret; }\nseg* sgtBuild(int l, int r) { seg *p(sp ++); p-\u0026gt; l = l; p-\u0026gt; r = r; if (l + 1 == r) { p-\u0026gt; v[0] = neg_str0; p-\u0026gt; v[1] = neg_str1; } else { p-\u0026gt; ls = sgtBuild(l, mid(p)); p-\u0026gt; rs = sgtBuild(mid(p), r); p-\u0026gt; v[0] = merd0(p-\u0026gt; ls-\u0026gt; v[0], p-\u0026gt; rs-\u0026gt; v[0]); p-\u0026gt; v[1] = merd1(p-\u0026gt; ls-\u0026gt; v[1], p-\u0026gt; rs-\u0026gt; v[1]); } return p; }\nseg* sgtChg(seg* q, int p0) { seg* p(sp ++); p-\u0026gt; l = q-\u0026gt; l; p-\u0026gt; r = q-\u0026gt; r; if (p-\u0026gt; l + 1 == p-\u0026gt; r) { p-\u0026gt; v[0] = pos_str0; p-\u0026gt; v[1] = pos_str1; } else { if (p0 \u0026lt; mid(p)) { p-\u0026gt; ls = sgtChg(q-\u0026gt; ls, p0); p-\u0026gt; rs = q-\u0026gt; rs; } else { p-\u0026gt; ls = q-\u0026gt; ls; p-\u0026gt; rs = sgtChg(q-\u0026gt; rs, p0); } p-\u0026gt; v[0] = merd0(p-\u0026gt; ls-\u0026gt; v[0], p-\u0026gt; rs-\u0026gt; v[0]); p-\u0026gt; v[1] = merd1(p-\u0026gt; ls-\u0026gt; v[1], p-\u0026gt; rs-\u0026gt; v[1]); } return p; }\nint qv; dat sgtQry(seg* p, int l, int r) { if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r) return p-\u0026gt; v[qv]; else if (r \u0026lt;= mid(p)) return sgtQry(p-\u0026gt; ls, l, r); else if (l \u0026gt;= mid(p)) return addSum(p-\u0026gt; ls-\u0026gt; v[0]. sm, sgtQry(p-\u0026gt; rs, l, r)); else return dmf[qv](sgtQry(p-\u0026gt; ls, l, mid(p)), sgtQry(p-\u0026gt; rs, mid(p), r)); }\nvoid pstat(seg* p, bool sr = 1) { if (p-\u0026gt; l + 1 == p-\u0026gt; r) printf(\u0026quot;%d \u0026ldquo;, p-\u0026gt; v[0]. sm); else { pstat(p-\u0026gt; ls, 0); pstat(p-\u0026gt; rs, 0); } if (sr) putchar(10); }\nint minSum(int x) { int v0, v1; qv = 1; if (q[0] == 0) v0 = max(0, sgtQry(rt[x], 0, q[1]). s); else v0 = sgtQry(rt[x], q[0] - 1, q[1]). s; qv = 0; v1 = sgtQry(rt[x], q[2], q[3] + 1). s; return v1 - v0; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); for (int i = 0; i \u0026amp;lt; n; ++ i) scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;a[i]. first), a[i]. second = i; sort(a, a + n); rt[0] = sgtBuild(0, n); for (int i = 1; i \u0026amp;lt;= n; ++ i) rt[i] = sgtChg(rt[i - 1], a[i - 1]. second); scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;m); lans = 0; while (m --) { for (int i = 0; i \u0026amp;lt; 4; ++ i) { scanf(\u0026quot;%d\u0026quot;, q + i); q[i] = (_l q[i] + lans) % n; } sort(q, q + 4); int l(0), r(n - 1); while (l \u0026amp;lt; r) { int md((l + r + 1) \u0026amp;gt;\u0026amp;gt; 1); if (minSum(md) \u0026amp;gt; 0) r = md - 1; else l = md; } printf(\u0026quot;%d\\n\u0026quot;, (lans = a[l]. first)); } } ","permalink":"/oi/i11rimport_067/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 老久之前就看到过的题，不过不会做。今天晚上也是花了差不多俩小时才调过，虽然大概一个半小时都在纠结二分怎么写的问题。我没救了。\u0026lt;/p\u0026gt; \u0026nbsp;\n考虑经典的中位数二分，是把≤x的数字取-1，\u0026gt;x的数取1，然后算最大子串看是否大于-1或1中的某一个，具体要看题目要求偶数是取上整还是下整什么的。\n\u0026nbsp;\n然后这题就把所有东西排序之后拿可持久化线段树把这个序列搞出来，然后照着之前的思路二分就好了。线段树用来维护最大和最小前缀和。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct dat { int sm, s; }; struct seg { int l, r; dat v[2]; seg *ls, *rs; };\n#define _l (long long int)\ntypedef pair \u0026lt;int, int\u0026gt; vpr; typedef dat(*dat_mf)(const dat\u0026amp;, const dat\u0026amp;);\nconst int maxn = 20009; const int maxnd = maxn * 19; const dat null_str = {0, 0}; const dat neg_str0 = {-1, -1}; const dat neg_str1 = {-1, -1}; const dat pos_str0 = {1, 1}; const dat pos_str1 = {1, 1};","title":"BZOJ2653 middle"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; ioi的数据结构题，果然还是比较BT的。\u0026lt;/p\u0026gt; \u0026nbsp;\n做法是对颜色分开，大的颜色预处理，小的颜色直接暴力。\n\u0026nbsp;\n然后一个小错又坑了好久。我真的没救了。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstdlib\u0026gt; #include \u0026lt;cctype\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int buf_len = 4000; const size_t buf_size = buf_len * sizeof(char); char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, buf_size, stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; }\nstruct edge { int t; edge *next; }; typedef pair \u0026lt;int, int\u0026gt; ninfo; typedef long long dint;\n#ifdef WIN32 #define lld \u0026ldquo;%I64d\u0026rdquo; #else #define lld \u0026ldquo;%lld\u0026rdquo; #endif\nconst int maxn = 200009; const int maxb = 259; const int maxbn = 800; const int maxc = 25009;\nint n, r, q, c[maxn], bi[maxc], bc[maxn], nod[maxn]; int dfb[maxn], dfe[maxn], dfo[maxn]; dint bn[maxb][maxc], nb[maxb][maxc]; edge *head[maxn], elst[maxn], *ep(elst); ninfo ni[maxn], ci[maxn];\nstruct bin_tree { int a[maxn], t[maxn], c; bin_tree() { c = 0; memset(t, 0, sizeof(t)); } void chg(int p, int v) { for (; p \u0026lt;= n; p += (p \u0026amp; -p)) if (t[p] \u0026lt; c) t[p] = c, a[p] = v; else a[p] += v; } int qry(int p) { int s(0); for (; p; p -= (p \u0026amp; -p)) if (t[p] == c) s += a[p]; return s; } };\nbin_tree bt;\ninline void addEdge(int u, int v) { ep-\u0026gt; t = v; ep-\u0026gt; next = head[u]; head[u] = ep ++; }\nvoid buildTree() { static int stc[maxn]; int tst(1), dfn(0); stc[1] = 1; while (tst) { int p(stc[tst \u0026ndash;]); dfo[dfb[p] = dfe[p] = ++ dfn] = p; for (edge* e = head[p]; e; e = e-\u0026gt; next) stc[++ tst] = e-\u0026gt; t; } for (int ti = n; ti; \u0026ndash; ti) { int p(dfo[ti]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (dfe[e-\u0026gt; t] \u0026gt; dfe[p]) dfe[p] = dfe[e-\u0026gt; t]; } }\nvoid preAns() { static int ca[maxn], cb[maxn]; memset(bn, 0, sizeof(bn)); memset(nb, 0, sizeof(nb)); for (int i = 1; i \u0026lt;= n; ++ i) ni[i - 1] = ninfo(c[i], i); sort(ni, ni + n); memset(cb, 0, sizeof(cb)); memset(bi, -1, sizeof(bi)); int tb(0); for (int i = 0, j; i \u0026lt; n; i = j) { for (j = i; j \u0026lt; n \u0026amp;\u0026amp; ni[j]. first == ni[i]. first; ++ j) nod[j] = ni[j]. second; bc[ni[i]. first] = i; ci[tb ++] = ninfo(i - j, ni[i] .first); } sort(ci, ci + tb); for (int ti = 0; ti \u0026lt; tb \u0026amp;\u0026amp; ti \u0026lt; maxb; ++ ti) { int i(bc[ci[ti]. second]), j(i - ci[ti]. first); bi[ni[i]. first] = ti; memset(ca, 0, sizeof(ca)); memset(cb, 0, sizeof(cb)); for (int k = i; k \u0026lt; j; ++ k) { ++ ca[dfb[nod[k]]]; ++ cb[dfb[nod[k]]]; \u0026ndash; cb[dfe[nod[k]] + 1]; } for (int k = 1; k \u0026lt;= n; ++ k) ca[k] += ca[k - 1], cb[k] += cb[k - 1]; for (int p = 1; p \u0026lt;= n; ++ p) { nb[ti][c[p]] += ca[dfe[p]] - ca[dfb[p] - 1]; bn[ti][c[p]] += cb[dfb[p]]; } } }\ndint query(int r1, int r2) { dint ans(0); ++ bt. c; for (int i = bc[r2]; i \u0026lt; n \u0026amp;\u0026amp; c[nod[i]] == r2; ++ i) bt. chg(dfb[nod[i]], 1); for (int i = bc[r1]; i \u0026lt; n \u0026amp;\u0026amp; c[nod[i]] == r1; ++ i) ans += bt. qry(dfe[nod[i]]) - bt. qry(dfb[nod[i]] - 1); return ans; }\nint main() { #ifndef ONLINE_JUDGE //freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nreadInt(n); readInt(r); readInt(q); readInt(c[1]); memset(head, 0, sizeof(head)); for (int i = 2; i \u0026amp;lt;= n; ++ i) { int u; readInt(u); readInt(c[i]); addEdge(u, i); } buildTree(); preAns(); while (q --) { int r1, r2; readInt(r1); readInt(r2); if (bi[r1] \u0026amp;gt; -1) printf(lld \u0026quot;\\n\u0026quot;, bn[bi[r1]][r2]); else if (bi[r2] \u0026amp;gt; -1) printf(lld \u0026quot;\\n\u0026quot;, nb[bi[r2]][r1]); else printf(lld \u0026quot;\\n\u0026quot;, query(r1, r2)); } } ","permalink":"/oi/i11rimport_068/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; ioi的数据结构题，果然还是比较BT的。\u0026lt;/p\u0026gt; \u0026nbsp;\n做法是对颜色分开，大的颜色预处理，小的颜色直接暴力。\n\u0026nbsp;\n然后一个小错又坑了好久。我真的没救了。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstdlib\u0026gt; #include \u0026lt;cctype\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int buf_len = 4000; const size_t buf_size = buf_len * sizeof(char); char buf[buf_len], *bufb(buf), *bufe(buf + 1); #define readBuf() { if (++ bufb == bufe) bufe = (bufb = buf) + fread(buf, 1, buf_size, stdin); } #define readInt(x) { register int s(0); do { readBuf(); } while (!isdigit(*bufb)); do { s = s * 10 + *bufb - 48; readBuf(); } while (isdigit(*bufb)); x = s; }","title":"BZOJ3351 [ioi2009]Regions"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 又考挂了。\u0026lt;/p\u0026gt; \u0026nbsp;\n应该是早就能预测到这一点的。只是自己还太naive了而已。\n\u0026nbsp;\n记得很久之前就给自己下过定义，只会复制，不会创造。只是个匠人的命。现在想想，也是。\n\u0026nbsp;\n大概真的是省选之后就可以回班上认真上课了吧。到时候不要再回实验楼。\n\u0026nbsp;\n发现自己根本没有办法集中注意力。也不知道自己到底在干啥？\n\u0026nbsp;\n是该被淘汰了。\n","permalink":"/diary/i11rimport_069/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 又考挂了。\u0026lt;/p\u0026gt; \u0026nbsp;\n应该是早就能预测到这一点的。只是自己还太naive了而已。\n\u0026nbsp;\n记得很久之前就给自己下过定义，只会复制，不会创造。只是个匠人的命。现在想想，也是。\n\u0026nbsp;\n大概真的是省选之后就可以回班上认真上课了吧。到时候不要再回实验楼。\n\u0026nbsp;\n发现自己根本没有办法集中注意力。也不知道自己到底在干啥？\n\u0026nbsp;\n是该被淘汰了。","title":"20150129"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 听了一天的课。很多都是和计算几何有关的东西。计算几何印象中一般都是省选里的压轴题，代码量恶心。然后也比较orz。好多东西都没听懂，且有催眠的效果，于是下午果(bei)断(po)选择弃疗自己写题。\u0026lt;/p\u0026gt; \u0026nbsp;\n上午讲的杂题。然后simpson啥的，然后就去写lemon tree了。感觉这个还是非常有用的，而且代码量也令人开心。然后也讲到了我做过的原题，但是又想不起来怎么做了。囧。看来我还是要xxxx啊。\n\u0026nbsp;\n下午讲了一些线性代数相关的东西。矩阵行列式啥的基本没听懂，待会再去消化一下。然后三维算几，这个太恶心了。然后才明白同桌用矩阵算叉积是多么厉害。还发现平面的法向量的求法，以后如果还有机会遇到解析几何题的话可以试试。再有就是那个矩阵求生成树啥的，比较神奇。然后要先补一下行列式。\n\u0026nbsp;\n晚上把simpson写了，然后xxxx。\n\u0026nbsp;\n明天要考试，开心。\n\u0026nbsp;\n所以毕竟我还是太年轻了。\n","permalink":"/diary/i11rimport_070/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 听了一天的课。很多都是和计算几何有关的东西。计算几何印象中一般都是省选里的压轴题，代码量恶心。然后也比较orz。好多东西都没听懂，且有催眠的效果，于是下午果(bei)断(po)选择弃疗自己写题。\u0026lt;/p\u0026gt; \u0026nbsp;\n上午讲的杂题。然后simpson啥的，然后就去写lemon tree了。感觉这个还是非常有用的，而且代码量也令人开心。然后也讲到了我做过的原题，但是又想不起来怎么做了。囧。看来我还是要xxxx啊。\n\u0026nbsp;\n下午讲了一些线性代数相关的东西。矩阵行列式啥的基本没听懂，待会再去消化一下。然后三维算几，这个太恶心了。然后才明白同桌用矩阵算叉积是多么厉害。还发现平面的法向量的求法，以后如果还有机会遇到解析几何题的话可以试试。再有就是那个矩阵求生成树啥的，比较神奇。然后要先补一下行列式。\n\u0026nbsp;\n晚上把simpson写了，然后xxxx。\n\u0026nbsp;\n明天要考试，开心。\n\u0026nbsp;\n所以毕竟我还是太年轻了。","title":"20150128"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天几乎讲了一天的算几。或者说能听的只有算几。然后就去做了一道基础题。\u0026lt;/p\u0026gt; \u0026nbsp;\n刚开始的时候比较naive，把相交的情况想简单了，打算直接上数学，然后悲剧地发现还有其它的不好算交点的情况，于是就去写simpson了。\n\u0026nbsp;\nsimpson就是一个估计用的，s = (4 * f(mid) + f(l) + f(r))*(r-l)/6。至于为啥是对的就不知道了。反正比较能用。然后每次直接去扫一遍所有能交的地方，取max就行了，比挨个算交点方便许多。\n\u0026nbsp;\n然后第一次写，代码也比较乱。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 509; const double pi = asin(1) * 2; const double eps = 1e-6;\n#define x1 x1 #define x2 x2 #define y1 y1 #define y2 y2\nint n; double tht, x[maxn], h[maxn], r[maxn]; double crd[maxn]; double x1[maxn], x2[maxn], y1[maxn], y2[maxn]; bool c[maxn];\ninline int sgn(double x) { if (fabs(x) \u0026lt; eps) return 0; else return (x \u0026lt; 0) ? -1 : 1; }\ninline double sqr(double x) { return x * x; }\nvoid calc() { for (int i = 0; i \u0026lt; n; ++ i) { int u(i), v(i + 1); if (sgn(x[u] - r[u] - x[v] + r[v]) \u0026lt;= 0 \u0026amp;\u0026amp; sgn(x[u] + r[u] - x[v] - r[v]) \u0026gt;= 0) { c[i] = 0; } else { double ctht((r[u] - r[v]) / (x[v] - x[u])), stht(sqrt(1 - sqr(ctht))); x1[i] = x[u] + r[u] * ctht; y1[i] = r[u] * stht; x2[i] = x[v] + r[v] * ctht; y2[i] = r[v] * stht; c[i] = 1; } } }\ndouble f(double x0) { double y(0); for (int i = 0; i \u0026lt;= n; ++ i) if (x0 \u0026gt;= x[i] - r[i] \u0026amp;\u0026amp; x0 \u0026lt;= x[i] + r[i]) y = max(y, sqrt(sqr(r[i]) - sqr(x0 - x[i]))); for (int i = 0; i \u0026lt; n; ++ i) if (c[i] \u0026amp;\u0026amp; sgn(x0 - x1[i]) \u0026gt;= 0 \u0026amp;\u0026amp; sgn(x0 - x2[i]) \u0026lt;= 0) y = max(y, (y1[i] * (x2[i] - x0) + y2[i] * (x0 - x1[i])) / (x2[i] - x1[i])); return y; }\ninline double integ(double l, double r) { return (f(l) + f(r) + f((l + r) / 2) * 4) * (r - l) / 6; }\ndouble simpson(double l0, double r0) { double mid((l0 + r0) / 2.0); double a(integ(l0, r0)); double b(integ(l0, mid)); double c(integ(mid, r0)); if (fabs(a - b - c) \u0026lt; eps) return b + c; else return simpson(l0, mid) + simpson(mid, r0); }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\ndouble l0, r0; scanf(\u0026quot;%d%lf\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;tht); for (int i = 0; i \u0026amp;lt;= n; ++ i) scanf(\u0026quot;%lf\u0026quot;, h + i); for (int i = 0; i \u0026amp;lt;= n; ++ i) { if (i) h[i] += h[i - 1]; x[i] = h[i] / tan(tht); } l0 = r0 = x[n]; for (int i = 0; i \u0026amp;lt; n; ++ i) { scanf(\u0026quot;%lf\u0026quot;, r + i); l0 = min(l0, x[i] - r[i]); r0 = max(r0, x[i] + r[i]); } r[n] = 0; calc(); printf(\u0026quot;%.2lf\\n\u0026quot;, simpson(l0, r0) * 2.0); } ","permalink":"/oi/i11rimport_071/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 今天几乎讲了一天的算几。或者说能听的只有算几。然后就去做了一道基础题。\u0026lt;/p\u0026gt; \u0026nbsp;\n刚开始的时候比较naive，把相交的情况想简单了，打算直接上数学，然后悲剧地发现还有其它的不好算交点的情况，于是就去写simpson了。\n\u0026nbsp;\nsimpson就是一个估计用的，s = (4 * f(mid) + f(l) + f(r))*(r-l)/6。至于为啥是对的就不知道了。反正比较能用。然后每次直接去扫一遍所有能交的地方，取max就行了，比挨个算交点方便许多。\n\u0026nbsp;\n然后第一次写，代码也比较乱。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 509; const double pi = asin(1) * 2; const double eps = 1e-6;\n#define x1 x1 #define x2 x2 #define y1 y1 #define y2 y2\nint n; double tht, x[maxn], h[maxn], r[maxn]; double crd[maxn]; double x1[maxn], x2[maxn], y1[maxn], y2[maxn]; bool c[maxn];","title":"BZOJ1502 [NOI2005]月下柠檬树"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 听说是水水的splay，果然是。\u0026lt;/p\u0026gt; \u0026nbsp;\n乍一看要用lct，然后因为度数只有2，所以肯定是一条链。然后就直接用splay来维护。然后因为少写了句splay(v)导致多调了至少一节课的时间。我没救了。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; #include \u0026lt;map\u0026gt; using namespace std;\n#define upmax(a,b) { if (a \u0026lt; b) a = b; }\nstruct splay_node { int vl, vm, rv; splay_node *pt, *ls, *rs; inline void update() { vm = vl; if (ls) upmax(vm, ls-\u0026gt; vm); if (rs) upmax(vm, rs-\u0026gt; vm); } inline void fix() { if (rv) { swap(ls, rs); if (ls) ls-\u0026gt; rv ^= 1; if (rs) rs-\u0026gt; rv ^= 1; rv = 0; } } };\ntypedef pair \u0026lt;int, int\u0026gt; edge; typedef pair \u0026lt;edge, int\u0026gt; mpr; typedef map \u0026lt;edge, int\u0026gt; emap;\nconst int maxn = 200009; const int maxc = 13;\n#define nid(p,c) ((p)+(c)*n) #define eid(e) ((e)+eb)\nsplay_node slst[maxn], *sr[maxn]; int v[maxn], n, m, c, q, eb, nc[maxn][maxc], ce[maxn]; emap el;\ninline void rot(splay_node* q) { splay_node *p(q-\u0026gt; pt), *a(p-\u0026gt; pt); if (a) { if (p == a-\u0026gt; ls) a-\u0026gt; ls = q; else a-\u0026gt; rs = q; } p-\u0026gt; pt = q; q-\u0026gt; pt = a; if (q == p-\u0026gt; ls) { if (q-\u0026gt; rs) q-\u0026gt; rs-\u0026gt; pt = p; p-\u0026gt; ls = q-\u0026gt; rs; q-\u0026gt; rs = p; } else { if (q-\u0026gt; ls) q-\u0026gt; ls-\u0026gt; pt = p; p-\u0026gt; rs = q-\u0026gt; ls; q-\u0026gt; ls = p; } p-\u0026gt; update(); q-\u0026gt; update(); }\nvoid splay(splay_node* q) { static splay_node* stc[maxn]; int tst(1); stc[tst] = q; for (splay_node* p = q; p-\u0026gt; pt; p = p-\u0026gt; pt) stc[++ tst] = p-\u0026gt; pt; for (; tst; \u0026ndash; tst) stc[tst]-\u0026gt; fix(); while (q-\u0026gt; pt) { splay_node *p(q-\u0026gt; pt); if (!p-\u0026gt; pt || !p-\u0026gt; pt-\u0026gt; pt) rot(q); else { if ((q == p-\u0026gt; ls) == (p == p-\u0026gt; pt-\u0026gt; ls)) { rot(p); rot(q); } else { rot(q); rot(q); } } } }\nsplay_node* expose(splay_node* p) { splay(p); while (p) { p-\u0026gt; fix(); if (p-\u0026gt; ls) p = p-\u0026gt; ls; else break; } return p; }\nvoid link(int e0, int u0, int v0) { splay_node *e(sr[e0]), *u(sr[u0]), *v(sr[v0]); splay(u); if (u-\u0026gt; fix(), u-\u0026gt; rs) u-\u0026gt; rv ^= 1; splay(v); if (v-\u0026gt; fix(), v-\u0026gt; ls) v-\u0026gt; rv ^= 1; e-\u0026gt; rv = 0; e-\u0026gt; ls = u; u-\u0026gt; pt = e; e-\u0026gt; rs = v; v-\u0026gt; pt = e; e-\u0026gt; update(); }\nvoid cut(int e0) { splay_node* e(sr[e0]); splay(e); e-\u0026gt; fix(); if (e-\u0026gt; ls) { e-\u0026gt; ls-\u0026gt; pt = 0; e-\u0026gt; ls = 0; } if (e-\u0026gt; rs) { e-\u0026gt; rs-\u0026gt; pt = 0; e-\u0026gt; rs = 0; } e-\u0026gt; update(); }\nint query(int u0, int v0) { splay_node *u(sr[u0]), *v(sr[v0]); if (expose(u) != expose(v)) return -1; if (u == v) return u-\u0026gt; vl; int ans(max(u-\u0026gt; vl, v-\u0026gt; vl)); splay(u); splay(v); if (u == v-\u0026gt; ls) { if (u-\u0026gt; rs) upmax(ans, u-\u0026gt; rs-\u0026gt; vm); } else if (u == v-\u0026gt; rs) { if (u-\u0026gt; ls) upmax(ans, u-\u0026gt; ls-\u0026gt; vm); } return ans; }\nint main() { scanf(\u0026quot;%d%d%d%d\u0026quot;, \u0026amp;n, \u0026amp;m, \u0026amp;c, \u0026amp;q); eb = n * c; for (int i = 1; i \u0026lt;= eb + m; ++ i) sr[i] = slst + i; for (int i = 1; i \u0026lt;= n; ++ i) { scanf(\u0026quot;%d\u0026quot;, v + i); for (int j = 0; j \u0026lt; c; ++ j) { splay_node* p(sr[nid(i, j)]); p-\u0026gt; vl = p-\u0026gt; vm = v[i]; } } for (int i = 1; i \u0026lt;= m; ++ i) { splay_node* p(sr[eid(i)]); p-\u0026gt; vl = p-\u0026gt; vm = 0; int u, v, w; scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;u, \u0026amp;v, \u0026amp;w); link(eid(i), nid(u, w), nid(v, w)); ce[i] = w; ++ nc[u][w]; ++ nc[v][w]; if (u \u0026gt; v) swap(u, v); el. insert(mpr(edge(u, v), i)); } while (q \u0026ndash;) { int opt, u, v, w; scanf(\u0026quot;%d\u0026quot;, \u0026amp;opt); if (opt == 0) { scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;u, \u0026amp;v); for (int i = 0; i \u0026lt; c; ++ i) { splay_node* p(sr[nid(u, i)]); p-\u0026gt; vl = v; p-\u0026gt; update(); splay(p); } } else if (opt == 1) { scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;u, \u0026amp;v, \u0026amp;w); if (u \u0026gt; v) swap(u, v); emap :: iterator it = el. find(edge(u, v)); if (it == el. end()) puts(\u0026ldquo;No such edge.\u0026rdquo;); else if (w == ce[it-\u0026gt; second]) puts(\u0026ldquo;Success.\u0026rdquo;); else if (nc[u][w] \u0026gt; 1 || nc[v][w] \u0026gt; 1) puts(\u0026ldquo;Error 1.\u0026rdquo;); else if (expose(sr[nid(u, w)]) == expose(sr[nid(v, w)])) puts(\u0026ldquo;Error 2.\u0026rdquo;); else { int e(it-\u0026gt; second); \u0026ndash; nc[u][ce[e]]; \u0026ndash; nc[v][ce[e]]; cut(eid(e)); ce[e] = w; ++ nc[u][ce[e]]; ++ nc[v][ce[e]]; link(eid(e), nid(u, w), nid(v, w)); puts(\u0026ldquo;Success.\u0026rdquo;); } } else { scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;w, \u0026amp;u, \u0026amp;v); printf(\u0026quot;%d\\n\u0026quot;, query(nid(u, w), nid(v, w))); } } } ","permalink":"/oi/i11rimport_072/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 听说是水水的splay，果然是。\u0026lt;/p\u0026gt; \u0026nbsp;\n乍一看要用lct，然后因为度数只有2，所以肯定是一条链。然后就直接用splay来维护。然后因为少写了句splay(v)导致多调了至少一节课的时间。我没救了。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; #include \u0026lt;map\u0026gt; using namespace std;\n#define upmax(a,b) { if (a \u0026lt; b) a = b; }\nstruct splay_node { int vl, vm, rv; splay_node *pt, *ls, *rs; inline void update() { vm = vl; if (ls) upmax(vm, ls-\u0026gt; vm); if (rs) upmax(vm, rs-\u0026gt; vm); } inline void fix() { if (rv) { swap(ls, rs); if (ls) ls-\u0026gt; rv ^= 1; if (rs) rs-\u0026gt; rv ^= 1; rv = 0; } } };","title":"BZOJ2816 [ZJOI2012]网络"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 立杰出的题，orz。\u0026lt;/p\u0026gt; \u0026nbsp;\n一个时间比较微妙的状压DP。用一个二进制状态表示0~k中哪些数已经可以被表示出来了，然后大于k的数直接乘，因为对状态不产生影响。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\n#define pow2(x) (1\u0026lt;\u0026lt;(x)) #define _l (long long int)\nconst int maxn = 21; const int maxb = pow2(maxn) + 9; const int mod = 1e9 + 7;\nint n, k, l, f[2][maxb], zu, va;\n#define incm(a,b) { a += b; if (a \u0026gt;= mod) a %= mod; }\nint sov() { int prv(0), cur(1); memset(f, 0, sizeof(f)); va = max(0, l - k) + 1; zu = pow2(k + 1) - 1; f[cur][1] = 1; for (int ti = 0; ti \u0026lt; n; ++ ti) { swap(cur, prv); for (int i = zu; i; \u0026ndash; i) f[cur][i] = 0; for (int i = zu; i; \u0026ndash; i) if (f[prv][i]) { for (int j = 1; j \u0026lt;= k; ++ j) { int zn((i | (i \u0026lt;\u0026lt; j)) \u0026amp; zu); incm(f[cur][zn], f[prv][i]); } incm(f[cur][i], _l f[prv][i] * va % mod); } } int ans(0); for (int i = zu, e = pow2(k); i \u0026gt;= e; \u0026ndash; i) incm(ans, f[cur][i]); return ans; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nint t; scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;t); while (t --) { scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;k, \u0026amp;amp;l); printf(\u0026quot;%d\\n\u0026quot;, sov()); } } ","permalink":"/oi/i11rimport_073/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 立杰出的题，orz。\u0026lt;/p\u0026gt; \u0026nbsp;\n一个时间比较微妙的状压DP。用一个二进制状态表示0~k中哪些数已经可以被表示出来了，然后大于k的数直接乘，因为对状态不产生影响。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\n#define pow2(x) (1\u0026lt;\u0026lt;(x)) #define _l (long long int)\nconst int maxn = 21; const int maxb = pow2(maxn) + 9; const int mod = 1e9 + 7;\nint n, k, l, f[2][maxb], zu, va;\n#define incm(a,b) { a += b; if (a \u0026gt;= mod) a %= mod; }\nint sov() { int prv(0), cur(1); memset(f, 0, sizeof(f)); va = max(0, l - k) + 1; zu = pow2(k + 1) - 1; f[cur][1] = 1; for (int ti = 0; ti \u0026lt; n; ++ ti) { swap(cur, prv); for (int i = zu; i; \u0026ndash; i) f[cur][i] = 0; for (int i = zu; i; \u0026ndash; i) if (f[prv][i]) { for (int j = 1; j \u0026lt;= k; ++ j) { int zn((i | (i \u0026lt;\u0026lt; j)) \u0026amp; zu); incm(f[cur][zn], f[prv][i]); } incm(f[cur][i], _l f[prv][i] * va % mod); } } int ans(0); for (int i = zu, e = pow2(k); i \u0026gt;= e; \u0026ndash; i) incm(ans, f[cur][i]); return ans; }","title":"BZOJ3870 Our happy ending"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 灭绝树的模板题么。之前不知道这题，差点当原创题出出去了。\u0026lt;/p\u0026gt; \u0026nbsp;\n好像有不少人不知道这东西的样子？orz zhx。\n\u0026nbsp;\n灭绝树只有一句口诀：一个东西的父亲是所有入边的另一端的点的LCA。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct edge { int t; edge *next; };\nconst int maxn = 70009; const int maxl = 19; const int maxe = 2000009;\nint n, ind[maxn], oud[maxn], tpo[maxn], ath[maxn][maxl], sz[maxn], d[maxn]; edge *ha[maxn], *hr[maxn], *ht[maxn];\ninline void addEdge(edge** head, int u, int v) { edge* ep = new edge; ep-\u0026gt; t = v; ep-\u0026gt; next = head[u]; head[u] = ep; }\nint LCA(int u, int v) { if (d[u] \u0026lt; d[v]) swap(u, v); for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (d[ath[u][i]] \u0026gt;= d[v]) u = ath[u][i]; if (u == v) return u; for (int i = maxl - 1; i \u0026gt;= 0; \u0026ndash; i) if (ath[u][i] ^ ath[v][i]) { u = ath[u][i]; v = ath[v][i]; } return ath[u][0]; }\nvoid topSort() { static int q[maxn]; int hd(0), tl(0); for (int i = 1; i \u0026lt;= n; ++ i) if (!ind[i]) tpo[tl ++] = i; while (hd \u0026lt; tl) { int p(tpo[hd ++]); for (edge* e = ha[p]; e; e = e-\u0026gt; next) { \u0026ndash; ind[e-\u0026gt; t]; if (!ind[e-\u0026gt; t]) tpo[tl ++] = e-\u0026gt; t; } } d[0] = 0; for (int ti = 0; ti \u0026lt; n; ++ ti) { int p(tpo[ti]), a; if (!hr[p]) { a = 0; } else { a = hr[p]-\u0026gt; t; for (edge* e = hr[p]-\u0026gt; next; e; e = e-\u0026gt; next) a = LCA(a, e-\u0026gt; t); } addEdge(ht, a, p); ath[p][0] = a; for (int i = 1; i \u0026lt; maxl; ++ i) ath[p][i] = ath[ath[p][i - 1]][i - 1]; d[p] = d[a] + 1; } for (int ti = n - 1; ti \u0026gt;= 0; \u0026ndash; ti) { int p(tpo[ti]); sz[p] = 1; for (edge* e = ht[p]; e; e = e-\u0026gt; next) sz[p] += sz[e-\u0026gt; t]; } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;n); for (int i = 1; i \u0026amp;lt;= n; ++ i) { int v; while (scanf(\u0026quot;%d\u0026quot;, \u0026amp;amp;v), v) { addEdge(ha, v, i); addEdge(hr, i, v); ++ oud[v]; ++ ind[i]; } } topSort(); for (int i = 1; i \u0026amp;lt;= n; ++ i) printf(\u0026quot;%d\\n\u0026quot;, sz[i] - 1); } ","permalink":"/oi/i11rimport_074/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 灭绝树的模板题么。之前不知道这题，差点当原创题出出去了。\u0026lt;/p\u0026gt; \u0026nbsp;\n好像有不少人不知道这东西的样子？orz zhx。\n\u0026nbsp;\n灭绝树只有一句口诀：一个东西的父亲是所有入边的另一端的点的LCA。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct edge { int t; edge *next; };\nconst int maxn = 70009; const int maxl = 19; const int maxe = 2000009;\nint n, ind[maxn], oud[maxn], tpo[maxn], ath[maxn][maxl], sz[maxn], d[maxn]; edge *ha[maxn], *hr[maxn], *ht[maxn];\ninline void addEdge(edge** head, int u, int v) { edge* ep = new edge; ep-\u0026gt; t = v; ep-\u0026gt; next = head[u]; head[u] = ep; }","title":"BZOJ2815 [ZJOI2012]灾难"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 原来在win下也有敲回车的bug。开心。\u0026lt;/p\u0026gt; \u0026nbsp;\n这题坑啊。暴力还是很好想的，如果个数超过几十个的话就肯定有解了。比较坑的是两边之和大于第三边，边权231-1然后加起来就超过int的范围了。连WA若干次再见。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct edge { int t; edge *next; };\nconst int maxn = 100009; const int maxc = 88;\nint n, m, v[maxn], d[maxn], fa[maxn], c[maxc]; edge *head[maxn], elst[maxn \u0026lt;\u0026lt; 1], *ep(elst);\nvoid bfs() { static int q[maxn]; int hd(0), tl(1); q[0] = 1; memset(d, 0, sizeof(d)); d[1] = 1; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (!d[e-\u0026gt; t]) { d[e-\u0026gt; t] = d[p] + 1; fa[e-\u0026gt; t] = p; q[tl ++] = e-\u0026gt; t; } } }\nbool qry(int x, int y) { int t(0); while (t \u0026lt; 60 \u0026amp;\u0026amp; x != y) { if (d[x] \u0026gt; d[y]) { c[t ++] = v[x]; x = fa[x]; } else { c[t ++] = v[y]; y = fa[y]; } } if (x == y) c[t ++] = v[x]; else return 1; sort(c, c + t); for (int i = 2; i \u0026lt; t; ++ i) if (c[i] - c[i - 1] \u0026lt; c[i - 2]) return 1; return 0; }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m); for (int i = 1; i \u0026amp;lt;= n; ++ i) scanf(\u0026quot;%d\u0026quot;, v + i); for (int i = 1; i \u0026amp;lt; n; ++ i) { int u, v; scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v); ep-\u0026amp;gt; t = v; ep-\u0026amp;gt; next = head[u]; head[u] = ep ++; ep-\u0026amp;gt; t = u; ep-\u0026amp;gt; next = head[v]; head[v] = ep ++; } bfs(); while (m --) { int t, x, y; scanf(\u0026quot;%d%d%d\u0026quot;, \u0026amp;amp;t, \u0026amp;amp;x, \u0026amp;amp;y); if (t == 0) puts(qry(x, y) ? \u0026quot;Y\u0026quot; : \u0026quot;N\u0026quot;); else v[x] = y; } } ","permalink":"/oi/i11rimport_075/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 原来在win下也有敲回车的bug。开心。\u0026lt;/p\u0026gt; \u0026nbsp;\n这题坑啊。暴力还是很好想的，如果个数超过几十个的话就肯定有解了。比较坑的是两边之和大于第三边，边权231-1然后加起来就超过int的范围了。连WA若干次再见。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nstruct edge { int t; edge *next; };\nconst int maxn = 100009; const int maxc = 88;\nint n, m, v[maxn], d[maxn], fa[maxn], c[maxc]; edge *head[maxn], elst[maxn \u0026lt;\u0026lt; 1], *ep(elst);\nvoid bfs() { static int q[maxn]; int hd(0), tl(1); q[0] = 1; memset(d, 0, sizeof(d)); d[1] = 1; while (hd \u0026lt; tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-\u0026gt; next) if (!","title":"BZOJ3251 树上三角形"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 毕竟我太年轻。\u0026lt;/p\u0026gt; \u0026nbsp;\nxyz大爷的题，感觉是ds专题练习。然后自己逗了。\n\u0026nbsp;\n第一题神构造，也没认真想。\n\u0026nbsp;\n第二题写完debug完大概用了2个小时，然后就一直在改常数，也没有改下来。然后TLE到和暴力一个分。然后整场考试就再见了。然后下午回来发现是估计距离的时候有两个sqr写成了abs。真想一头撞死。这个错不会导致wa也不会导致tle也不会导致re，只会默默地给你增加时间复杂度，然后还让你感觉似乎好像就是常数的问题。太可怕了。\n\u0026nbsp;\n第三题比较神。lct果然没法做，要把询问拿来分块。好麻烦喽。然后自己的10分都没拿到。再见。\n\u0026nbsp;\n一道题把自己坑了，然后挂了，那就很悲剧了。wc这种考试还是要讲究策略的。还要有高超的debug技巧。\n","permalink":"/diary/i11rimport_076/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 毕竟我太年轻。\u0026lt;/p\u0026gt; \u0026nbsp;\nxyz大爷的题，感觉是ds专题练习。然后自己逗了。\n\u0026nbsp;\n第一题神构造，也没认真想。\n\u0026nbsp;\n第二题写完debug完大概用了2个小时，然后就一直在改常数，也没有改下来。然后TLE到和暴力一个分。然后整场考试就再见了。然后下午回来发现是估计距离的时候有两个sqr写成了abs。真想一头撞死。这个错不会导致wa也不会导致tle也不会导致re，只会默默地给你增加时间复杂度，然后还让你感觉似乎好像就是常数的问题。太可怕了。\n\u0026nbsp;\n第三题比较神。lct果然没法做，要把询问拿来分块。好麻烦喽。然后自己的10分都没拿到。再见。\n\u0026nbsp;\n一道题把自己坑了，然后挂了，那就很悲剧了。wc这种考试还是要讲究策略的。还要有高超的debug技巧。","title":"20150127"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 来到了千里之外的海边。（好像也不是海边）\u0026lt;/p\u0026gt; \u0026nbsp;\n早晨坐了飞机坐出租。\n\u0026nbsp;\n下午去逛了下西湖，然后回去写了点题，然后去xj各种orz。\n\u0026nbsp;\n然后晚上继续写题。发现自己还是异常的傻。\n\u0026nbsp;\n第一次在另一个城市过这么久。呵。fighting。\n","permalink":"/diary/i11rimport_077/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 来到了千里之外的海边。（好像也不是海边）\u0026lt;/p\u0026gt; \u0026nbsp;\n早晨坐了飞机坐出租。\n\u0026nbsp;\n下午去逛了下西湖，然后回去写了点题，然后去xj各种orz。\n\u0026nbsp;\n然后晚上继续写题。发现自己还是异常的傻。\n\u0026nbsp;\n第一次在另一个城市过这么久。呵。fighting。","title":"20150126"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 记得这是高一的时候ty同学和我说的东西了。然后现在才解决，可以打败上帝造题的七分钟，荣登解决时间最长的题目了。\u0026lt;/p\u0026gt; \u0026nbsp;\n其实也就是一个高斯消元，用电势来列方程。不过高斯消元写得不熟，平时有空都写ds的题去了。以后不能再这样了。\n\u0026nbsp;\n用自己的代码高亮脚本了，虽然还不完善不过还是很开心的。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstdlib\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 109; const double inf = 1e100; const double eps = 1e-8;\ndouble x[maxn], a[maxn][maxn], b[maxn][maxn]; int n, m, perm[maxn];\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nsrand(19970911); while (scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m) != EOF) { for (int i = 1; i \u0026amp;lt;= n; ++ i) perm[i] = i; if (n \u0026amp;gt; 2) random_shuffle(perm + 2, perm + n); for (int i = 1; i \u0026amp;lt;= n; ++ i) for (int j = 1; j \u0026amp;lt;= n; ++ j) if (i == j) a[i][j] = 0; else a[i][j] = inf; while (m --) { int u, v; double p; scanf(\u0026quot;%d%d%lf\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v, \u0026amp;amp;p); u = perm[u]; v = perm[v]; if (u == v) continue; a[u][v] = 1.0 / (1.0 / a[u][v] + 1.0 / p); a[v][u] = a[u][v]; } b[1][1] = 1; for (int i = 2; i \u0026amp;lt;= n; ++ i) b[1][i] = 0; b[1][n + 1] = 0; for (int i = 2; i \u0026amp;lt;= n; ++ i) { double sr(0); for (int j = 1; j \u0026amp;lt;= n; ++ j) if (i != j) sr += 1.0 / a[i][j]; for (int j = 1; j \u0026amp;lt;= n; ++ j) if (i == j) b[i][j] = - sr; else b[i][j] = 1.0 / a[i][j]; if (i == n) b[i][n + 1] = -1; else b[i][n + 1] = 0; } for (int i = 1; i \u0026amp;lt;= n; ++ i) { int j0(i); for (int j = i + 1; j \u0026amp;lt;= n; ++ j) if (abs(b[j0][i]) \u0026amp;lt; abs(b[j][i])) j0 = j; if (j0 ^ i) for (int j = 1; j \u0026amp;lt;= n + 1; ++ j) swap(b[i][j], b[j0][j]); for (int j = i + 1; j \u0026amp;lt;= n; ++ j) { double rat(b[j][i] / b[i][i]); for (int k = 1; k \u0026amp;lt;= n + 1; ++ k) b[j][k] -= b[i][k] * rat; } } printf(\u0026quot;%.2lf\\n\u0026quot;, b[n][n + 1] / b[n][n]); } } ","permalink":"/oi/i11rimport_078/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 记得这是高一的时候ty同学和我说的东西了。然后现在才解决，可以打败上帝造题的七分钟，荣登解决时间最长的题目了。\u0026lt;/p\u0026gt; \u0026nbsp;\n其实也就是一个高斯消元，用电势来列方程。不过高斯消元写得不熟，平时有空都写ds的题去了。以后不能再这样了。\n\u0026nbsp;\n用自己的代码高亮脚本了，虽然还不完善不过还是很开心的。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;cmath\u0026gt; #include \u0026lt;cstdlib\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 109; const double inf = 1e100; const double eps = 1e-8;\ndouble x[maxn], a[maxn][maxn], b[maxn][maxn]; int n, m, perm[maxn];\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nsrand(19970911); while (scanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;m) != EOF) { for (int i = 1; i \u0026amp;lt;= n; ++ i) perm[i] = i; if (n \u0026amp;gt; 2) random_shuffle(perm + 2, perm + n); for (int i = 1; i \u0026amp;lt;= n; ++ i) for (int j = 1; j \u0026amp;lt;= n; ++ j) if (i == j) a[i][j] = 0; else a[i][j] = inf; while (m --) { int u, v; double p; scanf(\u0026quot;%d%d%lf\u0026quot;, \u0026amp;amp;u, \u0026amp;amp;v, \u0026amp;amp;p); u = perm[u]; v = perm[v]; if (u == v) continue; a[u][v] = 1.","title":"BZOJ2419 电阻"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 又考试了。明天就要走了。\u0026lt;/p\u0026gt; \u0026nbsp;\n早上的题大概就是告诉我，没有数据结构我就完蛋了，有数据结构我也有可能会完蛋。\n\u0026nbsp;\n第一题burnside好神，估计也不会想到。这个内容平时的确是忽视了。\n\u0026nbsp;\n第二题不是bzoj上有差不多的原题么。所以也没怎么想就敲了个LCT+主席树。然后发现常数还是比较大的。什么时候要好好研究一下怎么把splay的常数搞小。然后也还是花了好一会才写对。毕竟久了没写有点手生啊。（不是才一个多月而已么）\n\u0026nbsp;\n第三题，扩展最小圆覆盖。又明确了一下算法，之前掌握得也比较粗。然后觉得自己也不太能想到正解。毕竟是大神的题。\n\u0026nbsp;\n然后下午颓废，终于搞出了一个LaTeX的题的版，虽然还处在丑暴的阶段。然后被zhx果断扔掉了。\n\u0026nbsp;\n晚上收拾东西，又准备出发了。\n\u0026nbsp;\n估计许久敲不到青轴了。最后狠狠地敲一下。\n","permalink":"/diary/i11rimport_079/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 又考试了。明天就要走了。\u0026lt;/p\u0026gt; \u0026nbsp;\n早上的题大概就是告诉我，没有数据结构我就完蛋了，有数据结构我也有可能会完蛋。\n\u0026nbsp;\n第一题burnside好神，估计也不会想到。这个内容平时的确是忽视了。\n\u0026nbsp;\n第二题不是bzoj上有差不多的原题么。所以也没怎么想就敲了个LCT+主席树。然后发现常数还是比较大的。什么时候要好好研究一下怎么把splay的常数搞小。然后也还是花了好一会才写对。毕竟久了没写有点手生啊。（不是才一个多月而已么）\n\u0026nbsp;\n第三题，扩展最小圆覆盖。又明确了一下算法，之前掌握得也比较粗。然后觉得自己也不太能想到正解。毕竟是大神的题。\n\u0026nbsp;\n然后下午颓废，终于搞出了一个LaTeX的题的版，虽然还处在丑暴的阶段。然后被zhx果断扔掉了。\n\u0026nbsp;\n晚上收拾东西，又准备出发了。\n\u0026nbsp;\n估计许久敲不到青轴了。最后狠狠地敲一下。","title":"20150125"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 决心写一道usaco之外的题，于是就挑中了这道。\u0026lt;/p\u0026gt; \u0026nbsp;\n为啥这编辑器有BUG，每次按回车要向下跳？\n\u0026nbsp;\n发现可以预处理DP。f_i表示第i个数被砍完需要最少多少刀。对于每一个i，设p_i是它的质因子里最大的一个在给定集合里的，那么它可以转移到(i+1,i+p_i)这个范围。然后f_i显然不减，所以用单调队列之类的玩意。\n\u0026nbsp;\n然后卡着时间限制过了。不知道前面那些秒跑的人是怎么搞的。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 10000009; const int maxm = 100009;\nint k[maxn], f[maxn], n, m, q, p[maxm], v[maxm];\nvoid pre(int n) { sort(p, p + m); memset(k, 0, sizeof(k)); for (int i = 0; i \u0026lt; m; ++ i) if (!i || p[i] != p[i - 1]) for (int j = 0; j \u0026lt;= n; j += p[i]) k[j] = p[i];\nstatic int q[maxn]; int hd(0), tl(1); q[0] = f[0] = 0; for (int i = 1; i \u0026amp;lt;= n; ++ i) { while (hd \u0026amp;lt; tl \u0026amp;amp;\u0026amp;amp; i \u0026amp;gt;= q[hd] + k[q[hd]]) ++ hd; if (hd == tl) { f[i] = -1; continue; } f[i] = f[q[hd]] + 1; while (hd \u0026amp;lt; tl \u0026amp;amp;\u0026amp;amp; (f[i] \u0026amp;lt; f[q[tl - 1]] || (f[i] == f[q[tl - 1]] \u0026amp;amp;\u0026amp;amp; i + k[i] \u0026amp;gt;= q[tl - 1] + k[q[tl - 1]]))) -- tl; q[tl ++] = i; } }\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;m, \u0026amp;amp;q); memset(k, 0, sizeof(k)); for (int i = 0; i \u0026amp;lt; m; ++ i) scanf(\u0026quot;%d\u0026quot;, p + i); n = 0; for (int i = 0; i \u0026amp;lt; q; ++ i) { scanf(\u0026quot;%d\u0026quot;, v + i); if (v[i] \u0026amp;gt; n) n = v[i]; } pre(n); for (int i = 0; i \u0026amp;lt; q; ++ i) if (f[v[i]] == -1) puts(\u0026quot;oo\u0026quot;); else printf(\u0026quot;%d\\n\u0026quot;, f[v[i]]); } ","permalink":"/oi/i11rimport_080/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 决心写一道usaco之外的题，于是就挑中了这道。\u0026lt;/p\u0026gt; \u0026nbsp;\n为啥这编辑器有BUG，每次按回车要向下跳？\n\u0026nbsp;\n发现可以预处理DP。f_i表示第i个数被砍完需要最少多少刀。对于每一个i，设p_i是它的质因子里最大的一个在给定集合里的，那么它可以转移到(i+1,i+p_i)这个范围。然后f_i显然不减，所以用单调队列之类的玩意。\n\u0026nbsp;\n然后卡着时间限制过了。不知道前面那些秒跑的人是怎么搞的。\n\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;cstring\u0026gt; #include \u0026lt;algorithm\u0026gt; using namespace std;\nconst int maxn = 10000009; const int maxm = 100009;\nint k[maxn], f[maxn], n, m, q, p[maxm], v[maxm];\nvoid pre(int n) { sort(p, p + m); memset(k, 0, sizeof(k)); for (int i = 0; i \u0026lt; m; ++ i) if (!i || p[i] != p[i - 1]) for (int j = 0; j \u0026lt;= n; j += p[i]) k[j] = p[i];","title":"BZOJ3136 [Baltic2013]brunhilda"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 颓废了一天。\u0026lt;/p\u0026gt; \u0026nbsp;\n白天也就写了一道BZOJ的水题，然后胡乱改了几个页面。\n\u0026nbsp;\n然后晚上去BC。不知道是不是因为不能在连续两场比赛里面发挥得比较好。于是再见了。虽然现在还没完。\n\u0026nbsp;\nA和B分别因为逗错了一次，然后C想了一个多小时没想出来，D完全没有思路。再见。\n\u0026nbsp;\n看来是学太久学傻了啊。\n\u0026nbsp;\n要小心了。\n\u0026nbsp;\n","permalink":"/diary/i11rimport_081/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 颓废了一天。\u0026lt;/p\u0026gt; \u0026nbsp;\n白天也就写了一道BZOJ的水题，然后胡乱改了几个页面。\n\u0026nbsp;\n然后晚上去BC。不知道是不是因为不能在连续两场比赛里面发挥得比较好。于是再见了。虽然现在还没完。\n\u0026nbsp;\nA和B分别因为逗错了一次，然后C想了一个多小时没想出来，D完全没有思路。再见。\n\u0026nbsp;\n看来是学太久学傻了啊。\n\u0026nbsp;\n要小心了。\n\u0026nbsp;","title":"20150124"},{"content":"\t\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 又搬blog。发现这里可以自定义css之后就果断了。\u0026lt;/p\u0026gt; \u0026nbsp;\n写道水题试试。set的应用。然后还写丑WA了两次，我没救了。\n\u0026nbsp;\n代码高亮是坏了吗？不要吓我。\n\u0026nbsp;\n决定直接用oj7的代码版了，没有高亮就算了。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;algorithm\u0026gt; #include \u0026lt;set\u0026gt; using namespace std;\ntypedef multiset \u0026lt;int\u0026gt; rb_tree; typedef rb_tree :: iterator rb_node; typedef pair \u0026lt;int, int\u0026gt; cow;\nconst int maxn = 50009;\nint n, d, x[maxn], a[maxn], r[maxn]; cow c[maxn]; rb_tree t;\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;d); for (int i = 1; i \u0026amp;lt;= n; ++ i) { scanf(\u0026quot;%d%d\u0026quot;, x + i, a + i); c[i] = cow(x[i], a[i]); r[i] = 0; } sort(c + 1, c + n + 1); for (int i = 1; i \u0026amp;lt;= n; ++ i) { x[i] = c[i]. first; a[i] = c[i]. second; } for (int i = 1, j = 1; i \u0026amp;lt;= n; ++ i) { while (x[i] - x[j] \u0026amp;gt; d) { t. erase(t. find(a[j])); ++ j; } if (t. lower_bound(a[i] \u0026amp;lt;\u0026amp;lt; 1) != t. end()) ++ r[i]; t. insert(a[i]); } t. clear(); int ans(0); for (int i = n, j = n; i; -- i) { while (x[j] - x[i] \u0026amp;gt; d) { t. erase(t. find(a[j])); -- j; } if (t. lower_bound(a[i] \u0026amp;lt;\u0026amp;lt; 1) != t. end()) ++ r[i]; if (r[i] == 2) ++ ans; t. insert(a[i]); } printf(\u0026quot;%d\\n\u0026quot;, ans); } ","permalink":"/oi/i11rimport_082/","summary":"\u0026lt;div class=\u0026quot;post_brief\u0026quot;\u0026gt;\u0026lt;p\u0026gt; 又搬blog。发现这里可以自定义css之后就果断了。\u0026lt;/p\u0026gt; \u0026nbsp;\n写道水题试试。set的应用。然后还写丑WA了两次，我没救了。\n\u0026nbsp;\n代码高亮是坏了吗？不要吓我。\n\u0026nbsp;\n决定直接用oj7的代码版了，没有高亮就算了。\n#include \u0026lt;cstdio\u0026gt; #include \u0026lt;algorithm\u0026gt; #include \u0026lt;set\u0026gt; using namespace std;\ntypedef multiset \u0026lt;int\u0026gt; rb_tree; typedef rb_tree :: iterator rb_node; typedef pair \u0026lt;int, int\u0026gt; cow;\nconst int maxn = 50009;\nint n, d, x[maxn], a[maxn], r[maxn]; cow c[maxn]; rb_tree t;\nint main() { #ifndef ONLINE_JUDGE freopen(\u0026ldquo;in.txt\u0026rdquo;, \u0026ldquo;r\u0026rdquo;, stdin); #endif\nscanf(\u0026quot;%d%d\u0026quot;, \u0026amp;amp;n, \u0026amp;amp;d); for (int i = 1; i \u0026amp;lt;= n; ++ i) { scanf(\u0026quot;%d%d\u0026quot;, x + i, a + i); c[i] = cow(x[i], a[i]); r[i] = 0; } sort(c + 1, c + n + 1); for (int i = 1; i \u0026amp;lt;= n; ++ i) { x[i] = c[i].","title":"BZOJ3314 [Usaco2013 Nov]Crowded Cows"},{"content":"多组询问，硬根号。yy了一下午，在去80MSWC的时候的病历上打了若干草稿，最后硬yy出来了。\n其实拿LaTeX来当公式编辑器蛮好的。\n然后d(a)函数可以线性筛，讨论一下是不是倍数就行了。\n发现数论真的好神奇。\nlofter的html源码好讨厌啊。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\n\u0026nbsp;\nusing namespace std;\n\u0026nbsp;\n#define _l (long long int)\n\u0026nbsp;\nconst int maxn = 10000009;\nconst int maxq = 10009;\nconst int mod = 1e8 + 9;\n\u0026nbsp;\nint pn[maxn], tp, d[maxn];\nbool pr[maxn];\nint q, m[maxq], n[maxq], t;\n\u0026nbsp;\n#define incm(_a_,_b_)\u0026nbsp;{\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp; _a_+=_b_;\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp; if (_a_\u0026gt;=mod||_a_\u0026lt;=-mod)\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; _a_%=mod;\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp; if (_a_\u0026lt;0)\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; _a_+=mod;\u0026nbsp;\\\n}\n\u0026nbsp;\nvoid pre(int n)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; memset(pr, 0, sizeof(pr));\n\u0026nbsp;\u0026nbsp;\u0026nbsp; tp = 0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; d[0]\u0026nbsp;= 0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; d[1]\u0026nbsp;= 1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for (int i = 2; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if (!pr[i])\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; pn[tp ++]\u0026nbsp;= i;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; d[i]\u0026nbsp;=\u0026nbsp;(i - _l i * i)\u0026nbsp;% mod;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if (d[i]\u0026nbsp;\u0026lt; 0)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; d[i]\u0026nbsp;+= mod;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; for (int j = 0; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j]\u0026nbsp;\u0026lt;= n;\u0026nbsp;++ j)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; pr[i * pn[j]]\u0026nbsp;= 1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if (i\u0026nbsp;% pn[j])\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; d[i * pn[j]]\u0026nbsp;= _l d[i]\u0026nbsp;* d[pn[j]]\u0026nbsp;% mod;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; else {\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; d[i * pn[j]]\u0026nbsp;= _l d[i]\u0026nbsp;* pn[j]\u0026nbsp;% mod;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; break;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for (int i = 2; i \u0026lt;= n;\u0026nbsp;++ i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; incm(d[i], d[i - 1]);\n}\n\u0026nbsp;\ninline int sumr(const int\u0026amp; x)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; return (((_l x + 1)\u0026nbsp;* x)\u0026nbsp;\u0026gt;\u0026gt; 1)\u0026nbsp;% mod;\n}\n\u0026nbsp;\nint sov(int m, int n)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; int ans(0);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for (int i = 1, j; i \u0026lt;= n; i = j + 1)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; j = min(m /\u0026nbsp;(m\u0026nbsp;/ i), n /\u0026nbsp;(n\u0026nbsp;/ i));\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; incm(ans,\u0026nbsp;(_l d[j]\u0026nbsp;- d[i - 1])\u0026nbsp;* sumr(m / i)\u0026nbsp;% mod * sumr(n / i)\u0026nbsp;% mod);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; return ans;\n}\n\u0026nbsp;\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\n\u0026nbsp;\u0026nbsp;\u0026nbsp; freopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\n\u0026nbsp;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; scanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;q);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; t = 0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for (int i = 0; i \u0026lt; q;\u0026nbsp;++ i)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; scanf(\u0026quot;%d%d\u0026quot;, m + i, n + i);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if (m[i]\u0026nbsp;\u0026lt; n[i])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; swap(m[i], n[i]);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if (t\u0026nbsp;\u0026lt; m[i])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; t = m[i];\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; pre(t);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for (int i = 0; i \u0026lt; q;\u0026nbsp;++ i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; printf(\u0026quot;%d\\n\u0026quot;, sov(m[i], n[i]));\n}\nHistorical Comments Unknown friend at 2015-01-18T13:17:23 这版面好醚……你用latex做的吗\nUnknown friend at 2015-01-18T13:27:06 是的。毕竟是排版神器\n","permalink":"/oi/lofterimport_000/","summary":"多组询问，硬根号。yy了一下午，在去80MSWC的时候的病历上打了若干草稿，最后硬yy出来了。\n其实拿LaTeX来当公式编辑器蛮好的。\n然后d(a)函数可以线性筛，讨论一下是不是倍数就行了。\n发现数论真的好神奇。\nlofter的html源码好讨厌啊。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\n\u0026nbsp;\nusing namespace std;\n\u0026nbsp;\n#define _l (long long int)\n\u0026nbsp;\nconst int maxn = 10000009;\nconst int maxq = 10009;\nconst int mod = 1e8 + 9;\n\u0026nbsp;\nint pn[maxn], tp, d[maxn];\nbool pr[maxn];\nint q, m[maxq], n[maxq], t;\n\u0026nbsp;\n#define incm(_a_,_b_)\u0026nbsp;{\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp; _a_+=_b_;\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp; if (_a_\u0026gt;=mod||_a_\u0026lt;=-mod)\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; _a_%=mod;\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp; if (_a_\u0026lt;0)\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; _a_+=mod;\u0026nbsp;\\\n}\n\u0026nbsp;\nvoid pre(int n)\u0026nbsp;{","title":"BZOJ2693 jzptab"},{"content":"水水的二分+最短路么？\n然后读入坑死了检查了好久的最短路。\n没救了。\n然后发现我好像进前100了，小小地开心一下。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef pair \u0026lt;double, int\u0026gt; dpr;\nstruct edge {\nint v, t;\nedge *next;\n};\n#define nid(_x_,_y_)\u0026nbsp;((_x_-1)*m+(_y_))\nconst int maxn = 10009;\nconst int maxa = 109;\nconst int maxe = 80009;\nconst int mov[4][2]\u0026nbsp;=\u0026nbsp;{{1, 0},\u0026nbsp;{-1, 0},\u0026nbsp;{0, 1},\u0026nbsp;{0,\u0026nbsp;-1}};\nconst double eps = 1e-8;\nint n, m, st, te, c[maxn];\nchar mp[maxa][maxa];\ndouble d[maxn], tg;\nedge *head[maxn],\u0026nbsp;*ep, elst[maxe];\ndpr hp[maxe];\ninline void addEdge(int u, int v, int w)\u0026nbsp;{\nep-\u0026gt; t = v;\nep-\u0026gt; v = w;\nep-\u0026gt; next = head[u];\nhead[u]\u0026nbsp;= ep ++;\n}\ndouble dijkstra(double d0)\u0026nbsp;{\nint th(1);\nhp[0]\u0026nbsp;= dpr(0, st);\nd[st]\u0026nbsp;= 0;\nmemset(c, 0, sizeof(c));\nwhile (th)\u0026nbsp;{\ndpr g(hp[0]);\npop_heap(hp, hp +\u0026nbsp;(th\u0026nbsp;--));\nif (c[g. second]\u0026nbsp;== 2)\ncontinue;\nc[g. second]\u0026nbsp;= 2;\nfor (edge* e = head[g. second]; e; e = e-\u0026gt; next)\nif (c[e-\u0026gt; t]\u0026nbsp;\u0026lt; 2)\u0026nbsp;{\ndouble v0(g. first -\u0026nbsp;(e-\u0026gt; v ? 1.0 : d0));\nif (c[e-\u0026gt; t]\u0026nbsp;== 0 || v0 \u0026gt; d[e-\u0026gt; t])\u0026nbsp;{\nd[e-\u0026gt; t]\u0026nbsp;= v0;\nc[e-\u0026gt; t]\u0026nbsp;= 1;\nhp[th]\u0026nbsp;= dpr(v0, e-\u0026gt; t);\npush_heap(hp, hp +\u0026nbsp;(++ th));\n}\n}\n}\nreturn -d[te];\n}\ndouble sov()\u0026nbsp;{\nscanf(\u0026quot;%lf%d%d\u0026quot;,\u0026nbsp;\u0026amp;tg,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m);\nwhile (getchar()\u0026nbsp;!= 10);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nfgets(mp[i]\u0026nbsp;+ 1, sizeof(char)\u0026nbsp;* maxa, stdin);\nfor (int j = 1; j \u0026lt;= m;\u0026nbsp;++ j)\u0026nbsp;{\nint d(mp[i][j]);\nif (d\u0026nbsp;==\u0026nbsp;'S')\nst = nid(i, j), mp[i][j]\u0026nbsp;= 32;\nelse if (d\u0026nbsp;==\u0026nbsp;'E')\nte = nid(i, j), mp[i][j]\u0026nbsp;= 32;\n}\n}\nmemset(head, 0, sizeof(head));\nep = elst;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nfor (int j = 1; j \u0026lt;= m;\u0026nbsp;++ j)\nif (mp[i][j]\u0026nbsp;== 32)\nfor (int mi = 0; mi \u0026lt; 4;\u0026nbsp;++ mi)\u0026nbsp;{\nint x(i + mov[mi][0]), y(j + mov[mi][1]);\nif (x\u0026nbsp;\u0026gt; 0 \u0026amp;\u0026amp; x \u0026lt;= n \u0026amp;\u0026amp; y \u0026gt; 0 \u0026amp;\u0026amp; y \u0026lt;= m \u0026amp;\u0026amp; mp[x][y]\u0026nbsp;== 32)\naddEdge(nid(i, j), nid(x, y),\u0026nbsp;(mi \u0026amp; 2));\n}\ndouble l(0), r(10.0);\nwhile (l\u0026nbsp;+ eps \u0026lt; r)\u0026nbsp;{\ndouble mid((l + r)\u0026nbsp;/ 2.0);\nif (dijkstra(mid)\u0026nbsp;\u0026lt; tg)\nl = mid + eps;\nelse\nr = mid;\n}\nreturn l;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nint t;\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;t);\nwhile (t\u0026nbsp;--)\nprintf(\u0026quot;%.5lf\\n\u0026quot;, sov());\n}\n","permalink":"/oi/lofterimport_001/","summary":"水水的二分+最短路么？\n然后读入坑死了检查了好久的最短路。\n没救了。\n然后发现我好像进前100了，小小地开心一下。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef pair \u0026lt;double, int\u0026gt; dpr;\nstruct edge {\nint v, t;\nedge *next;\n};\n#define nid(_x_,_y_)\u0026nbsp;((_x_-1)*m+(_y_))\nconst int maxn = 10009;\nconst int maxa = 109;\nconst int maxe = 80009;\nconst int mov[4][2]\u0026nbsp;=\u0026nbsp;{{1, 0},\u0026nbsp;{-1, 0},\u0026nbsp;{0, 1},\u0026nbsp;{0,\u0026nbsp;-1}};\nconst double eps = 1e-8;\nint n, m, st, te, c[maxn];\nchar mp[maxa][maxa];\ndouble d[maxn], tg;\nedge *head[maxn],\u0026nbsp;*ep, elst[maxe];\ndpr hp[maxe];","title":"BZOJ2709 [Violet 1]迷宫花园"},{"content":"逃掉数学考试。感觉解几纯粹不给人希望。\n这题还是比较有意思。做法是把每位分开预处当总共加了多少的时候这一位上是1的数字有多少个。然后每一层是线性的。询问是O(1)的。\n然后发现自己的代码能力已经没救了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#define pow2(x)\u0026nbsp;(1\u0026lt;\u0026lt;(x))\ntypedef long long dint;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nconst int maxn = 100009;\nconst int maxl = 16;\nconst int maxv = pow2(maxl)\u0026nbsp;- 1;\nint n, m, c[maxv + 3],\u0026nbsp;*t[maxl], b;\ndint s;\nvoid pre()\u0026nbsp;{\nfor (int i = 0; i \u0026lt; maxl;\u0026nbsp;++ i)\u0026nbsp;{\nint len(pow2(i));\nt[i]\u0026nbsp;= new int[(len \u0026lt;\u0026lt; 1)\u0026nbsp;+ 3];\nt[i][0]\u0026nbsp;= 0;\nfor (int j = 0; j \u0026lt;= maxv;\u0026nbsp;++ j)\nif ((j\u0026nbsp;\u0026gt;\u0026gt; i)\u0026nbsp;\u0026amp; 1)\nt[i][0]\u0026nbsp;+= c[j];\nfor (int j = 1; j \u0026lt;= len \u0026lt;\u0026lt; 1;\u0026nbsp;++ j)\u0026nbsp;{\nt[i][j]\u0026nbsp;= t[i][j - 1];\nfor (int k =\u0026nbsp;(len\u0026nbsp;\u0026lt;\u0026lt; 1)\u0026nbsp;- j; k \u0026lt;= maxv; k += len \u0026lt;\u0026lt; 1)\nt[i][j]\u0026nbsp;-= c[k];\nfor (int k =\u0026nbsp;(len\u0026nbsp;\u0026gt;= j)\u0026nbsp;?\u0026nbsp;(len - j)\u0026nbsp;:\u0026nbsp;((len \u0026lt;\u0026lt; 1)\u0026nbsp;+ len - j); k \u0026lt;= maxv; k += len \u0026lt;\u0026lt; 1)\nt[i][j]\u0026nbsp;+= c[k];\n}\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m);\nmemset(c, 0, sizeof(c));\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nint a;\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;a);\n++ c[a \u0026amp; maxv];\n}\npre();\ns = b = 0;\nwhile (m\u0026nbsp;--)\u0026nbsp;{\nchar opt[3];\nint x;\nscanf(\u0026quot;%s%d\u0026quot;, opt,\u0026nbsp;\u0026amp;x);\nif (opt[0]\u0026nbsp;==\u0026nbsp;'A')\n(b += x)\u0026nbsp;\u0026amp;= maxv;\nelse\ns += t[x][b \u0026amp;\u0026nbsp;(pow2(x\u0026nbsp;+ 1)\u0026nbsp;- 1)];\n}\nprintf(lld \u0026quot;\\n\u0026quot;, s);\n}\n","permalink":"/oi/lofterimport_002/","summary":"逃掉数学考试。感觉解几纯粹不给人希望。\n这题还是比较有意思。做法是把每位分开预处当总共加了多少的时候这一位上是1的数字有多少个。然后每一层是线性的。询问是O(1)的。\n然后发现自己的代码能力已经没救了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#define pow2(x)\u0026nbsp;(1\u0026lt;\u0026lt;(x))\ntypedef long long dint;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nconst int maxn = 100009;\nconst int maxl = 16;\nconst int maxv = pow2(maxl)\u0026nbsp;- 1;\nint n, m, c[maxv + 3],\u0026nbsp;*t[maxl], b;\ndint s;\nvoid pre()\u0026nbsp;{\nfor (int i = 0; i \u0026lt; maxl;\u0026nbsp;++ i)\u0026nbsp;{\nint len(pow2(i));\nt[i]\u0026nbsp;= new int[(len \u0026lt;\u0026lt; 1)\u0026nbsp;+ 3];\nt[i][0]\u0026nbsp;= 0;\nfor (int j = 0; j \u0026lt;= maxv;\u0026nbsp;++ j)","title":"BZOJ1273 [BeiJingWc2008]序列"},{"content":"感觉自己坚持不下去了。\n现在真不知道为什么要回去上课。好多次想跑掉然后还是没有跑。毕竟还是，唉。\n物理十分钟够我想一道选择题还多半是错的。化学生物英语啥的基本就是不会。zhx告诉我回去可以拿数学RANK1然后发现解析根本做不了。想起初中的时候很自豪地认为我的解析几何很厉害。现在才学会做人。\n上课还是那种走神的样子。也没有想OI的题，也不想听课。不知不觉就跑掉了。最后只有利用上课的时间做作业。然后，不会，不开心，担惊受怕。\n每天唯一的娱乐就是晚上去码一下OJ。然后发现我的东西写得太丑，如果数据量一大根本就handle不了。当初做的时候也是边做边改，好多东西根本就不科学。但是也不想重新来写。于是乱七八糟的东西越堆越多。\n发现自己好像很少认真想过如果滚掉了会怎样。每次都推说去学校对面电脑城修电脑好了。但是世界真的允许我这样做吗？也许如果真的那样的话会过一个很痛苦的高三然后再上一个很痛苦的大学然后痛苦一辈子？不知道。只能说不上一个好的大学也不一定就没有好的前途吧。但是好的前途是什么？我发现我连这样简单的问题都没有想清楚。所以说造成恐惧的不是对现实的无力，而是对未来的迷惑？\n不知道。\n看到昨天的情系母校，最大的感慨是大学也不是天堂。大学有更多更麻烦的事情要去做。去上大学也不过是换个坑而已。要找到自己真正喜欢的事情？依然难。而再以后呢？工作？我只能推断它是一个更大的火坑。怎么办？\n还没想清楚。\n魏总说过的一句话很有道理，noi金牌这条路至少在这里是不会断的。我想这也是我现在唯一能抓住的东西了吧。不管怎样，下周就期末考试了。在我退役之前大概是不会再有这样的苦日子了。但是也是时候去学会成熟了。\n期末需要加油，未来更要加油。\nHistorical Comments Unknown friend at 2015-01-16T23:02:27 找到适合自己的路才是最重要的 想走就走吧\nUnknown friend at 2015-01-17T12:18:11 谢谢\n","permalink":"/oi/lofterimport_003/","summary":"感觉自己坚持不下去了。\n现在真不知道为什么要回去上课。好多次想跑掉然后还是没有跑。毕竟还是，唉。\n物理十分钟够我想一道选择题还多半是错的。化学生物英语啥的基本就是不会。zhx告诉我回去可以拿数学RANK1然后发现解析根本做不了。想起初中的时候很自豪地认为我的解析几何很厉害。现在才学会做人。\n上课还是那种走神的样子。也没有想OI的题，也不想听课。不知不觉就跑掉了。最后只有利用上课的时间做作业。然后，不会，不开心，担惊受怕。\n每天唯一的娱乐就是晚上去码一下OJ。然后发现我的东西写得太丑，如果数据量一大根本就handle不了。当初做的时候也是边做边改，好多东西根本就不科学。但是也不想重新来写。于是乱七八糟的东西越堆越多。\n发现自己好像很少认真想过如果滚掉了会怎样。每次都推说去学校对面电脑城修电脑好了。但是世界真的允许我这样做吗？也许如果真的那样的话会过一个很痛苦的高三然后再上一个很痛苦的大学然后痛苦一辈子？不知道。只能说不上一个好的大学也不一定就没有好的前途吧。但是好的前途是什么？我发现我连这样简单的问题都没有想清楚。所以说造成恐惧的不是对现实的无力，而是对未来的迷惑？\n不知道。\n看到昨天的情系母校，最大的感慨是大学也不是天堂。大学有更多更麻烦的事情要去做。去上大学也不过是换个坑而已。要找到自己真正喜欢的事情？依然难。而再以后呢？工作？我只能推断它是一个更大的火坑。怎么办？\n还没想清楚。\n魏总说过的一句话很有道理，noi金牌这条路至少在这里是不会断的。我想这也是我现在唯一能抓住的东西了吧。不管怎样，下周就期末考试了。在我退役之前大概是不会再有这样的苦日子了。但是也是时候去学会成熟了。\n期末需要加油，未来更要加油。\nHistorical Comments Unknown friend at 2015-01-16T23:02:27 找到适合自己的路才是最重要的 想走就走吧\nUnknown friend at 2015-01-17T12:18:11 谢谢","title":"20150116"},{"content":"充分证明我已经学傻了。把ONLINE_JUDGE打成ONLINE_JUGE还WA了若干次。然后开了个10^10的数组直接CE还想了好久是怎么回事。\n10^10大概会TLE，真正的数据大概只有10^9。\n做法比较简单直接容斥+剪枝，反正凑起来的几个数不会很多。\n#ifndef ONLINE_JUGE\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long dint;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nconst int maxa = 2048;\nconst dint maxn = 10000000000LL;\n//const dint maxn = 100000LL;\nint e, t;\ndint l, r, s, a[maxa], ans;\nbool g[maxa];\nvoid pre()\u0026nbsp;{\nt = 0;\nfor (int l = 1; l \u0026lt;= 10;\u0026nbsp;++ l)\nfor (int j = 0; j \u0026lt;\u0026nbsp;(1\u0026nbsp;\u0026lt;\u0026lt; l);\u0026nbsp;++ j)\u0026nbsp;{\ndint v(0);\nfor (int k = l - 1; k \u0026gt;= 0;\u0026nbsp;-- k)\nif ((j\u0026nbsp;\u0026gt;\u0026gt; k)\u0026nbsp;\u0026amp; 1)\nv = v * 10 + 9;\nelse\nv = v * 10 + 2;\na[t ++]\u0026nbsp;= v;\n}\nsort(a, a + t);\nfor (int i = 0; i \u0026lt; t;\u0026nbsp;++ i)\nfor (int j =\u0026nbsp;(g[i]\u0026nbsp;= 0, 0); j \u0026lt; i \u0026amp;\u0026amp;\u0026nbsp;!g[i];\u0026nbsp;++ j)\nif (a[i]\u0026nbsp;% a[j]\u0026nbsp;== 0)\ng[i]\u0026nbsp;= 1;\nint nt = 0;\nfor (int i = 0; i \u0026lt; t;\u0026nbsp;++ i)\nif (!g[i])\na[nt ++]\u0026nbsp;= a[i];\nt = nt;\n}\ndint gcd(dint a, dint b)\u0026nbsp;{\nwhile (b\u0026nbsp;% a)\u0026nbsp;{\nswap(a, b);\na %= b;\n}\nreturn a;\n}\nvoid dfs(int p, int c, dint v)\u0026nbsp;{\nif (p\u0026nbsp;\u0026gt;= e)\nreturn;\ndfs(p + 1, c, v);\ndint g = gcd(a[p], v);\n//long double pd =\u0026nbsp;(long double)v * a[p]\u0026nbsp;/ g;\ndint pd = v * a[p]\u0026nbsp;/ g;\nif (pd\u0026nbsp;\u0026lt;= r)\u0026nbsp;{\ndint vn =\u0026nbsp;(dint)pd;\nif (c\u0026nbsp;\u0026amp; 1)\nans -= r / vn -\u0026nbsp;(l\u0026nbsp;- 1)\u0026nbsp;/ vn;\nelse\nans += r / vn -\u0026nbsp;(l\u0026nbsp;- 1)\u0026nbsp;/ vn;\ndfs(p + 1, c + 1, vn);\n}\n}\ndint sov()\u0026nbsp;{\ne = upper_bound(a, a + t, r)\u0026nbsp;- a;\nans = 0;\ndfs(0, 0, 1);\nreturn ans;\n}\nint main()\u0026nbsp;{\npre();\nscanf(lld lld,\u0026nbsp;\u0026amp;l,\u0026nbsp;\u0026amp;r);\nprintf(lld \u0026quot;\u0026quot;, sov());\n}\n","permalink":"/oi/lofterimport_004/","summary":"充分证明我已经学傻了。把ONLINE_JUDGE打成ONLINE_JUGE还WA了若干次。然后开了个10^10的数组直接CE还想了好久是怎么回事。\n10^10大概会TLE，真正的数据大概只有10^9。\n做法比较简单直接容斥+剪枝，反正凑起来的几个数不会很多。\n#ifndef ONLINE_JUGE\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long dint;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nconst int maxa = 2048;\nconst dint maxn = 10000000000LL;\n//const dint maxn = 100000LL;\nint e, t;\ndint l, r, s, a[maxa], ans;\nbool g[maxa];\nvoid pre()\u0026nbsp;{\nt = 0;\nfor (int l = 1; l \u0026lt;= 10;\u0026nbsp;++ l)\nfor (int j = 0; j \u0026lt;\u0026nbsp;(1\u0026nbsp;\u0026lt;\u0026lt; l);\u0026nbsp;++ j)\u0026nbsp;{","title":"BZOJ2393 Cirno的完美算数教室"},{"content":"的确比较奇妙。\n有一个奇妙的玩意是fib[gcd(i, j)]\u0026nbsp;== gcd(fib[i], fib[j])。(fib[1]\u0026nbsp;= fib[2]\u0026nbsp;= 1)\n然后就比较可搞了。\n线性筛处理每个数的因子个数和因子和。开一点变量然后推一下就出来了。\n然后要注意fib[2]也可以整除所有奇数，包括1。表示在这上面坑了2次提交。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define _l (long long int)\nconst int maxn = 10000009;\nconst int mod = 1000000007;\nint tp, pn[maxn], sa[maxn], sb[maxn], b[maxn], c[maxn];\nbool pr[maxn];\nvoid pre(int n)\u0026nbsp;{\nmemset(pr, 0, sizeof(pr));\ntp = 0;\nsa[1]\u0026nbsp;= 1;\nsb[1]\u0026nbsp;= 1;\nb[1]\u0026nbsp;= 1;\nc[1]\u0026nbsp;= 0;\nfor (int i = 2; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nif (!pr[i])\u0026nbsp;{\npn[tp ++]\u0026nbsp;= i;\nsa[i]\u0026nbsp;= 2;\nsb[i]\u0026nbsp;=\u0026nbsp;(_l i * i + 1)\u0026nbsp;% mod;\nb[i]\u0026nbsp;= 1;\nc[i]\u0026nbsp;= 1;\n}\nfor (int j = 0, v; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j]\u0026nbsp;\u0026lt;= n;\u0026nbsp;++ j)\u0026nbsp;{\nv = i * pn[j];\npr[v]\u0026nbsp;= 1;\nif (i\u0026nbsp;% pn[j])\u0026nbsp;{\nsa[v]\u0026nbsp;= sa[i]\u0026nbsp;* 2;\nsb[v]\u0026nbsp;= _l sb[i]\u0026nbsp;*\u0026nbsp;((_l pn[j]\u0026nbsp;* pn[j]\u0026nbsp;+ 1)\u0026nbsp;% mod)\u0026nbsp;% mod;\nb[v]\u0026nbsp;= i;\nc[v]\u0026nbsp;= 1;\n}\nelse {\nsa[v]\u0026nbsp;= sa[i]\u0026nbsp;/\u0026nbsp;(c[i]\u0026nbsp;+ 1)\u0026nbsp;*\u0026nbsp;(c[i]\u0026nbsp;+ 2);\n//int vn = v / b[i];\n//sb[v]\u0026nbsp;=\u0026nbsp;(sb[i]\u0026nbsp;+ _l sb[b[i]]\u0026nbsp;* vn % mod * vn % mod)\u0026nbsp;% mod;\nsb[v]\u0026nbsp;=\u0026nbsp;(_l sb[i]\u0026nbsp;* pn[j]\u0026nbsp;% mod * pn[j]\u0026nbsp;+ sb[b[i]])\u0026nbsp;% mod;\nb[v]\u0026nbsp;= b[i];\nc[v]\u0026nbsp;= c[i]\u0026nbsp;+ 1;\nbreak;\n}\n}\n}\nfor (int i = 1; i \u0026lt;= n; i += 2)\u0026nbsp;{\nsa[i]\u0026nbsp;=\u0026nbsp;(sa[i]\u0026nbsp;+ 1)\u0026nbsp;% mod;\nsb[i]\u0026nbsp;=\u0026nbsp;(sb[i]\u0026nbsp;+ 4)\u0026nbsp;% mod;\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nint n, q, a, b, c, ansa, ansb;\nscanf(\u0026quot;%d%d%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;q,\u0026nbsp;\u0026amp;a,\u0026nbsp;\u0026amp;b,\u0026nbsp;\u0026amp;c);\na %= c;\nb %= c;\npre(c);\nansa = ansb = 0;\nwhile (n\u0026nbsp;--)\u0026nbsp;{\nansa =\u0026nbsp;(ansa\u0026nbsp;+ sa[q])\u0026nbsp;% mod;\nansb =\u0026nbsp;(ansb\u0026nbsp;+ sb[q])\u0026nbsp;% mod;\nq =\u0026nbsp;(_l q * a + b)\u0026nbsp;% c + 1;\n}\nprintf(\u0026quot;%d\\n%d\\n\u0026quot;, ansa, ansb);\n}\n","permalink":"/oi/lofterimport_005/","summary":"的确比较奇妙。\n有一个奇妙的玩意是fib[gcd(i, j)]\u0026nbsp;== gcd(fib[i], fib[j])。(fib[1]\u0026nbsp;= fib[2]\u0026nbsp;= 1)\n然后就比较可搞了。\n线性筛处理每个数的因子个数和因子和。开一点变量然后推一下就出来了。\n然后要注意fib[2]也可以整除所有奇数，包括1。表示在这上面坑了2次提交。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define _l (long long int)\nconst int maxn = 10000009;\nconst int mod = 1000000007;\nint tp, pn[maxn], sa[maxn], sb[maxn], b[maxn], c[maxn];\nbool pr[maxn];\nvoid pre(int n)\u0026nbsp;{\nmemset(pr, 0, sizeof(pr));\ntp = 0;\nsa[1]\u0026nbsp;= 1;\nsb[1]\u0026nbsp;= 1;\nb[1]\u0026nbsp;= 1;\nc[1]\u0026nbsp;= 0;\nfor (int i = 2; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nif (!","title":"BZOJ2813 奇妙的Fibonacci"},{"content":"水水的dp。拿pascal玩玩边表。然后莫名其妙地发现在main上先是ce然后全wa。下到数据一测就过了，交bzoj还是过了。不开心。\n必定是一个中间点然后连三条出去。所以直接枚举中间点然后bfs就好了。相当于每条边被转移了两次所以还是O(n^2)的。最初想错了想成三方了把自己吓了一跳。\npascal啊。\ntype\nedge =\u0026nbsp;^edger;\nedger = record\nt: longint;\nnext: edge;\nend;\nconst\nmaxn = 5009;\n//ONLINE_JUDGE = false;\nONLINE_JUDGE = true;\nvar\nn, i, j, u, v: longint;\nans: int64;\nd, cd, sd, td: array [0\u0026nbsp;.. maxn] of longint;\nhead: array [0\u0026nbsp;.. maxn] of edge;\nei: edge;\nprocedure addEdge(u, v: longint);\nvar\nep: edge;\nbegin\nnew(ep);\nep^. t := v;\nep^. next := head[u];\nhead[u]\u0026nbsp;:= ep;\nend;\nprocedure bfs(p0: longint);\nvar\nhd, tl, p: longint;\nq: array [0\u0026nbsp;.. maxn] of longint;\ne: edge;\nbegin\nfillchar(cd, sizeof(cd), 0);\nhd := 0;\ntl := 1;\nq[0]\u0026nbsp;:= p0;\nd[p0]\u0026nbsp;:= 2;\nwhile hd \u0026lt; tl do begin\np := q[hd];\ninc(hd);\ninc(cd[d[p]]);\ne := head[p];\nwhile e \u0026lt;\u0026gt; NIL do begin\nif d[e^. t]\u0026nbsp;= 0 then begin\nd[e^. t]\u0026nbsp;:= d[p]\u0026nbsp;+ 1;\nq[tl]\u0026nbsp;:= e^. t;\ninc(tl);\nend;\ne := e^. next;\nend;\nend;\nend;\nbegin\nif not ONLINE_JUDGE then begin\nassign(input,\u0026nbsp;'in.txt');\nreset(input);\nend;\nreadln(n);\nfor i := 2 to n do begin\nreadln(u, v);\naddEdge(u, v);\naddEdge(v, u);\nend;\nans := 0;\nfor i := 1 to n do begin\nfillchar(d, sizeof(d), 0);\nfillchar(sd, sizeof(sd), 0);\nfillchar(td, sizeof(td), 0);\nd[i]\u0026nbsp;:= 1;\nei := head[i];\nwhile ei \u0026lt;\u0026gt; nil do begin\nbfs(ei^. t);\nfor j := 2 to n do begin\ninc(ans, td[j]\u0026nbsp;* cd[j]);\ninc(td[j], sd[j]\u0026nbsp;* cd[j]);\ninc(sd[j], cd[j]);\nend;\nei := ei^. next;\nend;\nend;\nwriteln(ans);\nclose(input);\nend.\n","permalink":"/oi/lofterimport_006/","summary":"水水的dp。拿pascal玩玩边表。然后莫名其妙地发现在main上先是ce然后全wa。下到数据一测就过了，交bzoj还是过了。不开心。\n必定是一个中间点然后连三条出去。所以直接枚举中间点然后bfs就好了。相当于每条边被转移了两次所以还是O(n^2)的。最初想错了想成三方了把自己吓了一跳。\npascal啊。\ntype\nedge =\u0026nbsp;^edger;\nedger = record\nt: longint;\nnext: edge;\nend;\nconst\nmaxn = 5009;\n//ONLINE_JUDGE = false;\nONLINE_JUDGE = true;\nvar\nn, i, j, u, v: longint;\nans: int64;\nd, cd, sd, td: array [0\u0026nbsp;.. maxn] of longint;\nhead: array [0\u0026nbsp;.. maxn] of edge;\nei: edge;\nprocedure addEdge(u, v: longint);\nvar\nep: edge;\nbegin\nnew(ep);\nep^. t := v;\nep^. next := head[u];\nhead[u]\u0026nbsp;:= ep;\nend;","title":"BZOJ3522 [Poi2014]Hotel"},{"content":"题号是3851，题目名称是2048。\n比较厉害的DP。最初没有想到怎么表示状态。其实就是一个≤2048的自然数就可以表示状态了。\n然后转移不能一个一个来，每个值要一起来，\u0026nbsp;然后拿组合数来算。然后就行了。\n虽然hdu上还是过不到。好慢的说。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define _l (long long int)\nconst int maxn = 100009;\nconst int mod = 998244353;\nint n, f[2][2051], c[2051];\nint fac[maxn], finv[maxn], p2[maxn];\nint modPow(int a, int x)\u0026nbsp;{\nint s(1);\nfor (; x; x \u0026gt;\u0026gt;= 1, a = _l a * a % mod)\nif (x\u0026nbsp;\u0026amp; 1)\ns = _l s * a % mod;\nreturn s;\n}\nvoid pre()\u0026nbsp;{\nfac[0]\u0026nbsp;= 1;\nfinv[0]\u0026nbsp;= 1;\np2[0]\u0026nbsp;= 1;\nfor (int i = 1; i \u0026lt; maxn;\u0026nbsp;++ i)\u0026nbsp;{\nfac[i]\u0026nbsp;= _l fac[i - 1]\u0026nbsp;* i % mod;\nfinv[i]\u0026nbsp;= modPow(fac[i], mod - 2);\np2[i]\u0026nbsp;= _l p2[i - 1]\u0026nbsp;* 2 % mod;\n}\n}\ninline int comb(int n, int m)\u0026nbsp;{\nreturn _l fac[n]\u0026nbsp;* finv[m]\u0026nbsp;% mod * finv[n - m]\u0026nbsp;% mod;\n}\ninline void incm(int\u0026amp; a, int x)\u0026nbsp;{\na += x;\nif (a\u0026nbsp;\u0026gt;= mod)\na %= mod;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nint tc = 0;\npre();\nwhile (scanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;n)\u0026nbsp;^ EOF)\u0026nbsp;{\nif (!n)\nbreak;\nint cn = 0, cur = 0, prv = 1;\nmemset(f, 0, sizeof(f));\nmemset(c, 0, sizeof(c));\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nint a;\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;a);\nif ((a\u0026nbsp;\u0026amp;\u0026nbsp;-a)\u0026nbsp;== a \u0026amp;\u0026amp; a \u0026gt;= 1)\n++ c[a];\nelse\n++ cn;\n}\nf[cur][0]\u0026nbsp;= 1;\nfor (int i = 1; i \u0026lt;= 2048; i \u0026lt;\u0026lt;= 1)\nif (c[i])\u0026nbsp;{\nswap(cur, prv);\nfor (int j = 0; j \u0026lt;= 2048;\u0026nbsp;++ j)\nf[cur][j]\u0026nbsp;= f[prv][j];\nint tc =\u0026nbsp;(p2[c[i]]\u0026nbsp;- 1 + mod)\u0026nbsp;% mod;\nfor (int j = 1; j \u0026lt;= c[i]\u0026nbsp;\u0026amp;\u0026amp; j * i \u0026lt; 2048;\u0026nbsp;++ j)\u0026nbsp;{\nint cc = comb(c[i], j);\nfor (int k = 0; k \u0026lt;= 2048;\u0026nbsp;++ k)\nif (f[prv][k])\nincm(f[cur][min(k + j * i, 2048)], _l f[prv][k]\u0026nbsp;* cc % mod);\ntc =\u0026nbsp;(tc\u0026nbsp;+ mod - cc)\u0026nbsp;% mod;\n}\nfor (int k = 0; k \u0026lt;= 2048;\u0026nbsp;++ k)\nif (f[prv][k])\nincm(f[cur][2048], _l f[prv][k]\u0026nbsp;* tc % mod);\n}\nprintf(\u0026quot;Case #%d:\u0026nbsp;%d\\n\u0026quot;,\u0026nbsp;++ tc,\u0026nbsp;(int)(_l f[cur][2048]\u0026nbsp;* p2[cn]\u0026nbsp;% mod));\n}\n}\n","permalink":"/oi/lofterimport_007/","summary":"题号是3851，题目名称是2048。\n比较厉害的DP。最初没有想到怎么表示状态。其实就是一个≤2048的自然数就可以表示状态了。\n然后转移不能一个一个来，每个值要一起来，\u0026nbsp;然后拿组合数来算。然后就行了。\n虽然hdu上还是过不到。好慢的说。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define _l (long long int)\nconst int maxn = 100009;\nconst int mod = 998244353;\nint n, f[2][2051], c[2051];\nint fac[maxn], finv[maxn], p2[maxn];\nint modPow(int a, int x)\u0026nbsp;{\nint s(1);\nfor (; x; x \u0026gt;\u0026gt;= 1, a = _l a * a % mod)\nif (x\u0026nbsp;\u0026amp; 1)\ns = _l s * a % mod;\nreturn s;","title":"BZOJ3851 2048"},{"content":"全局二分+树状数组，其实还是比较水。\n比较坑的一点是直接求和会暴long long。如果≥Pi了要直接break掉。好坑啊。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\u0026nbsp;\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ =\u0026nbsp;(_x_\u0026nbsp;= 0);\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\nwhile (_s_\u0026nbsp;=\u0026nbsp;(_s_\u0026nbsp;\u0026lt;\u0026lt; 3)\u0026nbsp;+\u0026nbsp;(_s_ \u0026lt;\u0026lt; 1)\u0026nbsp;+ _d_ - 48, isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\ntypedef long long dint;\nconst int maxn = 300009;\nstruct node {\nint v;\nnode *next;\n};\nstruct rain {\nint l, r, a;\n};\nstruct bintree {\ndint t[maxn];\nint n;\nbintree()\u0026nbsp;{\nmemset(t, 0, sizeof(t));\n}\nvoid chg(int p, int v)\u0026nbsp;{\nfor (; p \u0026lt;= n; p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\nt[p]\u0026nbsp;+= v;\n}\ndint qry(int p)\u0026nbsp;{\ndint s = 0;\nfor (; p; p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\ns += t[p];\nreturn s;\n}\n};\nint n, m, t, ans[maxn], o[maxn], w[maxn];\nbool dr[maxn];\nrain a[maxn];\nnode *head[maxn],\u0026nbsp;*np;\nbintree bt;\nvoid binTest(int vl, int vr, int ql, int qr)\u0026nbsp;{\nif (ql\u0026nbsp;\u0026gt;= qr)\nreturn;\nelse if (vl\u0026nbsp;+ 1 == vr)\u0026nbsp;{\nfor (int i = ql; i \u0026lt; qr;\u0026nbsp;++ i)\nans[o[i]]\u0026nbsp;= vl;\n}\nelse {\nint vm =\u0026nbsp;(vl\u0026nbsp;+ vr)\u0026nbsp;\u0026gt;\u0026gt; 1;\nfor (int i = vl; i \u0026lt; vm;\u0026nbsp;++ i)\nif (a[i]. l \u0026lt;= a[i]. r)\u0026nbsp;{\nbt. chg(a[i]. l, a[i]. a);\nbt. chg(a[i]. r + 1,\u0026nbsp;-a[i]. a);\n}\nelse {\nbt. chg(1, a[i]. a);\nbt. chg(a[i]. r + 1,\u0026nbsp;-a[i]. a);\nbt. chg(a[i]. l, a[i]. a);\n}\nfor (int i = ql; i \u0026lt; qr;\u0026nbsp;++ i)\u0026nbsp;{\ndint sc = 0;\nfor (node* j = head[o[i]]; j \u0026amp;\u0026amp; sc \u0026lt; w[o[i]]; j = j-\u0026gt; next)\nsc += bt. qry(j-\u0026gt; v);\nif (sc\u0026nbsp;\u0026gt;= w[o[i]])\ndr[i]\u0026nbsp;= 0;\nelse\ndr[i]\u0026nbsp;= 1;\n}\nint nl = ql, nr = qr - 1;\nwhile (nl\u0026nbsp;\u0026lt;= nr)\u0026nbsp;{\nfor (; nl \u0026lt; nr \u0026amp;\u0026amp;\u0026nbsp;!dr[nl];\u0026nbsp;++ nl);\nfor (; nl \u0026lt; nr \u0026amp;\u0026amp; dr[nr];\u0026nbsp;-- nr);\nif (nl\u0026nbsp;\u0026lt;= nr)\u0026nbsp;{\nswap(o[nl], o[nr]);\nswap(dr[nl], dr[nr]);\n++ nl;\n-- nr;\n}\n}\nfor (nl\u0026nbsp;= ql; nl \u0026lt; qr \u0026amp;\u0026amp;\u0026nbsp;!dr[nl];\u0026nbsp;++ nl);\nbinTest(vm, vr, nl, qr);\nfor (int i = vl; i \u0026lt; vm;\u0026nbsp;++ i)\nif (a[i]. l \u0026lt;= a[i]. r)\u0026nbsp;{\nbt. chg(a[i]. l,\u0026nbsp;-a[i]. a);\nbt. chg(a[i]. r + 1, a[i]. a);\n}\nelse {\nbt. chg(1,\u0026nbsp;-a[i]. a);\nbt. chg(a[i]. r + 1, a[i]. a);\nbt. chg(a[i]. l,\u0026nbsp;-a[i]. a);\n}\nbinTest(vl, vm, ql, nl);\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\n//freopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\nreadInt(m);\nbt. n = m + 1;\nmemset(head, 0, sizeof(head));\nnp = new node[m];\nfor (int i = 1; i \u0026lt;= m;\u0026nbsp;++ i)\u0026nbsp;{\nint v;\nreadInt(v);\nnp-\u0026gt; v = i;\nnp-\u0026gt; next = head[v];\nhead[v]\u0026nbsp;= np ++;\n}\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(w[i]);\no[i - 1]\u0026nbsp;= i;\n}\nreadInt(t);\nfor (int i = 0; i \u0026lt; t;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(a[i]. l);\nreadInt(a[i]. r);\nreadInt(a[i]. a);\n}\na[t]. l = a[t]. r = 1;\na[t]. a = 0;\nbinTest(0, t + 1, 0, n);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nif (ans[i]\u0026nbsp;== t)\nputs(\u0026quot;NIE\u0026quot;);\nelse\nprintf(\u0026quot;%d\\n\u0026quot;, ans[i]\u0026nbsp;+ 1);\n}\n","permalink":"/oi/lofterimport_008/","summary":"全局二分+树状数组，其实还是比较水。\n比较坑的一点是直接求和会暴long long。如果≥Pi了要直接break掉。好坑啊。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\u0026nbsp;\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ =\u0026nbsp;(_x_\u0026nbsp;= 0);\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\nwhile (_s_\u0026nbsp;=\u0026nbsp;(_s_\u0026nbsp;\u0026lt;\u0026lt; 3)\u0026nbsp;+\u0026nbsp;(_s_ \u0026lt;\u0026lt; 1)\u0026nbsp;+ _d_ - 48, isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\ntypedef long long dint;\nconst int maxn = 300009;\nstruct node {\nint v;\nnode *next;\n};\nstruct rain {\nint l, r, a;\n};\nstruct bintree {\ndint t[maxn];\nint n;\nbintree()\u0026nbsp;{","title":"BZOJ2527 [Poi2011]Meteors"},{"content":"水一发。\n本来可以直接拿主席树找中位数的，但是因为main上只有32MB，所以只好写了个splay。感觉现在是爱上指针了。然后kth的时候少打个等号又wa又re好爽。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long dint;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\n#define _l (long long int)\nconst int maxn = 100009;\n#define nsz(p)\u0026nbsp;((p)?(p-\u0026gt;sz):0)\n#define sof(p)\u0026nbsp;((p)?(p-\u0026gt;s):0)\nstruct splay_node {\n\u0026nbsp;\u0026nbsp; int v, sz;\n\u0026nbsp;\u0026nbsp; dint s;\n\u0026nbsp;\u0026nbsp; splay_node *ls,\u0026nbsp;*rs,\u0026nbsp;*pt;\n\u0026nbsp;\u0026nbsp; inline void init(int v0)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp; v = v0;\n\u0026nbsp;\u0026nbsp; sz = 1;\n\u0026nbsp;\u0026nbsp; s = v0;\n\u0026nbsp;\u0026nbsp; pt = ls = rs = 0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp; inline void update()\u0026nbsp;{\n\u0026nbsp;\u0026nbsp; s = v;\n\u0026nbsp;\u0026nbsp; sz = 1;\n\u0026nbsp;\u0026nbsp; if (ls)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp; s += ls-\u0026gt; s;\n\u0026nbsp;\u0026nbsp; sz += ls-\u0026gt; sz;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp; if (rs)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp; s += rs-\u0026gt; s;\n\u0026nbsp;\u0026nbsp; sz += rs-\u0026gt; sz;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n};\nstruct splay_tree {\nsplay_node *cr,\u0026nbsp;*sp, slst[maxn];\ninline splay_tree()\u0026nbsp;{\ncr = 0;\nsp = slst;\n}\ninline void rot(splay_node* q)\u0026nbsp;{\nsplay_node *p\u0026nbsp;= q-\u0026gt; pt;\nif (p-\u0026gt; pt)\u0026nbsp;{\nif (p-\u0026gt; pt-\u0026gt; ls == p)\np-\u0026gt; pt-\u0026gt; ls = q;\nelse\np-\u0026gt; pt-\u0026gt; rs = q;\n}\nq-\u0026gt; pt = p-\u0026gt; pt;\np-\u0026gt; pt = q;\nif (q\u0026nbsp;== p-\u0026gt; ls)\u0026nbsp;{\nif (q-\u0026gt; rs)\nq-\u0026gt; rs-\u0026gt; pt = p;\np-\u0026gt; ls = q-\u0026gt; rs;\nq-\u0026gt; rs = p;\n}\nelse {\nif (q-\u0026gt; ls)\nq-\u0026gt; ls-\u0026gt; pt = p;\np-\u0026gt; rs = q-\u0026gt; ls;\nq-\u0026gt; ls = p;\n}\np-\u0026gt; update();\nq-\u0026gt; update();\n}\nvoid splay(splay_node* q)\u0026nbsp;{\nwhile (q-\u0026gt; pt)\u0026nbsp;{\nsplay_node *p\u0026nbsp;= q-\u0026gt; pt;\nif (!p-\u0026gt; pt)\nrot(q);\nelse if ((p\u0026nbsp;== p-\u0026gt; pt-\u0026gt; ls)\u0026nbsp;==\u0026nbsp;(q == p-\u0026gt; ls))\nrot(p), rot(q);\nelse\nrot(q), rot(q);\n}\ncr = q;\n}\nsplay_node* kth(splay_node* p, int k)\u0026nbsp;{\nwhile (p)\nif (nsz(p-\u0026gt; ls)\u0026nbsp;+ 1 == k)\nbreak;\nelse if (nsz(p-\u0026gt; ls)\u0026nbsp;\u0026gt;= k)\np = p-\u0026gt; ls;\nelse\nk -= nsz(p-\u0026gt; ls)\u0026nbsp;+ 1, p = p-\u0026gt; rs;\nreturn p;\n}\nvoid ins(int v)\u0026nbsp;{\nsplay_node *x\u0026nbsp;= sp ++;\nx-\u0026gt; init(v);\nif (!cr)\ncr = x;\nelse {\nsplay_node *p\u0026nbsp;= cr;\nwhile (p)\nif (v\u0026nbsp;\u0026lt; p-\u0026gt; v)\u0026nbsp;{\nif (!p-\u0026gt; ls)\u0026nbsp;{\np-\u0026gt; ls = x;\nx-\u0026gt; pt = p;\nbreak;\n}\nelse\np = p-\u0026gt; ls;\n}\nelse {\nif (!p-\u0026gt; rs)\u0026nbsp;{\np-\u0026gt; rs = x;\nx-\u0026gt; pt = p;\nbreak;\n}\nelse\np = p-\u0026gt; rs;\n}\nsplay(x);\n}\n}\nvoid ers(int v)\u0026nbsp;{\nsplay_node *p\u0026nbsp;= cr;\nwhile (p)\nif (p-\u0026gt; v == v)\nbreak;\nelse if (v\u0026nbsp;\u0026lt; p-\u0026gt; v)\np = p-\u0026gt; ls;\nelse\np = p-\u0026gt; rs;\nsplay(p);\nif (!p-\u0026gt; rs)\u0026nbsp;{\nif (p-\u0026gt; ls)\np-\u0026gt; ls-\u0026gt; pt = 0;\ncr = p-\u0026gt; ls;\n}\nelse {\np-\u0026gt; rs-\u0026gt; pt = 0;\nsplay_node* q = kth(p-\u0026gt; rs, 1);\nsplay(q);\nq-\u0026gt; ls = p-\u0026gt; ls;\nif (p-\u0026gt; ls)\np-\u0026gt; ls-\u0026gt; pt = q;\nq-\u0026gt; update();\ncr = q;\n}\n}\ndint ans(int k)\u0026nbsp;{\nsplay_node *p\u0026nbsp;= kth(cr,\u0026nbsp;(k + 1)\u0026nbsp;\u0026gt;\u0026gt; 1);\nsplay(p);\nif (k\u0026nbsp;\u0026amp; 1)\nreturn sof(p-\u0026gt; rs)\u0026nbsp;- sof(p-\u0026gt; ls);\nelse\nreturn sof(p-\u0026gt; rs)\u0026nbsp;- p-\u0026gt; v - sof(p-\u0026gt; ls);\n}\ninline int midv()\u0026nbsp;{\nreturn cr-\u0026gt; v;\n}\n};\nint n, k, a[maxn];\nint p0, v0;\ndint ans;\nsplay_tree t;\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\n//freopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;k);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nscanf(\u0026quot;%d\u0026quot;, a + i);\nfor (int i = 0; i \u0026lt; k;\u0026nbsp;++ i)\nt. ins(a[i]);\nans = t. ans(k);\np0 = 0;\nv0 = t. midv();\nfor (int i = k; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nt. ers(a[i - k]);\nt. ins(a[i]);\ndint vn = t. ans(k);\nif (vn\u0026nbsp;\u0026lt; ans)\u0026nbsp;{\nans = vn;\np0 = i - k + 1;\nv0 = t. midv();\n}\n}\nprintf(lld \u0026quot;\\n\u0026quot;, ans);\n/*for (int i = p0; i \u0026lt; p0 + k;\u0026nbsp;++ i)\na[i]\u0026nbsp;= v0;\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nprintf(\u0026quot;%d\\n\u0026quot;, a[i]);*/\n}\n","permalink":"/oi/lofterimport_009/","summary":"水一发。\n本来可以直接拿主席树找中位数的，但是因为main上只有32MB，所以只好写了个splay。感觉现在是爱上指针了。然后kth的时候少打个等号又wa又re好爽。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long dint;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\n#define _l (long long int)\nconst int maxn = 100009;\n#define nsz(p)\u0026nbsp;((p)?(p-\u0026gt;sz):0)\n#define sof(p)\u0026nbsp;((p)?(p-\u0026gt;s):0)\nstruct splay_node {\n\u0026nbsp;\u0026nbsp; int v, sz;\n\u0026nbsp;\u0026nbsp; dint s;\n\u0026nbsp;\u0026nbsp; splay_node *ls,\u0026nbsp;*rs,\u0026nbsp;*pt;\n\u0026nbsp;\u0026nbsp; inline void init(int v0)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp; v = v0;\n\u0026nbsp;\u0026nbsp; sz = 1;\n\u0026nbsp;\u0026nbsp; s = v0;\n\u0026nbsp;\u0026nbsp; pt = ls = rs = 0;","title":"BZOJ1112 [POI2008]砖块"},{"content":"比较简单易懂的状压。\n最初想懒一下把起点和终点也压进来然后发现刚好会超一点空间。然后不压进来的话就是100MB左右，很好奇MAIN上面64MB的内存应该怎么做。拿MAP么？\n代码各种难看啊郁闷。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t, v;\nedge *next;\n};\n#define pow2(x)\u0026nbsp;(1\u0026lt;\u0026lt;(x))\ntypedef pair \u0026lt;int, int\u0026gt; dspr;\nconst int maxn = 20009;\nconst int maxe = 400009;\nconst int maxk = 20;\nconst int maxz = pow2(20)\u0026nbsp;+ 3;\nint n, m, k, d[maxn];\nint f[maxz][maxk], ds[maxk], dt[maxk], dk[maxk][maxk], ans;\nint g, pr[maxk];\nedge *ep,\u0026nbsp;*head[maxn];\ndspr hp[maxe];\ninline void addEdge(int u, int v, int w)\u0026nbsp;{\nep-\u0026gt; t = v;\nep-\u0026gt; v = w;\nep-\u0026gt; next = head[u];\nhead[u]\u0026nbsp;= ep ++;\n}\nvoid dijkstra(int p0)\u0026nbsp;{\nint th = 1;\nhp[0]\u0026nbsp;= dspr(0, p0);\nmemset(d,\u0026nbsp;-1, sizeof(d));\nwhile (th)\u0026nbsp;{\ndspr g = hp[0];\npop_heap(hp, hp +\u0026nbsp;(th\u0026nbsp;--));\nif (d[g. second]\u0026nbsp;\u0026gt;\u0026nbsp;-1)\ncontinue;\nd[g. second]\u0026nbsp;=\u0026nbsp;- g. first;\nfor (edge* e = head[g. second]; e; e = e-\u0026gt; next)\nif (d[e-\u0026gt; t]\u0026nbsp;==\u0026nbsp;-1)\u0026nbsp;{\nhp[th]\u0026nbsp;= dspr(g. first - e-\u0026gt; v, e-\u0026gt; t);\npush_heap(hp, hp +\u0026nbsp;(++ th));\n}\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\n//freopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m,\u0026nbsp;\u0026amp;k);\nmemset(head, 0, sizeof(head));\nep = new edge[m * 2];\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nint u, v, w;\nscanf(\u0026quot;%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;u,\u0026nbsp;\u0026amp;v,\u0026nbsp;\u0026amp;w);\naddEdge(u, v, w);\naddEdge(v, u, w);\n}\nfor (int i = 2; i \u0026lt;= k + 1;\u0026nbsp;++ i)\u0026nbsp;{\ndijkstra(i);\nfor (int j = 2; j \u0026lt;= k + 1;\u0026nbsp;++ j)\ndk[i - 2][j - 2]\u0026nbsp;= d[j];\nds[i - 2]\u0026nbsp;= d[1];\ndt[i - 2]\u0026nbsp;= d[n];\n}\nmemset(pr, 0, sizeof(pr));\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;g);\nfor (int i = 0; i \u0026lt; g;\u0026nbsp;++ i)\u0026nbsp;{\nint u, v;\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;u,\u0026nbsp;\u0026amp;v);\npr[v - 2]\u0026nbsp;|= pow2(u - 2);\n}\nif (k)\u0026nbsp;{\nmemset(f,\u0026nbsp;-1, sizeof(f));\nfor (int i = 0; i \u0026lt; k;\u0026nbsp;++ i)\nif (!pr[i])\nf[pow2(i)][i]\u0026nbsp;= ds[i];\nfor (int i = 0, ei = pow2(k); i \u0026lt; ei;\u0026nbsp;++ i)\nfor (int j = 0; j \u0026lt; k;\u0026nbsp;++ j)\nif (f[i][j]\u0026nbsp;\u0026gt;\u0026nbsp;-1)\nfor (int t = 0; t \u0026lt; k;\u0026nbsp;++ t)\nif (!(pow2(t)\u0026nbsp;\u0026amp; i)\u0026nbsp;\u0026amp;\u0026amp;\u0026nbsp;((i \u0026amp; pr[t])\u0026nbsp;== pr[t]))\u0026nbsp;{\nint zn = pow2(t)\u0026nbsp;| i;\nif (f[zn][t]\u0026nbsp;==\u0026nbsp;-1\u0026nbsp;|| f[zn][t]\u0026nbsp;\u0026gt; f[i][j]\u0026nbsp;+ dk[j][t])\nf[zn][t]\u0026nbsp;= f[i][j]\u0026nbsp;+ dk[j][t];\n}\nans =\u0026nbsp;-1;\nfor (int i = 0, et = pow2(k)\u0026nbsp;- 1; i \u0026lt; k;\u0026nbsp;++ i)\nif (f[et][i]\u0026nbsp;\u0026gt;\u0026nbsp;-1)\nif (ans\u0026nbsp;==\u0026nbsp;-1\u0026nbsp;|| f[et][i]\u0026nbsp;+ dt[i]\u0026nbsp;\u0026lt; ans)\nans = f[et][i]\u0026nbsp;+ dt[i];\n}\nelse {\ndijkstra(1);\nans = d[n];\n}\nprintf(\u0026quot;%d\\n\u0026quot;, ans);\n}\n","permalink":"/oi/lofterimport_010/","summary":"比较简单易懂的状压。\n最初想懒一下把起点和终点也压进来然后发现刚好会超一点空间。然后不压进来的话就是100MB左右，很好奇MAIN上面64MB的内存应该怎么做。拿MAP么？\n代码各种难看啊郁闷。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t, v;\nedge *next;\n};\n#define pow2(x)\u0026nbsp;(1\u0026lt;\u0026lt;(x))\ntypedef pair \u0026lt;int, int\u0026gt; dspr;\nconst int maxn = 20009;\nconst int maxe = 400009;\nconst int maxk = 20;\nconst int maxz = pow2(20)\u0026nbsp;+ 3;\nint n, m, k, d[maxn];\nint f[maxz][maxk], ds[maxk], dt[maxk], dk[maxk][maxk], ans;\nint g, pr[maxk];\nedge *ep,\u0026nbsp;*head[maxn];\ndspr hp[maxe];\ninline void addEdge(int u, int v, int w)\u0026nbsp;{","title":"BZOJ1097 [POI2007]旅游景点"},{"content":"yy了一个sqrt的玩意，不过因为n在变所以没有保障啊。\n肯定不是正解了。\n1s的题跑了1.3s居然AC，好厉害。\n#include \u0026lt;cstdio\u0026gt;\ntypedef long long dint;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\ndint calc(dint n, dint k)\u0026nbsp;{\nif (n\u0026nbsp;\u0026lt;= 1)\nreturn k;\nfor (dint i = 1, j; i \u0026lt;= k; i = j + 1)\u0026nbsp;{\nif (n\u0026nbsp;\u0026lt;= i)\nreturn k;\nj =\u0026nbsp;(n\u0026nbsp;- 1)\u0026nbsp;/\u0026nbsp;((n - 1)\u0026nbsp;/ i);\nif (j\u0026nbsp;\u0026gt; k)\nj = k;\nn =\u0026nbsp;((n\u0026nbsp;- 1)\u0026nbsp;/ i + 1)\u0026nbsp;* j;\n}\nreturn n;\n}\nint main()\u0026nbsp;{\nint i = 0;\ndint n, k;\nwhile (scanf(lld lld,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;k)\u0026nbsp;!= EOF)\nif (!n\u0026nbsp;\u0026amp;\u0026amp;\u0026nbsp;!k)\nbreak;\nelse\nprintf(\u0026quot;Case #%d:\u0026nbsp;\u0026quot; lld \u0026quot;\\n\u0026quot;,\u0026nbsp;++ i, calc(n, k));\n}\n","permalink":"/oi/lofterimport_011/","summary":"yy了一个sqrt的玩意，不过因为n在变所以没有保障啊。\n肯定不是正解了。\n1s的题跑了1.3s居然AC，好厉害。\n#include \u0026lt;cstdio\u0026gt;\ntypedef long long dint;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\ndint calc(dint n, dint k)\u0026nbsp;{\nif (n\u0026nbsp;\u0026lt;= 1)\nreturn k;\nfor (dint i = 1, j; i \u0026lt;= k; i = j + 1)\u0026nbsp;{\nif (n\u0026nbsp;\u0026lt;= i)\nreturn k;\nj =\u0026nbsp;(n\u0026nbsp;- 1)\u0026nbsp;/\u0026nbsp;((n - 1)\u0026nbsp;/ i);\nif (j\u0026nbsp;\u0026gt; k)\nj = k;\nn =\u0026nbsp;((n\u0026nbsp;- 1)\u0026nbsp;/ i + 1)\u0026nbsp;* j;\n}\nreturn n;","title":"BZOJ3858 Number Transformation"},{"content":"最初觉得挺麻烦的一道题没思路。有点像并查集直接搞但是不好维护直径。\n然后发现树上到任意一点的最远点一定是直径的两个端点之一。于是直接把直径是哪俩点记下来就好了。然后按点权从大到小往树里插。\n然后莫名其妙地抢到了第二快。这么老的题也是蛮欣慰的。大概是读入优化2333\n#include \u0026lt;bits/stdc++.h\u0026gt;\nusing namespace std;\nvoid setRand()\u0026nbsp;{\nFILE* pf = fopen(\u0026quot;.rs\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;);\nint hsv;\nif (pf)\u0026nbsp;{\nfscanf(pf,\u0026nbsp;\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;hsv);\nfclose(pf);\n}\nsrand(hsv);\nprintf(\u0026quot;Seed =\u0026nbsp;%d\\n\u0026quot;, hsv);\npf = fopen(\u0026quot;.rs\u0026quot;,\u0026nbsp;\u0026quot;w\u0026quot;);\nfprintf(pf,\u0026nbsp;\u0026quot;%d\u0026quot;,\u0026nbsp;(hsv \u0026lt;\u0026lt; 1)\u0026nbsp;|\u0026nbsp;(rand()\u0026nbsp;\u0026amp; 1));\nfclose(pf);\n}\n#define readArg(a,b)\u0026nbsp;{ if (argc\u0026nbsp;\u0026gt; a) sscanf(args[a],\u0026nbsp;\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;b);\u0026nbsp;}\nvoid mklr(int m, char s)\u0026nbsp;{\nint l, r;\ndo\nl = rand()\u0026nbsp;% m + 1, r = rand()\u0026nbsp;% m + 1;\nwhile (l\u0026nbsp;\u0026gt; r);\nprintf(\u0026quot;%d %d%c\u0026quot;, l, r, s);\n}\nint main(int argc, char* args[])\u0026nbsp;{\nsetRand();\nint n = 10, m = 10, k = 10;\nreadArg(1, n);\nreadArg(2, m);\nreadArg(3, k);\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;w\u0026quot;, stdout);\nprintf(\u0026quot;%d\\n\u0026quot;, n);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nprintf(\u0026quot;%d \u0026quot;, rand()\u0026nbsp;% k + 1);\nputchar(10);\nfor (int i = 2; i \u0026lt;= n;\u0026nbsp;++ i)\nprintf(\u0026quot;%d %d\\n\u0026quot;, i - rand()\u0026nbsp;% min(i - 1, m)\u0026nbsp;- 1, i);\n/*for (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nmklr(m, 32);\nmklr(m, 10);\n}*/\n}\n","permalink":"/oi/lofterimport_012/","summary":"最初觉得挺麻烦的一道题没思路。有点像并查集直接搞但是不好维护直径。\n然后发现树上到任意一点的最远点一定是直径的两个端点之一。于是直接把直径是哪俩点记下来就好了。然后按点权从大到小往树里插。\n然后莫名其妙地抢到了第二快。这么老的题也是蛮欣慰的。大概是读入优化2333\n#include \u0026lt;bits/stdc++.h\u0026gt;\nusing namespace std;\nvoid setRand()\u0026nbsp;{\nFILE* pf = fopen(\u0026quot;.rs\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;);\nint hsv;\nif (pf)\u0026nbsp;{\nfscanf(pf,\u0026nbsp;\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;hsv);\nfclose(pf);\n}\nsrand(hsv);\nprintf(\u0026quot;Seed =\u0026nbsp;%d\\n\u0026quot;, hsv);\npf = fopen(\u0026quot;.rs\u0026quot;,\u0026nbsp;\u0026quot;w\u0026quot;);\nfprintf(pf,\u0026nbsp;\u0026quot;%d\u0026quot;,\u0026nbsp;(hsv \u0026lt;\u0026lt; 1)\u0026nbsp;|\u0026nbsp;(rand()\u0026nbsp;\u0026amp; 1));\nfclose(pf);\n}\n#define readArg(a,b)\u0026nbsp;{ if (argc\u0026nbsp;\u0026gt; a) sscanf(args[a],\u0026nbsp;\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;b);\u0026nbsp;}\nvoid mklr(int m, char s)\u0026nbsp;{\nint l, r;\ndo\nl = rand()\u0026nbsp;% m + 1, r = rand()\u0026nbsp;% m + 1;\nwhile (l\u0026nbsp;\u0026gt; r);\nprintf(\u0026quot;%d %d%c\u0026quot;, l, r, s);\n}","title":"BZOJ2870 最长道路"},{"content":"orz jason_yu提醒了我一句“最简单的优化”，才想起来。\n如果d合法的话那么b/d-(a-1)/d\u0026gt;0。然后用整除优化到sqrt就可过。虽然比较慢。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint main()\u0026nbsp;{\nint t, a, b, c, d, s, e;\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;t);\nwhile (t\u0026nbsp;--)\u0026nbsp;{\nscanf(\u0026quot;%d%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;a,\u0026nbsp;\u0026amp;b,\u0026nbsp;\u0026amp;c,\u0026nbsp;\u0026amp;d);\n-- a;\n-- c;\ns = 1;\ne = min(b, d);\nfor (int i = 1, j; i \u0026lt;= e; i = j + 1)\u0026nbsp;{\nj = min(b /\u0026nbsp;(b\u0026nbsp;/ i), d /\u0026nbsp;(d\u0026nbsp;/ i));\nif (a\u0026nbsp;/ i)\nj = min(j, a /\u0026nbsp;(a\u0026nbsp;/ i));\nif (c\u0026nbsp;/ i)\nj = min(j, c /\u0026nbsp;(c\u0026nbsp;/ i));\nif (a\u0026nbsp;/ i \u0026lt; b / i \u0026amp;\u0026amp; c / i \u0026lt; d / i)\ns = j;\n}\nprintf(\u0026quot;%d\\n\u0026quot;, s);\n}\n}\n","permalink":"/oi/lofterimport_013/","summary":"orz jason_yu提醒了我一句“最简单的优化”，才想起来。\n如果d合法的话那么b/d-(a-1)/d\u0026gt;0。然后用整除优化到sqrt就可过。虽然比较慢。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint main()\u0026nbsp;{\nint t, a, b, c, d, s, e;\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;t);\nwhile (t\u0026nbsp;--)\u0026nbsp;{\nscanf(\u0026quot;%d%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;a,\u0026nbsp;\u0026amp;b,\u0026nbsp;\u0026amp;c,\u0026nbsp;\u0026amp;d);\n-- a;\n-- c;\ns = 1;\ne = min(b, d);\nfor (int i = 1, j; i \u0026lt;= e; i = j + 1)\u0026nbsp;{\nj = min(b /\u0026nbsp;(b\u0026nbsp;/ i), d /\u0026nbsp;(d\u0026nbsp;/ i));\nif (a\u0026nbsp;/ i)\nj = min(j, a /\u0026nbsp;(a\u0026nbsp;/ i));\nif (c\u0026nbsp;/ i)","title":"BZOJ3834 [Poi2014]Solar Panels"},{"content":"树型贪心orz\n写丑了。调了半个晚上，然后发现是起点最耗时的时候的情况搞错了，只用走n-1条路而不是n条。晕。\n对于每个节点贪心按f[p]-2*sz[p]排序或者用原式也行。不过巨慢。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\u0026nbsp;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ =\u0026nbsp;(_x_\u0026nbsp;= 0);\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\nwhile (_s_\u0026nbsp;= _s_ * 10 + _d_ - 48, isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\nstruct edge {\nint t;\nedge *next;\n};\nconst int maxn = 500009;\nint n, v[maxn], t, f[maxn], sz[maxn], dfo[maxn], st[maxn];\nedge *ep,\u0026nbsp;*head[maxn];\ninline void addEdge(int u, int v)\u0026nbsp;{\nep-\u0026gt; t = v;\nep-\u0026gt; next = head[u];\nhead[u]\u0026nbsp;= ep ++;\n}\ninline bool cmpTo(const int\u0026amp; a, const int\u0026amp; b)\u0026nbsp;{\nreturn max(f[a], f[b]\u0026nbsp;+ sz[a]\u0026nbsp;* 2 + 1)\u0026nbsp;\u0026lt; max(f[b], f[a]\u0026nbsp;+ sz[b]\u0026nbsp;* 2 + 1);\n//return f[a]\u0026nbsp;- sz[a]\u0026nbsp;* 2 \u0026gt; f[b]\u0026nbsp;- sz[b]\u0026nbsp;* 2 ||\u0026nbsp;(f[a]\u0026nbsp;- sz[a]\u0026nbsp;* 2 == f[b]\u0026nbsp;- sz[b]\u0026nbsp;* 2 \u0026amp;\u0026amp; f[a]\u0026nbsp;\u0026gt; f[b]);\n}\nvoid dfs()\u0026nbsp;{\nstatic int stc[maxn];\nint tst = 1, dfn = 0;\nstc[1]\u0026nbsp;= 1;\nmemset(f,\u0026nbsp;-1, sizeof(f));\nmemset(sz, 0, sizeof(sz));\nf[1]\u0026nbsp;= 0;\nwhile (tst)\u0026nbsp;{\nint p = stc[tst --];\ndfo[++ dfn]\u0026nbsp;= p;\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (f[e-\u0026gt; t]\u0026nbsp;==\u0026nbsp;-1)\u0026nbsp;{\nf[e-\u0026gt; t]\u0026nbsp;= 0;\nstc[++ tst]\u0026nbsp;= e-\u0026gt; t;\n}\n}\nfor (int ti = n; ti;\u0026nbsp;-- ti)\u0026nbsp;{\nint p = dfo[ti], wt = 0;\nt = 0;\nf[p]\u0026nbsp;= v[p];\nsz[p]\u0026nbsp;= 1;\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (sz[e-\u0026gt; t])\u0026nbsp;{\nsz[p]\u0026nbsp;+= sz[e-\u0026gt; t];\nst[t ++]\u0026nbsp;= e-\u0026gt; t;\n}\nsort(st, st + t, cmpTo);\nfor (int i = 0; i \u0026lt; t;\u0026nbsp;++ i)\u0026nbsp;{\nf[p]\u0026nbsp;= max(f[p], wt + f[st[i]]\u0026nbsp;+ 1);\nwt += sz[st[i]]\u0026nbsp;\u0026lt;\u0026lt; 1;\n}\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\n//freopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nreadInt(v[i]);\nep = new edge[n \u0026lt;\u0026lt; 1];\nmemset(head, 0, sizeof(head));\nfor (int i = 1; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nint u, v;\nreadInt(u);\nreadInt(v);\naddEdge(u, v);\naddEdge(v, u);\n}\nint v1 = v[1];\nv[1]\u0026nbsp;= 0;\ndfs();\nprintf(\u0026quot;%d\\n\u0026quot;, max(f[1],\u0026nbsp;(n - 1)\u0026nbsp;* 2 + v1));\n}\n","permalink":"/oi/lofterimport_014/","summary":"树型贪心orz\n写丑了。调了半个晚上，然后发现是起点最耗时的时候的情况搞错了，只用走n-1条路而不是n条。晕。\n对于每个节点贪心按f[p]-2*sz[p]排序或者用原式也行。不过巨慢。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\u0026nbsp;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ =\u0026nbsp;(_x_\u0026nbsp;= 0);\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\nwhile (_s_\u0026nbsp;= _s_ * 10 + _d_ - 48, isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\nstruct edge {\nint t;\nedge *next;\n};\nconst int maxn = 500009;\nint n, v[maxn], t, f[maxn], sz[maxn], dfo[maxn], st[maxn];\nedge *ep,\u0026nbsp;*head[maxn];\ninline void addEdge(int u, int v)\u0026nbsp;{\nep-\u0026gt; t = v;","title":"BZOJ3829 [Poi2014]FarmCraft"},{"content":"一血yeah yeah。\n第一眼觉得是比较麻烦的单调队列。\n然后发现转移的时候只会加1或者不加。\n那么取的时候只用取队首，队里首先fi单不降然后hi单减。那么一定没有方案比取队首差。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\u0026nbsp;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ =\u0026nbsp;(_x_\u0026nbsp;= 0);\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\nwhile (_s_\u0026nbsp;= _s_ * 10 + _d_ - 48, isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\nconst int maxn = 1000009;\nint n, m, a[maxn], f[maxn], q[maxn];\nint getTrans(int l, int r)\u0026nbsp;{\nint v0 = f[q[l]];\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r + 1)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (f[q[mid]]\u0026nbsp;== v0)\nl = mid;\nelse\nr = mid - 1;\n}\nreturn q[l];\n}\nint dp(int l)\u0026nbsp;{\nint hd = 0, tl = 1;\nf[1]\u0026nbsp;= 0;\nq[0]\u0026nbsp;= 1;\nfor (int i = 2; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nwhile (i\u0026nbsp;- q[hd]\u0026nbsp;\u0026gt; l)\n++ hd;\nint j = q[hd];\nf[i]\u0026nbsp;= f[j]\u0026nbsp;+\u0026nbsp;(a[i]\u0026nbsp;\u0026gt;= a[j]);\nwhile (hd\u0026nbsp;\u0026lt; tl \u0026amp;\u0026amp;\u0026nbsp;(f[i]\u0026nbsp;\u0026lt; f[q[tl - 1]]\u0026nbsp;||\u0026nbsp;(f[i]\u0026nbsp;== f[q[tl - 1]]\u0026nbsp;\u0026amp;\u0026amp; a[i]\u0026nbsp;\u0026gt;= a[q[tl - 1]])))\n-- tl;\nq[tl ++]\u0026nbsp;= i;\n}\nreturn f[n];\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\n//freopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nreadInt(a[i]);\nreadInt(m);\nwhile (m\u0026nbsp;--)\u0026nbsp;{\nint k;\nreadInt(k);\nprintf(\u0026quot;%d\\n\u0026quot;, dp(k));\n}\n}\n","permalink":"/oi/lofterimport_015/","summary":"一血yeah yeah。\n第一眼觉得是比较麻烦的单调队列。\n然后发现转移的时候只会加1或者不加。\n那么取的时候只用取队首，队里首先fi单不降然后hi单减。那么一定没有方案比取队首差。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\u0026nbsp;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ =\u0026nbsp;(_x_\u0026nbsp;= 0);\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\nwhile (_s_\u0026nbsp;= _s_ * 10 + _d_ - 48, isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\nconst int maxn = 1000009;\nint n, m, a[maxn], f[maxn], q[maxn];\nint getTrans(int l, int r)\u0026nbsp;{\nint v0 = f[q[l]];\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r + 1)\u0026nbsp;\u0026gt;\u0026gt; 1;","title":"BZOJ3831 [Poi2014]Little Bird"},{"content":"签到题。表示今天虽然废了一天但是还是坚持写了题的。\n单调栈搞定。\n因为打球把小指头打残了所以不想敲include所以写了pascal，然后发现include不用小指。\nconst\nmaxn = 100009;\nvar\nn, i, t: longint;\na, st, ans: array[0 .. maxn] of longint;\nbegin\nreadln(n);\nfor i := 1 to n do\nreadln(a[i]);\nt := 0;\nfor i := n downto 1 do begin\nwhile (t\u0026nbsp;\u0026gt; 0) and (a[i]\u0026nbsp;\u0026gt;= a[st[t]]) do\ndec(t);\nif t = 0 then\nans[i]\u0026nbsp;:= 0\nelse\nans[i]\u0026nbsp;:= st[t];\ninc(t);\nst[t]\u0026nbsp;:= i;\nend;\nfor i := 1 to n do\nwriteln(ans[i]);\nend.\n","permalink":"/oi/lofterimport_016/","summary":"签到题。表示今天虽然废了一天但是还是坚持写了题的。\n单调栈搞定。\n因为打球把小指头打残了所以不想敲include所以写了pascal，然后发现include不用小指。\nconst\nmaxn = 100009;\nvar\nn, i, t: longint;\na, st, ans: array[0 .. maxn] of longint;\nbegin\nreadln(n);\nfor i := 1 to n do\nreadln(a[i]);\nt := 0;\nfor i := n downto 1 do begin\nwhile (t\u0026nbsp;\u0026gt; 0) and (a[i]\u0026nbsp;\u0026gt;= a[st[t]]) do\ndec(t);\nif t = 0 then\nans[i]\u0026nbsp;:= 0\nelse\nans[i]\u0026nbsp;:= st[t];\ninc(t);\nst[t]\u0026nbsp;:= i;\nend;\nfor i := 1 to n do","title":"BZOJ3401 [Usaco2009 Mar]Look Up 仰望"},{"content":"英语阅读题。做完去翻译题面然后写英语作业了。\n就维护一下区间里的距离和and忽略一个点的收益的最大值。完了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct seg {\nint l, r;\nint s, v;\nseg *ls,\u0026nbsp;*rs;\n};\nconst int maxn = 100009;\nint n, m, x[maxn], y[maxn], d[maxn], v[maxn];\nseg *rt,\u0026nbsp;*sp;\ninline void upDis(int i)\u0026nbsp;{\nif (i\u0026nbsp;\u0026lt; n)\nd[i]\u0026nbsp;= abs(x[i + 1]\u0026nbsp;- x[i])\u0026nbsp;+ abs(y[i + 1]\u0026nbsp;- y[i]);\nelse\nd[i]\u0026nbsp;= 0;\n}\ninline void upVal(int i)\u0026nbsp;{\nif (i\u0026nbsp;\u0026gt; 1 \u0026amp;\u0026amp; i \u0026lt; n)\nv[i]\u0026nbsp;= d[i - 1]\u0026nbsp;+ d[i]\u0026nbsp;- abs(x[i + 1]\u0026nbsp;- x[i - 1])\u0026nbsp;- abs(y[i + 1]\u0026nbsp;- y[i - 1]);\nelse\nv[i]\u0026nbsp;= 0;\n}\n#define mid(p)\u0026nbsp;((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\ninline seg* sgtBuild(int l, int r)\u0026nbsp;{\nseg *p\u0026nbsp;= sp ++;\np-\u0026gt; l = l;\np-\u0026gt; r = r;\nif (l\u0026nbsp;+ 1 == r)\u0026nbsp;{\np-\u0026gt; s = d[l];\np-\u0026gt; v = v[l];\n}\nelse {\np-\u0026gt; ls = sgtBuild(l, mid(p));\np-\u0026gt; rs = sgtBuild(mid(p), r);\np-\u0026gt; s = p-\u0026gt; ls-\u0026gt; s + p-\u0026gt; rs-\u0026gt; s;\np-\u0026gt; v = max(p-\u0026gt; ls-\u0026gt; v, p-\u0026gt; rs-\u0026gt; v);\n}\nreturn p;\n}\ninline void sgtUpd(seg* p, int l, int r)\u0026nbsp;{\nif (l\u0026nbsp;\u0026gt;= r || l \u0026gt;= p-\u0026gt; r || r \u0026lt;= p-\u0026gt; l)\nreturn;\nelse if (p-\u0026gt; l + 1 == p-\u0026gt; r)\u0026nbsp;{\np-\u0026gt; s = d[p-\u0026gt; l];\np-\u0026gt; v = v[p-\u0026gt; l];\n}\nelse {\nif (r\u0026nbsp;\u0026lt;= mid(p))\nsgtUpd(p-\u0026gt; ls, l, r);\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nsgtUpd(p-\u0026gt; rs, l, r);\nelse {\nsgtUpd(p-\u0026gt; ls, l, mid(p));\nsgtUpd(p-\u0026gt; rs, mid(p), r);\n}\np-\u0026gt; s = p-\u0026gt; ls-\u0026gt; s + p-\u0026gt; rs-\u0026gt; s;\np-\u0026gt; v = max(p-\u0026gt; ls-\u0026gt; v, p-\u0026gt; rs-\u0026gt; v);\n}\n}\ninline int sgtSum(seg* p, int l, int r)\u0026nbsp;{\nif (l\u0026nbsp;\u0026gt;= r || l \u0026gt;= p-\u0026gt; r || r \u0026lt;= p-\u0026gt; l)\nreturn 0;\nelse if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r)\nreturn p-\u0026gt; s;\nelse if (r\u0026nbsp;\u0026lt;= mid(p))\nreturn sgtSum(p-\u0026gt; ls, l, r);\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nreturn sgtSum(p-\u0026gt; rs, l, r);\nelse\nreturn sgtSum(p-\u0026gt; ls, l, mid(p))\u0026nbsp;+ sgtSum(p-\u0026gt; rs, mid(p), r);\n}\ninline int sgtMax(seg* p, int l, int r)\u0026nbsp;{\nif (l\u0026nbsp;\u0026gt;= r || l \u0026gt;= p-\u0026gt; r || r \u0026lt;= p-\u0026gt; l)\nreturn 0;\nelse if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r)\nreturn p-\u0026gt; v;\nelse if (r\u0026nbsp;\u0026lt;= mid(p))\nreturn sgtMax(p-\u0026gt; ls, l, r);\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nreturn sgtMax(p-\u0026gt; rs, l, r);\nelse\nreturn max(sgtMax(p-\u0026gt; ls, l, mid(p)), sgtMax(p-\u0026gt; rs, mid(p), r));\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nscanf(\u0026quot;%d%d\u0026quot;, x + i, y + i);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nupDis(i);\nupVal(i);\n}\nsp = new seg[n * 3];\nrt = sgtBuild(1, n + 1);\nwhile (m\u0026nbsp;--)\u0026nbsp;{\nchar opt;\nint a, b, c;\ndo\nopt = getchar();\nwhile (opt\u0026nbsp;!=\u0026nbsp;'U'\u0026nbsp;\u0026amp;\u0026amp; opt !=\u0026nbsp;'Q');\nif (opt\u0026nbsp;==\u0026nbsp;'U')\u0026nbsp;{\nscanf(\u0026quot;%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;a,\u0026nbsp;\u0026amp;b,\u0026nbsp;\u0026amp;c);\nx[a]\u0026nbsp;= b;\ny[a]\u0026nbsp;= c;\nupDis(a - 1);\nupDis(a);\nupVal(a - 1);\nupVal(a);\nupVal(a + 1);\nsgtUpd(rt, a - 1, a + 2);\n}\nelse {\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;a,\u0026nbsp;\u0026amp;b);\nint d = sgtSum(rt, a, b);\nint v = sgtMax(rt, a + 1, b);\nprintf(\u0026quot;%d\\n\u0026quot;, d - v);\n}\n}\n}\n","permalink":"/oi/lofterimport_017/","summary":"英语阅读题。做完去翻译题面然后写英语作业了。\n就维护一下区间里的距离和and忽略一个点的收益的最大值。完了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct seg {\nint l, r;\nint s, v;\nseg *ls,\u0026nbsp;*rs;\n};\nconst int maxn = 100009;\nint n, m, x[maxn], y[maxn], d[maxn], v[maxn];\nseg *rt,\u0026nbsp;*sp;\ninline void upDis(int i)\u0026nbsp;{\nif (i\u0026nbsp;\u0026lt; n)\nd[i]\u0026nbsp;= abs(x[i + 1]\u0026nbsp;- x[i])\u0026nbsp;+ abs(y[i + 1]\u0026nbsp;- y[i]);\nelse\nd[i]\u0026nbsp;= 0;\n}\ninline void upVal(int i)\u0026nbsp;{\nif (i\u0026nbsp;\u0026gt; 1 \u0026amp;\u0026amp; i \u0026lt; n)\nv[i]\u0026nbsp;= d[i - 1]\u0026nbsp;+ d[i]\u0026nbsp;- abs(x[i + 1]\u0026nbsp;- x[i - 1])\u0026nbsp;- abs(y[i + 1]\u0026nbsp;- y[i - 1]);","title":"BZOJ3825 [Usaco2014 Nov]Marathon"},{"content":"新题么。略水。\n就一个序列，如果起点单增的话只要终点单增就不会冲突。\n然后最少单增子序列覆盖=最长不降子序。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long dint;\n#define _l (long long int)\nconst int maxn = 100009;\nint n, m, a[maxn], t[maxn], s;\ndint v[maxn], v0[maxn];\nint btQry(int p)\u0026nbsp;{\nint s = 0;\nfor (; p; p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\ns = max(s, t[p]);\nreturn s;\n}\nvoid btChg(int p, int v)\u0026nbsp;{\nfor (; p \u0026lt;= n; p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\nt[p]\u0026nbsp;= max(t[p], v);\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nint p, s;\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;p,\u0026nbsp;\u0026amp;s);\nv0[i]\u0026nbsp;= p + _l s * m;\nv[i]\u0026nbsp;= v0[i];\n}\nsort(v, v + n);\nmemset(t, 0, sizeof(t));\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nint a = n -\u0026nbsp;(lower_bound(v, v + n, v0[i])\u0026nbsp;- v);\nint f = btQry(a)\u0026nbsp;+ 1;\nbtChg(a, f);\n}\nprintf(\u0026quot;%d\\n\u0026quot;, btQry(n));\n}\n","permalink":"/oi/lofterimport_018/","summary":"新题么。略水。\n就一个序列，如果起点单增的话只要终点单增就不会冲突。\n然后最少单增子序列覆盖=最长不降子序。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long dint;\n#define _l (long long int)\nconst int maxn = 100009;\nint n, m, a[maxn], t[maxn], s;\ndint v[maxn], v0[maxn];\nint btQry(int p)\u0026nbsp;{\nint s = 0;\nfor (; p; p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\ns = max(s, t[p]);\nreturn s;\n}\nvoid btChg(int p, int v)\u0026nbsp;{\nfor (; p \u0026lt;= n; p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\nt[p]\u0026nbsp;= max(t[p], v);\n}","title":"BZOJ3826 [Usaco2014 Nov]Cow Jog"},{"content":"2015，嗯，还习惯性地敲2014。一年就过去了，好快。\n2014年1月1号已经是一年前的事情了，略恐怖。\n感觉不只过了一年啊。\n这一年我都在干啥？\n寒假的时候去wc打个酱油，骗分的结果还不错。然后感觉讲课完全像在冬眠。好多课根本听不懂没法听。是我太弱吧。\n开学之后就一直在教室和机房两边跑。对省队还怀有一丝幻想。直到，见到省选题。然后就以能拿的分没拿到不能拿的分也没拿到的分再见了。当时安慰自己太年轻，现在想来，也真是。\n然后看到学长们填thu的自招表，也去跟着填了一个表。然后，当然肯定被毫无疑问地打了回来。令人触目惊心的是要填各次大考的成绩。半期缺考+垫底的我心中一惊啊。\n然后期末的调研考试考得不好但是也比半期进步了不少。毕竟半期是停课裸考还没考完。\n然后暑假很荣幸地去参观noi。结果自己再次犯傻把最简单第一题写错然后抱着AG哭。记得第一天估分的时候信心满满地报了个200+然后看到第一题60的时候。唉。\n暑假回来感觉愉快不少，毕竟终于可以不上课了。\n然后就全力准备noip，虽然常常刷题不小心就打开了bzoj。\n然后就去了noip。然后再次犯傻的bird。于是没拿到省rank1。\n然后半期经过三天“认真”复习之后真的垫底了。文化课看来是废了。\n然后就又去学习thu集训的题了。然后跟着去了bj80ms。然后发现在诸如jiry和dzy大神的眼里我也只是根草而已，连菜都算不上。\n然后回来了，然后被告愉快的停课生涯结束了。然后愉快地直接在月考中勇夺rank1还是倒数的。\n老师问一年里收获是啥？学会了放弃吧。有多少付出才会有多少回报。然后当你面对你付出后血淋淋的伤口的时候，你会是怎样一种心情？也不见得能用愉快来形容吧。\n管他去死。\n既然都这样了，也只能继续了。人在矮桅下，不得不低头。等哪天离开矮檐了，再考虑去把让我低头的人的头给砍下来当夜壶。然后再深情地表达尊敬，还能写出一篇不错的议论文。\n虽然也不是没有道理。有些事情总是要面对的。\n不要忘了本，然后该干啥干啥吧。\n","permalink":"/oi/lofterimport_019/","summary":"2015，嗯，还习惯性地敲2014。一年就过去了，好快。\n2014年1月1号已经是一年前的事情了，略恐怖。\n感觉不只过了一年啊。\n这一年我都在干啥？\n寒假的时候去wc打个酱油，骗分的结果还不错。然后感觉讲课完全像在冬眠。好多课根本听不懂没法听。是我太弱吧。\n开学之后就一直在教室和机房两边跑。对省队还怀有一丝幻想。直到，见到省选题。然后就以能拿的分没拿到不能拿的分也没拿到的分再见了。当时安慰自己太年轻，现在想来，也真是。\n然后看到学长们填thu的自招表，也去跟着填了一个表。然后，当然肯定被毫无疑问地打了回来。令人触目惊心的是要填各次大考的成绩。半期缺考+垫底的我心中一惊啊。\n然后期末的调研考试考得不好但是也比半期进步了不少。毕竟半期是停课裸考还没考完。\n然后暑假很荣幸地去参观noi。结果自己再次犯傻把最简单第一题写错然后抱着AG哭。记得第一天估分的时候信心满满地报了个200+然后看到第一题60的时候。唉。\n暑假回来感觉愉快不少，毕竟终于可以不上课了。\n然后就全力准备noip，虽然常常刷题不小心就打开了bzoj。\n然后就去了noip。然后再次犯傻的bird。于是没拿到省rank1。\n然后半期经过三天“认真”复习之后真的垫底了。文化课看来是废了。\n然后就又去学习thu集训的题了。然后跟着去了bj80ms。然后发现在诸如jiry和dzy大神的眼里我也只是根草而已，连菜都算不上。\n然后回来了，然后被告愉快的停课生涯结束了。然后愉快地直接在月考中勇夺rank1还是倒数的。\n老师问一年里收获是啥？学会了放弃吧。有多少付出才会有多少回报。然后当你面对你付出后血淋淋的伤口的时候，你会是怎样一种心情？也不见得能用愉快来形容吧。\n管他去死。\n既然都这样了，也只能继续了。人在矮桅下，不得不低头。等哪天离开矮檐了，再考虑去把让我低头的人的头给砍下来当夜壶。然后再深情地表达尊敬，还能写出一篇不错的议论文。\n虽然也不是没有道理。有些事情总是要面对的。\n不要忘了本，然后该干啥干啥吧。","title":"20150101"},{"content":"新年第一题哈哈。虽然没有成功拿到fb。\n所谓阶乘进制数么。略水。只不过加一减一啥的得小心些。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long dint;\n#define pow2(x)\u0026nbsp;(1\u0026lt;\u0026lt;(x))\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nconst int maxn = 21;\ndint fac[maxn];\nint n, k, t, x[maxn];\ndint a;\nvoid sovPerm()\u0026nbsp;{\nt = 0;\nfor (int i = n; i;\u0026nbsp;-- i)\u0026nbsp;{\nint r =\u0026nbsp;(a\u0026nbsp;- 1)\u0026nbsp;/ fac[i - 1]\u0026nbsp;+ 1, c = 0;\na -=\u0026nbsp;(r\u0026nbsp;- 1)\u0026nbsp;* fac[i - 1];\nx[i]\u0026nbsp;= 1;\nwhile (1)\u0026nbsp;{\nif (!(t\u0026nbsp;\u0026amp; pow2(x[i])))\n++ c;\nif (c\u0026nbsp;== r)\nbreak;\nelse\n++ x[i];\n}\nt |= pow2(x[i]);\nprintf(\u0026quot;%d%c\u0026quot;, x[i],\u0026nbsp;(i \u0026gt; 1 ? 32 : 10));\n}\n}\ndint sovNum()\u0026nbsp;{\ndint s = 0;\nt = pow2(n + 1)\u0026nbsp;- 2;;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nint c = 0;\nfor (int j = 1; j \u0026lt; x[i];\u0026nbsp;++ j)\nc +=\u0026nbsp;(t\u0026nbsp;\u0026gt;\u0026gt; j)\u0026nbsp;\u0026amp; 1;\ns += fac[n - i]\u0026nbsp;* c;\nt \u0026amp;=\u0026nbsp;~pow2(x[i]);\n}\nreturn s + 1;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;k);\nfac[0]\u0026nbsp;= 1;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nfac[i]\u0026nbsp;= fac[i - 1]\u0026nbsp;* i;\nwhile (k\u0026nbsp;--)\u0026nbsp;{\nchar opt;\ndo\nopt = getchar();\nwhile (opt\u0026nbsp;!=\u0026nbsp;'P'\u0026nbsp;\u0026amp;\u0026amp; opt !=\u0026nbsp;'Q');\nif (opt\u0026nbsp;==\u0026nbsp;'P')\u0026nbsp;{\nscanf(lld,\u0026nbsp;\u0026amp;a);\nsovPerm();\n}\nelse {\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nscanf(\u0026quot;%d\u0026quot;, x + i);\nprintf(lld \u0026quot;\\n\u0026quot;, sovNum());\n}\n}\n}\n","permalink":"/oi/lofterimport_020/","summary":"新年第一题哈哈。虽然没有成功拿到fb。\n所谓阶乘进制数么。略水。只不过加一减一啥的得小心些。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long dint;\n#define pow2(x)\u0026nbsp;(1\u0026lt;\u0026lt;(x))\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nconst int maxn = 21;\ndint fac[maxn];\nint n, k, t, x[maxn];\ndint a;\nvoid sovPerm()\u0026nbsp;{\nt = 0;\nfor (int i = n; i;\u0026nbsp;-- i)\u0026nbsp;{\nint r =\u0026nbsp;(a\u0026nbsp;- 1)\u0026nbsp;/ fac[i - 1]\u0026nbsp;+ 1, c = 0;\na -=\u0026nbsp;(r\u0026nbsp;- 1)\u0026nbsp;* fac[i - 1];","title":"BZOJ3301 [USACO2011 Feb] Cow Line"},{"content":"解锁成就：半夜过题。（其实是因为在搞bsd）\n仔细看下题推一下发现第n维中m维元素的个数为2^(n-m)*C(n,m)。\n然后组合数好像得nlogn用逆元？恭喜tle。\n然后yy了一个用线性筛的办法，只是素数用快速幂，这样大约可以降低复杂度，然后就能过了。好神奇。\n代码好长TT。\n#include \u0026lt;cstdio\u0026gt;\n#include\u0026nbsp;\u0026lt;cstring\u0026gt;\n#define _l (long long int)\nconst int maxn = 10000009;\nint tp, pn[maxn], inv[maxn];\nbool pr[maxn];\nint n, mod, s, c, p;\nint modPow(int a, int x)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; int s = 1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for (; x; x \u0026gt;\u0026gt;= 1, a = _l a * a % mod)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if (x\u0026nbsp;\u0026amp; 1)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; s = _l s * a % mod;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; return s;\n}\nvoid pre(int n)\u0026nbsp;{\nmemset(pr, 0, sizeof(pr));\ninv[1]\u0026nbsp;= 1;\ntp = 0;\nfor (int i = 2; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nif (!pr[i])\u0026nbsp;{\npn[tp\u0026nbsp;++]\u0026nbsp;= i;\ninv[i]\u0026nbsp;= modPow(i, mod - 2);\n}\nfor (int j = 0; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j]\u0026nbsp;\u0026lt;= n;\u0026nbsp;++ j)\u0026nbsp;{\npr[i * pn[j]]\u0026nbsp;= 1;\ninv[i * pn[j]]\u0026nbsp;= _l inv[i]\u0026nbsp;* inv[pn[j]]\u0026nbsp;% mod;\nif (i\u0026nbsp;% pn[j]\u0026nbsp;== 0)\nbreak;\n}\n}\n}\nint main()\u0026nbsp;{\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;mod);\npre(n);\nc = 1;\np = 1;\ns = 0;\nfor (int i = 0; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\ns ^= _l c * p % mod;\np = p * 2 % mod;\nc = _l c * inv[i + 1]\u0026nbsp;% mod *\u0026nbsp;(n\u0026nbsp;- i)\u0026nbsp;% mod;\n}\nprintf(\u0026quot;%d\\n\u0026quot;, s);\n}\nupd: mhy大神出了组数据把我卡掉了。结果是n\u0026gt;mod的时候要考虑mod的倍数的问题。好厉害orz\n","permalink":"/oi/lofterimport_021/","summary":"解锁成就：半夜过题。（其实是因为在搞bsd）\n仔细看下题推一下发现第n维中m维元素的个数为2^(n-m)*C(n,m)。\n然后组合数好像得nlogn用逆元？恭喜tle。\n然后yy了一个用线性筛的办法，只是素数用快速幂，这样大约可以降低复杂度，然后就能过了。好神奇。\n代码好长TT。\n#include \u0026lt;cstdio\u0026gt;\n#include\u0026nbsp;\u0026lt;cstring\u0026gt;\n#define _l (long long int)\nconst int maxn = 10000009;\nint tp, pn[maxn], inv[maxn];\nbool pr[maxn];\nint n, mod, s, c, p;\nint modPow(int a, int x)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; int s = 1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for (; x; x \u0026gt;\u0026gt;= 1, a = _l a * a % mod)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if (x\u0026nbsp;\u0026amp; 1)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; s = _l s * a % mod;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; return s;","title":"BZOJ3823 定情信物"},{"content":"退役了之后智商下降严重啊。今天bc死惨了。这比较水的题也是去看了题解才反应过来的。\n先把序列改成不降。\n然后把原来的序列分成一些段，每段的中位数递增。\n\u0026nbsp;\u0026nbsp;考虑新加入一个ai，如果它比前一段的中位数小，那么就把它和前一段合并，再拿合并之后的段去和再前一段比较一下。其实我也不能证明为啥是这样，只是感觉比较有道理。我肯定是没救了。\n中位数的话用可合并的堆来维护比较方便。orz各种神级堆，然后我还是用的左偏树。\n以后树要拿指针写所以代码巨长。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\n#define sof(p)\u0026nbsp;((p)?(p-\u0026gt;s):0)\nstruct node {\nint v, s;\nnode *ls,\u0026nbsp;*rs;\ninline void init(int x)\u0026nbsp;{\nv = x;\ns = 1;\nls = 0;\nrs = 0;\n}\ninline void update()\u0026nbsp;{\ns = sof(ls)\u0026nbsp;+ sof(rs)\u0026nbsp;+ 1;\nif (sof(ls)\u0026nbsp;\u0026lt; sof(rs))\nswap(ls, rs);\n}\n};\ntypedef long long dint;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\n#define _l (long long int)\nconst int maxn = 1000009;\nint n, st[maxn], ts, a[maxn];\ndint ans;\nnode hn[maxn],\u0026nbsp;*ha[maxn],\u0026nbsp;*hb[maxn];\ninline node* haMerge(node* p, node* q)\u0026nbsp;{\nif (!p)\nreturn q;\nelse if (!q)\nreturn p;\nelse if (p-\u0026gt; v \u0026gt; q-\u0026gt; v)\u0026nbsp;{\np-\u0026gt; rs = haMerge(p-\u0026gt; rs, q);\np-\u0026gt; update();\nreturn p;\n}\nelse {\nq-\u0026gt; rs = haMerge(q-\u0026gt; rs, p);\nq-\u0026gt; update();\nreturn q;\n}\n}\ninline node* haPop(node*\u0026nbsp;\u0026amp;u)\u0026nbsp;{\nnode* v = u;\nif (u)\nu = haMerge(u-\u0026gt; ls, u-\u0026gt; rs);\nv-\u0026gt; ls = 0;\nv-\u0026gt; rs = 0;\nv-\u0026gt; s = 1;\nreturn v;\n}\ninline node* hbMerge(node* p, node* q)\u0026nbsp;{\nif (!p)\nreturn q;\nelse if (!q)\nreturn p;\nelse if (p-\u0026gt; v \u0026lt; q-\u0026gt; v)\u0026nbsp;{\np-\u0026gt; rs = hbMerge(p-\u0026gt; rs, q);\np-\u0026gt; update();\nreturn p;\n}\nelse {\nq-\u0026gt; rs = hbMerge(q-\u0026gt; rs, p);\nq-\u0026gt; update();\nreturn q;\n}\n}\ninline node* hbPop(node*\u0026nbsp;\u0026amp;u)\u0026nbsp;{\nnode* v = u;\nif (u)\nu = hbMerge(u-\u0026gt; ls, u-\u0026gt; rs);\nreturn v;\n}\nvoid hpUnion(int x, int y)\u0026nbsp;{\nha[x]\u0026nbsp;= haMerge(ha[x], ha[y]);\nhb[x]\u0026nbsp;= hbMerge(hb[x], hb[y]);\nwhile (sof(ha[x])\u0026nbsp;\u0026gt; sof(hb[x])\u0026nbsp;+ 1)\u0026nbsp;{\nnode* u = haPop(ha[x]);\nhb[x]\u0026nbsp;= hbMerge(hb[x], u);\n}\nwhile (sof(ha[x])\u0026nbsp;\u0026lt; sof(hb[x]))\u0026nbsp;{\nnode* u = hbPop(hb[x]);\nha[x]\u0026nbsp;= haMerge(ha[x], u);\n}\n}\ninline int getMid(int x)\u0026nbsp;{\nreturn ha[x]-\u0026gt; v;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nmemset(ha, 0, sizeof(ha));\nmemset(hb, 0, sizeof(hb));\nreadInt(n);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(a[i]);\na[i]\u0026nbsp;-= i;\nhn[i]. init(a[i]);\n}\nts = 0;\nst[0]\u0026nbsp;= 0;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\n++ ts;\nst[ts]\u0026nbsp;= i;\nha[ts]\u0026nbsp;= hn + i;\nhb[ts]\u0026nbsp;= 0;\nwhile (ts\u0026nbsp;\u0026gt; 1 \u0026amp;\u0026amp; getMid(ts)\u0026nbsp;\u0026lt; getMid(ts - 1))\u0026nbsp;{\nhpUnion(ts - 1, ts);\nst[-- ts]\u0026nbsp;= i;\n}\n}\nans = 0;\nfor (int i = 1; i \u0026lt;= ts;\u0026nbsp;++ i)\u0026nbsp;{\nint m = getMid(i);\nfor (int j = st[i - 1]\u0026nbsp;+ 1; j \u0026lt;= st[i];\u0026nbsp;++ j)\nans += abs(_l a[j]\u0026nbsp;- m);\n}\nprintf(lld \u0026quot;\\n\u0026quot;, ans);\n}\n","permalink":"/oi/lofterimport_022/","summary":"退役了之后智商下降严重啊。今天bc死惨了。这比较水的题也是去看了题解才反应过来的。\n先把序列改成不降。\n然后把原来的序列分成一些段，每段的中位数递增。\n\u0026nbsp;\u0026nbsp;考虑新加入一个ai，如果它比前一段的中位数小，那么就把它和前一段合并，再拿合并之后的段去和再前一段比较一下。其实我也不能证明为啥是这样，只是感觉比较有道理。我肯定是没救了。\n中位数的话用可合并的堆来维护比较方便。orz各种神级堆，然后我还是用的左偏树。\n以后树要拿指针写所以代码巨长。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\n#define sof(p)\u0026nbsp;((p)?(p-\u0026gt;s):0)\nstruct node {\nint v, s;\nnode *ls,\u0026nbsp;*rs;\ninline void init(int x)\u0026nbsp;{\nv = x;\ns = 1;\nls = 0;\nrs = 0;","title":"BZOJ1367 [Baltic2004]sequence"},{"content":"大概是今天不宜刷题来着。应该好好做作业。\n用线段树套单调队列可以把复杂度降到O(nlogn)。然后deque严重不靠谱，得用list才行。\n然后还是跑得巨慢。前面的人是排序搞定的么？表示不明觉厉。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;deque\u0026gt;\n#include \u0026lt;list\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\n//typedef deque \u0026lt;int\u0026gt; dque_i;\ntypedef list \u0026lt;int\u0026gt; dque_i;\nstruct seg {\nint l, r;\ndque_i u, d;\nseg *ls,\u0026nbsp;*rs;\n};\nconst int maxn = 250009;\nconst int maxm = 500009;\nconst int inf = 0x3f3f3f3f;\nint n, l, m, x[maxn], y[maxn], d[maxn], f[maxn],\u0026nbsp;*r[maxm];\nseg *rt,\u0026nbsp;*sp;\ninline bool cmpP(int* a, int* b)\u0026nbsp;{\nreturn *a\u0026nbsp;\u0026lt;\u0026nbsp;*b;\n}\nvoid dispVals()\u0026nbsp;{\nint t =\u0026nbsp;(n\u0026nbsp;- 1)\u0026nbsp;\u0026lt;\u0026lt; 1;\nsort(r, r + t, cmpP);\nm = 0;\nfor (int i = 0, l =\u0026nbsp;*r[0]\u0026nbsp;- 1; i \u0026lt; t;\u0026nbsp;++ i)\nif (*r[i]\u0026nbsp;== l)\n*r[i]\u0026nbsp;= m;\nelse\nl =\u0026nbsp;*r[i],\u0026nbsp;*r[i]\u0026nbsp;=\u0026nbsp;++ m;\n}\nint upQue(dque_i\u0026amp; q, int d0)\u0026nbsp;{\nwhile (!q. empty()\u0026nbsp;\u0026amp;\u0026amp; d0 - d[q. front()]\u0026nbsp;\u0026gt; l)\nq. pop_front();\nif (q. empty())\nreturn n;\nelse\nreturn q. front();\n}\nvoid insQue(dque_i\u0026amp; q, int i)\u0026nbsp;{\nwhile (!q. empty()\u0026nbsp;\u0026amp;\u0026amp; f[i]\u0026nbsp;\u0026lt;= f[q. back()])\nq. pop_back();\nq. push_back(i);\n}\n#define mid(p)\u0026nbsp;((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\ninline seg* sgtBuild(int l, int r)\u0026nbsp;{\nseg* p = sp ++;\np-\u0026gt; l = l;\np-\u0026gt; r = r;\nif (l\u0026nbsp;+ 1 \u0026lt; r)\u0026nbsp;{\np-\u0026gt; ls = sgtBuild(l, mid(p));\np-\u0026gt; rs = sgtBuild(mid(p), r);\n}\nreturn p;\n}\ninline int sgtQry(seg* p, int l, int r, int d)\u0026nbsp;{\nint x = upQue(p-\u0026gt; u, d), y, z;\nif (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r)\ny = upQue(p-\u0026gt; d, d);\nelse if (r\u0026nbsp;\u0026lt;= mid(p))\ny = sgtQry(p-\u0026gt; ls, l, r, d);\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\ny = sgtQry(p-\u0026gt; rs, l, r, d);\nelse {\ny = sgtQry(p-\u0026gt; ls, l, mid(p), d);\nz = sgtQry(p-\u0026gt; rs, mid(p), r, d);\nif (f[z]\u0026nbsp;\u0026lt; f[y])\ny = z;\n}\nif (f[x]\u0026nbsp;\u0026lt; f[y])\nreturn x;\nelse\nreturn y;\n}\ninline void sgtChg(seg* p, int l, int r, int v)\u0026nbsp;{\ninsQue(p-\u0026gt; d, v);\nif (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r)\ninsQue(p-\u0026gt; u, v);\nelse if (r\u0026nbsp;\u0026lt;= mid(p))\nsgtChg(p-\u0026gt; ls, l, r, v);\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nsgtChg(p-\u0026gt; rs, l, r, v);\nelse {\nsgtChg(p-\u0026gt; ls, l, mid(p), v);\nsgtChg(p-\u0026gt; rs, mid(p), r, v);\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\nreadInt(l);\nfor (int i = 1; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(x[i]);\nreadInt(y[i]);\nreadInt(d[i]);\nr[(i \u0026lt;\u0026lt; 1)\u0026nbsp;- 2]\u0026nbsp;= x + i;\nr[(i \u0026lt;\u0026lt; 1)\u0026nbsp;- 1]\u0026nbsp;= y + i;\n}\ndispVals();\nf[0]\u0026nbsp;= 0;\nf[n]\u0026nbsp;= inf;\nsp = new seg[m * 3];\nrt = sgtBuild(1, m + 1);\nfor (int i = 1; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nif (d[i]\u0026nbsp;\u0026lt;= l)\nf[i]\u0026nbsp;= 1;\nelse\nf[i]\u0026nbsp;= f[sgtQry(rt, x[i], y[i]\u0026nbsp;+ 1, d[i])]\u0026nbsp;+ 1;\nif (f[i]\u0026nbsp;\u0026lt; inf)\nsgtChg(rt, x[i], y[i]\u0026nbsp;+ 1, i);\n}\nfor (int i = 1; i \u0026lt; n;\u0026nbsp;++ i)\nif (f[i]\u0026nbsp;\u0026gt;= inf)\nputs(\u0026quot;-1\u0026quot;);\nelse\nprintf(\u0026quot;%d\\n\u0026quot;, f[i]);\n}\n","permalink":"/oi/lofterimport_023/","summary":"大概是今天不宜刷题来着。应该好好做作业。\n用线段树套单调队列可以把复杂度降到O(nlogn)。然后deque严重不靠谱，得用list才行。\n然后还是跑得巨慢。前面的人是排序搞定的么？表示不明觉厉。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;deque\u0026gt;\n#include \u0026lt;list\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\n//typedef deque \u0026lt;int\u0026gt; dque_i;\ntypedef list \u0026lt;int\u0026gt; dque_i;\nstruct seg {\nint l, r;\ndque_i u, d;\nseg *ls,\u0026nbsp;*rs;\n};\nconst int maxn = 250009;","title":"BZOJ1171 大sz的游戏"},{"content":"zhx+主席出的题，恐怖至极。\n写此题需要极高的常数优化技巧+耐心。\n本地跑到50s才在bzoj上压80s跑过。\n其实思路就是拿线段树套AVL把询问的时间复杂度优化到O(logn)。\n然后首先用treap会t爽+mle爽。\n然后avl需要各种常数优化。\n然后要在xxxxx地方优化。\n加上zhx牌读入优化+块状内存+抄std的AVL+.....终于在81s过了。\norz比我快一倍的wangyisong神犇。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstdlib\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nconst int BUF_SIZE = 300;\nchar buf[BUF_SIZE],\u0026nbsp;*buf_s = buf,\u0026nbsp;*buf_t = buf + 1;\n#define PTR_NEXT()\u0026nbsp;\\\n{\u0026nbsp;\\\nbuf_s ++;\u0026nbsp;\\\nif (buf_s\u0026nbsp;== buf_t)\u0026nbsp;\\\n{\u0026nbsp;\\\nbuf_s = buf;\u0026nbsp;\\\nbuf_t = buf + fread(buf, 1, BUF_SIZE, stdin);\u0026nbsp;\\\n}\u0026nbsp;\\\n}\n#define readInt(_n_)\u0026nbsp;\\\n{\u0026nbsp;\\\nwhile (*buf_s\u0026nbsp;!=\u0026nbsp;'-'\u0026nbsp;\u0026amp;\u0026amp;\u0026nbsp;!isdigit(*buf_s))\u0026nbsp;\\\nPTR_NEXT();\u0026nbsp;\\\nbool register _nega_ = false;\u0026nbsp;\\\nif (*buf_s\u0026nbsp;==\u0026nbsp;'-')\u0026nbsp;\\\n{\u0026nbsp;\\\n_nega_ = true;\u0026nbsp;\\\nPTR_NEXT();\u0026nbsp;\\\n}\u0026nbsp;\\\nint register _x_ = 0;\u0026nbsp;\\\nwhile (isdigit(*buf_s))\u0026nbsp;\\\n{\u0026nbsp;\\\n_x_ = _x_ * 10 +\u0026nbsp;*buf_s\u0026nbsp;-\u0026nbsp;'0';\u0026nbsp;\\\nPTR_NEXT();\u0026nbsp;\\\n}\u0026nbsp;\\\nif (_nega_)\u0026nbsp;\\\n_x_ =\u0026nbsp;-_x_;\u0026nbsp;\\\n(_n_)\u0026nbsp;=\u0026nbsp;(_x_);\u0026nbsp;\\\n}\n#define _l (long long int)\nint mod, rsd;\nstruct oper {\nint k, b;\ninline oper()\u0026nbsp;{\n}\ninline oper(int k0, int b0)\u0026nbsp;{\nk = k0, b = b0;\n}\ninline int ans(int x)\u0026nbsp;{\nreturn (_l x * k + b)\u0026nbsp;% mod;\n}\n};\ninline oper moper(const oper\u0026amp; x, const oper\u0026amp; y)\u0026nbsp;{\nreturn oper(_l x. k * y. k % mod,\u0026nbsp;(_l x. b * y. k + y. b)\u0026nbsp;% mod);\n}\nstruct node {\nint l, r, v, h;\noper d;\nnode *ls,\u0026nbsp;*rs;\ninline void set(int k, int b, int n)\u0026nbsp;{\nd. k = k;\nd. b = b;\nl = n;\nr = n;\nv = n;\nh = 1;\nls = 0;\nrs = 0;\n}\ninline void copy(node* u)\u0026nbsp;{\nv = u-\u0026gt; v;\nd = u-\u0026gt; d;\nh = u-\u0026gt; h;\n}\ninline void update()\u0026nbsp;{\nd = oper(1, 0);\nh = 1;\nif (ls)\u0026nbsp;{\nl = ls-\u0026gt; l;\nd = moper(ls-\u0026gt; d, d);\nh = ls-\u0026gt; h + 1;\n}\nelse\nl = v;\nif (rs)\u0026nbsp;{\nr = rs-\u0026gt; r;\nd = moper(d, rs-\u0026gt; d);\nif (rs-\u0026gt; h + 1 \u0026gt; h)\nh = rs-\u0026gt; h;\n}\nelse\nr = v;\n}\n};\nstruct seg {\nint l, r;\nnode *d;\nseg *ls,\u0026nbsp;*rs;\n};\nconst int maxn = 100009;\nconst int bsz = 888888;\nconst int balc = 5;\nnode *nodep;\nint tnd = 0;\nseg *sp,\u0026nbsp;*rt;\nint qua, n, m, lans, seq[maxn];\ninline node* newNode()\u0026nbsp;{\nif (tnd)\nreturn -- tnd,\u0026nbsp;++ nodep;\nelse\nreturn nodep = new node[(tnd = bsz)\u0026nbsp;+ 1];\n}\ninline node* ptNew(node* p, node* q)\u0026nbsp;{\nnode* r = newNode();\nr-\u0026gt; d = moper(p-\u0026gt; d, q-\u0026gt; d);\nr-\u0026gt; l = p-\u0026gt; l;\nr-\u0026gt; r = q-\u0026gt; r;\nr-\u0026gt; ls = p;\nr-\u0026gt; rs = q;\nr-\u0026gt; h = max(p-\u0026gt; h, q-\u0026gt; h)\u0026nbsp;+ 1;\nreturn r;\n}\n#define hof(_p_)\u0026nbsp;((_p_)?(_p_-\u0026gt;h):0)\n#define lson(_p_)\u0026nbsp;((_p_)?(_p_-\u0026gt;ls):0)\n#define rson(_p_)\u0026nbsp;((_p_)?(_p_-\u0026gt;rs):0)\ninline node* ptMerge(node* p, node* q)\u0026nbsp;{\nif (!p)\nreturn q;\nelse if (!q)\nreturn p;\nelse if (p-\u0026gt; h \u0026lt;= q-\u0026gt; h + balc \u0026amp;\u0026amp; q-\u0026gt; h \u0026lt;= p-\u0026gt; h + balc)\nreturn ptNew(p, q);\nelse if (p-\u0026gt; h \u0026gt; q-\u0026gt; h)\u0026nbsp;{\nnode* r = p-\u0026gt; rs;\nif (hof(r)\u0026nbsp;\u0026lt;= hof(p-\u0026gt; ls))\nreturn ptNew(p-\u0026gt; ls, ptMerge(r, q));\nelse\nreturn ptNew(ptNew(p-\u0026gt; ls, lson(r)), ptMerge(rson(r), q));\n}\nelse {\nnode* r = q-\u0026gt; ls;\nif (hof(r)\u0026nbsp;\u0026lt;= hof(q-\u0026gt; rs))\nreturn ptNew(ptMerge(p, r), q-\u0026gt; rs);\nelse\nreturn ptNew(ptMerge(p, lson(r)), ptNew(rson(r), q-\u0026gt; rs));\n}\n}\nint ql, qr;\ninline oper ptQry(node* p)\u0026nbsp;{\nif (!p)\nreturn oper(1, 0);\nelse if (ql\u0026nbsp;\u0026gt; p-\u0026gt; r || qr \u0026lt; p-\u0026gt; l)\nreturn oper(1, 0);\nelse if (ql\u0026nbsp;\u0026lt;= p-\u0026gt; l \u0026amp;\u0026amp; qr \u0026gt;= p-\u0026gt; r)\nreturn p-\u0026gt; d;\nelse {\noper s(1, 0);\nif (p-\u0026gt; ls \u0026amp;\u0026amp; ql \u0026lt;= p-\u0026gt; ls-\u0026gt; r)\ns = ptQry(p-\u0026gt; ls);\nif (p-\u0026gt; rs \u0026amp;\u0026amp; qr \u0026gt;= p-\u0026gt; rs-\u0026gt; l)\ns = moper(s, ptQry(p-\u0026gt; rs));\nreturn s;\n}\n}\n#define mid(p)\u0026nbsp;((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\ninline seg* sgtBuild(int l, int r)\u0026nbsp;{\nseg* p = sp ++;\np-\u0026gt; l = l;\np-\u0026gt; r = r;\np-\u0026gt; d = 0;\nif (l\u0026nbsp;+ 1 \u0026lt; r)\u0026nbsp;{\np-\u0026gt; ls = sgtBuild(l, mid(p));\np-\u0026gt; rs = sgtBuild(mid(p), r);\n}\nreturn p;\n}\ninline void pushDown(seg* p)\u0026nbsp;{\np-\u0026gt; ls-\u0026gt; d = ptMerge(p-\u0026gt; ls-\u0026gt; d, p-\u0026gt; d);\np-\u0026gt; rs-\u0026gt; d = ptMerge(p-\u0026gt; rs-\u0026gt; d, p-\u0026gt; d);\np-\u0026gt; d = 0;\n}\ninline void sgtChg(seg* p, int l, int r, node* x)\u0026nbsp;{\nif (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r)\u0026nbsp;{\np-\u0026gt; d = ptMerge(p-\u0026gt; d, x);\n}\nelse {\nif (p-\u0026gt; d)\npushDown(p);\nif (r\u0026nbsp;\u0026lt;= mid(p))\nsgtChg(p-\u0026gt; ls, l, r, x);\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nsgtChg(p-\u0026gt; rs, l, r, x);\nelse {\nsgtChg(p-\u0026gt; ls, l, mid(p), x);\nsgtChg(p-\u0026gt; rs, mid(p), r, x);\n}\n}\n}\noper sgtQry(seg* p, int p0)\u0026nbsp;{\noper s(1, 0);\nwhile (p-\u0026gt; l + 1 \u0026lt; p-\u0026gt; r)\u0026nbsp;{\ns = moper(ptQry(p-\u0026gt; d), s);\nif (p0\u0026nbsp;\u0026lt; mid(p))\np = p-\u0026gt; ls;\nelse\np = p-\u0026gt; rs;\n}\nreturn moper(ptQry(p-\u0026gt; d), s);\n}\ninline void writeInt(int x)\u0026nbsp;{\nstatic char a[13];\nchar* i;\nfor (i\u0026nbsp;= a; x; x /= 10,\u0026nbsp;++ i)\n*i = x % 10 + 48;\nif (i\u0026nbsp;== a)\nputs(\u0026quot;0\u0026quot;);\nelse {\nfor (-- i; i \u0026gt;= a;\u0026nbsp;-- i)\nputchar(*i);\nputchar(10);\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(qua);\nqua \u0026amp;= 1;\nreadInt(n);\nreadInt(mod);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nreadInt(seq[i]);\nreadInt(m);\nlans = 0;\nsp = new seg[n * 3];\nrt = sgtBuild(1, n + 1);\nfor (int i = 1, j = 0; i \u0026lt;= m;\u0026nbsp;++ i)\u0026nbsp;{\nint opt, a, b, l, r;\nreadInt(opt);\nreadInt(l);\nreadInt(r);\nif (qua)\u0026nbsp;{\nl ^= lans;\nr ^= lans;\n}\nif (opt\u0026nbsp;== 1)\u0026nbsp;{\nreadInt(a);\nreadInt(b);\nnode* x = newNode();\nx-\u0026gt; set(a, b,\u0026nbsp;++ j);\nsgtChg(rt, l, r + 1, x);\n}\nelse {\nreadInt(a);\nif (qua)\na ^= lans;\nql = l;\nqr = r;\nlans = sgtQry(rt, a). ans(seq[a]);\n//writeInt(lans);\nprintf(\u0026quot;%d\\n\u0026quot;, lans);\n}\n}\n}\n","permalink":"/oi/lofterimport_024/","summary":"zhx+主席出的题，恐怖至极。\n写此题需要极高的常数优化技巧+耐心。\n本地跑到50s才在bzoj上压80s跑过。\n其实思路就是拿线段树套AVL把询问的时间复杂度优化到O(logn)。\n然后首先用treap会t爽+mle爽。\n然后avl需要各种常数优化。\n然后要在xxxxx地方优化。\n加上zhx牌读入优化+块状内存+抄std的AVL+.....终于在81s过了。\norz比我快一倍的wangyisong神犇。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstdlib\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nconst int BUF_SIZE = 300;\nchar buf[BUF_SIZE],\u0026nbsp;*buf_s = buf,\u0026nbsp;*buf_t = buf + 1;\n#define PTR_NEXT()\u0026nbsp;\\\n{\u0026nbsp;\\\nbuf_s ++;\u0026nbsp;\\\nif (buf_s\u0026nbsp;== buf_t)\u0026nbsp;\\\n{\u0026nbsp;\\\nbuf_s = buf;\u0026nbsp;\\\nbuf_t = buf + fread(buf, 1, BUF_SIZE, stdin);\u0026nbsp;\\\n}\u0026nbsp;\\\n}\n#define readInt(_n_)\u0026nbsp;\\\n{\u0026nbsp;\\\nwhile (*buf_s\u0026nbsp;!=\u0026nbsp;'-'\u0026nbsp;\u0026amp;\u0026amp;\u0026nbsp;!isdigit(*buf_s))\u0026nbsp;\\\nPTR_NEXT();\u0026nbsp;\\\nbool register _nega_ = false;\u0026nbsp;\\\nif (*buf_s\u0026nbsp;==\u0026nbsp;'-')\u0026nbsp;\\","title":"BZOJ3821 玄学"},{"content":"全局二分的经典题。\n最初试图用持久化线段树和分块，然后欢快地tle+mle了。看到jason_yu和mhy过了，只能说自己的常数优化还不过关啊。\n第一次写这种二分。就是把所有东西扔进来快速排序，顺便考虑每个询问应该被扔到哪边。然后加树状数组来统计就好了。\n代码巨丑。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct query {\nint x1, y1, x2, y2, k, n;\n};\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\nconst int maxn = 509;\nconst int maxq = 310009;\nint n, m, t, maxa, a[maxn][maxn], b[maxn][maxn], ttm;\nint d[maxn * maxn], ans[maxq], tdr[maxq];\nquery q[maxq];\nvoid btChg(int x, int y, int v)\u0026nbsp;{\nfor (int p = x; p \u0026lt;= n; p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\nfor (int q = y; q \u0026lt;= n; q +=\u0026nbsp;(q\u0026nbsp;\u0026amp;\u0026nbsp;-q))\nif (b[p][q]\u0026nbsp;^ ttm)\u0026nbsp;{\u0026nbsp;\na[p][q]\u0026nbsp;= v;\nb[p][q]\u0026nbsp;= ttm;\n}\nelse\na[p][q]\u0026nbsp;+= v;\n}\nint btQry(int x, int y)\u0026nbsp;{\nint s = 0;\nfor (int p = x; p; p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\nfor (int q = y; q; q -=\u0026nbsp;(q\u0026nbsp;\u0026amp;\u0026nbsp;-q))\nif (b[p][q]\u0026nbsp;== ttm)\ns += a[p][q];\nreturn s;\n}\nvoid qSort(int vl, int vr, int ql, int qr)\u0026nbsp;{\nif (vl\u0026nbsp;== vr)\u0026nbsp;{\nfor (int i = ql; i \u0026lt;= qr;\u0026nbsp;++ i)\nif (q[i]. n \u0026gt;\u0026nbsp;-1)\nans[q[i]. n]\u0026nbsp;= d[vl];\n}\nelse {\n++ ttm;\nint vm =\u0026nbsp;(vl\u0026nbsp;+ vr)\u0026nbsp;\u0026gt;\u0026gt; 1;\nfor (int i = ql; i \u0026lt;= qr;\u0026nbsp;++ i)\nif (q[i]. n ==\u0026nbsp;-1)\u0026nbsp;{\nif (q[i]. k \u0026lt;= d[vm])\u0026nbsp;{\nbtChg(q[i]. x1, q[i]. y1, 1);\ntdr[i]\u0026nbsp;= 0;\n}\nelse\ntdr[i]\u0026nbsp;= 1;\n}\nfor (int i = ql; i \u0026lt;= qr;\u0026nbsp;++ i)\nif (q[i]. n \u0026gt;\u0026nbsp;-1)\u0026nbsp;{\nint g = btQry(q[i]. x2, q[i]. y2)\u0026nbsp;+ btQry(q[i]. x1, q[i]. y1)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;- btQry(q[i]. x1, q[i]. y2)\u0026nbsp;- btQry(q[i]. x2, q[i]. y1);\nif (g\u0026nbsp;\u0026lt; q[i]. k)\u0026nbsp;{\nq[i]. k -= g;\ntdr[i]\u0026nbsp;= 1;\n}\nelse\ntdr[i]\u0026nbsp;= 0;\n}\nint i = ql, j = qr;\nwhile (i\u0026nbsp;\u0026lt; j)\u0026nbsp;{\nfor (; i \u0026lt; j \u0026amp;\u0026amp; tdr[i]\u0026nbsp;== 0;\u0026nbsp;++ i);\nfor (; i \u0026lt; j \u0026amp;\u0026amp; tdr[j]\u0026nbsp;== 1;\u0026nbsp;-- j);\nif (i\u0026nbsp;\u0026lt;= j)\u0026nbsp;{\nswap(q[i], q[j]);\nswap(tdr[i], tdr[j]);\n++ i;\n-- j;\n}\n}\nfor (i\u0026nbsp;= ql - 1; i \u0026lt; qr \u0026amp;\u0026amp; tdr[i + 1]\u0026nbsp;== 0;\u0026nbsp;++ i);\nif (ql\u0026nbsp;\u0026lt;= i)\nqSort(vl, vm, ql, i);\nif (i\u0026nbsp;+ 1 \u0026lt;= qr)\nqSort(vm + 1, vr, i + 1, qr);\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nmemset(a, 0, sizeof(a));\nmemset(b, 0, sizeof(b));\nttm = 0;\nreadInt(n);\nreadInt(m);\nt = 0;\nmaxa = 0;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nfor (int j = 1; j \u0026lt;= n;\u0026nbsp;++ j)\u0026nbsp;{\nreadInt(q[t]. k);\nif (q[t]. k \u0026gt; maxa)\nmaxa = q[t]. k;\nd[i * n + j - n - 1]\u0026nbsp;= q[t]. k;\nq[t]. x1 = i;\nq[t]. y1 = j;\nq[t]. n =\u0026nbsp;-1;\n++ t;\n}\nsort(d, d + n * n);\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(q[t]. x1);\n-- q[t]. x1;\nreadInt(q[t]. y1);\n-- q[t]. y1;\nreadInt(q[t]. x2);\nreadInt(q[t]. y2);\nreadInt(q[t]. k);\nq[t]. n = i;\n++ t;\n}\nqSort(0, n * n - 1, 0, t - 1);\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\nprintf(\u0026quot;%d\\n\u0026quot;, ans[i]);\n}\n","permalink":"/oi/lofterimport_025/","summary":"全局二分的经典题。\n最初试图用持久化线段树和分块，然后欢快地tle+mle了。看到jason_yu和mhy过了，只能说自己的常数优化还不过关啊。\n第一次写这种二分。就是把所有东西扔进来快速排序，顺便考虑每个询问应该被扔到哪边。然后加树状数组来统计就好了。\n代码巨丑。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct query {\nint x1, y1, x2, y2, k, n;\n};\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\nconst int maxn = 509;\nconst int maxq = 310009;\nint n, m, t, maxa, a[maxn][maxn], b[maxn][maxn], ttm;","title":"BZOJ2738 矩阵乘法"},{"content":"本来想做点英语作业的。想10分钟把这题搞定的。结果傻了去写trie树dp又傻了没有考虑终点也可以有子结点。\n我真是无药可救了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint tcnt;\nstruct trie_node {\nint d, e, t[26];\ninline trie_node(int d0 = 0)\u0026nbsp;{\ne = 0;\nd = d0 + 1;\nmemset(t, 0, sizeof(t));\n}\ninline int ins(char c)\u0026nbsp;{\nif (!t[c\u0026nbsp;- 97])\nt[c - 97]\u0026nbsp;=\u0026nbsp;++ tcnt;\nreturn t[c - 97];\n}\ninline int trans(char c)\u0026nbsp;{\nreturn t[c - 97];\n}\n};\nconst int inf = 0x3f3f3f3f;\nconst int maxs = 15009;\nconst int maxl = 309;\nint n, l, trt, f[2][maxs];\nchar a[maxl], tmp[maxl];\ntrie_node tr[maxs];\nvoid trieIns(char* a)\u0026nbsp;{\nint p = trt;\nfor (;\u0026nbsp;*a;\u0026nbsp;++ a)\np = tr[p]. ins(*a);\ntr[p]. e = 1;\n}\nint dp()\u0026nbsp;{\nint cur = 0, prv = 1;\nmemset(f, 0x3f, sizeof(f));\nf[cur][trt]\u0026nbsp;= 0;\nfor (int i = 0; i \u0026lt; l;\u0026nbsp;++ i)\u0026nbsp;{\nswap(cur, prv);\nfor (int j = 1; j \u0026lt;= tcnt;\u0026nbsp;++ j)\nf[cur][j]\u0026nbsp;= inf;\nfor (int j = 1; j \u0026lt;= tcnt;\u0026nbsp;++ j)\nif (f[prv][j]\u0026nbsp;\u0026lt; inf)\u0026nbsp;{\nf[cur][j]\u0026nbsp;= min(f[cur][j], f[prv][j]\u0026nbsp;+ 1);\nint tmp = tr[j]. trans(a[i]);\nif (tmp)\u0026nbsp;{\nif (tr[tmp]. e)\nf[cur][trt]\u0026nbsp;= min(f[cur][trt], f[prv][j]);\nf[cur][tmp]\u0026nbsp;= min(f[cur][tmp], f[prv][j]);\n}\n}\n}\nreturn f[cur][trt];\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d%s\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;l, a);\ntrt = 1;\ntcnt = 1;\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nscanf(\u0026quot;%s\u0026quot;, tmp);\ntrieIns(tmp);\n}\nprintf(\u0026quot;%d\\n\u0026quot;, dp());\n}\n","permalink":"/oi/lofterimport_026/","summary":"本来想做点英语作业的。想10分钟把这题搞定的。结果傻了去写trie树dp又傻了没有考虑终点也可以有子结点。\n我真是无药可救了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint tcnt;\nstruct trie_node {\nint d, e, t[26];\ninline trie_node(int d0 = 0)\u0026nbsp;{\ne = 0;\nd = d0 + 1;\nmemset(t, 0, sizeof(t));\n}\ninline int ins(char c)\u0026nbsp;{\nif (!t[c\u0026nbsp;- 97])\nt[c - 97]\u0026nbsp;=\u0026nbsp;++ tcnt;\nreturn t[c - 97];\n}\ninline int trans(char c)\u0026nbsp;{\nreturn t[c - 97];\n}\n};\nconst int inf = 0x3f3f3f3f;\nconst int maxs = 15009;","title":"BZOJ1633 [Usaco2007 Feb]The Cow Lexicon 牛的词典"},{"content":"老早之前就听说过的题。好像讲过不只一遍。不过才从bzoj上翻出来。\n记得是神奇的dp优化。为啥这年头卡常数的题这么多。\n首先肯定这玩意多项式可解。六维状态肯定能搞定。然后会mle+tle。\n首先考虑从高到低放书，那么后面的如果不新开一行的话对高度没有影响。瞬间少了3维状态。\n然后发现只要知道两维的总宽度和当前是第几位，就能知道第三维的宽度。于是一维2100缩70，开滚动可过。\n当然还是需要一些常数优化的技艺。比如用宽度直接判断这一行有没有书。这样可以省下不少时间，而且好像只能这样才存得下。64MB太紧了点。另外把函数里的int改成const int\u0026amp;会变慢，不知为何。\n居然花了这么久才搞出来。我太年轻了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct book {\nint w, h;\n};\ninline bool cmpBook(const book\u0026amp; a, const book\u0026amp; b)\u0026nbsp;{\nreturn a. h \u0026gt; b. h;\n}\nconst int maxn = 71;\nconst int maxw = 2109;\nconst int inf = 0x3f3f3f3f;\nint n, f[2][maxw][maxw], sw;\nbook a[maxn];\ninline void upmin(int\u0026amp; _a_, int _b_)\u0026nbsp;{\nif (_a_\u0026nbsp;\u0026gt; _b_)\n_a_ = _b_;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;n);\nsw = 0;\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;a[i]. h,\u0026nbsp;\u0026amp;a[i]. w);\nsw += a[i]. w;\n}\nsort(a, a + n, cmpBook);\nmemset(f, 0x3f, sizeof(f));\nint cur = 0, prv = 1;\nf[cur][0][0]\u0026nbsp;= a[0]. h;\nfor (int i = 1; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nswap(cur, prv);\nfor (int j = 0; j \u0026lt;= sw;\u0026nbsp;++ j)\nfor (int k = 0; k \u0026lt;= sw;\u0026nbsp;++ k)\nf[cur][j][k]\u0026nbsp;= inf;\nfor (int j = 0; j \u0026lt;= sw;\u0026nbsp;++ j)\nfor (int k = 0; k \u0026lt;= sw;\u0026nbsp;++ k)\nif (f[prv][j][k]\u0026nbsp;\u0026lt; inf)\u0026nbsp;{\nupmin(f[cur][j][k], f[prv][j][k]);\nif (k)\u0026nbsp;{\nupmin(f[cur][j][k + a[i]. w], f[prv][j][k]);\nif (j)\nupmin(f[cur][j + a[i]. w][k], f[prv][j][k]);\nelse\nupmin(f[cur][j + a[i]. w][k], f[prv][j][k]\u0026nbsp;+ a[i]. h);\n}\nelse\nupmin(f[cur][j][k + a[i]. w], f[prv][j][k]\u0026nbsp;+ a[i]. h);\n}\n}\nint ans = inf;\nfor (int j = 1; j \u0026lt;= sw;\u0026nbsp;++ j)\nfor (int k = 1; k \u0026lt;= sw;\u0026nbsp;++ k)\nif (sw\u0026nbsp;- j - k \u0026amp;\u0026amp; f[cur][j][k]\u0026nbsp;\u0026lt; inf)\nupmin(ans, f[cur][j][k]\u0026nbsp;* max(max(j, k), sw - j - k));\nprintf(\u0026quot;%d\\n\u0026quot;, ans);\n}\n","permalink":"/oi/lofterimport_027/","summary":"老早之前就听说过的题。好像讲过不只一遍。不过才从bzoj上翻出来。\n记得是神奇的dp优化。为啥这年头卡常数的题这么多。\n首先肯定这玩意多项式可解。六维状态肯定能搞定。然后会mle+tle。\n首先考虑从高到低放书，那么后面的如果不新开一行的话对高度没有影响。瞬间少了3维状态。\n然后发现只要知道两维的总宽度和当前是第几位，就能知道第三维的宽度。于是一维2100缩70，开滚动可过。\n当然还是需要一些常数优化的技艺。比如用宽度直接判断这一行有没有书。这样可以省下不少时间，而且好像只能这样才存得下。64MB太紧了点。另外把函数里的int改成const int\u0026amp;会变慢，不知为何。\n居然花了这么久才搞出来。我太年轻了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct book {\nint w, h;\n};\ninline bool cmpBook(const book\u0026amp; a, const book\u0026amp; b)\u0026nbsp;{\nreturn a. h \u0026gt; b. h;\n}\nconst int maxn = 71;\nconst int maxw = 2109;\nconst int inf = 0x3f3f3f3f;\nint n, f[2][maxw][maxw], sw;\nbook a[maxn];\ninline void upmin(int\u0026amp; _a_, int _b_)\u0026nbsp;{\nif (_a_\u0026nbsp;\u0026gt; _b_)\n_a_ = _b_;","title":"BZOJ1933 [Shoi2007]Bookcase 书柜的尺寸"},{"content":"不久之后要会考了，再过不久要期末了。教育部在放风，大概以后如果noi拿不到金牌的话就得和别人一样地高考了。\n一直在oi里面坚持也没有怎么想过高考的事，一直只是当作一个额外的好处。如果让我不上大学给我一次ioi的机会，我想我也不会犹豫的。\n本来，上什么大学，也不是什么重要的事情。作为oier，我知道，只向上看，是个很好的品质，但是不是什么好的策略。如果你非要落魄到拿着期末成绩去让大学收你，那你该考虑换个差点的大学了。\n因为做过鸡头，所以对做凤尾产生了抵触吧。\n当然，显然，学校，老师都不这么想。虽然我来这里的目的也完全不是因为高考，但是既然穿上这身校服，你也没有办法。\n背起包走回教室的感觉真的很像退役了。\n大本的崭新的练习册让人很压抑。如何在两周内补完一个学期的内容是一个很艰巨的问题。也许多看书多刷题是个不错的选择。\n既然有人要来挑战，那就让他们看看。\n","permalink":"/oi/lofterimport_028/","summary":"不久之后要会考了，再过不久要期末了。教育部在放风，大概以后如果noi拿不到金牌的话就得和别人一样地高考了。\n一直在oi里面坚持也没有怎么想过高考的事，一直只是当作一个额外的好处。如果让我不上大学给我一次ioi的机会，我想我也不会犹豫的。\n本来，上什么大学，也不是什么重要的事情。作为oier，我知道，只向上看，是个很好的品质，但是不是什么好的策略。如果你非要落魄到拿着期末成绩去让大学收你，那你该考虑换个差点的大学了。\n因为做过鸡头，所以对做凤尾产生了抵触吧。\n当然，显然，学校，老师都不这么想。虽然我来这里的目的也完全不是因为高考，但是既然穿上这身校服，你也没有办法。\n背起包走回教室的感觉真的很像退役了。\n大本的崭新的练习册让人很压抑。如何在两周内补完一个学期的内容是一个很艰巨的问题。也许多看书多刷题是个不错的选择。\n既然有人要来挑战，那就让他们看看。","title":"20141222"},{"content":"好一道卡常数。不仅卡时间，还卡空间。堪称丧心病狂的极致。\n首先因为空间小所以得用莫队。然后不知为何树状数组没有直接分块跑得快。\n没有救啦。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cmath\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\n\u0026nbsp;\nusingnamespacestd;\n\u0026nbsp;\nstructqry {\n\u0026nbsp;\u0026nbsp;\u0026nbsp; intl, r, a, b, n;\n};\n\u0026nbsp;\nint_d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp; int\u0026amp; _s_ = _x_;\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp; while(!isdigit(_d_ = getchar()));\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp; _s_ = 0;\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp; while((_s_ = _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\n\u0026nbsp;\nconstintmaxn = 100009;\nconstintmaxm = 1000009;\n\u0026nbsp;\nintn, m, bsz, a[maxn], c[maxn], w[maxn], b[maxn], ans[maxm];\nqry q[maxm];\n\u0026nbsp;\ninlineboolcmpQry(constqry\u0026amp; a, constqry\u0026amp; b)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; returnw[a. l]\u0026nbsp;\u0026lt; w[b. l]\u0026nbsp;||\u0026nbsp;(w[a. l]\u0026nbsp;== w[b. l]\u0026nbsp;\u0026amp;\u0026amp; a. r \u0026lt; b. r);\n}\n\u0026nbsp;\ninlinevoidchg(intp, intv)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; b[w[p]]\u0026nbsp;+= v;\n}\n\u0026nbsp;\nintqry(intl, intr)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; ints = 0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; if(w[l]\u0026nbsp;== w[r])\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; while(l \u0026lt;= r)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(c[l])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;++ s;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;++ l;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; else{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = l; w[i]\u0026nbsp;== w[l];\u0026nbsp;++ i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(c[i])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;++ s;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = w[l]\u0026nbsp;+ 1; i \u0026lt; w[r];\u0026nbsp;++ i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; s += b[i];\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = r; w[i]\u0026nbsp;== w[r];\u0026nbsp;-- i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(c[i])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;++ s;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; returns;\n}\n\u0026nbsp;\nintmain()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\n\u0026nbsp;\u0026nbsp;\u0026nbsp; freopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\n\u0026nbsp;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; readInt(n);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; readInt(m);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; bsz =\u0026nbsp;(int)sqrt(n\u0026nbsp;/ 4)\u0026nbsp;+ 1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; readInt(a[i]);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; w[i]\u0026nbsp;=\u0026nbsp;(i - 1)\u0026nbsp;/ bsz + 1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; readInt(q[i]. l);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; readInt(q[i]. r);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; readInt(q[i]. a);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; readInt(q[i]. b);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; q[i]. n = i;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; sort(q, q + m, cmpQry);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; memset(b, 0, sizeof(b));\n\u0026nbsp;\u0026nbsp;\u0026nbsp; chg(a[1], 1);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; c[a[1]]\u0026nbsp;= 1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 0, l = 1, r = 1; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; while(l \u0026gt; q[i]. l)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;-- l;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(!c[a[l]])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; chg(a[l], 1);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;++ c[a[l]];\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; while(r \u0026lt; q[i]. r)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;++ r;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(!c[a[r]])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; chg(a[r], 1);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;++ c[a[r]];\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; while(l \u0026lt; q[i]. l)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;-- c[a[l]];\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(!c[a[l]])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; chg(a[l],\u0026nbsp;-1);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;++ l;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; while(r \u0026gt; q[i]. r)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;-- c[a[r]];\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(!c[a[r]])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; chg(a[r],\u0026nbsp;-1);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;-- r;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; ans[q[i]. n]\u0026nbsp;= qry(q[i]. a, q[i]. b);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 0; i \u0026lt; m;\u0026nbsp;++ i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; printf(\u0026quot;%d\\n\u0026quot;, ans[i]);\n}\n","permalink":"/oi/lofterimport_029/","summary":"好一道卡常数。不仅卡时间，还卡空间。堪称丧心病狂的极致。\n首先因为空间小所以得用莫队。然后不知为何树状数组没有直接分块跑得快。\n没有救啦。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cmath\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\n\u0026nbsp;\nusingnamespacestd;\n\u0026nbsp;\nstructqry {\n\u0026nbsp;\u0026nbsp;\u0026nbsp; intl, r, a, b, n;\n};\n\u0026nbsp;\nint_d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp; int\u0026amp; _s_ = _x_;\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp; while(!isdigit(_d_ = getchar()));\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp; _s_ = 0;\u0026nbsp;\\\n\u0026nbsp;\u0026nbsp;\u0026nbsp; while((_s_ = _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\n\u0026nbsp;\nconstintmaxn = 100009;\nconstintmaxm = 1000009;\n\u0026nbsp;\nintn, m, bsz, a[maxn], c[maxn], w[maxn], b[maxn], ans[maxm];","title":"BZOJ3809 Gty的二逼妹子序列"},{"content":"晚上比较无聊于是去uoj上玩了一玩。说好的复习会考呢？\n然后就开心地出事了。\n第一题好像直接分解质因数就行了啊。然后大质数手残打成-1了。居然给了90分。\n第二题左右应该是单调的。然后懒得写了欺负数据就用了个二分也过了。\n第三题想了想发现暴力都不可写，弃疗了。\n然后就rank4了。前面好像是主席？orz。\n毕竟我还是太年轻了。\n","permalink":"/diary/lofterimport_030/","summary":"晚上比较无聊于是去uoj上玩了一玩。说好的复习会考呢？\n然后就开心地出事了。\n第一题好像直接分解质因数就行了啊。然后大质数手残打成-1了。居然给了90分。\n第二题左右应该是单调的。然后懒得写了欺负数据就用了个二分也过了。\n第三题想了想发现暴力都不可写，弃疗了。\n然后就rank4了。前面好像是主席？orz。\n毕竟我还是太年轻了。","title":"20141221 UR3 总结"},{"content":"乍一看矩阵水题，然后发现不能走回头路。\n于是改一下把边当做点，把点当作转移，转移的时候就可以避免走过去就走回来的情况了。\n说好的复习会考呢？\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define _l (long long int)\nconst int mod = 45989;\nconst int maxn = 123;\nclass matrix {\npublic:\nint n, a[maxn][maxn];\ninline matrix()\u0026nbsp;{\n}\ninline matrix(int n0, bool one = 0)\u0026nbsp;{\nn = n0;\nmemset(a, 0, sizeof(a));\nif (one)\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\na[i][i]\u0026nbsp;= 1;\n}\nvoid operator =(const matrix\u0026amp; x)\u0026nbsp;{\nn = x. n;\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nfor (int j = 0; j \u0026lt; n;\u0026nbsp;++ j)\na[i][j]\u0026nbsp;= x. a[i][j];\n}\nmatrix operator *(const matrix\u0026amp; x)\u0026nbsp;{\nmatrix r(n);\nfor (int k = 0; k \u0026lt; n;\u0026nbsp;++ k)\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nfor (int j = 0; j \u0026lt; n;\u0026nbsp;++ j)\nr. a[i][j]\u0026nbsp;=\u0026nbsp;(r. a[i][j]\u0026nbsp;+ _l a[i][k]\u0026nbsp;* x. a[k][j]\u0026nbsp;% mod)\u0026nbsp;% mod;\nreturn r;\n}\n};\nstruct edge {\nint a, b;\ninline edge(int a0 = 0, int b0 = 0)\u0026nbsp;{\na = a0, b = b0;\n}\n};\n#define nin(x)\u0026nbsp;((x)\u0026lt;\u0026lt;1)\n#define nou(x)\u0026nbsp;(((x)\u0026lt;\u0026lt;1)|1)\nmatrix a, s;\nint n, m, t, x, y;\nedge e[maxn];\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m,\u0026nbsp;\u0026amp;t,\u0026nbsp;\u0026amp;x,\u0026nbsp;\u0026amp;y);\nn = 0;\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nint u, v;\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;u,\u0026nbsp;\u0026amp;v);\ne[n ++]\u0026nbsp;= edge(u, v);\ne[n ++]\u0026nbsp;= edge(v, u);\n}\ne[n ++]\u0026nbsp;= edge(-1, x);\ne[n ++]\u0026nbsp;= edge(y,\u0026nbsp;-2);\na = matrix(n);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nfor (int j = 0; j \u0026lt; n;\u0026nbsp;++ j)\nif (i\u0026nbsp;!= j \u0026amp;\u0026amp;\u0026nbsp;(i\u0026nbsp;^ j ^ 1)\u0026nbsp;\u0026amp;\u0026amp; e[i]. b == e[j]. a)\na. a[i][j]\u0026nbsp;= 1;\ns = matrix(n, 1);\nfor (++ t; t; t \u0026gt;\u0026gt;= 1, a = a * a)\nif (t\u0026nbsp;\u0026amp; 1)\ns = s * a;\nprintf(\u0026quot;%d\\n\u0026quot;, s. a[n - 2][n - 1]);\n}\n","permalink":"/oi/lofterimport_031/","summary":"乍一看矩阵水题，然后发现不能走回头路。\n于是改一下把边当做点，把点当作转移，转移的时候就可以避免走过去就走回来的情况了。\n说好的复习会考呢？\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define _l (long long int)\nconst int mod = 45989;\nconst int maxn = 123;\nclass matrix {\npublic:\nint n, a[maxn][maxn];\ninline matrix()\u0026nbsp;{\n}\ninline matrix(int n0, bool one = 0)\u0026nbsp;{\nn = n0;\nmemset(a, 0, sizeof(a));\nif (one)\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\na[i][i]\u0026nbsp;= 1;\n}\nvoid operator =(const matrix\u0026amp; x)\u0026nbsp;{\nn = x.","title":"BZOJ1875 [SDOI2009]HH去散步"},{"content":"贪心。从小到大每个灯泡找个小于等于它的最接近的房间去照。\n剩下的照不亮的房间直接换。\n剩下的背包空间把已经匹配的差最大的换掉。\n第一步要拿堆维护一下。剩下的直接排序。\n然后把nie写成-1了，no save。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long di;\n#ifdef WIN32\n#define difmt \u0026quot;%I64d\u0026quot;\n#else\n#define difmt \u0026quot;%lld\u0026quot;\n#endif\nconst int maxn = 500009;\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\nint n, k, p[maxn], w[maxn], x[maxn], t;\ndi ans;\nint main()\u0026nbsp;{\nreadInt(n);\nreadInt(k);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nreadInt(p[i]);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nreadInt(w[i]);\nsort(p, p + n);\nsort(w, w + n);\nt = 0;\nans = 0;\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nans += w[i];\nfor (int i = 0, j = 0, th = 0; i \u0026lt; n \u0026amp;\u0026amp; k \u0026gt;= 0;\u0026nbsp;++ i)\u0026nbsp;{\nfor (; j \u0026lt; n \u0026amp;\u0026amp; w[j]\u0026nbsp;\u0026lt;= p[i]; w[th]\u0026nbsp;= w[j ++], push_heap(w, w +\u0026nbsp;(++ th)));\nif (th)\u0026nbsp;{\nx[t ++]\u0026nbsp;= p[i]\u0026nbsp;- w[0];\npop_heap(w, w +\u0026nbsp;(th\u0026nbsp;--));\n}\nelse\n-- k;\n}\nif (k\u0026nbsp;\u0026lt; 0)\nputs(\u0026quot;NIE\u0026quot;);\nelse {\nsort(x, x + t);\nfor (int i = t - k - 1; i \u0026gt;= 0;\u0026nbsp;-- i)\nans += x[i];\nprintf(difmt \u0026quot;\\n\u0026quot;, ans);\n}\n}\n","permalink":"/oi/lofterimport_032/","summary":"贪心。从小到大每个灯泡找个小于等于它的最接近的房间去照。\n剩下的照不亮的房间直接换。\n剩下的背包空间把已经匹配的差最大的换掉。\n第一步要拿堆维护一下。剩下的直接排序。\n然后把nie写成-1了，no save。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long di;\n#ifdef WIN32\n#define difmt \u0026quot;%I64d\u0026quot;\n#else\n#define difmt \u0026quot;%lld\u0026quot;\n#endif\nconst int maxn = 500009;\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\nint n, k, p[maxn], w[maxn], x[maxn], t;","title":"BZOJ3728 PA2014Final Zarowki"},{"content":"以前觉得不会，仔细想想觉得还是挺水。\nmanacher找出所有中心回文串，然后用单调队列扫一下每个位置往左最长和往右最长就行。找位置比较烦不过还是比较好写的。\n重点是写出了在windows下拿for循环对拍，虽然异常丑。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nconst int maxn = 200009;\nint n, l[maxn], q[maxn], vx[maxn], vy[maxn];\nchar a[maxn];\nvoid manacher()\u0026nbsp;{\nl[0]\u0026nbsp;= 1;\nfor (int i = 1, j = 0; i \u0026lt;\u0026nbsp;(n\u0026nbsp;\u0026lt;\u0026lt; 1)\u0026nbsp;- 1;\u0026nbsp;++ i)\u0026nbsp;{\nint r =\u0026nbsp;((j\u0026nbsp;+ 1)\u0026nbsp;\u0026gt;\u0026gt; 1)\u0026nbsp;+ l[j]\u0026nbsp;- 1;\nint p = i \u0026gt;\u0026gt; 1, q = i - p;\nl[i]\u0026nbsp;=\u0026nbsp;(r \u0026gt;= q)\u0026nbsp;? min(r - q + 1, l[(j \u0026lt;\u0026lt; 1)\u0026nbsp;- i])\u0026nbsp;: 0;\nwhile (p\u0026nbsp;- l[i]\u0026nbsp;\u0026gt;= 0 \u0026amp;\u0026amp; q + l[i]\u0026nbsp;\u0026lt; n \u0026amp;\u0026amp; a[p - l[i]]\u0026nbsp;== a[q + l[i]])\n++ l[i];\nif (q\u0026nbsp;+ l[i]\u0026nbsp;- 1 \u0026gt; r)\nj = i;\n}\n}\n#define getLeft(x)\u0026nbsp;(((x)\u0026gt;\u0026gt;1)-l[x]+1)\n#define getRight(x)\u0026nbsp;((((x)+1)\u0026gt;\u0026gt;1)+l[x]-1)\nvoid dp(bool d)\u0026nbsp;{\nstatic int q[maxn];\nint hd = 0, tl = 0;\nif (!d)\u0026nbsp;{\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nif (!tl\u0026nbsp;|| getRight(i \u0026lt;\u0026lt; 1)\u0026nbsp;\u0026gt; getRight(q[tl - 1]))\nq[tl ++]\u0026nbsp;=\u0026nbsp;(i\u0026nbsp;\u0026lt;\u0026lt; 1);\nwhile (getRight(q[hd])\u0026nbsp;\u0026lt; i)\n++ hd;\nvx[i]\u0026nbsp;=\u0026nbsp;(i \u0026lt;\u0026lt; 1)\u0026nbsp;- q[hd]\u0026nbsp;+ 1;\nif (i\u0026nbsp;\u0026lt; n - 1 \u0026amp;\u0026amp; getRight((i \u0026lt;\u0026lt; 1)\u0026nbsp;+ 1)\u0026nbsp;\u0026gt; getRight(q[tl - 1]))\nq[tl ++]\u0026nbsp;=\u0026nbsp;(i\u0026nbsp;\u0026lt;\u0026lt; 1)\u0026nbsp;+ 1;\n}\n}\nelse {\nfor (int i = n - 1; i \u0026gt;= 0;\u0026nbsp;-- i)\u0026nbsp;{\nif (!tl\u0026nbsp;|| getLeft(i \u0026lt;\u0026lt; 1)\u0026nbsp;\u0026lt; getLeft(q[tl - 1]))\nq[tl ++]\u0026nbsp;=\u0026nbsp;(i\u0026nbsp;\u0026lt;\u0026lt; 1);\nwhile (getLeft(q[hd])\u0026nbsp;\u0026gt; i)\n++ hd;\nvy[i]\u0026nbsp;= q[hd]\u0026nbsp;-\u0026nbsp;(i \u0026lt;\u0026lt; 1)\u0026nbsp;+ 1;\nif (i\u0026nbsp;\u0026amp;\u0026amp; getLeft((i \u0026lt;\u0026lt; 1)\u0026nbsp;-1)\u0026nbsp;\u0026lt; getLeft(q[tl - 1]))\nq[tl ++]\u0026nbsp;=\u0026nbsp;(i\u0026nbsp;\u0026lt;\u0026lt; 1)\u0026nbsp;- 1;\n}\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%s\u0026quot;, a);\nn = strlen(a);\nmanacher();\ndp(0);\ndp(1);\nint ans = 2;\nfor (int i = 1; i \u0026lt; n;\u0026nbsp;++ i)\nans = max(ans, vx[i - 1]\u0026nbsp;+ vy[i]);\nprintf(\u0026quot;%d\\n\u0026quot;, ans);\n}\n","permalink":"/oi/lofterimport_033/","summary":"以前觉得不会，仔细想想觉得还是挺水。\nmanacher找出所有中心回文串，然后用单调队列扫一下每个位置往左最长和往右最长就行。找位置比较烦不过还是比较好写的。\n重点是写出了在windows下拿for循环对拍，虽然异常丑。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nconst int maxn = 200009;\nint n, l[maxn], q[maxn], vx[maxn], vy[maxn];\nchar a[maxn];\nvoid manacher()\u0026nbsp;{\nl[0]\u0026nbsp;= 1;\nfor (int i = 1, j = 0; i \u0026lt;\u0026nbsp;(n\u0026nbsp;\u0026lt;\u0026lt; 1)\u0026nbsp;- 1;\u0026nbsp;++ i)\u0026nbsp;{\nint r =\u0026nbsp;((j\u0026nbsp;+ 1)\u0026nbsp;\u0026gt;\u0026gt; 1)\u0026nbsp;+ l[j]\u0026nbsp;- 1;\nint p = i \u0026gt;\u0026gt; 1, q = i - p;\nl[i]\u0026nbsp;=\u0026nbsp;(r \u0026gt;= q)\u0026nbsp;? min(r - q + 1, l[(j \u0026lt;\u0026lt; 1)\u0026nbsp;- i])\u0026nbsp;: 0;","title":"BZOJ2565 最长双回文串"},{"content":"人总要走出去，才有机会领略广阔的世界。\n如果总是窝在自己的世界里，盲目地骄傲自大，终会一事无成。\n什么叫挫败。\n其实心里应该很清楚自己有多弱，但是总有那么一点侥幸，看，还有人比我更弱。\n但你没有机会在404或者三楼机房考省选或者noi。\n你要面对的，是这回见到的和没有见到的各路大神。\n哪里来的自信？\n你走在thu的校园里，感觉怎样？这只是预习，你要通过自己的奋斗才能真正拥有它。\n学到的东西，不只是用fft写字符串匹配，还有更多，更严肃认真的东西。\n埋头认真写题吧。\nHistorical Comments Unknown friend at 2014-12-20T21:07:53 感觉差不多。\nUnknown friend at 2014-12-20T21:15:47 造成这种感觉的原因可能稍有区别。（人不一样？） 不过刺激是一样的。 自己越来越混乱了呢。\nUnknown friend at 2014-12-20T23:06:22 与其叫刺激，不如说加强对生存残酷性的认识。每个人都是从诞生就喜欢踩别人尸体的感觉！\n","permalink":"/diary/lofterimport_034/","summary":"人总要走出去，才有机会领略广阔的世界。\n如果总是窝在自己的世界里，盲目地骄傲自大，终会一事无成。\n什么叫挫败。\n其实心里应该很清楚自己有多弱，但是总有那么一点侥幸，看，还有人比我更弱。\n但你没有机会在404或者三楼机房考省选或者noi。\n你要面对的，是这回见到的和没有见到的各路大神。\n哪里来的自信？\n你走在thu的校园里，感觉怎样？这只是预习，你要通过自己的奋斗才能真正拥有它。\n学到的东西，不只是用fft写字符串匹配，还有更多，更严肃认真的东西。\n埋头认真写题吧。\nHistorical Comments Unknown friend at 2014-12-20T21:07:53 感觉差不多。\nUnknown friend at 2014-12-20T21:15:47 造成这种感觉的原因可能稍有区别。（人不一样？） 不过刺激是一样的。 自己越来越混乱了呢。\nUnknown friend at 2014-12-20T23:06:22 与其叫刺激，不如说加强对生存残酷性的认识。每个人都是从诞生就喜欢踩别人尸体的感觉！","title":"80MSWC2014 总结"},{"content":"昨天就考完了不过今天还是讲了一天的课。\n上午是罗翔宇的杂题。感觉好多题他上次都讲过不过就是记不得怎么做了。看来听课效率有待提高。\n下午是讲icpc的题加各种神奇的玩意。感觉比较好玩，不过有点偏题啊。然后做表去了也没大听。\n毕竟我还是太年轻对吧，七天就水过去了。还被学军的大爷们虐成狗了。\n","permalink":"/oi/lofterimport_035/","summary":"昨天就考完了不过今天还是讲了一天的课。\n上午是罗翔宇的杂题。感觉好多题他上次都讲过不过就是记不得怎么做了。看来听课效率有待提高。\n下午是讲icpc的题加各种神奇的玩意。感觉比较好玩，不过有点偏题啊。然后做表去了也没大听。\n毕竟我还是太年轻对吧，七天就水过去了。还被学军的大爷们虐成狗了。","title":"80MSWC diary 4.1"},{"content":"最后一天考试了，跪。\n三道txt题。哈。俩gb加一个utf8。看来还是有人在用linux，开心。\n有道多项式开方。开始想得特别复杂，想的是dft来dft去。然后发现直接递推。出题人是在逗我玩么？\n然后图论题为啥是格点图？感觉乱七八糟图都能做。就拿tarjan缩个点跑dp就好了。然后因为是不科学的windows所以会暴栈就这么简单。\n另一题好像是图论+搜索啥的。不会。\n跪。\n然后下午wyx讲的dp感觉比插头啥的舒服多了。开心。\n毕竟我还是太年轻了。\n","permalink":"/diary/lofterimport_036/","summary":"最后一天考试了，跪。\n三道txt题。哈。俩gb加一个utf8。看来还是有人在用linux，开心。\n有道多项式开方。开始想得特别复杂，想的是dft来dft去。然后发现直接递推。出题人是在逗我玩么？\n然后图论题为啥是格点图？感觉乱七八糟图都能做。就拿tarjan缩个点跑dp就好了。然后因为是不科学的windows所以会暴栈就这么简单。\n另一题好像是图论+搜索啥的。不会。\n跪。\n然后下午wyx讲的dp感觉比插头啥的舒服多了。开心。\n毕竟我还是太年轻了。","title":"80MSWC diary 4 \u0026\u0026 20141217 总结"},{"content":"最初以为是splay维护Hash的简单题。顺手开心地敲了个splay还是指针版的。\n然后发现tle了。\n然后知道了可以暴力重新建串。\n然后拿splay暴力重新建串。\n然后又tle了。\n然后不得已改成了随机线性存取表，过之。\n我还是太naive了啊。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef unsigned long long qw;\n#define _l (long long int)\nconst int maxn = 200009;\nconst int base = 233;\nstruct str {\nchar a[maxn];\nint len;\ninline str()\u0026nbsp;{\nlen = 0;\n}\ninline void read()\u0026nbsp;{\nscanf(\u0026quot;%s\u0026quot;, a + 1);\nlen = strlen(a + 1);\n}\ninline char operator [](const int\u0026amp; x) const {\nreturn a[x];\n}\nvoid ins(int p0, char* b)\u0026nbsp;{\nint la = strlen(b);\nlen += la;\nfor (int i = len; i \u0026gt;= p0 + la;\u0026nbsp;-- i)\na[i]\u0026nbsp;= a[i - la];\nfor (int i = 0; i \u0026lt; la;\u0026nbsp;++ i)\na[p0 + i]\u0026nbsp;= b[i];\n}\nvoid chg(int x, int y, char* b)\u0026nbsp;{\nfor (int i = 0; i + x \u0026lt;= y;\u0026nbsp;++ i)\na[x + i]\u0026nbsp;= b[i];\n}\nvoid ers(int x, int y)\u0026nbsp;{\nint dl = y - x + 1;\nlen -= dl;\nfor (int i = x; i \u0026lt;= len;\u0026nbsp;++ i)\na[i]\u0026nbsp;= a[i + dl];\n}\n};\nint n, q, len;\nqw pbb[maxn], hb[maxn];\nchar a[maxn];\nint csp = 0;\nstr t;\nvoid pre()\u0026nbsp;{\npbb[0]\u0026nbsp;= 1;\nfor (int i = 1; i \u0026lt; maxn;\u0026nbsp;++ i)\npbb[i]\u0026nbsp;= pbb[i - 1]\u0026nbsp;* base;\n}\nvoid ref()\u0026nbsp;{\nlen = t. len;\nhb[0]\u0026nbsp;= 0;\nfor (int i = 1; i \u0026lt;= len;\u0026nbsp;++ i)\nhb[i]\u0026nbsp;= hb[i - 1]\u0026nbsp;* base + t[i];\n}\nqw grange(int l, int r)\u0026nbsp;{\nreturn hb[r]\u0026nbsp;- hb[l - 1]\u0026nbsp;* pbb[r - l + 1];\n}\nint qry(int a, int b)\u0026nbsp;{\nif (t[a]\u0026nbsp;!= t[b])\nreturn 0;\nint l = 1, r = len - max(a, b)\u0026nbsp;+ 1;\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r + 1)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (grange(a, a + mid - 1)\u0026nbsp;== grange(b, b + mid - 1))\nl = mid;\nelse\nr = mid - 1;\n}\nreturn l;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;b2105.in\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\nfreopen(\u0026quot;b2105.out\u0026quot;,\u0026nbsp;\u0026quot;w\u0026quot;, stdout);\n#endif\npre();\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;q);\nt. read();\nref();\nwhile (q\u0026nbsp;--)\u0026nbsp;{\nchar opt[10];\nint x, y;\nscanf(\u0026quot;%s\u0026quot;, opt);\nif (opt[0]\u0026nbsp;==\u0026nbsp;'L')\u0026nbsp;{\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;x,\u0026nbsp;\u0026amp;y);\nprintf(\u0026quot;%d\\n\u0026quot;, qry(x, y));\n}\nelse if (opt[0]\u0026nbsp;==\u0026nbsp;'A')\u0026nbsp;{\nscanf(\u0026quot;%d%s\u0026quot;,\u0026nbsp;\u0026amp;x, a);\nt. ins(x, a);\nref();\n}\nelse if (opt[0]\u0026nbsp;==\u0026nbsp;'C')\u0026nbsp;{\nscanf(\u0026quot;%d%d%s\u0026quot;,\u0026nbsp;\u0026amp;x,\u0026nbsp;\u0026amp;y, a + 1);\nt. chg(x, y, a + 1);\nref();\n}\nelse if (opt[0]\u0026nbsp;==\u0026nbsp;'D')\u0026nbsp;{\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;x,\u0026nbsp;\u0026amp;y);\nt. ers(x, y);\nref();\n}\n}\n}\n","permalink":"/oi/lofterimport_037/","summary":"最初以为是splay维护Hash的简单题。顺手开心地敲了个splay还是指针版的。\n然后发现tle了。\n然后知道了可以暴力重新建串。\n然后拿splay暴力重新建串。\n然后又tle了。\n然后不得已改成了随机线性存取表，过之。\n我还是太naive了啊。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef unsigned long long qw;\n#define _l (long long int)\nconst int maxn = 200009;\nconst int base = 233;\nstruct str {\nchar a[maxn];\nint len;\ninline str()\u0026nbsp;{\nlen = 0;\n}\ninline void read()\u0026nbsp;{\nscanf(\u0026quot;%s\u0026quot;, a + 1);\nlen = strlen(a + 1);\n}\ninline char operator [](const int\u0026amp; x) const {","title":"BZOJ2105 增强型LCP"},{"content":"昨天是day3明天是day4所以今天是day3.5。\n讲了一天课。\n上午+晚上是图论。感觉图论的东西比较神。好像基本都是cf原题吧。好多东西要和其它的诸如数据结构和dp之类的东西结合，还有数学也比较重要。\n下午是fft相关。先讲了一下fft的原理，虽然我觉得讲得除了好玩以外没什么特点，也没有用最好理解的方式来讲。然后期待的例题好像也不杂。然后怎么就扯到牛顿迭代上去了。不过这玩意以前没用过感觉还挺神奇的，改天找道题试试。\n晚上无聊的时候写了个后缀数组，这种东西还是要不时写写不然都要忘了。然后后缀自动机的构建依然不太能理解。看来我还是太弱了WUW\n然后明天是最后一天了。我虽然年轻，但是还是要努力一点的。\n","permalink":"/oi/lofterimport_038/","summary":"昨天是day3明天是day4所以今天是day3.5。\n讲了一天课。\n上午+晚上是图论。感觉图论的东西比较神。好像基本都是cf原题吧。好多东西要和其它的诸如数据结构和dp之类的东西结合，还有数学也比较重要。\n下午是fft相关。先讲了一下fft的原理，虽然我觉得讲得除了好玩以外没什么特点，也没有用最好理解的方式来讲。然后期待的例题好像也不杂。然后怎么就扯到牛顿迭代上去了。不过这玩意以前没用过感觉还挺神奇的，改天找道题试试。\n晚上无聊的时候写了个后缀数组，这种东西还是要不时写写不然都要忘了。然后后缀自动机的构建依然不太能理解。看来我还是太弱了WUW\n然后明天是最后一天了。我虽然年轻，但是还是要努力一点的。","title":"80MSWC diary 3.5"},{"content":"最初以为是水题，直接写个dq交上去不对。\n看了下题解才知道是后缀数组。好久不写都快不会写了。\n把原串倒过来扔一起排一下就行了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nconst int maxn = 60009;\nint n;\nint sa[maxn], rk[maxn], ro[maxn], w[maxn], o[maxn];\nchar a[maxn];\nvoid sufixArray(int n)\u0026nbsp;{\nmemset(w, 0, sizeof(w));\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\n++ w[(int)a[i]];\nfor (int i = 1; i \u0026lt; 123;\u0026nbsp;++ i)\nw[i]\u0026nbsp;+= w[i - 1];\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nsa[-- w[(int)a[i]]]\u0026nbsp;= i;\nrk[sa[0]]\u0026nbsp;= 0;\nfor (int i = 1; i \u0026lt; n;\u0026nbsp;++ i)\nif (a[sa[i]]\u0026nbsp;== a[sa[i - 1]])\nrk[sa[i]]\u0026nbsp;= rk[sa[i - 1]];\nelse\nrk[sa[i]]\u0026nbsp;= rk[sa[i - 1]]\u0026nbsp;+ 1;\nfor (int l = 1; l \u0026lt; n; l \u0026lt;\u0026lt;= 1)\u0026nbsp;{\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nro[i]\u0026nbsp;= rk[i];\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\no[i]\u0026nbsp;=\u0026nbsp;(sa[i]\u0026nbsp;+ n - l)\u0026nbsp;% n;\nmemset(w, 0, sizeof(w));\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\n++ w[rk[i]];\nfor (int i = 1; i \u0026lt; n;\u0026nbsp;++ i)\nw[i]\u0026nbsp;+= w[i - 1];\nfor (int i = n - 1; i \u0026gt;= 0;\u0026nbsp;-- i)\nsa[-- w[ro[o[i]]]]\u0026nbsp;= o[i];\nrk[sa[0]]\u0026nbsp;= 0;\nfor (int i = 1; i \u0026lt; n;\u0026nbsp;++ i)\nif (ro[sa[i]]\u0026nbsp;== ro[sa[i - 1]]\u0026nbsp;\u0026amp;\u0026amp; ro[(sa[i]\u0026nbsp;+ l)\u0026nbsp;% n]\u0026nbsp;== ro[(sa[i - 1]\u0026nbsp;+ l)\u0026nbsp;% n])\nrk[sa[i]]\u0026nbsp;= rk[sa[i - 1]];\nelse\nrk[sa[i]]\u0026nbsp;= rk[sa[i - 1]]\u0026nbsp;+ 1;\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;n);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nint d;\nwhile (!isupper(d\u0026nbsp;= getchar()));\na[i]\u0026nbsp;= d;\na[n * 2 - i]\u0026nbsp;= d;\n}\na[n]\u0026nbsp;= 0;\na[n * 2 + 1]\u0026nbsp;= 32;\nsufixArray(n * 2 + 1);\nfor (int i = 0, j = n - 1, c = 0; i \u0026lt;= j;)\u0026nbsp;{\nif (a[i]\u0026nbsp;\u0026lt; a[j])\nputchar(a[i ++]);\nelse if (a[j]\u0026nbsp;\u0026lt; a[i])\nputchar(a[j --]);\nelse if (rk[i]\u0026nbsp;\u0026lt; rk[n * 2 - j])\nputchar(a[i ++]);\nelse\nputchar(a[j --]);\nif (++ c == 80)\u0026nbsp;{\nputchar(10);\nc = 0;\n}\n}\nputchar(10);\n}\n","permalink":"/oi/lofterimport_039/","summary":"最初以为是水题，直接写个dq交上去不对。\n看了下题解才知道是后缀数组。好久不写都快不会写了。\n把原串倒过来扔一起排一下就行了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nconst int maxn = 60009;\nint n;\nint sa[maxn], rk[maxn], ro[maxn], w[maxn], o[maxn];\nchar a[maxn];\nvoid sufixArray(int n)\u0026nbsp;{\nmemset(w, 0, sizeof(w));\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\n++ w[(int)a[i]];\nfor (int i = 1; i \u0026lt; 123;\u0026nbsp;++ i)\nw[i]\u0026nbsp;+= w[i - 1];\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nsa[-- w[(int)a[i]]]\u0026nbsp;= i;","title":"BZOJ1692 [Usaco2007 Dec]队列变换"},{"content":"今天再次naive。\n早上考试。\n第一题感觉好像似乎大概也许应该是不太难吧。但是感觉建边好麻烦，虽然最后拿map乱搞搞定了。然后就让水朝上流了，而且还没拍出来。惨。\n第二题是将军讲过的！？虽然在今天早上之前我也不会写。好吧其实我写过。然后就怎么乱搞一下分类讨论+对拍半天就过了。\n第三题没啥时间想了。一个不算难想的dp。\n下午讲coci的题。感觉好多原题。然后看到truck那题就笑了哈哈。然后发现学军的同学大概是在低调地笑。\n毕竟我太年轻了。\n","permalink":"/diary/lofterimport_040/","summary":"今天再次naive。\n早上考试。\n第一题感觉好像似乎大概也许应该是不太难吧。但是感觉建边好麻烦，虽然最后拿map乱搞搞定了。然后就让水朝上流了，而且还没拍出来。惨。\n第二题是将军讲过的！？虽然在今天早上之前我也不会写。好吧其实我写过。然后就怎么乱搞一下分类讨论+对拍半天就过了。\n第三题没啥时间想了。一个不算难想的dp。\n下午讲coci的题。感觉好多原题。然后看到truck那题就笑了哈哈。然后发现学军的同学大概是在低调地笑。\n毕竟我太年轻了。","title":"80MSWC diary 3 \u0026\u0026 20141215 总结"},{"content":"上午讲课下午考试，比较开心。\n上午讲各种数学。感觉自己数学弱暴了。然后发现自己还是有点前瞻性的，前几天居然出了两道题，都是今天的例题。\n下午考试。题目就是各种不让人看懂的节奏啊。花了俩小时终于弄懂了第二题的题意，然后写了个分块dfs序水了。然后好像把标程干掉了。开心。另外两道传统题都不怎么会做的样子。懒得写高精+还不会后缀自动机。答案提交可以滚大粗了。\n所以我太年轻了。\n","permalink":"/diary/lofterimport_041/","summary":"上午讲课下午考试，比较开心。\n上午讲各种数学。感觉自己数学弱暴了。然后发现自己还是有点前瞻性的，前几天居然出了两道题，都是今天的例题。\n下午考试。题目就是各种不让人看懂的节奏啊。花了俩小时终于弄懂了第二题的题意，然后写了个分块dfs序水了。然后好像把标程干掉了。开心。另外两道传统题都不怎么会做的样子。懒得写高精+还不会后缀自动机。答案提交可以滚大粗了。\n所以我太年轻了。","title":"80MSWC diary 2 \u0026\u0026 20141214 总结"},{"content":"既然明天考试是day2，那么今天就叫day1.5好了。\n上午下午都在听讲。\n上午讲构造。题都比较神奇。我觉得比较重要的是思想吧。以后看到这类题可以稍微有些套路，不过更多的还是要靠智商了。\n下午讲字符串。后缀树和后缀自动机前几天就在看，虽然一直不太理解怎么构造出来的。讲得我也有点晕。还是要自己努力消化了。然后在bzoj上看到好多例题都有jiry的不久前的ac记录，orz。\n晚上bc做了a和c之后就不想做了。b没想出来，d知道是分块+主席树，不过也懒得敲了。晚上大概吃得有点多。\n所以我啊，还是太年轻了。\n","permalink":"/oi/lofterimport_042/","summary":"既然明天考试是day2，那么今天就叫day1.5好了。\n上午下午都在听讲。\n上午讲构造。题都比较神奇。我觉得比较重要的是思想吧。以后看到这类题可以稍微有些套路，不过更多的还是要靠智商了。\n下午讲字符串。后缀树和后缀自动机前几天就在看，虽然一直不太理解怎么构造出来的。讲得我也有点晕。还是要自己努力消化了。然后在bzoj上看到好多例题都有jiry的不久前的ac记录，orz。\n晚上bc做了a和c之后就不想做了。b没想出来，d知道是分块+主席树，不过也懒得敲了。晚上大概吃得有点多。\n所以我啊，还是太年轻了。","title":"80MSWC diary 1.5"},{"content":"今天上课讲的题。\n做法就直接枚举约数，或者说分解质因数。后者可以预处理到log。\n判循环也比较开心。直接用一些奇奇怪怪的字符串的性质就好了。\n看来字符串很博大精深啊。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef unsigned long long qw;\ntypedef pair \u0026lt;int, qw\u0026gt; hstrv;\n#define _l (long long int)\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\nconst int maxn = 500009;\nconst int base = 257;\nconst int hmod = 1000000093;\nint pba[maxn];\nqw pbb[maxn];\nstruct hstr {\nint a[maxn];\nqw b[maxn];\nint init(char* x)\u0026nbsp;{\na[0]\u0026nbsp;= 0;\nb[0]\u0026nbsp;= 0;\nint n = 1;\nfor (++ x;\u0026nbsp;*x;\u0026nbsp;++ x,\u0026nbsp;++ n)\u0026nbsp;{\na[n]\u0026nbsp;=\u0026nbsp;(_l a[n - 1]\u0026nbsp;* base +\u0026nbsp;*x)\u0026nbsp;% hmod;\nb[n]\u0026nbsp;= b[n - 1]\u0026nbsp;* base +\u0026nbsp;*x;\n}\nreturn n - 1;\n}\ninline hstrv range(int l, int r)\u0026nbsp;{\nint x =\u0026nbsp;((a[r]\u0026nbsp;- _l a[l - 1]\u0026nbsp;* pba[r - l + 1])\u0026nbsp;% hmod + hmod)\u0026nbsp;% hmod;\nqw y = b[r]\u0026nbsp;- b[l - 1]\u0026nbsp;* pbb[r - l + 1];\nreturn hstrv(x, y);\n}\n};\nchar a[maxn];\nhstr ha;\nint n, q;\nint pn[maxn], tp, mf[maxn];\nbool pr[maxn];\nvoid pre()\u0026nbsp;{\npba[0]\u0026nbsp;= 1;\npbb[0]\u0026nbsp;= 1;\nfor (int i = 1; i \u0026lt; maxn;\u0026nbsp;++ i)\u0026nbsp;{\npba[i]\u0026nbsp;= _l pba[i - 1]\u0026nbsp;* base % hmod;\npbb[i]\u0026nbsp;= pbb[i - 1]\u0026nbsp;* base;\n}\nmemset(pn, 0, sizeof(pn));\ntp = 0;\nfor (int i = 2; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nif (!pr[i])\u0026nbsp;{\npn[tp ++]\u0026nbsp;= i;\nmf[i]\u0026nbsp;= i;\n}\nfor (int j = 0; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j]\u0026nbsp;\u0026lt;= n;\u0026nbsp;++ j)\u0026nbsp;{\npr[i * pn[j]]\u0026nbsp;= 1;\nmf[i * pn[j]]\u0026nbsp;= pn[j];\nif (i\u0026nbsp;% pn[j]\u0026nbsp;== 0)\nbreak;\n}\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\npre();\nscanf(\u0026quot;%s\u0026quot;, a + 1);\nha. init(a);\nreadInt(q);\nwhile (q\u0026nbsp;--)\u0026nbsp;{\nint l, r, s;\nreadInt(l);\nreadInt(r);\ns = r - l + 1;\nfor (int i = s, j; i \u0026gt; 1; i /= mf[i])\u0026nbsp;{\nj = s / mf[i];\nif (ha. range(l, r - j)\u0026nbsp;== ha. range(l + j, r))\ns = j;\n}\nprintf(\u0026quot;%d\\n\u0026quot;, s);\n}\n}\n","permalink":"/oi/lofterimport_043/","summary":"今天上课讲的题。\n做法就直接枚举约数，或者说分解质因数。后者可以预处理到log。\n判循环也比较开心。直接用一些奇奇怪怪的字符串的性质就好了。\n看来字符串很博大精深啊。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef unsigned long long qw;\ntypedef pair \u0026lt;int, qw\u0026gt; hstrv;\n#define _l (long long int)\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\nconst int maxn = 500009;\nconst int base = 257;\nconst int hmod = 1000000093;","title":"BZOJ2795 A Horrible Poem"},{"content":"今天是双十二？虽然一直不懂这个日子有什么含义。\n在刚人工催吐也只吐出点口水的情况下终于可以坐下而不感觉难受了。\n今天一天好像唯一干了一件事就是发烧。所以首先来总结一下会什么会发烧。\n大概是昨天晚上吃了汉堡之后又吹了风，然后也许又吃了些不好的棒棒糖（现在还在我右手边），于是就光荣了。\n昨天晚上做梦梦到肚子痛，醒来发现真的肚子痛。而且这回压迫疗法的效果非常有限。然后还发现温度怎么不对！？有时很冷有时热的。撑了一会撑到起床，好像要稍微好些了。虽然80MS的早饭好像没放盐。\n然后就去考试了。肚子有点痛，去了好几次卫生间。有一回至少蹲了二十分钟，腿都麻了。回到机房瞬间想睡觉。感觉事情不妙。再过两分钟开始发冷了。好吧。\n于是早上根本不想写题。就一链剖裸题还写了俩小时。要正常情况下应该是半小时的事。剩下两道题完全没思路。写了俩暴力交了。今天弃疗了。\n中午去医院，总觉得比较坑。还抽了血。最后说是因为胃肠引起的高烧，38度呢。开了些药。回去听了两道题感觉坚持不下去了就滚回宾馆睡觉了。\n所以说到了人生地不熟的地方，更要小心，要照顾好自己。\n（怎么感觉以上都是在吐槽发烧多烦）\n今天的考试，虽然状态是一个借口，不过反正是考的不咋的。\n发现自己有偏科的迹象。遇到10^5, 10^6就很开心，不然就不会做了。\n所以前两题都不太会。\n第一题据说是fft的推广。当然以我当时的状态肯定是想不到了。\n第二题有点像去年scoi的最后一道题。当然是不会的节奏。\n第三题链剖+dfs序+持久化线段树。听mhy说过可以用seg tree区间加等差数列，就现yy了一下发现标记不用下传很愉快。不过因为状态的原因还是多花了很多时间。\n所以说学军和八十中的同学把我虐了。\n毕竟我还是太年轻了。\n","permalink":"/diary/lofterimport_044/","summary":"今天是双十二？虽然一直不懂这个日子有什么含义。\n在刚人工催吐也只吐出点口水的情况下终于可以坐下而不感觉难受了。\n今天一天好像唯一干了一件事就是发烧。所以首先来总结一下会什么会发烧。\n大概是昨天晚上吃了汉堡之后又吹了风，然后也许又吃了些不好的棒棒糖（现在还在我右手边），于是就光荣了。\n昨天晚上做梦梦到肚子痛，醒来发现真的肚子痛。而且这回压迫疗法的效果非常有限。然后还发现温度怎么不对！？有时很冷有时热的。撑了一会撑到起床，好像要稍微好些了。虽然80MS的早饭好像没放盐。\n然后就去考试了。肚子有点痛，去了好几次卫生间。有一回至少蹲了二十分钟，腿都麻了。回到机房瞬间想睡觉。感觉事情不妙。再过两分钟开始发冷了。好吧。\n于是早上根本不想写题。就一链剖裸题还写了俩小时。要正常情况下应该是半小时的事。剩下两道题完全没思路。写了俩暴力交了。今天弃疗了。\n中午去医院，总觉得比较坑。还抽了血。最后说是因为胃肠引起的高烧，38度呢。开了些药。回去听了两道题感觉坚持不下去了就滚回宾馆睡觉了。\n所以说到了人生地不熟的地方，更要小心，要照顾好自己。\n（怎么感觉以上都是在吐槽发烧多烦）\n今天的考试，虽然状态是一个借口，不过反正是考的不咋的。\n发现自己有偏科的迹象。遇到10^5, 10^6就很开心，不然就不会做了。\n所以前两题都不太会。\n第一题据说是fft的推广。当然以我当时的状态肯定是想不到了。\n第二题有点像去年scoi的最后一道题。当然是不会的节奏。\n第三题链剖+dfs序+持久化线段树。听mhy说过可以用seg tree区间加等差数列，就现yy了一下发现标记不用下传很愉快。不过因为状态的原因还是多花了很多时间。\n所以说学军和八十中的同学把我虐了。\n毕竟我还是太年轻了。","title":"80MSWC diary 1 \u0026\u0026 20141212 总结"},{"content":"昨天晚上被那道usaco的题玩坏了于是没写日记。\n来到了帝都。第二次去80ms了。好像没啥好写啊。\n这回没下雪不过风吹上去还是挺冷。\n晚上去家乐福吃汉堡，然后走回去。外面好冷。（这绝对不是伏笔）\n想到明天要考试也是比较开心。和zhx聊了聊人生，然后写了道usaco发现把题看错了不会。然后就弃疗了。\n","permalink":"/oi/lofterimport_045/","summary":"昨天晚上被那道usaco的题玩坏了于是没写日记。\n来到了帝都。第二次去80ms了。好像没啥好写啊。\n这回没下雪不过风吹上去还是挺冷。\n晚上去家乐福吃汉堡，然后走回去。外面好冷。（这绝对不是伏笔）\n想到明天要考试也是比较开心。和zhx聊了聊人生，然后写了道usaco发现把题看错了不会。然后就弃疗了。","title":"80MSWC diary 0"},{"content":"好久没做过数据范围这么小的题了。\n看来我是有点偏科了。\n这么前面的题居然都不做。\ndp就好。状态是前面男-女的最大值和最小值还有现在有多少男。然后滚动。\n我毕竟太年轻。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nconst int maxn = 159;\nconst int maxk = 49;\nconst int kbase = 23;\nconst int mod = 12345678;\nint n, m, c, f[2][maxn][maxk][maxk];\n#define incm(_x_,_b_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _a_ = _x_;\u0026nbsp;\\\n_a_ += _b_;\u0026nbsp;\\\nif (_a_\u0026nbsp;\u0026gt;= mod)\u0026nbsp;\\\n_a_ %= mod;\u0026nbsp;\\\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m,\u0026nbsp;\u0026amp;c);\nif (c\u0026nbsp;== 0)\u0026nbsp;{\nputs(\u0026quot;0\u0026quot;);\n}\nelse {\nint prv = 0, cur = 1;\nmemset(f, 0, sizeof(f));\nf[cur][0][kbase][kbase]\u0026nbsp;= 1;\nfor (int i = 0; i \u0026lt; m + n;\u0026nbsp;++ i)\u0026nbsp;{\nswap(cur, prv);\nfor (int j = 0; j \u0026lt;= n;\u0026nbsp;++ j)\nfor (int k = kbase - c; k \u0026lt;= kbase + c;\u0026nbsp;++ k)\nfor (int l = kbase - c; l \u0026lt;= kbase + c;\u0026nbsp;++ l)\nf[cur][j][k][l]\u0026nbsp;= 0;\nfor (int j = 0; j \u0026lt;= n;\u0026nbsp;++ j)\nfor (int k = kbase - c; k \u0026lt;= kbase + c;\u0026nbsp;++ k)\nfor (int l = k; l \u0026lt;= k + c \u0026amp;\u0026amp; l \u0026lt;= kbase + c;\u0026nbsp;++ l)\nif (f[prv][j][k][l])\u0026nbsp;{\nint d = j * 2 - i + kbase;\nif (l\u0026nbsp;- k \u0026lt; c || d \u0026lt; l)\nincm(f[cur][j + 1][k][max(d + 1, l)], f[prv][j][k][l]);\nif (l\u0026nbsp;- k \u0026lt; c || d \u0026gt; k)\nincm(f[cur][j][min(d - 1, k)][l], f[prv][j][k][l]);\n}\n}\nint ans = 0;\nfor (int k = kbase - c; k \u0026lt;= kbase + c;\u0026nbsp;++ k)\nfor (int l = k; l \u0026lt;= k + c \u0026amp;\u0026amp; l \u0026lt;= kbase + c;\u0026nbsp;++ l)\nincm(ans, f[cur][n][k][l]);\nprintf(\u0026quot;%d\\n\u0026quot;, ans);\n}\n}\n","permalink":"/oi/lofterimport_046/","summary":"好久没做过数据范围这么小的题了。\n看来我是有点偏科了。\n这么前面的题居然都不做。\ndp就好。状态是前面男-女的最大值和最小值还有现在有多少男。然后滚动。\n我毕竟太年轻。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nconst int maxn = 159;\nconst int maxk = 49;\nconst int kbase = 23;\nconst int mod = 12345678;\nint n, m, c, f[2][maxn][maxk][maxk];\n#define incm(_x_,_b_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _a_ = _x_;\u0026nbsp;\\\n_a_ += _b_;\u0026nbsp;\\\nif (_a_\u0026nbsp;\u0026gt;= mod)\u0026nbsp;\\\n_a_ %= mod;\u0026nbsp;\\\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m,\u0026nbsp;\u0026amp;c);\nif (c\u0026nbsp;== 0)\u0026nbsp;{\nputs(\u0026quot;0\u0026quot;);\n}\nelse {","title":"BZOJ1037 生日聚会"},{"content":"最后一天了。感觉好开心。\n第一题居然做过，然后发现是没有修改的情况。不会。ORZ JCVB。\n第二题开始没想通。然后想了想觉得还是可做。于是用链剖+dfs序水过了。在xj题里过的第二道题。\n第三道题答案提交。看到题目就懒得做了。骗分。\n毕竟我还是太年轻了。\n","permalink":"/diary/lofterimport_047/","summary":"最后一天了。感觉好开心。\n第一题居然做过，然后发现是没有修改的情况。不会。ORZ JCVB。\n第二题开始没想通。然后想了想觉得还是可做。于是用链剖+dfs序水过了。在xj题里过的第二道题。\n第三道题答案提交。看到题目就懒得做了。骗分。\n毕竟我还是太年轻了。","title":"20141208 总结"},{"content":"今天大概是人品崩了。看来昨天和zhx在bc上开黑有点损人品啊orz\n第一题想对了exgcd但是re了。鬼知道怎么回事。\n第二题是啥？不会，直接暴力网络流骗分RE\n第三题还是不会。暴力枚举骗分。\n毕竟我太弱了。\n","permalink":"/diary/lofterimport_048/","summary":"今天大概是人品崩了。看来昨天和zhx在bc上开黑有点损人品啊orz\n第一题想对了exgcd但是re了。鬼知道怎么回事。\n第二题是啥？不会，直接暴力网络流骗分RE\n第三题还是不会。暴力枚举骗分。\n毕竟我太弱了。","title":"20141207 总结"},{"content":"学军day2。\n被题虐烂orz。\n第一题看了半天想到贪心。敲sbt，对拍，正确。大数据time，然后发现超时超到哪里去了。换sgt，也没快多少。是我sgt写丑了还是sbt写快了。再yy一下，发现可以拿并查集离线O(n)找前趋和后继。写之，time之，过之。\n第二题好像知道怎么做了。但是觉得这个线段树好麻烦。弃疗。\n第三题。泥马，仙人掌同构。再见。\n然后第二题暴力写挫了。\n然后发现jason_yu过了2和3，1挂了。orz烂。\n所以我太年轻了。\n","permalink":"/diary/lofterimport_049/","summary":"学军day2。\n被题虐烂orz。\n第一题看了半天想到贪心。敲sbt，对拍，正确。大数据time，然后发现超时超到哪里去了。换sgt，也没快多少。是我sgt写丑了还是sbt写快了。再yy一下，发现可以拿并查集离线O(n)找前趋和后继。写之，time之，过之。\n第二题好像知道怎么做了。但是觉得这个线段树好麻烦。弃疗。\n第三题。泥马，仙人掌同构。再见。\n然后第二题暴力写挫了。\n然后发现jason_yu过了2和3，1挂了。orz烂。\n所以我太年轻了。","title":"20141206 总结"},{"content":"什么叫自信=\u0026nbsp;=\n学军的题orz。\n第一题想到了正确的算法，但是没有认为它是正确的，于是写完懒得管了，然后，就丑了。\n第二题后缀自动机神题不可做。\n第三题想了个错误的网络流。\n毕竟我过于年轻了。\n","permalink":"/diary/lofterimport_050/","summary":"什么叫自信=\u0026nbsp;=\n学军的题orz。\n第一题想到了正确的算法，但是没有认为它是正确的，于是写完懒得管了，然后，就丑了。\n第二题后缀自动机神题不可做。\n第三题想了个错误的网络流。\n毕竟我过于年轻了。","title":"20141205 总结"},{"content":"昨天太晕以至于忘了写总结。\n第一题神题不会做。感觉是机器模拟降次。写暴力还忘了取模。吃了30分。\n第二题树论好开心。预处树的形态然后链剖乱搞。\n第三题答提神题不可做。最后也没有成功地用c++输出空格。\n所以啊，我还是too年轻啊。\n","permalink":"/diary/lofterimport_051/","summary":"昨天太晕以至于忘了写总结。\n第一题神题不会做。感觉是机器模拟降次。写暴力还忘了取模。吃了30分。\n第二题树论好开心。预处树的形态然后链剖乱搞。\n第三题答提神题不可做。最后也没有成功地用c++输出空格。\n所以啊，我还是too年轻啊。","title":"20141204 总结"},{"content":"再次被虐烂ORZ\n第一题昨天正好做了餐巾那题，于是用的费用流，过了。其实思想就是对于一条流既要满足当天条件，又要往下继续流的时候，就让它去终点，然后再从源给条免费的。\n第二题三次韦达定理再用等比数列求和。我毕竟是AK过数学联赛的男人哈哈。\n第三题插头DP？还不会，SRO对面的MHY。\n所以我还是太年轻了。\n","permalink":"/diary/lofterimport_052/","summary":"再次被虐烂ORZ\n第一题昨天正好做了餐巾那题，于是用的费用流，过了。其实思想就是对于一条流既要满足当天条件，又要往下继续流的时候，就让它去终点，然后再从源给条免费的。\n第二题三次韦达定理再用等比数列求和。我毕竟是AK过数学联赛的男人哈哈。\n第三题插头DP？还不会，SRO对面的MHY。\n所以我还是太年轻了。","title":"20141203 总结"},{"content":"前两天还在YY动态DFS序呢，这就冒了一个出来。\n动态DFS序的郁闷之处在于不好维护dfs序上的end。而把反括号建出来正好能解决这个问题。\n然后就splay写得飞慢不知道怎么回事。\n用两个栈就可以迭代做出括号序列，自己YY出来的给自己赞一个。\n然后是目前最长的代码和倒数第二慢的时间。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint \u0026amp;_s_\u0026nbsp;= _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\n#define readOpt(_x_)\u0026nbsp;{\u0026nbsp;\\\nwhile (!isupper(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_x_ = _d_;\u0026nbsp;\\\n}\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nstruct edge {\nint t;\nedge *next;\n};\nstruct splay_node {\nint ls, rs, pt, sz, x;\nqw v, a, s;\n};\nconst int maxn = 200009;\nint n, m, w[maxn];\nint fa[maxn], dfb[maxn], dfe[maxn], dfo[maxn];\nedge *ep,\u0026nbsp;*head[maxn];\nvoid dfsBuild()\u0026nbsp;{\nstatic int sa[maxn], sb[maxn];\nint ta = 1, tb = 0, dfn = 0;\nsa[ta]\u0026nbsp;= 1;\nmemset(dfb, 0, sizeof(dfb));\nwhile (ta)\u0026nbsp;{\nint p = sa[ta --];\nwhile (tb\u0026nbsp;\u0026amp;\u0026amp; sb[tb]\u0026nbsp;!= fa[p])\ndfe[sb[tb --]]\u0026nbsp;=\u0026nbsp;++ dfn;\nsb[++ tb]\u0026nbsp;= p;\ndfb[p]\u0026nbsp;=\u0026nbsp;++ dfn;\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nsa[++ ta]\u0026nbsp;= e-\u0026gt; t;\n}\nwhile (tb)\ndfe[sb[tb --]]\u0026nbsp;=\u0026nbsp;++ dfn;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\ndfo[dfb[i]]\u0026nbsp;= i, dfo[dfe[i]]\u0026nbsp;=\u0026nbsp;-i;\n}\n#define lRot(_q_)\u0026nbsp;{\u0026nbsp;\\\nint _p_ = t[_q_]. pt, _a_ = t[_p_]. pt;\u0026nbsp;\\\nif (_a_)\u0026nbsp;{\u0026nbsp;\\\nif (_p_\u0026nbsp;== t[_a_]. ls)\u0026nbsp;\\\nt[_a_]. ls = _q_;\u0026nbsp;\\\nelse \\\nt[_a_]. rs = _q_;\u0026nbsp;\\\n}\u0026nbsp;\\\nif (t[_q_]. rs)\u0026nbsp;\\\nt[t[_q_]. rs]. pt = _p_;\u0026nbsp;\\\nt[_p_]. ls = t[_q_]. rs;\u0026nbsp;\\\nt[_q_]. rs = _p_;\u0026nbsp;\\\nt[_q_]. pt = _a_;\u0026nbsp;\\\nt[_p_]. pt = _q_;\u0026nbsp;\\\nupdate(_p_);\u0026nbsp;\\\nupdate(_q_);\u0026nbsp;\\\n}\n#define rRot(_q_)\u0026nbsp;{\u0026nbsp;\\\nint _p_ = t[_q_]. pt, _a_ = t[_p_]. pt;\u0026nbsp;\\\nif (_a_)\u0026nbsp;{\u0026nbsp;\\\nif (_p_\u0026nbsp;== t[_a_]. ls)\u0026nbsp;\\\nt[_a_]. ls = _q_;\u0026nbsp;\\\nelse \\\nt[_a_]. rs = _q_;\u0026nbsp;\\\n}\u0026nbsp;\\\nif (t[_q_]. ls)\u0026nbsp;\\\nt[t[_q_]. ls]. pt = _p_;\u0026nbsp;\\\nt[_p_]. rs = t[_q_]. ls;\u0026nbsp;\\\nt[_q_]. ls = _p_;\u0026nbsp;\\\nt[_q_]. pt = _a_;\u0026nbsp;\\\nt[_p_]. pt = _q_;\u0026nbsp;\\\nupdate(_p_);\u0026nbsp;\\\nupdate(_q_);\u0026nbsp;\\\n}\n#define update(_p_)\u0026nbsp;{\u0026nbsp;\\\nt[_p_]. sz = t[t[_p_]. ls]. sz + t[t[_p_]. rs]. sz + t[_p_]. x;\u0026nbsp;\\\nt[_p_]. s = t[t[_p_]. ls]. s + t[t[_p_]. rs]. s + t[_p_]. v + t[_p_]. a * t[_p_]. sz;\u0026nbsp;\\\n}\n#define pushDown(_p_)\u0026nbsp;{\u0026nbsp;\\\nif (t[_p_]. a)\u0026nbsp;{\u0026nbsp;\\\nif (t[_p_]. ls)\u0026nbsp;{\u0026nbsp;\\\nt[t[_p_]. ls]. a += t[_p_]. a;\u0026nbsp;\\\nupdate(t[_p_]. ls);\u0026nbsp;\\\n}\u0026nbsp;\\\nif (t[_p_]. rs)\u0026nbsp;{\u0026nbsp;\\\nt[t[_p_]. rs]. a += t[_p_]. a;\u0026nbsp;\\\nupdate(t[_p_]. rs);\u0026nbsp;\\\n}\u0026nbsp;\\\nif (t[_p_]. x \u0026gt; 0)\u0026nbsp;\\\nt[_p_]. v += t[_p_]. a;\u0026nbsp;\\\nelse \\\nt[_p_]. v -= t[_p_]. a;\u0026nbsp;\\\nt[_p_]. a = 0;\u0026nbsp;\\\n}\u0026nbsp;\\\n}\nstruct splay_tree {\nsplay_node t[maxn];\nint cr, n;\nsplay_tree()\u0026nbsp;{\nt[0]. sz = 0;\nt[0]. s = 0;\n}\nvoid dpath(int p)\u0026nbsp;{\nstatic int stc[maxn];\nint tst = 1;\nstc[1]\u0026nbsp;= p;\nfor (; t[stc[tst]]. pt;\u0026nbsp;++ tst)\nstc[tst + 1]\u0026nbsp;= t[stc[tst]]. pt;\nfor (; tst;\u0026nbsp;-- tst)\npushDown(stc[tst]);\n}\nvoid splay(int q)\u0026nbsp;{\ndpath(q);\nwhile (t[q]. pt)\u0026nbsp;{\nint p = t[q]. pt, a = t[p]. pt;\nif (!a\u0026nbsp;||\u0026nbsp;!t[a]. pt)\u0026nbsp;{\nif (q\u0026nbsp;== t[p]. ls)\u0026nbsp;{\nlRot(q);\n}\nelse {\nrRot(q);\n}\n}\nelse {\nif (p\u0026nbsp;== t[a]. ls)\u0026nbsp;{\nif (q\u0026nbsp;== t[p]. ls)\u0026nbsp;{\nlRot(p);\nlRot(q);\n}\nelse {\nrRot(q);\nlRot(q);\n}\n}\nelse {\nif (q\u0026nbsp;== t[p]. rs)\u0026nbsp;{\nrRot(p);\nrRot(q);\n}\nelse {\nlRot(q);\nrRot(q);\n}\n}\n}\n}\ncr = q;\n}\ninline int build(int l, int r, int pt = 0)\u0026nbsp;{\nif (l\u0026nbsp;\u0026gt;= r)\nreturn 0;\nint p =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nt[p]. pt = pt;\nt[p]. v =\u0026nbsp;((dfo[p]\u0026nbsp;\u0026gt; 0)\u0026nbsp;? w[dfo[p]]\u0026nbsp;:\u0026nbsp;-w[-dfo[p]]);\nt[p]. x =\u0026nbsp;((dfo[p]\u0026nbsp;\u0026gt; 0)\u0026nbsp;? 1 :\u0026nbsp;-1);\nt[p]. a = 0;\nt[p]. ls = build(l, p, p);\nt[p]. rs = build(p + 1, r, p);\nupdate(p);\nif (!pt)\ncr = p, n = r;\nreturn p;\n}\nint tmax(int p)\u0026nbsp;{\nwhile (t[p]. rs)\np = t[p]. rs;\nreturn p;\n}\nint tmin(int p)\u0026nbsp;{\nwhile (t[p]. ls)\np = t[p]. ls;\nreturn p;\n}\nint getRange(int l, int r)\u0026nbsp;{\nif (l\u0026nbsp;== 1 \u0026amp;\u0026amp; r == n)\nreturn cr;\nelse if (l\u0026nbsp;== 1)\u0026nbsp;{\nsplay(r);\nint x = tmin(t[r]. rs);\nsplay(x);\nreturn t[x]. ls;\n}\nelse if (r\u0026nbsp;== n)\u0026nbsp;{\nsplay(l);\nint x = tmax(t[l]. ls);\nsplay(x);\nreturn t[x]. rs;\n}\nelse {\nsplay(l);\nint x = tmax(t[l]. ls);\nsplay(r);\nint y = tmin(t[r]. rs);\nsplay(x);\nsplay(y);\nreturn t[x]. rs;\n}\n}\ninline qw getSum(int q)\u0026nbsp;{\ndpath(q);\nreturn t[q]. s;\n}\ninline void add(int q, int v)\u0026nbsp;{\nt[q]. a += v;\nupdate(q);\nsplay(q);\n}\nvoid cut(int q)\u0026nbsp;{\nint p = t[q]. pt;\ndpath(q);\nif (q\u0026nbsp;== t[p]. ls)\nt[p]. ls = 0;\nelse t[p]. rs = 0;\nt[q]. pt = 0;\nupdate(p);\nsplay(p);\n}\nvoid link(int q, int p)\u0026nbsp;{\nsplay(p);\nif (t[p]. rs)\u0026nbsp;{\nint x = tmin(t[p]. rs);\nsplay(x);\n}\ndpath(p);\nt[p]. rs = q;\nt[q]. pt = p;\nupdate(p);\nsplay(q);\n}\n};\nsplay_tree t;\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\nmemset(head, 0, sizeof(head));\nep = new edge[n];\nfor (int i = 2; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(fa[i]);\nep-\u0026gt; t = i;\nep-\u0026gt; next = head[fa[i]];\nhead[fa[i]]\u0026nbsp;= ep ++;\n}\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nreadInt(w[i]);\ndfsBuild();\nt. build(1, n * 2);\nreadInt(m);\nwhile (m\u0026nbsp;--)\u0026nbsp;{\nchar opt;\nint x, y;\nreadOpt(opt);\nif (opt\u0026nbsp;==\u0026nbsp;'Q')\u0026nbsp;{\nreadInt(x);\ny = t. getRange(1, dfb[x]);\nprintf(lld \u0026quot;\\n\u0026quot;, t. getSum(y));\n}\nelse if (opt\u0026nbsp;==\u0026nbsp;'C')\u0026nbsp;{\nreadInt(x);\nreadInt(y);\nint a = t. getRange(dfb[x], dfe[x]);\nt. cut(a);\nt. link(a, dfb[y]);\n}\nelse if (opt\u0026nbsp;==\u0026nbsp;'F')\u0026nbsp;{\nreadInt(x);\nreadInt(y);\nint a = t. getRange(dfb[x], dfe[x]);\nt. add(a, y);\n}\n}\n}\n","permalink":"/oi/lofterimport_053/","summary":"前两天还在YY动态DFS序呢，这就冒了一个出来。\n动态DFS序的郁闷之处在于不好维护dfs序上的end。而把反括号建出来正好能解决这个问题。\n然后就splay写得飞慢不知道怎么回事。\n用两个栈就可以迭代做出括号序列，自己YY出来的给自己赞一个。\n然后是目前最长的代码和倒数第二慢的时间。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint \u0026amp;_s_\u0026nbsp;= _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\n#define readOpt(_x_)\u0026nbsp;{\u0026nbsp;\\\nwhile (!isupper(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_x_ = _d_;\u0026nbsp;\\\n}\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nstruct edge {\nint t;","title":"BZOJ3786 星系探索"},{"content":"好吧第100篇文章是一篇总结。\n可以说明我写总结的频率比较高。\n今天是昨天的day2，真wa傻了。\n早上看到有答案提交题，先写吧。然后一个半小时60分，后面的看不出来了。\n然后第一题感觉是地精部落的加强版，还是不会。\n第二题看出来了与环没有关系，其实就是一个数列任意两数xor的不同的值的个数。写了个trie树优化暴力居然90，还是比较开心。\n然后很年轻地被jason_yu吊打。\n","permalink":"/diary/lofterimport_054/","summary":"好吧第100篇文章是一篇总结。\n可以说明我写总结的频率比较高。\n今天是昨天的day2，真wa傻了。\n早上看到有答案提交题，先写吧。然后一个半小时60分，后面的看不出来了。\n然后第一题感觉是地精部落的加强版，还是不会。\n第二题看出来了与环没有关系，其实就是一个数列任意两数xor的不同的值的个数。写了个trie树优化暴力居然90，还是比较开心。\n然后很年轻地被jason_yu吊打。","title":"20141202 总结"},{"content":"优化方法暑假的时候zhx讲过，我居然还记得好感动。\nMobius反演加些奇异的东西。（不会用公式编辑器是不是已经落伍了）\n两个优化-\u0026gt; sqrt(n)^2 == n。\n跑得飞慢\u0026nbsp;。而且中间那坨又长又丑。\n久了不写都快忘了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#define _l (qw)\nconst int maxn = 10000009;\nconst int mod = 20101009;\nint pn[maxn], mu[maxn], smu[maxn], tp;\nbool pr[maxn];\nvoid pre(int maxn)\u0026nbsp;{\nmemset(pr, 0, sizeof(pr));\ntp = 0;\nmu[1]\u0026nbsp;= 1;\nfor (int i = 2; i \u0026lt;= maxn;\u0026nbsp;++ i)\u0026nbsp;{\nif (!pr[i])\u0026nbsp;{\npn[tp ++]\u0026nbsp;= i;\nmu[i]\u0026nbsp;=\u0026nbsp;-1;\n}\nfor (int j = 0; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j]\u0026nbsp;\u0026lt;= maxn;\u0026nbsp;++ j)\u0026nbsp;{\npr[i * pn[j]]\u0026nbsp;= 1;\nif (i\u0026nbsp;% pn[j])\nmu[i * pn[j]]\u0026nbsp;=\u0026nbsp;-mu[i];\nelse {\nmu[i * pn[j]]\u0026nbsp;= 0;\nbreak;\n}\n}\n}\nsmu[0]\u0026nbsp;= 0;\nfor (int i = 1; i \u0026lt;= maxn;\u0026nbsp;++ i)\nsmu[i]\u0026nbsp;=\u0026nbsp;(smu[i - 1]\u0026nbsp;+ _l mu[i]\u0026nbsp;* i % mod * i % mod + mod)\u0026nbsp;% mod;\n}\nint n, m, ans;\ninline int segSum(int b, int e)\u0026nbsp;{\nreturn (((_l b + e)\u0026nbsp;*\u0026nbsp;(_l e - b + 1))\u0026nbsp;\u0026gt;\u0026gt; 1)\u0026nbsp;% mod;\n}\nint calc(int m, int n)\u0026nbsp;{\nint ans = 0;\nfor (int i = 1, b; i \u0026lt;= n; i = b + 1)\u0026nbsp;{\nb = min(n /\u0026nbsp;(n\u0026nbsp;/ i), m /\u0026nbsp;(m\u0026nbsp;/ i));\nans =\u0026nbsp;(_l ans +\u0026nbsp;(_l smu[b]\u0026nbsp;- smu[i - 1]\u0026nbsp;+ mod)\u0026nbsp;* segSum(1, n / i)\u0026nbsp;% mod * segSum(1, m / i)\u0026nbsp;% mod % mod % mod)\u0026nbsp;% mod;\n}\nreturn ans;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m);\nif (n\u0026nbsp;\u0026gt; m)\nswap(n, m);\npre(n);\nans = 0;\nfor (int i = 1, b; i \u0026lt;= n; i = b + 1)\u0026nbsp;{\nb = min(n /\u0026nbsp;(n\u0026nbsp;/ i), m /\u0026nbsp;(m\u0026nbsp;/ i));\nans =\u0026nbsp;(_l ans + _l segSum(i, b)\u0026nbsp;* calc(m / i, n / i))\u0026nbsp;% mod;\n}\nprintf(\u0026quot;%d\\n\u0026quot;, ans);\n}\n","permalink":"/oi/lofterimport_055/","summary":"优化方法暑假的时候zhx讲过，我居然还记得好感动。\nMobius反演加些奇异的东西。（不会用公式编辑器是不是已经落伍了）\n两个优化-\u0026gt; sqrt(n)^2 == n。\n跑得飞慢\u0026nbsp;。而且中间那坨又长又丑。\n久了不写都快忘了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#define _l (qw)\nconst int maxn = 10000009;\nconst int mod = 20101009;\nint pn[maxn], mu[maxn], smu[maxn], tp;\nbool pr[maxn];\nvoid pre(int maxn)\u0026nbsp;{\nmemset(pr, 0, sizeof(pr));\ntp = 0;\nmu[1]\u0026nbsp;= 1;\nfor (int i = 2; i \u0026lt;= maxn;\u0026nbsp;++ i)\u0026nbsp;{\nif (!pr[i])\u0026nbsp;{\npn[tp ++]\u0026nbsp;= i;\nmu[i]\u0026nbsp;=\u0026nbsp;-1;\n}\nfor (int j = 0; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j]\u0026nbsp;\u0026lt;= maxn;\u0026nbsp;++ j)\u0026nbsp;{","title":"BZOJ2154 Crash的数字表格"},{"content":"集训队难度的题？\n感觉比去年同期水啊。\n难道是我变强了？\n其实还是很弱，边burnside都没搞懂。\n第一题拿约数怎么水就水过去了。正解是burnside。但是下来也没写对。\n第二题迷之DFS+DP没看懂STD。毕竟太弱。\n第三题拿KDTREE搞过去了。比较开心，学有所用。\n然后我还是很年轻的说。\n","permalink":"/diary/lofterimport_056/","summary":"集训队难度的题？\n感觉比去年同期水啊。\n难道是我变强了？\n其实还是很弱，边burnside都没搞懂。\n第一题拿约数怎么水就水过去了。正解是burnside。但是下来也没写对。\n第二题迷之DFS+DP没看懂STD。毕竟太弱。\n第三题拿KDTREE搞过去了。比较开心，学有所用。\n然后我还是很年轻的说。","title":"20141201 总结"},{"content":"11月干了啥？\n先搞完了NOIP，很悲剧没有AK。然后半期考试，没上一本线。然后又颓废地刷了两个星期的数据结构题，顺便把OJ7搬到了新的服务器上然后加了些东西。\n至少今年NOIP没有出什么大事，虽然和目标有点差距。总结也写了两篇了不想再吐槽。\n然后觉得自己数据结构还是有些进步吧，有些原来觉得不太可写的树套树套树套树while(1)套树的题也敢写了，虽然常常跑得很慢。然后学会了两个新的东西CDQ和KDTREE。之前一直不太能理解，后来发现还是挺好用的。\n然后打了两场BC都不错，一场RANK1一场RANK4AK。最自豪的是两次最后一道压轴的数据结构题都被我做出来了。第一次是两棵树用不同的方法处理维护。第二次是三维的MOKIA被我用CDQ套树套树搞过了。感觉自己变强了～\n然后ZHX的出题计划还在考虑题。可能我还是太弱吧。\n12月没有大赛，但是事情不少。\n前10天陪JASON_YU准备清华集训，见识一下更高难度的题。然后有空就找点数据结构放松心情了。\n中间去北京集训。据说是省选难度的。去见一见全国的大神些。然后也许可能好像会有机会出题？这个比较开心。\n最后两个星期离会考也比较近了，计划每天至少划分2/3个单位的时间准备会考。那时候大概MHY的DP系列也比较完善了，就去看一看DP题。感觉现在除了数据结构以外其它方面我还太弱了点啊。这样下去不行啊。\nHistorical Comments Unknown friend at 2015-12-25T22:28:20 感觉和您当时差不多，会考焦头烂额QwQ\nUnknown friend at 2015-12-27T10:42:23 呃给你补充点背景。去年从80中回来大概不到20号，就直接被班主任拉回教室搞文化课直到期末考完。。。\nUnknown friend at 2015-12-27T10:44:24 会考也不用太虚。毕竟难度足够低，一般还会有奇怪的福利hhh\nUnknown friend at 2015-12-27T13:35:06 我们没有可以做文科的福利呀，你们当年真是太爽啦T^T\nUnknown friend at 2015-12-27T16:34:30 不是说这个\u0026hellip;印象中,文科题还没理科题简单\u0026hellip;重点是这是四川会考ovo\n","permalink":"/diary/lofterimport_057/","summary":"11月干了啥？\n先搞完了NOIP，很悲剧没有AK。然后半期考试，没上一本线。然后又颓废地刷了两个星期的数据结构题，顺便把OJ7搬到了新的服务器上然后加了些东西。\n至少今年NOIP没有出什么大事，虽然和目标有点差距。总结也写了两篇了不想再吐槽。\n然后觉得自己数据结构还是有些进步吧，有些原来觉得不太可写的树套树套树套树while(1)套树的题也敢写了，虽然常常跑得很慢。然后学会了两个新的东西CDQ和KDTREE。之前一直不太能理解，后来发现还是挺好用的。\n然后打了两场BC都不错，一场RANK1一场RANK4AK。最自豪的是两次最后一道压轴的数据结构题都被我做出来了。第一次是两棵树用不同的方法处理维护。第二次是三维的MOKIA被我用CDQ套树套树搞过了。感觉自己变强了～\n然后ZHX的出题计划还在考虑题。可能我还是太弱吧。\n12月没有大赛，但是事情不少。\n前10天陪JASON_YU准备清华集训，见识一下更高难度的题。然后有空就找点数据结构放松心情了。\n中间去北京集训。据说是省选难度的。去见一见全国的大神些。然后也许可能好像会有机会出题？这个比较开心。\n最后两个星期离会考也比较近了，计划每天至少划分2/3个单位的时间准备会考。那时候大概MHY的DP系列也比较完善了，就去看一看DP题。感觉现在除了数据结构以外其它方面我还太弱了点啊。这样下去不行啊。\nHistorical Comments Unknown friend at 2015-12-25T22:28:20 感觉和您当时差不多，会考焦头烂额QwQ\nUnknown friend at 2015-12-27T10:42:23 呃给你补充点背景。去年从80中回来大概不到20号，就直接被班主任拉回教室搞文化课直到期末考完。。。\nUnknown friend at 2015-12-27T10:44:24 会考也不用太虚。毕竟难度足够低，一般还会有奇怪的福利hhh\nUnknown friend at 2015-12-27T13:35:06 我们没有可以做文科的福利呀，你们当年真是太爽啦T^T\nUnknown friend at 2015-12-27T16:34:30 不是说这个\u0026hellip;印象中,文科题还没理科题简单\u0026hellip;重点是这是四川会考ovo","title":"11月总结 \u0026\u0026 12月计划"},{"content":"题意：求n!在b进制下的位数（n\u0026lt;=2^31）。\n好像要高精！？好像会TLE！？根本不会做！\n然后想到answer=∑log(k,i)\n然后积分？∫ln(x) dx = xln(x)\u0026nbsp;- x\n小数据直接跑，过之。试个极限数据，差了3！？\n仔细一想，对数函数是凹的，这样算答案当然会偏小。\n百度了一下，发现有个公式：n!≈√(2*π*n)*(n/e)^n。\n拆开之后发现就是比原来的积分多了个ln(2*π*n)\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cmath\u0026gt;\nconst double pi = asin(1)\u0026nbsp;* 2.0;\ndouble calc(double n, double k)\u0026nbsp;{\ndouble ans = 0;\nif (n\u0026nbsp;\u0026lt; 100000)\u0026nbsp;{\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nans += log(i);\nans /= log(k);\n}\nelse {\nans =\u0026nbsp;(0.5\u0026nbsp;* log(pi * n * 2)\u0026nbsp;+ log(n)\u0026nbsp;* n - n)\u0026nbsp;/ log(k);\n}\nreturn ans + 0.5;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\ndouble n, k;\nwhile (scanf(\u0026quot;%lf%lf\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;k)\u0026nbsp;!= EOF)\nprintf(\u0026quot;%.0lf\\n\u0026quot;, calc(n, k));\n}\nHistorical Comments Unknown friend at 2014-11-30T17:55:51 积分……跪烂 底下那个斯特林公式说真的 小数据差的太远（如果20应该叫做小数据）\n","permalink":"/oi/lofterimport_058/","summary":"题意：求n!在b进制下的位数（n\u0026lt;=2^31）。\n好像要高精！？好像会TLE！？根本不会做！\n然后想到answer=∑log(k,i)\n然后积分？∫ln(x) dx = xln(x)\u0026nbsp;- x\n小数据直接跑，过之。试个极限数据，差了3！？\n仔细一想，对数函数是凹的，这样算答案当然会偏小。\n百度了一下，发现有个公式：n!≈√(2*π*n)*(n/e)^n。\n拆开之后发现就是比原来的积分多了个ln(2*π*n)\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cmath\u0026gt;\nconst double pi = asin(1)\u0026nbsp;* 2.0;\ndouble calc(double n, double k)\u0026nbsp;{\ndouble ans = 0;\nif (n\u0026nbsp;\u0026lt; 100000)\u0026nbsp;{\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nans += log(i);\nans /= log(k);\n}\nelse {\nans =\u0026nbsp;(0.5\u0026nbsp;* log(pi * n * 2)\u0026nbsp;+ log(n)\u0026nbsp;* n - n)\u0026nbsp;/ log(k);\n}\nreturn ans + 0.5;\n}","title":"BZOJ3000 Big Number"},{"content":"人生第一次AK网赛。之前cf和bc总是fst。\n第一题水，比谁手速快。好像我手速也比较慢啊。\n第二题离散一下，然后直接用前缀和找最大。手速又有点慢。\n第三题树状数组优化DP，有点像SCOI2014的玉米田。然后写挫了好几次。\n第四题比较有含金量。前两天才做了cdq的mokia，于是想了一会决定用cdq套树状数组套平衡树。然后花了20分钟写30分钟把平衡树里ins的时候把点的编号改对和++size。我觉得我没有抢救的必要了。\n然后所以虽然AK但是排名还是低。上次虽然只过了两题还是RANK1，难度差距有点大啊。\n不过终于超过jason_yu了。\n看来我还是比较年轻，还要再努力啊。\n","permalink":"/diary/lofterimport_060/","summary":"人生第一次AK网赛。之前cf和bc总是fst。\n第一题水，比谁手速快。好像我手速也比较慢啊。\n第二题离散一下，然后直接用前缀和找最大。手速又有点慢。\n第三题树状数组优化DP，有点像SCOI2014的玉米田。然后写挫了好几次。\n第四题比较有含金量。前两天才做了cdq的mokia，于是想了一会决定用cdq套树状数组套平衡树。然后花了20分钟写30分钟把平衡树里ins的时候把点的编号改对和++size。我觉得我没有抢救的必要了。\n然后所以虽然AK但是排名还是低。上次虽然只过了两题还是RANK1，难度差距有点大啊。\n不过终于超过jason_yu了。\n看来我还是比较年轻，还要再努力啊。","title":"Bestcoder #20 题解\u0026\u0026总结"},{"content":"好像数学都退化了。\n其实一直没有用过中国剩余定理。虽然好像也不是太麻烦，不过要记住。\n然后这题也比较裸吧。把C(n,m)中的阶乘分解成t*p^k的样子就好了。ORZ JASON_YU\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#define _l (qw)\nconst int mod = 999911659;\nconst int pn[4]\u0026nbsp;=\u0026nbsp;{2, 3, 4679, 35617};\nconst int maxb = 50009;\nint n, g, fac[maxb], tf, s[4];\nint t[maxb];\nint modPow(int a, int x, int mod)\u0026nbsp;{\nint s = 1;\nfor (a\u0026nbsp;%= mod; x; x \u0026gt;\u0026gt;= 1, a = _l a * a % mod)\nif (x\u0026nbsp;\u0026amp; 1)\ns = _l s * a % mod;\nreturn s;\n}\nvoid gfac(int n, int\u0026amp; t0, int\u0026amp; k0, int d, int p)\u0026nbsp;{\nint tt = _l modPow(t[p - 1], n / p, p)\u0026nbsp;* t[n % p]\u0026nbsp;% p;\nint kk = 0;\nfor (qw pp = p; pp \u0026lt;= n; pp *= p)\u0026nbsp;{\ntt = _l tt * modPow(t[p - 1], n / pp / p, p)\u0026nbsp;% p * t[(n / pp)\u0026nbsp;% p]\u0026nbsp;% p;\nkk += n / pp;\n}\nk0 += kk * d;\nif (d\u0026nbsp;== 1)\nt0 = _l t0 * tt % mod;\nelse\nt0 = _l t0 * modPow(tt, p - 2, p)\u0026nbsp;% p;\n}\nint calc(int pn)\u0026nbsp;{\nint ans = 0;\nt[0]\u0026nbsp;= 1;\nt[1]\u0026nbsp;= 1;\nfor (int i = 2; i \u0026lt; pn;\u0026nbsp;++ i)\nt[i]\u0026nbsp;= _l t[i - 1]\u0026nbsp;* i % pn;\nfor (int i = 0; i \u0026lt; tf;\u0026nbsp;++ i)\u0026nbsp;{\nint t0 = 1, k0 = 0;\ngfac(n, t0, k0, 1, pn);\ngfac(fac[i], t0, k0,\u0026nbsp;-1, pn);\ngfac(n - fac[i], t0, k0,\u0026nbsp;-1, pn);\nif (!k0)\nans =\u0026nbsp;(ans\u0026nbsp;+ t0)\u0026nbsp;% pn;\n}\nreturn ans;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;g);\nif (g\u0026nbsp;== mod)\u0026nbsp;{\nputs(\u0026quot;0\u0026quot;);\nreturn 0;\n}\ntf = 0;\nfor (int i = 1; i * i \u0026lt;= n;\u0026nbsp;++ i)\nif (n\u0026nbsp;% i == 0)\u0026nbsp;{\nfac[tf ++]\u0026nbsp;= i;\nif (i\u0026nbsp;* i \u0026lt; n)\nfac[tf ++]\u0026nbsp;= n / i;\n}\nqw ans = 0;\nfor (int i = 0; i \u0026lt; 4;\u0026nbsp;++ i)\u0026nbsp;{\ns[i]\u0026nbsp;= calc(pn[i]);\nint mt =\u0026nbsp;(mod\u0026nbsp;- 1)\u0026nbsp;/ pn[i];\nans =\u0026nbsp;(ans\u0026nbsp;+ _l s[i]\u0026nbsp;* mt %\u0026nbsp;(mod\u0026nbsp;- 1)\u0026nbsp;* modPow(mt, pn[i]\u0026nbsp;- 2, pn[i])\u0026nbsp;%\u0026nbsp;(mod - 1))\u0026nbsp;%\u0026nbsp;(mod - 1);\n}\nprintf(\u0026quot;%d\\n\u0026quot;, modPow(g, ans, mod));\n}\n","permalink":"/oi/lofterimport_061/","summary":"好像数学都退化了。\n其实一直没有用过中国剩余定理。虽然好像也不是太麻烦，不过要记住。\n然后这题也比较裸吧。把C(n,m)中的阶乘分解成t*p^k的样子就好了。ORZ JASON_YU\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#define _l (qw)\nconst int mod = 999911659;\nconst int pn[4]\u0026nbsp;=\u0026nbsp;{2, 3, 4679, 35617};\nconst int maxb = 50009;\nint n, g, fac[maxb], tf, s[4];\nint t[maxb];\nint modPow(int a, int x, int mod)\u0026nbsp;{\nint s = 1;\nfor (a\u0026nbsp;%= mod; x; x \u0026gt;\u0026gt;= 1, a = _l a * a % mod)","title":"BZOJ1951 [Sdoi2010]古代猪文"},{"content":"异常欢乐的并查集。馒头染色法。均摊O(n)的时间。\n离线，先把每个染色操作会染黑哪些边算出来，把黑色子节点并到白色父节点里。\n然后倒着处理，询问就直接用并查集问白色子节点顶上的黑色父节点最近是谁。染色操作再染回来。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t, i;\nedge *next;\n};\nstruct query {\nint t, v, ans;\nint *b;\n};\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\nconst int maxn = 1000009;\nint n, m, d[maxn], fa[maxn], v[maxn], c[maxn], r[maxn];\nint i_buf[maxn],\u0026nbsp;*tib;\nquery q[maxn];\nedge *head[maxn],\u0026nbsp;*ep;\ninline void addEdge(int u, int v, int w)\u0026nbsp;{\nep-\u0026gt; t = v;\nep-\u0026gt; i = w;\nep-\u0026gt; next = head[u];\nhead[u]\u0026nbsp;= ep ++;\n}\nvoid buildTree()\u0026nbsp;{\nstatic int q[maxn];\nint hd = 0, tl = 1;\nmemset(d, 0, sizeof(d));\nmemset(c, 0, sizeof(c));\nd[1]\u0026nbsp;= 1;\nfa[1]\u0026nbsp;= 0;\nfa[0]\u0026nbsp;= 0;\nr[0]\u0026nbsp;= 0;\nv[0]\u0026nbsp;= 0;\nv[1]\u0026nbsp;= 0;\nq[hd]\u0026nbsp;= 1;\nwhile (hd\u0026nbsp;\u0026lt; tl)\u0026nbsp;{\nint p = q[hd ++];\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (!d[e-\u0026gt; t])\u0026nbsp;{\nd[e-\u0026gt; t]\u0026nbsp;= d[p]\u0026nbsp;+ 1;\nfa[e-\u0026gt; t]\u0026nbsp;= p;\nv[e-\u0026gt; t]\u0026nbsp;= e-\u0026gt; i;\nq[tl ++]\u0026nbsp;= e-\u0026gt; t;\n}\n}\n}\nint getRoot(int x)\u0026nbsp;{\nint p, q;\nfor (p\u0026nbsp;= x; r[p]\u0026nbsp;^ p; p = r[p]);\nfor (; x ^ p; q = r[x], r[x]\u0026nbsp;= p, x = q);\nreturn p;\n}\nint lca(int u, int v, int* a)\u0026nbsp;{\nint t = 0;\nu = getRoot(u);\nv = getRoot(v);\nwhile (u\u0026nbsp;^ v)\u0026nbsp;{\nif (d[u]\u0026nbsp;\u0026gt; d[v])\u0026nbsp;{\na[t ++]\u0026nbsp;= u;\nc[u]\u0026nbsp;= 1;\nr[u]\u0026nbsp;= getRoot(fa[u]);\nu = r[u];\n}\nelse {\na[t ++]\u0026nbsp;= v;\nc[v]\u0026nbsp;= 1;\nr[v]\u0026nbsp;= getRoot(fa[v]);\nv = r[v];\n}\n}\nreturn t;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\nreadInt(m);\nmemset(head, 0, sizeof(head));\nep = new edge[n * 2];\nfor (int i = 1; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nint u, v;\nreadInt(u);\nreadInt(v);\naddEdge(u, v, i);\naddEdge(v, u, i);\n}\nbuildTree();\ntib = i_buf;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nr[i]\u0026nbsp;= i;\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(q[i]. t);\nif (q[i]. t == 1)\u0026nbsp;{\nreadInt(q[i]. v);\n}\nelse {\nint u, v;\nreadInt(u);\nreadInt(v);\nq[i]. b = tib;\nq[i]. v = lca(u, v, q[i]. b);\ntib += q[i]. v;\n}\n}\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nif (c[i])\nr[i]\u0026nbsp;= i;\nelse\nr[i]\u0026nbsp;= fa[i];\nfor (int i = m - 1; i \u0026gt;= 0;\u0026nbsp;-- i)\nif (q[i]. t == 1)\nq[i]. ans = v[getRoot(q[i]. v)];\nelse {\nfor (int j = 0; j \u0026lt; q[i]. v;\u0026nbsp;++ j)\u0026nbsp;{\nint p = q[i]. b[j];\nr[p]\u0026nbsp;= getRoot(fa[p]);\nc[p]\u0026nbsp;= 0;\n}\n}\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\nif (q[i]. t == 1)\nprintf(\u0026quot;%d\\n\u0026quot;, q[i]. ans);\n}\n","permalink":"/oi/lofterimport_062/","summary":"异常欢乐的并查集。馒头染色法。均摊O(n)的时间。\n离线，先把每个染色操作会染黑哪些边算出来，把黑色子节点并到白色父节点里。\n然后倒着处理，询问就直接用并查集问白色子节点顶上的黑色父节点最近是谁。染色操作再染回来。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t, i;\nedge *next;\n};\nstruct query {\nint t, v, ans;\nint *b;\n};\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\nconst int maxn = 1000009;\nint n, m, d[maxn], fa[maxn], v[maxn], c[maxn], r[maxn];","title":"BZOJ3319 黑白树"},{"content":"The input contains several test cases.\n虽然我没看到这句话但也A了，什么情况。\na到b的路径xor=(a到根xor b到根)\u0026nbsp;水\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t, v;\nedge *next;\n};\nconst int maxn = 100009;\nconst int maxl = 33;\nint n, v[maxn], fa[maxn], tr[maxn * maxl][2], tn;\nedge *head[maxn],\u0026nbsp;*ep;\ninline void addEdge(int u, int v, int w)\u0026nbsp;{\nep-\u0026gt; t = v;\nep-\u0026gt; v = w;\nep-\u0026gt; next = head[u];\nhead[u]\u0026nbsp;= ep ++;\n}\nvoid buildTree()\u0026nbsp;{\nstatic int q[maxn];\nint hd = 0, tl = 1;\nmemset(fa,\u0026nbsp;-1, sizeof(fa));\nfa[1]\u0026nbsp;= 0;\nq[hd]\u0026nbsp;= 1;\nv[1]\u0026nbsp;= 0;\nwhile (hd\u0026nbsp;\u0026lt; tl)\u0026nbsp;{\nint p = q[hd ++];\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (fa[e-\u0026gt; t]\u0026nbsp;==\u0026nbsp;-1)\u0026nbsp;{\nfa[e-\u0026gt; t]\u0026nbsp;= p;\nv[e-\u0026gt; t]\u0026nbsp;= v[p]\u0026nbsp;^ e-\u0026gt; v;\nq[tl ++]\u0026nbsp;= e-\u0026gt; t;\n}\n}\n}\nvoid trieIns(int v)\u0026nbsp;{\nint p = 1;\nfor (int i = 30; i \u0026gt;= 0;\u0026nbsp;-- i)\u0026nbsp;{\nint d =\u0026nbsp;(v\u0026nbsp;\u0026gt;\u0026gt; i)\u0026nbsp;\u0026amp; 1;\nif (!tr[p][d])\ntr[p][d]\u0026nbsp;=\u0026nbsp;++ tn;\np = tr[p][d];\n}\n}\nint trieXor(int v)\u0026nbsp;{\nint p = 1, s = 0;\nfor (int i = 30; i \u0026gt;= 0;\u0026nbsp;-- i)\u0026nbsp;{\nint d =\u0026nbsp;(v\u0026nbsp;\u0026gt;\u0026gt; i)\u0026nbsp;\u0026amp; 1;\nif (tr[p][d\u0026nbsp;^ 1])\u0026nbsp;{\ns |=\u0026nbsp;(1\u0026nbsp;\u0026lt;\u0026lt; i);\np = tr[p][d ^ 1];\n}\nelse\np = tr[p][d];\n}\nreturn s;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;n);\nmemset(head, 0, sizeof(head));\nep = new edge[maxn * 2];\nfor (int i = 0; i \u0026lt; n - 1;\u0026nbsp;++ i)\u0026nbsp;{\nint u, v, w;\nscanf(\u0026quot;%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;u,\u0026nbsp;\u0026amp;v,\u0026nbsp;\u0026amp;w);\naddEdge(u, v, w);\naddEdge(v, u, w);\n}\nbuildTree();\ntr[0][0]\u0026nbsp;= 0;\ntr[0][1]\u0026nbsp;= 0;\ntr[1][0]\u0026nbsp;= 0;\ntr[1][1]\u0026nbsp;= 0;\ntn = 2;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\ntrieIns(v[i]);\nint ans = 0;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nans = max(ans, trieXor(v[i]));\nprintf(\u0026quot;%d\\n\u0026quot;, ans);\n}\n","permalink":"/oi/lofterimport_063/","summary":"The input contains several test cases.\n虽然我没看到这句话但也A了，什么情况。\na到b的路径xor=(a到根xor b到根)\u0026nbsp;水\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t, v;\nedge *next;\n};\nconst int maxn = 100009;\nconst int maxl = 33;\nint n, v[maxn], fa[maxn], tr[maxn * maxl][2], tn;\nedge *head[maxn],\u0026nbsp;*ep;\ninline void addEdge(int u, int v, int w)\u0026nbsp;{\nep-\u0026gt; t = v;\nep-\u0026gt; v = w;\nep-\u0026gt; next = head[u];\nhead[u]\u0026nbsp;= ep ++;","title":"BZOJ1954 Pku3764 The xor-longest Path"},{"content":"被zhx玩傻了。\nday1做得不好。\n第一题迷一般的博弈，最初用三方的dp，然后也想到了两方可以通过单调优化下来，不过一直以为t的范围有10^5，于是也懒得写了。结果t只有10。出题人不负责啊。\n第二题其实比较简单。直接暴力dp然后加个矩阵快速幂优化。但是一直没有想清楚pi(num)\u0026lt;=123是什么意思，所以就没有写。\n第三题写得最久。应该也是对的。只是，对仙人掌的定义有点误差，而已，嘛。\n然后day就挂了。\nday2自己把ak吃了。\n第一题是树形dp，比较水秒得比较快。\n第二题是图论。最初想的是多少点对(i, j)的最短路过u，然后没想清楚怎么在O(n)里找出dag上每个点能到多少个点，于是想啊想，然后发现定义错了。应该是直接dp就好了。然后就是把maxm写成maxn然后WA傻的节奏。\n第三题给高一小朋友出过弱化版。就是用各种能求的大小关系容斥一下。虽然推了一会不过还是推出来了。\n毕竟我还是太年轻了。\n","permalink":"/diary/lofterimport_064/","summary":"被zhx玩傻了。\nday1做得不好。\n第一题迷一般的博弈，最初用三方的dp，然后也想到了两方可以通过单调优化下来，不过一直以为t的范围有10^5，于是也懒得写了。结果t只有10。出题人不负责啊。\n第二题其实比较简单。直接暴力dp然后加个矩阵快速幂优化。但是一直没有想清楚pi(num)\u0026lt;=123是什么意思，所以就没有写。\n第三题写得最久。应该也是对的。只是，对仙人掌的定义有点误差，而已，嘛。\n然后day就挂了。\nday2自己把ak吃了。\n第一题是树形dp，比较水秒得比较快。\n第二题是图论。最初想的是多少点对(i, j)的最短路过u，然后没想清楚怎么在O(n)里找出dag上每个点能到多少个点，于是想啊想，然后发现定义错了。应该是直接dp就好了。然后就是把maxm写成maxn然后WA傻的节奏。\n第三题给高一小朋友出过弱化版。就是用各种能求的大小关系容斥一下。虽然推了一会不过还是推出来了。\n毕竟我还是太年轻了。","title":"20141125/27 总结"},{"content":"平衡树维护序列的老题。之前用SMT写过，不过在bzoj上就tle了。splay大法好。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\n#define readStr(_s_)\u0026nbsp;{\u0026nbsp;\\\nchar* _i_ = _s_;\u0026nbsp;\\\nwhile (!islower(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\nwhile ((*(_i_\u0026nbsp;++)\u0026nbsp;= _d_), islower(_d_ = getchar()));\u0026nbsp;\\\n*(_i_)\u0026nbsp;= 0;\u0026nbsp;\\\n}\n#define _l (long long int)\nconst int maxn = 300009;\nconst int mod = 20130426;\nstruct node {\nint ls, rs, pt, sz;\nint val, mul, add;\n};\nstruct splay_tree {\nnode t[maxn];\nint cr, tn;\nvoid init()\u0026nbsp;{\nt[0]. sz = 0;\nt[0]. val = 0;\ntn = 0;\ncr = 0;\n}\ninline void update(int p)\u0026nbsp;{\nt[p]. sz = t[t[p]. ls]. sz + t[t[p]. rs]. sz + 1;\n}\ninline void pushDown(int p)\u0026nbsp;{\nif (t[p]. ls)\u0026nbsp;{\nt[t[p]. ls]. val =\u0026nbsp;(_l t[t[p]. ls]. val * t[p]. mul + t[p]. add)\u0026nbsp;% mod;\nt[t[p]. ls]. mul =\u0026nbsp;(_l t[t[p]. ls]. mul * t[p]. mul)\u0026nbsp;% mod;\nt[t[p]. ls]. add =\u0026nbsp;(_l t[t[p]. ls]. add * t[p]. mul + t[p]. add)\u0026nbsp;% mod;\n}\nif (t[p]. rs)\u0026nbsp;{\nt[t[p]. rs]. val =\u0026nbsp;(_l t[t[p]. rs]. val * t[p]. mul + t[p]. add)\u0026nbsp;% mod;\nt[t[p]. rs]. mul =\u0026nbsp;(_l t[t[p]. rs]. mul * t[p]. mul)\u0026nbsp;% mod;\nt[t[p]. rs]. add =\u0026nbsp;(_l t[t[p]. rs]. add * t[p]. mul + t[p]. add)\u0026nbsp;% mod;\n}\nt[p]. mul = 1;\nt[p]. add = 0;\n}\ninline void lRot(int q)\u0026nbsp;{\nint p = t[q]. pt, a = t[p]. pt;\nif (t[q]. rs)\nt[t[q]. rs]. pt = p;\nt[p]. ls = t[q]. rs;\nt[q]. rs = p;\nt[p]. pt = q;\nt[q]. pt = a;\nif (a)\u0026nbsp;{\nif (p\u0026nbsp;== t[a]. ls)\nt[a]. ls = q;\nelse\nt[a]. rs = q;\n}\nupdate(p);\nupdate(q);\n}\ninline void rRot(int q)\u0026nbsp;{\nint p = t[q]. pt, a = t[p]. pt;\nif (t[q]. ls)\nt[t[q]. ls]. pt = p;\nt[p]. rs = t[q]. ls;\nt[q]. ls = p;\nt[p]. pt = q;\nt[q]. pt = a;\nif (a)\u0026nbsp;{\nif (p\u0026nbsp;== t[a]. ls)\nt[a]. ls = q;\nelse\nt[a]. rs = q;\n}\nupdate(p);\nupdate(q);\n}\nvoid upath(int q)\u0026nbsp;{\nfor (; q; q = t[q]. pt)\nupdate(q);\n}\nvoid dpath(int q)\u0026nbsp;{\nstatic int stc[maxn];\nint tst = 0;\nfor (int u = q; u; u = t[u]. pt)\nstc[++ tst]\u0026nbsp;= u;\nfor (; tst;\u0026nbsp;-- tst)\u0026nbsp;{\nupdate(stc[tst]);\npushDown(stc[tst]);\n}\n}\nvoid splay(int q)\u0026nbsp;{\ndpath(q);\nwhile (t[q]. pt)\u0026nbsp;{\nint p = t[q]. pt, a = t[p]. pt;\nif (!a\u0026nbsp;||\u0026nbsp;!t[a]. pt)\u0026nbsp;{\nif (q\u0026nbsp;== t[p]. ls)\nlRot(q);\nelse\nrRot(q);\n}\nelse {\nif (p\u0026nbsp;== t[a]. ls)\u0026nbsp;{\nif (q\u0026nbsp;== t[p]. ls)\nlRot(p), lRot(q);\nelse\nrRot(q), lRot(q);\n}\nelse {\nif (q\u0026nbsp;== t[p]. ls)\nlRot(q), rRot(q);\nelse\nrRot(p), rRot(q);\n}\n}\n}\ncr = q;\n}\nint kth(int k)\u0026nbsp;{\nint p = cr;\nwhile (p)\nif (t[t[p]. ls]. sz == k)\nbreak;\nelse if (t[t[p]. ls]. sz \u0026gt; k)\np = t[p]. ls;\nelse\nk -= t[t[p]. ls]. sz + 1, p = t[p]. rs;\nreturn p;\n}\nint build(int l, int r)\u0026nbsp;{\nif (l\u0026nbsp;\u0026gt; r)\nreturn 0;\nint p =\u0026nbsp;++ tn, mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nt[p]. val = 0;\nt[p]. add = 0;\nt[p]. mul = 1;\nt[p]. ls = build(l, mid - 1);\nif (t[p]. ls)\nt[t[p]. ls]. pt = p;\nt[p]. rs = build(mid + 1, r);\nif (t[p]. rs)\nt[t[p]. rs]. pt = p;\nupdate(p);\nreturn p;\n}\nint getRange(int l, int r)\u0026nbsp;{\nif (!cr)\ncr = build(0, r);\nif (r\u0026nbsp;\u0026gt;= t[cr]. sz)\u0026nbsp;{\nint x = kth(t[cr]. sz - 1);\nint z = build(t[cr]. sz, r);\nsplay(x);\npushDown(x);\nt[x]. rs = z;\nt[z]. pt = x;\nupdate(x);\n}\nif (!l\u0026nbsp;\u0026amp;\u0026amp; r == t[cr]. sz - 1)\nreturn cr;\nelse if (!l)\u0026nbsp;{\nint x = kth(r + 1);\nsplay(x);\nreturn t[x]. ls;\n}\nelse if (r\u0026nbsp;== t[cr]. sz - 1)\u0026nbsp;{\nint x = kth(l - 1);\nsplay(x);\nreturn t[x]. rs;\n}\nelse {\nint x = kth(l - 1);\nint y = kth(r + 1);\nsplay(x);\nsplay(y);\nreturn t[x]. rs;\n}\n}\nvoid add(int p, int v)\u0026nbsp;{\ndpath(p);\nt[p]. val =\u0026nbsp;(_l t[p]. val + v)\u0026nbsp;% mod;\nt[p]. add =\u0026nbsp;(_l t[p]. add + v)\u0026nbsp;% mod;\n}\nvoid mul(int p, int v)\u0026nbsp;{\ndpath(p);\nt[p]. val = _l t[p]. val * v % mod;\nt[p]. add = _l t[p]. add * v % mod;\nt[p]. mul = _l t[p]. mul * v % mod;\n}\nint rmvKth(int k)\u0026nbsp;{\nint x = getRange(k, k);\nif (t[cr]. sz == 1)\nreturn cr = 0, t[x]. val;\ndpath(x);\nint ret = t[x]. val;\nif (t[x]. pt)\u0026nbsp;{\nif (x\u0026nbsp;== t[t[x]. pt]. ls)\nt[t[x]. pt]. ls = 0;\u0026nbsp;\nelse\nt[t[x]. pt]. rs = 0;\u0026nbsp;\nupath(t[x]. pt);\n}\nreturn ret;\n}\nvoid ins(int k)\u0026nbsp;{\nint x = getRange(k, k);\nwhile (t[x]. ls)\nx = t[x]. ls;\ndpath(x);\n++ tn;\nt[tn]. ls = 0;\nt[tn]. rs = 0;\nt[tn]. pt = x;\nt[tn]. sz = 1;\nt[tn]. val = 0;\nt[tn]. mul = 1;\nt[tn]. add = 0;\nt[x]. ls = tn;\nupath(tn);\nsplay(tn);\n}\nint dfsAns(int p, int\u0026amp; x, int x0)\u0026nbsp;{\nint ret = 0;\npushDown(p);\nif (t[p]. ls)\nret = dfsAns(t[p]. ls, x, x0);\nret =\u0026nbsp;(_l ret + _l x * t[p]. val)\u0026nbsp;% mod;\nx = _l x * x0 % mod;\nif (t[p]. rs)\nret =\u0026nbsp;(ret\u0026nbsp;+ dfsAns(t[p]. rs, x, x0))\u0026nbsp;% mod;\nreturn ret;\n}\nint getAns(int x)\u0026nbsp;{\nint tmp = 1;\nreturn dfsAns(cr, tmp, x);\n}\n};\nint n;\nsplay_tree t;\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nt. init();\nreadInt(n);\nwhile (n\u0026nbsp;--)\u0026nbsp;{\nchar opt[7];\nint l, r, v;\nreadStr(opt);\nif (opt[0]\u0026nbsp;==\u0026nbsp;'m'\u0026nbsp;\u0026amp;\u0026amp; opt[3]\u0026nbsp;== 0)\u0026nbsp;{\nreadInt(l);\nreadInt(r);\nreadInt(v);\nint x = t. getRange(l, r);\nt. mul(x, v);\n}\nelse if (opt[0]\u0026nbsp;==\u0026nbsp;'a')\u0026nbsp;{\nreadInt(l);\nreadInt(r);\nreadInt(v);\nint x = t. getRange(l, r);\nt. add(x, v);\n}\nelse if (opt[3]\u0026nbsp;==\u0026nbsp;'x')\u0026nbsp;{\nreadInt(l);\nreadInt(r);\nint v = t. rmvKth(r);\nint x = t. getRange(r, r);\nt. add(x, v);\nt. ins(l);\n}\nelse {\nreadInt(v);\nprintf(\u0026quot;%d\\n\u0026quot;, t. getAns(v));\n}\n}\n}\n","permalink":"/oi/lofterimport_065/","summary":"平衡树维护序列的老题。之前用SMT写过，不过在bzoj上就tle了。splay大法好。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\n#define readStr(_s_)\u0026nbsp;{\u0026nbsp;\\\nchar* _i_ = _s_;\u0026nbsp;\\\nwhile (!islower(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\nwhile ((*(_i_\u0026nbsp;++)\u0026nbsp;= _d_), islower(_d_ = getchar()));\u0026nbsp;\\\n*(_i_)\u0026nbsp;= 0;\u0026nbsp;\\\n}\n#define _l (long long int)\nconst int maxn = 300009;\nconst int mod = 20130426;","title":"Scoi2013多项式的运算"},{"content":"CDQ重构图。听上去比CDQ还高档的样子。\n就是每层重新标号，把没有询问到的边拿来跑并查集。\n最初是分开考虑然后可修复的并查集就T傻了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;set\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\nconst int maxn = 100009;\nconst int maxm = 200009;\nconst int maxl = 19;\nstruct edge {\nint a, b, i;\n};\nstruct dset {\nint r[maxn], hp[maxn * 5], hv[maxn * 5], cnt;\nvoid init(int n)\u0026nbsp;{\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nr[i]\u0026nbsp;= i;\ncnt = 0;\n}\nint getRoot(int x)\u0026nbsp;{\nint p = x, q;\nfor (; r[p]\u0026nbsp;^ p; p = r[p]);\nfor (; x ^ p; x = q)\u0026nbsp;{\n/*hp[cnt]\u0026nbsp;= x;\nhv[cnt]\u0026nbsp;= r[x];\n++ cnt;*/\nq = r[x];\nr[x]\u0026nbsp;= p;\n}\nreturn p;\n}\nbool connected(int x, int y)\u0026nbsp;{\nreturn getRoot(x)\u0026nbsp;== getRoot(y);\n}\nbool merge(int x, int y)\u0026nbsp;{\nint a = getRoot(x), b = getRoot(y);\nif (a\u0026nbsp;^ b)\u0026nbsp;{\n/*hp[cnt]\u0026nbsp;= a;\nhv[cnt]\u0026nbsp;= a;\n++ cnt;*/\nr[a]\u0026nbsp;= b;\nreturn 1;\n}\nelse\nreturn 0;\n}\nvoid recover(int y)\u0026nbsp;{\nwhile (cnt\u0026nbsp;\u0026gt; y)\u0026nbsp;{\n-- cnt;\nr[hp[cnt]]\u0026nbsp;= hv[cnt];\n}\n}\n};\nstruct query {\nint t, a[5];\nvoid read()\u0026nbsp;{\nreadInt(t);\nfor (int i = 0; i \u0026lt; t;\u0026nbsp;++ i)\nreadInt(a[i]);\n}\n};\nstruct parr {\nint t, v[maxn];\nvoid init()\u0026nbsp;{\nmemset(v, 0, sizeof(v));\nt = 0;\n}\ninline void next()\u0026nbsp;{\n++ t;\n}\ninline void ins(const int\u0026amp; x)\u0026nbsp;{\nv[x]\u0026nbsp;= t;\n}\ninline bool query(const int\u0026amp; x)\u0026nbsp;{\nreturn v[x]\u0026nbsp;== t;\n}\n};\nint n, m, tq, ans[maxn], nn[maxn];\nedge e[maxl][maxm];\ndset s[maxl];\nparr vis;\nquery q[maxn];\nvoid cdq(int l, int r, int c, int d, int n, int m)\u0026nbsp;{\nif (c\u0026nbsp;== 1)\u0026nbsp;{\nfor (int i = l; i \u0026lt; r;\u0026nbsp;++ i)\nans[i]\u0026nbsp;= 1;\nreturn;\n}\ns[d]. init(n);\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nvis. next();\nfor (int i = l; i \u0026lt; r;\u0026nbsp;++ i)\nfor (int j = 0; j \u0026lt; q[i]. t;\u0026nbsp;++ j)\nvis. ins(q[i]. a[j]);\nint cc = c, tn = 0, te = 0;\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\nif (!vis. query(e[d][i]. i))\ncc -= s[d]. merge(e[d][i]. a, e[d][i]. b);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nif (s[d]. getRoot(i)\u0026nbsp;== i)\nnn[i]\u0026nbsp;=\u0026nbsp;++ tn;\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\nif (!s[d]. connected(e[d][i]. a, e[d][i]. b))\u0026nbsp;{\ne[d + 1][te]. a = nn[s[d]. getRoot(e[d][i]. a)];\ne[d + 1][te]. b = nn[s[d]. getRoot(e[d][i]. b)];\ne[d + 1][te]. i = e[d][i]. i;\n++ te;\n}\nif (l\u0026nbsp;+ 1 == r)\u0026nbsp;{\nans[l]\u0026nbsp;=\u0026nbsp;(cc == 1);\n}\nelse {\ncdq(l, mid, cc, d + 1, tn, te);\ncdq(mid, r, cc, d + 1, tn, te);\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\nreadInt(m);\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(e[0][i]. a);\nreadInt(e[0][i]. b);\ne[0][i]. i = i + 1;\n}\nreadInt(tq);\nfor (int i = 0; i \u0026lt; tq;\u0026nbsp;++ i)\nq[i]. read();\nvis. init();\ncdq(0, tq, n, 0, n, m);\nfor (int i = 0; i \u0026lt; tq;\u0026nbsp;++ i)\nputs(ans[i]\u0026nbsp;?\u0026nbsp;\u0026quot;Connected\u0026quot;\u0026nbsp;:\u0026nbsp;\u0026quot;Disconnected\u0026quot;);\n}\n","permalink":"/oi/lofterimport_066/","summary":"CDQ重构图。听上去比CDQ还高档的样子。\n就是每层重新标号，把没有询问到的边拿来跑并查集。\n最初是分开考虑然后可修复的并查集就T傻了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;set\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint\u0026amp; _s_ = _x_;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\n}\nconst int maxn = 100009;\nconst int maxm = 200009;\nconst int maxl = 19;\nstruct edge {\nint a, b, i;\n};\nstruct dset {\nint r[maxn], hp[maxn * 5], hv[maxn * 5], cnt;","title":"BZOJ3237 [Ahoi2013]连通图"},{"content":"离散，然后树状数组+莫队。\n最初用的是直接粘过来的1488的sbt，然后极限随机数据要跑14s。好郁闷。\n然后改用数状数组就变1s了。是我再次把sbt写丑了还是它常数够厉害TT\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct query {\nint i, l, r, pl, pr;\n};\ntypedef unsigned int uint;\nconst int maxn = 50009;\n#define update(_p_)\u0026nbsp;(sz[_p_]=sz[ls[_p_]]+sz[rs[_p_]]+1)\ninline bool cmpQry(const query\u0026amp; a, const query\u0026amp; b)\u0026nbsp;{\nreturn a. pl \u0026lt; b. pl ||\u0026nbsp;(a. pl == b. pl \u0026amp;\u0026amp; a. pr \u0026gt; b. pr);\n}\ninline bool cmpP(int* a, int* b)\u0026nbsp;{\nreturn *a\u0026nbsp;\u0026lt;\u0026nbsp;*b;\n}\nint n, m, bsz, a[maxn],\u0026nbsp;*r[maxn], maxa, t[maxn];\nuint ans[maxn];;\nquery q[maxn];\nvoid btChg(int* t, int p, int v)\u0026nbsp;{\nfor (; p \u0026lt;= maxa; p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\nt[p]\u0026nbsp;+= v;\n}\nint btQry(int* t, int p)\u0026nbsp;{\nint s = 0;\nfor (; p; p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\ns += t[p];\nreturn s;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;n);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nscanf(\u0026quot;%d\u0026quot;, a + i), r[i - 1]\u0026nbsp;= a + i;\nsort(r, r + n, cmpP);\nmaxa = 0;\nfor (int i = 0, l =\u0026nbsp;*r[0]\u0026nbsp;- 1; i \u0026lt; n;\u0026nbsp;++ i)\nif (*r[i]\u0026nbsp;== l)\n*r[i]\u0026nbsp;= maxa;\nelse\nl =\u0026nbsp;*r[i],\u0026nbsp;*r[i]\u0026nbsp;=\u0026nbsp;++ maxa;\nfor (bsz\u0026nbsp;= 1; bsz * bsz \u0026lt; n;\u0026nbsp;++ bsz);\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;m);\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;q[i]. l,\u0026nbsp;\u0026amp;q[i]. r);\nq[i]. i = i;\nq[i]. pl = q[i]. l / bsz;\nq[i]. pr = q[i]. r / bsz;\n}\nsort(q, q + m, cmpQry);\nint l = 1, r = 1;\nmemset(t, 0, sizeof(t));\nbtChg(t, a[1], 1);\nuint tot = 0;\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nwhile (r\u0026nbsp;\u0026lt; q[i]. r)\u0026nbsp;{\n++ r;\ntot += r - l - btQry(t, a[r]);\nbtChg(t, a[r], 1);\n}\nwhile (l\u0026nbsp;\u0026gt; q[i]. l)\u0026nbsp;{\n-- l;\ntot += btQry(t, a[l]\u0026nbsp;- 1);\nbtChg(t, a[l], 1);\n}\nwhile (r\u0026nbsp;\u0026gt; q[i]. r)\u0026nbsp;{\nbtChg(t, a[r],\u0026nbsp;-1);\ntot -= r - l - btQry(t, a[r]);\n-- r;\n}\nwhile (l\u0026nbsp;\u0026lt; q[i]. l)\u0026nbsp;{\nbtChg(t, a[l],\u0026nbsp;-1);\ntot -= btQry(t, a[l]\u0026nbsp;- 1);\n++ l;\n}\nans[q[i]. i]\u0026nbsp;= tot;\n}\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\nprintf(\u0026quot;%u\\n\u0026quot;, ans[i]);\n}\n","permalink":"/oi/lofterimport_067/","summary":"离散，然后树状数组+莫队。\n最初用的是直接粘过来的1488的sbt，然后极限随机数据要跑14s。好郁闷。\n然后改用数状数组就变1s了。是我再次把sbt写丑了还是它常数够厉害TT\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct query {\nint i, l, r, pl, pr;\n};\ntypedef unsigned int uint;\nconst int maxn = 50009;\n#define update(_p_)\u0026nbsp;(sz[_p_]=sz[ls[_p_]]+sz[rs[_p_]]+1)\ninline bool cmpQry(const query\u0026amp; a, const query\u0026amp; b)\u0026nbsp;{\nreturn a. pl \u0026lt; b. pl ||\u0026nbsp;(a. pl == b. pl \u0026amp;\u0026amp; a. pr \u0026gt; b. pr);\n}\ninline bool cmpP(int* a, int* b)\u0026nbsp;{\nreturn *a\u0026nbsp;\u0026lt;\u0026nbsp;*b;\n}\nint n, m, bsz, a[maxn],\u0026nbsp;*r[maxn], maxa, t[maxn];","title":"BZOJ3289 Mato的文件管理"},{"content":"据说是男人八题。\n状态太差调了一节宝贵的晚自习，严重不开心。\n异常裸的点分治。然后里面还是套的sbt。\n卡空间比较丧病，不能开nlogn，要想办法开到n。其实就是找重心分治完再bfs一遍。最初没有写，所以mle爽，在poj上还显示的是re。\n然后各种逗的错误调啊调。把代码调得怪丑。我还是naive啊。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t, v;\nedge *next;\n};\nconst int maxn = 40009;\nint n, k, ans;\nint d[maxn], tvis, vis[maxn], vd[maxn], sz[maxn], qu[maxn];\nedge *ep,\u0026nbsp;*head[maxn], elst[maxn * 2];\n#define update(_p_)\u0026nbsp;(sz[_p_]=sz[ls[_p_]]+sz[rs[_p_]]+1)\nnamespace sbt {\nconst int maxnd = maxn * 2;\nconst int balc = 5;\nint nst[maxnd], tn;\nint ls[maxnd], rs[maxnd], vl[maxnd], sz[maxnd];\ninline void lRot(int\u0026amp; p)\u0026nbsp;{\nint q = rs[p];\nrs[p]\u0026nbsp;= ls[q];\nls[q]\u0026nbsp;= p;\nupdate(p);\nupdate(q);\np = q;\n}\ninline void rRot(int\u0026amp; p)\u0026nbsp;{\nint q = ls[p];\nls[p]\u0026nbsp;= rs[q];\nrs[q]\u0026nbsp;= p;\nupdate(p);\nupdate(q);\np = q;\n}\nvoid init()\u0026nbsp;{\ntn = 0;\nsz[0]\u0026nbsp;= 0;\nfor (int i = 1; i \u0026lt; maxnd;\u0026nbsp;++ i)\nnst[tn ++]\u0026nbsp;= i;\n}\ninline void ins(int\u0026amp; p, int v)\u0026nbsp;{\nif (!p)\u0026nbsp;{\np = nst[-- tn];\nls[p]\u0026nbsp;= 0;\nrs[p]\u0026nbsp;= 0;\nsz[p]\u0026nbsp;= 1;\nvl[p]\u0026nbsp;= v;\n}\nelse {\n++ sz[p];\nif (v\u0026nbsp;\u0026lt; vl[p])\u0026nbsp;{\nins(ls[p], v);\nif (sz[ls[p]]\u0026nbsp;\u0026gt; sz[rs[p]]\u0026nbsp;+ balc)\nrRot(p);\n}\nelse {\nins(rs[p], v);\nif (sz[ls[p]]\u0026nbsp;+ balc \u0026lt; sz[rs[p]])\nlRot(p);\n}\n}\n}\ninline int cntLower(int p, int v)\u0026nbsp;{\nif (!p)\nreturn 0;\nelse if (v\u0026nbsp;\u0026lt; vl[p])\nreturn cntLower(ls[p], v);\nelse\nreturn sz[ls[p]]\u0026nbsp;+ 1 + cntLower(rs[p], v);\n}\nvoid cntEach(int p, int q, int v)\u0026nbsp;{\nif (!p)\nreturn;\nans += cntLower(q, v - vl[p]);\ncntEach(ls[p], q, v);\ncntEach(rs[p], q, v);\n}\nvoid insEach(int p, int\u0026amp; q, int a)\u0026nbsp;{\nif (!p)\nreturn;\nins(q, vl[p]\u0026nbsp;+ a);\ninsEach(ls[p], q, a);\ninsEach(rs[p], q, a);\nnst[tn ++]\u0026nbsp;= p;\n}\nvoid rmv(int p)\u0026nbsp;{\nif (!p)\nreturn;\nnst[tn ++]\u0026nbsp;= p;\nrmv(ls[p]);\nrmv(rs[p]);\n}\n};\ninline void addEdge(int u, int v, int w)\u0026nbsp;{\nep-\u0026gt; t = v;\nep-\u0026gt; v = w;\nep-\u0026gt; next = head[u];\nhead[u]\u0026nbsp;= ep ++;\n}\nvoid getCore(int p0, int\u0026amp; ht)\u0026nbsp;{\nint hd = 0, tl = 1, mv;\n++ tvis;\nqu[hd]\u0026nbsp;= p0;\nvis[p0]\u0026nbsp;= tvis;\nd[p0]\u0026nbsp;= 1;\nwhile (hd\u0026nbsp;\u0026lt; tl)\u0026nbsp;{\nint p = qu[hd ++];\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (!vd[e-\u0026gt; t]\u0026nbsp;\u0026amp;\u0026amp; vis[e-\u0026gt; t]\u0026nbsp;\u0026lt; tvis)\u0026nbsp;{\nd[e-\u0026gt; t]\u0026nbsp;= d[p]\u0026nbsp;+ 1;\nvis[e-\u0026gt; t]\u0026nbsp;= tvis;\nqu[tl ++]\u0026nbsp;= e-\u0026gt; t;\n}\n}\nht = qu[tl - 1];\nmv = tl;\nfor (int i = tl - 1; i \u0026gt;= 0;\u0026nbsp;-- i)\u0026nbsp;{\nint p = qu[i], ms = 0;\nsz[p]\u0026nbsp;= 1;\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (vis[e-\u0026gt; t]\u0026nbsp;== tvis \u0026amp;\u0026amp; d[e-\u0026gt; t]\u0026nbsp;\u0026gt; d[p])\u0026nbsp;{\nsz[p]\u0026nbsp;+= sz[e-\u0026gt; t];\nif (ms\u0026nbsp;\u0026lt; sz[e-\u0026gt; t])\nms = sz[e-\u0026gt; t];\n}\nif (max(ms, tl - sz[p])\u0026nbsp;\u0026lt; mv)\u0026nbsp;{\nmv = max(ms, tl - sz[p]);\nht = p;\n}\n}\n}\nvoid recoverTree(int p0, int dd, int\u0026amp; hr)\u0026nbsp;{\nint hd = 0, tl = 1;\nqu[hd]\u0026nbsp;= p0;\nd[p0]\u0026nbsp;= 0;\nhr = 0;\nwhile (hd\u0026nbsp;\u0026lt; tl)\u0026nbsp;{\nint p = qu[hd ++];\n-- vd[p];\nsbt :: ins(hr, d[p]);\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (vd[e-\u0026gt; t]\u0026nbsp;== dd)\u0026nbsp;{\nqu[tl ++]\u0026nbsp;= e-\u0026gt; t;\nd[e-\u0026gt; t]\u0026nbsp;= d[p]\u0026nbsp;+ e-\u0026gt; v;\n}\n}\n}\nint calcTree(int p0, int d = 1)\u0026nbsp;{\nint ht, hr, rt = 0;\ngetCore(p0, ht);\n\u0026nbsp;\u0026nbsp; rt = 0;\nsbt :: ins(rt, 0);\nvd[ht]\u0026nbsp;= d;\nfor (edge* e = head[ht]; e; e = e-\u0026gt; next)\nif (!vd[e-\u0026gt; t])\u0026nbsp;{\nint r = calcTree(e-\u0026gt; t, d + 1);\nsbt :: cntEach(r, rt, k - e-\u0026gt; v);\nsbt :: insEach(r, rt, e-\u0026gt; v);\n}\nsbt :: rmv(rt);\nrecoverTree(p0, d, hr);\nreturn hr;\n}\nint sov()\u0026nbsp;{\nep = elst;\nmemset(head, 0, sizeof(head));\nmemset(vis, 0, sizeof(vis));\nmemset(vd, 0, sizeof(vd));\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;n);\nfor (int i = 0; i \u0026lt; n - 1;\u0026nbsp;++ i)\u0026nbsp;{\nint u, v, w;\nscanf(\u0026quot;%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;u,\u0026nbsp;\u0026amp;v,\u0026nbsp;\u0026amp;w);\naddEdge(u, v, w);\naddEdge(v, u, w);\n}\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;k);\ntvis = 0;\nans = 0;\nint x = calcTree(1);\nsbt :: rmv(x);\nreturn ans;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nsbt :: init();\nep = elst;\nprintf(\u0026quot;%d\\n\u0026quot;, sov());\n}\n","permalink":"/oi/lofterimport_068/","summary":"据说是男人八题。\n状态太差调了一节宝贵的晚自习，严重不开心。\n异常裸的点分治。然后里面还是套的sbt。\n卡空间比较丧病，不能开nlogn，要想办法开到n。其实就是找重心分治完再bfs一遍。最初没有写，所以mle爽，在poj上还显示的是re。\n然后各种逗的错误调啊调。把代码调得怪丑。我还是naive啊。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t, v;\nedge *next;\n};\nconst int maxn = 40009;\nint n, k, ans;\nint d[maxn], tvis, vis[maxn], vd[maxn], sz[maxn], qu[maxn];\nedge *ep,\u0026nbsp;*head[maxn], elst[maxn * 2];\n#define update(_p_)\u0026nbsp;(sz[_p_]=sz[ls[_p_]]+sz[rs[_p_]]+1)\nnamespace sbt {\nconst int maxnd = maxn * 2;\nconst int balc = 5;\nint nst[maxnd], tn;\nint ls[maxnd], rs[maxnd], vl[maxnd], sz[maxnd];\ninline void lRot(int\u0026amp; p)\u0026nbsp;{","title":"BZOJ1488 || POJ1741 Tree"},{"content":"jason_yu表示是kd-tree的裸题。\n拿个堆维护一下答案，然后剪剪枝啥的，写起来轻松愉快还比lct短。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\ntypedef pair \u0026lt;qw, int\u0026gt; hele;\n#define _l (qw)\nint _d_;\nbool _nag_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint \u0026amp;_s_\u0026nbsp;= _x_;\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\n_nag_ = 0;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()))\u0026nbsp;\\\nif (_d_\u0026nbsp;==\u0026nbsp;'-')\u0026nbsp;\\\n_nag_ = 1;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\nif (_nag_)\u0026nbsp;\\\n_s_ =\u0026nbsp;- _s_;\\\n}\nconst int maxn = 100009;\nconst int maxk = 23;\nconst qw qinf = 0x3f3f3f3f3f3f3f3fLL;\nstruct heap {\nhele a[maxk];\nint n;\ninline heap()\u0026nbsp;{\nn = 0;\n}\ninline void clear()\u0026nbsp;{\nn = 0;\n}\ninline void push(hele x)\u0026nbsp;{\na[n]\u0026nbsp;= x;\npush_heap(a, a +\u0026nbsp;(++ n));\n}\ninline hele top()\u0026nbsp;{\nreturn a[0];\n}\ninline void pop()\u0026nbsp;{\nif (n)\npop_heap(a, a +\u0026nbsp;(n\u0026nbsp;--));\n}\ninline int size()\u0026nbsp;{\nreturn n;\n}\n};\nstruct kdnode {\nint x, y, n;\nint l, r, u, d;\nkdnode *ls,\u0026nbsp;*rs;\n};\nstruct point {\nint x, y, i;\n};\ninline bool cmpx(const point\u0026amp; a, const point\u0026amp; b)\u0026nbsp;{\nreturn a. x \u0026lt; b. x;\n}\ninline bool cmpy(const point\u0026amp; a, const point\u0026amp; b)\u0026nbsp;{\nreturn a. y \u0026lt; b. y;\n}\ninline qw sqr(const qw\u0026amp; a)\u0026nbsp;{\nreturn a * a;\n}\nint n, m, k;\nheap ans;\nkdnode *np, nlst[maxn];\npoint a[maxn];\n#define upmax(_a_,_b_)\u0026nbsp;{\u0026nbsp;\\\nif (_a_\u0026nbsp;\u0026lt; _b_)\u0026nbsp;\\\n_a_ = _b_;\u0026nbsp;\\\n}\n#define upmin(_a_,_b_)\u0026nbsp;{\u0026nbsp;\\\nif (_a_\u0026nbsp;\u0026gt; _b_)\u0026nbsp;\\\n_a_ = _b_;\u0026nbsp;\\\n}\ninline void update(kdnode* p)\u0026nbsp;{\np-\u0026gt; l = p-\u0026gt; x;\np-\u0026gt; r = p-\u0026gt; x;\np-\u0026gt; d = p-\u0026gt; y;\np-\u0026gt; u = p-\u0026gt; y;\nif (p-\u0026gt; ls)\u0026nbsp;{\nupmin(p-\u0026gt; l, p-\u0026gt; ls-\u0026gt; l);\nupmax(p-\u0026gt; r, p-\u0026gt; ls-\u0026gt; r);\nupmin(p-\u0026gt; d, p-\u0026gt; ls-\u0026gt; d);\nupmax(p-\u0026gt; u, p-\u0026gt; ls-\u0026gt; u);\n}\nif (p-\u0026gt; rs)\u0026nbsp;{\nupmin(p-\u0026gt; l, p-\u0026gt; rs-\u0026gt; l);\nupmax(p-\u0026gt; r, p-\u0026gt; rs-\u0026gt; r);\nupmin(p-\u0026gt; d, p-\u0026gt; rs-\u0026gt; d);\nupmax(p-\u0026gt; u, p-\u0026gt; rs-\u0026gt; u);\n}\n}\nkdnode* kdBuild(int l, int r, int d = 1)\u0026nbsp;{\nif (l\u0026nbsp;\u0026gt;= r)\nreturn 0;\nkdnode* p = np ++;\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (d)\nnth_element(a + l, a + mid, a + r, cmpx);\nelse\nnth_element(a + l, a + mid, a + r, cmpy);\np-\u0026gt; ls = kdBuild(l, mid, d ^ 1);\np-\u0026gt; rs = kdBuild(mid + 1, r, d ^ 1);\np-\u0026gt; x = a[mid]. x;\np-\u0026gt; y = a[mid]. y;\np-\u0026gt; n = a[mid]. i;\nupdate(p);\nreturn p;\n}\ninline hele guessDist(kdnode* p, int x, int y)\u0026nbsp;{\nreturn hele(-max(sqr(x - p-\u0026gt; l), sqr(x - p-\u0026gt; r))\u0026nbsp;\n- max(sqr(y - p-\u0026gt; u), sqr(y - p-\u0026gt; d)),\u0026nbsp;-maxn);\n}\nvoid kdQry(kdnode* p, int x, int y)\u0026nbsp;{\nhele d(- sqr(p-\u0026gt; x - x)\u0026nbsp;- sqr(p-\u0026gt; y - y), p-\u0026gt; n), dl, dr;\nif (ans. size()\u0026nbsp;\u0026lt; k || d \u0026lt; ans. top())\u0026nbsp;{\nans. push(d);\nif (ans. size()\u0026nbsp;\u0026gt; k)\nans. pop();\n}\nif (p-\u0026gt; ls)\ndl = guessDist(p-\u0026gt; ls, x, y);\nelse\ndl = hele(qinf,\u0026nbsp;-maxn);\nif (p-\u0026gt; rs)\ndr = guessDist(p-\u0026gt; rs, x, y);\nelse\ndr = hele(qinf,\u0026nbsp;-maxn);\nif (dl\u0026nbsp;\u0026lt; dr)\u0026nbsp;{\nif (p-\u0026gt; ls \u0026amp;\u0026amp;\u0026nbsp;(dl\u0026nbsp;\u0026lt; ans. top()\u0026nbsp;|| ans. size()\u0026nbsp;\u0026lt; k))\nkdQry(p-\u0026gt; ls, x, y);\nif (p-\u0026gt; rs \u0026amp;\u0026amp;\u0026nbsp;(dr\u0026nbsp;\u0026lt; ans. top()\u0026nbsp;|| ans. size()\u0026nbsp;\u0026lt; k))\nkdQry(p-\u0026gt; rs, x, y);\n}\nelse {\nif (p-\u0026gt; rs \u0026amp;\u0026amp;\u0026nbsp;(dr\u0026nbsp;\u0026lt; ans. top()\u0026nbsp;|| ans. size()\u0026nbsp;\u0026lt; k))\nkdQry(p-\u0026gt; rs, x, y);\nif (p-\u0026gt; ls \u0026amp;\u0026amp;\u0026nbsp;(dl\u0026nbsp;\u0026lt; ans. top()\u0026nbsp;|| ans. size()\u0026nbsp;\u0026lt; k))\nkdQry(p-\u0026gt; ls, x, y);\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(a[i]. x);\nreadInt(a[i]. y);\na[i]. i = i + 1;\n}\nreadInt(m);\nnp = nlst;\nkdnode* rt = kdBuild(0, n);\nwhile (m\u0026nbsp;--)\u0026nbsp;{\nint x, y;\nreadInt(x);\nreadInt(y);\nreadInt(k);\nans. clear();\nkdQry(rt, x, y);\nprintf(\u0026quot;%d\\n\u0026quot;, ans. top(). second);\n}\n}\n","permalink":"/oi/lofterimport_069/","summary":"jason_yu表示是kd-tree的裸题。\n拿个堆维护一下答案，然后剪剪枝啥的，写起来轻松愉快还比lct短。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\ntypedef pair \u0026lt;qw, int\u0026gt; hele;\n#define _l (qw)\nint _d_;\nbool _nag_;\n#define readInt(_x_)\u0026nbsp;{\u0026nbsp;\\\nint \u0026amp;_s_\u0026nbsp;= _x_;\u0026nbsp;\\\n_s_ = 0;\u0026nbsp;\\\n_nag_ = 0;\u0026nbsp;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()))\u0026nbsp;\\\nif (_d_\u0026nbsp;==\u0026nbsp;'-')\u0026nbsp;\\\n_nag_ = 1;\u0026nbsp;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\u0026nbsp;\\\nif (_nag_)\u0026nbsp;\\\n_s_ =\u0026nbsp;- _s_;\\\n}\nconst int maxn = 100009;","title":"BZOJ2626 JZPFAR"},{"content":"写完Kdtree感觉整个人都要离散了。\n这题比较神，之前连题都没看懂。每个位置的方案数就是上下左右的数量的组合数的乘积。把x离散之后维护区间中左\u0026times;右的和，上下y相同的扫一遍搞定。（感觉说了像没说）\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct point {\nint x, y;\n};\nconst int maxn = 100009;\nconst int maxk = 13;\ninline bool cmpP(int* a, int* b)\u0026nbsp;{\nreturn *a\u0026nbsp;\u0026lt;\u0026nbsp;*b;\n}\ninline bool cmpy(const point\u0026amp; a, const point\u0026amp; b)\u0026nbsp;{\nreturn (a. y \u0026lt; b. y)\u0026nbsp;||\u0026nbsp;(a. y == b. y \u0026amp;\u0026amp; a. x \u0026lt; b. x);\n}\npoint a[maxn];\nint n, m, c[maxn][maxk], cx[maxn], tx[maxn], t[maxn], maxx, ans;\nint *r[maxn];\nvoid prec()\u0026nbsp;{\nc[0][0]\u0026nbsp;= 1;\nfor (int i = 0; i \u0026lt;= n;\u0026nbsp;++ i)\nc[i][0]\u0026nbsp;= 1;\nfor (int i = 1; i \u0026lt;= m;\u0026nbsp;++ i)\u0026nbsp;{\nfor (int j = 0; j \u0026lt; i;\u0026nbsp;++ j)\nc[j][i]\u0026nbsp;= 0;\nfor (int j = i; j \u0026lt;= n;\u0026nbsp;++ j)\nc[j][i]\u0026nbsp;= c[j - 1][i]\u0026nbsp;+ c[j - 1][i - 1];\n}\n}\nvoid dispx()\u0026nbsp;{\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nr[i]\u0026nbsp;=\u0026nbsp;\u0026amp;a[i]. x;\nsort(r, r + n, cmpP);\nmaxx = 0;\nfor (int i = 0, l =\u0026nbsp;*r[0]\u0026nbsp;- 1; i \u0026lt; n;\u0026nbsp;++ i)\nif (*r[i]\u0026nbsp;== l)\n*r[i]\u0026nbsp;= maxx;\nelse\nl =\u0026nbsp;*r[i],\u0026nbsp;*r[i]\u0026nbsp;=\u0026nbsp;++ maxx;\nmemset(tx, 0, sizeof(tx));\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\n++ tx[a[i]. x];\n}\nvoid btChg(int* t, int p, int v)\u0026nbsp;{\nfor (; p \u0026lt;= maxx; p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\nt[p]\u0026nbsp;+= v;\n}\nint btQry(int* t, int p)\u0026nbsp;{\nint s = 0;\nfor (; p; p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\ns += t[p];\nreturn s;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nmemset(t, 0, sizeof(t));\nmemset(cx, 0, sizeof(cx));\nscanf(\u0026quot;%*d%*d%d\\n\u0026quot;,\u0026nbsp;\u0026amp;n);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;a[i]. x,\u0026nbsp;\u0026amp;a[i]. y);\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;m);\nprec();\ndispx();\nsort(a, a + n, cmpy);\nans = 0;\nfor (int i = 0, j; i \u0026lt; n; i = j)\u0026nbsp;{\nfor (j\u0026nbsp;= i; j \u0026lt; n \u0026amp;\u0026amp; a[j]. y == a[i]. y;\u0026nbsp;++ j);\nfor (int k = i + m - 1; k + m \u0026lt; j;\u0026nbsp;++ k)\nif (a[k]. x \u0026lt; a[k + 1]. x)\nans +=\u0026nbsp;(btQry(t, a[k + 1]. x - 1)\u0026nbsp;- btQry(t, a[k]. x))\u0026nbsp;\n* c[k - i + 1][m]\u0026nbsp;* c[j - k - 1][m];\nfor (int k = i; k \u0026lt; j;\u0026nbsp;++ k)\u0026nbsp;{\nint x = a[k]. x;\nbtChg(t, x,\u0026nbsp;-c[cx[x]][m]\u0026nbsp;* c[tx[x]\u0026nbsp;- cx[x]][m]);\n++ cx[x];\nbtChg(t, x, c[cx[x]][m]\u0026nbsp;* c[tx[x]\u0026nbsp;- cx[x]][m]);\n}\n}\nprintf(\u0026quot;%d\\n\u0026quot;, ans \u0026amp; 0x7fffffff);\n}\n","permalink":"/oi/lofterimport_070/","summary":"写完Kdtree感觉整个人都要离散了。\n这题比较神，之前连题都没看懂。每个位置的方案数就是上下左右的数量的组合数的乘积。把x离散之后维护区间中左\u0026times;右的和，上下y相同的扫一遍搞定。（感觉说了像没说）\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct point {\nint x, y;\n};\nconst int maxn = 100009;\nconst int maxk = 13;\ninline bool cmpP(int* a, int* b)\u0026nbsp;{\nreturn *a\u0026nbsp;\u0026lt;\u0026nbsp;*b;\n}\ninline bool cmpy(const point\u0026amp; a, const point\u0026amp; b)\u0026nbsp;{\nreturn (a. y \u0026lt; b. y)\u0026nbsp;||\u0026nbsp;(a. y == b. y \u0026amp;\u0026amp; a. x \u0026lt; b. x);\n}\npoint a[maxn];\nint n, m, c[maxn][maxk], cx[maxn], tx[maxn], t[maxn], maxx, ans;","title":"BZOJ1227 [SDOI2009]虔诚的墓主人"},{"content":"Log^2的cdq分治怎么也跑不过。优化常数优化到底了也不行。所以kd大法好。\n怎么都觉得kd树就一暴力+剪枝=log。\n思想就是先按x二分，然后再按y二分，然后再按x二分。然后这玩意比较像平衡树，中间那个点是要代表一个真实的结点的而不是一个值。然后insert的时候感觉复杂度完全没有保证啊。如果要保证可能要替罪羊一类的东西吧。虽然这题好像不用保证。\n询问的时候就更迷了，就是估计一个离哪边近，然后先搜。然后另一边如果估计值还小于答案就再搜一遍。好诡异，时间复杂度是怎么来的。\n然后代码略丑，加了zhx式读入优化后长度xxxxx。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define READ_OPTIMIZE\n#ifdef READ_OPTIMIZE\n/*int _d_;\n#define readInt(_s_)\u0026nbsp;{\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}*/\nconst int BUF_SIZE = 30;\nchar buf[BUF_SIZE],\u0026nbsp;*buf_s = buf,\u0026nbsp;*buf_t = buf + 1;\n\u0026nbsp;\u0026nbsp;\n#define PTR_NEXT()\u0026nbsp;\\\n{\u0026nbsp;\\\nbuf_s ++;\u0026nbsp;\\\nif (buf_s\u0026nbsp;== buf_t)\u0026nbsp;\\\n{\u0026nbsp;\\\nbuf_s = buf;\u0026nbsp;\\\nbuf_t = buf + fread(buf, 1, BUF_SIZE, stdin);\u0026nbsp;\\\n}\u0026nbsp;\\\n}\n#define readInt(_n_)\u0026nbsp;\\\n{\u0026nbsp;\\\nwhile (*buf_s\u0026nbsp;!=\u0026nbsp;'-'\u0026nbsp;\u0026amp;\u0026amp;\u0026nbsp;!isdigit(*buf_s))\u0026nbsp;\\\nPTR_NEXT();\u0026nbsp;\\\nbool register _nega_ = false;\u0026nbsp;\\\nif (*buf_s\u0026nbsp;==\u0026nbsp;'-')\u0026nbsp;\\\n{\u0026nbsp;\\\n_nega_ = true;\u0026nbsp;\\\nPTR_NEXT();\u0026nbsp;\\\n}\u0026nbsp;\\\nint register _x_ = 0;\u0026nbsp;\\\nwhile (isdigit(*buf_s))\u0026nbsp;\\\n{\u0026nbsp;\\\n_x_ = _x_ * 10 +\u0026nbsp;*buf_s\u0026nbsp;-\u0026nbsp;'0';\u0026nbsp;\\\nPTR_NEXT();\u0026nbsp;\\\n}\u0026nbsp;\\\nif (_nega_)\u0026nbsp;\\\n_x_ =\u0026nbsp;-_x_;\u0026nbsp;\\\n(_n_)\u0026nbsp;=\u0026nbsp;(_x_);\u0026nbsp;\\\n}\n#else\n#define readInt(_s_)\u0026nbsp;(scanf(\u0026quot;%d\u0026quot;,\u0026amp;_s_));\n#endif\n#define min(_a_,_b_)\u0026nbsp;(((_a_)\u0026lt;(_b_))?(_a_):(_b_))\n#define max(_a_,_b_)\u0026nbsp;(((_a_)\u0026gt;(_b_))?(_a_):(_b_))\nstruct point {\nint x, y, t;\n};\nstruct kdnode {\nint x, y;\nint l, r, u, d;\nkdnode *ls,\u0026nbsp;*rs;\nkdnode()\u0026nbsp;{\nls = 0, rs = 0;\n}\n};\nconst int maxn = 1000009;\nconst int maxnd = maxn;\nconst int inf = 0x3f3f3f3f;\ninline bool cmpx(const point\u0026amp; a, const point\u0026amp; b)\u0026nbsp;{\nreturn a. x \u0026lt; b. x;\n}\ninline bool cmpy(const point\u0026amp; a, const point\u0026amp; b)\u0026nbsp;{\nreturn a. y \u0026lt; b. y;\n}\nint m, n;\npoint a[maxn], b[maxn];\nkdnode *sp, nlst[maxnd];\ninline void update(kdnode*\u0026amp; p)\u0026nbsp;{\np-\u0026gt; l = p-\u0026gt; x;\np-\u0026gt; r = p-\u0026gt; x;\np-\u0026gt; d = p-\u0026gt; y;\np-\u0026gt; u = p-\u0026gt; y;\nif (p-\u0026gt; ls)\u0026nbsp;{\nif (p-\u0026gt; ls-\u0026gt; l \u0026lt; p-\u0026gt; l)\np-\u0026gt; l = p-\u0026gt; ls-\u0026gt; l;\nif (p-\u0026gt; ls-\u0026gt; r \u0026gt; p-\u0026gt; r)\np-\u0026gt; r = p-\u0026gt; ls-\u0026gt; r;\nif (p-\u0026gt; ls-\u0026gt; d \u0026lt; p-\u0026gt; d)\np-\u0026gt; d = p-\u0026gt; ls-\u0026gt; d;\nif (p-\u0026gt; ls-\u0026gt; u \u0026gt; p-\u0026gt; u)\np-\u0026gt; u = p-\u0026gt; ls-\u0026gt; u;\n}\nif (p-\u0026gt; rs)\u0026nbsp;{\nif (p-\u0026gt; rs-\u0026gt; l \u0026lt; p-\u0026gt; l)\np-\u0026gt; l = p-\u0026gt; rs-\u0026gt; l;\nif (p-\u0026gt; rs-\u0026gt; r \u0026gt; p-\u0026gt; r)\np-\u0026gt; r = p-\u0026gt; rs-\u0026gt; r;\nif (p-\u0026gt; rs-\u0026gt; d \u0026lt; p-\u0026gt; d)\np-\u0026gt; d = p-\u0026gt; rs-\u0026gt; d;\nif (p-\u0026gt; rs-\u0026gt; u \u0026gt; p-\u0026gt; u)\np-\u0026gt; u = p-\u0026gt; rs-\u0026gt; u;\n}\n}\nkdnode *kdBuild(int l, int r, int dr = 1)\u0026nbsp;{\nif (l\u0026nbsp;\u0026gt;= r)\nreturn 0;\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nkdnode *p\u0026nbsp;= sp ++;\nif (dr)\nnth_element(a + l, a + mid, a + r, cmpx);\nelse\nnth_element(a + l, a + mid, a + r, cmpy);\np-\u0026gt; x = a[mid]. x;\np-\u0026gt; y = a[mid]. y;\np-\u0026gt; ls = kdBuild(l, mid, dr ^ 1);\np-\u0026gt; rs = kdBuild(mid + 1, r, dr ^ 1);\nupdate(p);\nreturn p;\n}\ninline int guessDist(kdnode* p, int x, int y)\u0026nbsp;{\nint ans = 0;\nif (x\u0026nbsp;\u0026gt; p-\u0026gt; r)\nans += x - p-\u0026gt; r;\nelse if (x\u0026nbsp;\u0026lt; p-\u0026gt; l)\nans += p-\u0026gt; l - x;\nif (y\u0026nbsp;\u0026gt; p-\u0026gt; u)\nans += y - p-\u0026gt; u;\nelse if (y\u0026nbsp;\u0026lt; p-\u0026gt; d)\nans += p-\u0026gt; d - y;\nreturn ans;\n}\nvoid kdQry(kdnode* p, int x, int y, int\u0026amp; ans)\u0026nbsp;{\nint dl, dr, d = abs(x - p-\u0026gt; x)\u0026nbsp;+ abs(y - p-\u0026gt; y);\nif (d\u0026nbsp;\u0026lt; ans)\nans = d;\nif (p-\u0026gt; ls)\ndl = guessDist(p-\u0026gt; ls, x, y);\nelse\ndl = inf;\nif (p-\u0026gt; rs)\ndr = guessDist(p-\u0026gt; rs, x, y);\nelse\ndr = inf;\nif (dl\u0026nbsp;\u0026lt; dr)\u0026nbsp;{\nif (dl\u0026nbsp;\u0026lt; ans)\nkdQry(p-\u0026gt; ls, x, y, ans);\nif (dr\u0026nbsp;\u0026lt; ans)\nkdQry(p-\u0026gt; rs, x, y, ans);\n}\nelse {\nif (dr\u0026nbsp;\u0026lt; ans)\nkdQry(p-\u0026gt; rs, x, y, ans);\nif (dl\u0026nbsp;\u0026lt; ans)\nkdQry(p-\u0026gt; ls, x, y, ans);\n}\n}\nkdnode* kdIns(kdnode* p, int x, int y, int dr = 1)\u0026nbsp;{\nif (!p)\u0026nbsp;{\np = sp ++;\np-\u0026gt; x = x;\np-\u0026gt; y = y;\np-\u0026gt; ls = 0;\np-\u0026gt; rs = 0;\n}\nelse {\nif (dr)\u0026nbsp;{\nif (x\u0026nbsp;\u0026lt; p-\u0026gt; x)\np-\u0026gt; ls = kdIns(p-\u0026gt; ls, x, y, dr ^ 1);\nelse\np-\u0026gt; rs = kdIns(p-\u0026gt; rs, x, y, dr ^ 1);\n}\nelse {\nif (y\u0026nbsp;\u0026lt; p-\u0026gt; y)\np-\u0026gt; ls = kdIns(p-\u0026gt; ls, x, y, dr ^ 1);\nelse\np-\u0026gt; rs = kdIns(p-\u0026gt; rs, x, y, dr ^ 1);\n}\n}\nupdate(p);\nreturn p;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(m);\nreadInt(n);\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(a[i]. x);\nreadInt(a[i]. y);\na[i]. t = 0;\n}\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(b[i]. t);\nreadInt(b[i]. x);\nreadInt(b[i]. y);\n}\nsp = nlst;\nkdnode *rt\u0026nbsp;= kdBuild(0, m);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nif (b[i]. t == 2)\u0026nbsp;{\nint ans = inf;\nkdQry(rt, b[i]. x, b[i]. y, ans);\nprintf(\u0026quot;%d\\n\u0026quot;, ans);\n}\nelse\nrt = kdIns(rt, b[i]. x, b[i]. y);\n}\n","permalink":"/oi/lofterimport_071/","summary":"Log^2的cdq分治怎么也跑不过。优化常数优化到底了也不行。所以kd大法好。\n怎么都觉得kd树就一暴力+剪枝=log。\n思想就是先按x二分，然后再按y二分，然后再按x二分。然后这玩意比较像平衡树，中间那个点是要代表一个真实的结点的而不是一个值。然后insert的时候感觉复杂度完全没有保证啊。如果要保证可能要替罪羊一类的东西吧。虽然这题好像不用保证。\n询问的时候就更迷了，就是估计一个离哪边近，然后先搜。然后另一边如果估计值还小于答案就再搜一遍。好诡异，时间复杂度是怎么来的。\n然后代码略丑，加了zhx式读入优化后长度xxxxx。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define READ_OPTIMIZE\n#ifdef READ_OPTIMIZE\n/*int _d_;\n#define readInt(_s_)\u0026nbsp;{\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}*/\nconst int BUF_SIZE = 30;\nchar buf[BUF_SIZE],\u0026nbsp;*buf_s = buf,\u0026nbsp;*buf_t = buf + 1;\n\u0026nbsp;\u0026nbsp;\n#define PTR_NEXT()\u0026nbsp;\\\n{\u0026nbsp;\\\nbuf_s ++;\u0026nbsp;\\\nif (buf_s\u0026nbsp;== buf_t)\u0026nbsp;\\\n{\u0026nbsp;\\\nbuf_s = buf;\u0026nbsp;\\\nbuf_t = buf + fread(buf, 1, BUF_SIZE, stdin);\u0026nbsp;\\","title":"BZOJ2648 SJY摆棋子"},{"content":"看时间比较宽么，写一个log^2的cdq+树状数组么。\n然后被2648卡了。学kd-tree吧。\nnaive。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\n#define readInt(_s_)\u0026nbsp;{\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nstruct point {\nint x, y, t, i;\n};\nconst int maxn = 500009;\nconst int maxz = 1000009;\nconst int inf = 0x3f3f3f3f;\ninline bool cmpPoint(const point\u0026amp; a, const point\u0026amp; b)\u0026nbsp;{\nreturn a. x \u0026lt; b. x;\n}\nint maxa;\nstruct pbt {\nint t[maxz], r[maxz], ttm;\nvoid init()\u0026nbsp;{\nmemset(r, 0, sizeof(r));\nttm = 0;\n}\ninline void next()\u0026nbsp;{\n++ ttm;\n}\nvoid chg(int p, int v)\u0026nbsp;{\nfor (; p \u0026lt; maxa; p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\nif (r[p]\u0026nbsp;== ttm)\nt[p]\u0026nbsp;= max(t[p], v);\nelse\nr[p]\u0026nbsp;= ttm, t[p]\u0026nbsp;= v;\n}\nint qry(int p)\u0026nbsp;{\nint s =\u0026nbsp;-inf;\nfor (; p; p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\nif (r[p]\u0026nbsp;== ttm)\ns = max(t[p], s);\nreturn s;\n}\n};\nint m, n, ans[maxn];\npoint a[maxn], b[maxn], tmp[maxn];\npbt tu, td;\nvoid calcEff(point* a, int l, int p, int q)\u0026nbsp;{\ntu. next();\ntd. next();\nfor (int i = 0, j = p; j \u0026lt; q;\u0026nbsp;++ j)\u0026nbsp;{\nfor (; i \u0026lt; l \u0026amp;\u0026amp; a[i]. x \u0026lt;= b[j]. x;\u0026nbsp;++ i)\u0026nbsp;{\ntu. chg(maxa - a[i]. y, a[i]. x - a[i]. y);\ntd. chg(a[i]. y, a[i]. x + a[i]. y);\n}\nint vu = b[j]. x - b[j]. y - tu. qry(maxa - b[j]. y);\nint vd = b[j]. x + b[j]. y - td. qry(b[j]. y);\nint vn = min(vu, vd);\nans[b[j]. i]\u0026nbsp;= min(ans[b[j]. i], vn);\n}\ntu. next();\ntd. next();\nfor (int i = l - 1, j = q - 1; j \u0026gt;= p;\u0026nbsp;-- j)\u0026nbsp;{\nfor (; i \u0026gt;= 0 \u0026amp;\u0026amp; a[i]. x \u0026gt;= b[j]. x;\u0026nbsp;-- i)\u0026nbsp;{\ntu. chg(maxa - a[i]. y,\u0026nbsp;-a[i]. x - a[i]. y);\ntd. chg(a[i]. y,\u0026nbsp;-a[i]. x + a[i]. y);\n}\nint vu =\u0026nbsp;- b[j]. x - b[j]. y - tu. qry(maxa - b[j]. y);\nint vd =\u0026nbsp;- b[j]. x + b[j]. y - td. qry(b[j]. y);\nint vn = min(vu, vd);\nans[b[j]. i]\u0026nbsp;= min(ans[b[j]. i], vn);\n}\n}\nint cdq(int l, int r)\u0026nbsp;{\nif (l\u0026nbsp;+ 1 == r)\u0026nbsp;{\nif (b[l]. t == 2)\nreturn r;\nelse\nreturn l;\n}\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nint xl = cdq(l, mid);\nint xr = cdq(mid, r);\ncalcEff(b + xl, mid - xl, mid, xr);\nint tx = l, ty;\nfor (int i = l, j = mid; i \u0026lt; xl || j \u0026lt; xr;)\nif (j\u0026nbsp;== xr ||\u0026nbsp;(i\u0026nbsp;\u0026lt; xl \u0026amp;\u0026amp; b[i]. x \u0026lt; b[j]. x))\ntmp[tx ++]\u0026nbsp;= b[i ++];\nelse\ntmp[tx ++]\u0026nbsp;= b[j ++];\nty = tx;\nfor (int i = xl, j = xr; i \u0026lt; mid || j \u0026lt; r;)\nif (j\u0026nbsp;== r ||\u0026nbsp;(i\u0026nbsp;\u0026lt; mid \u0026amp;\u0026amp; b[i]. x \u0026lt; b[j]. x))\ntmp[ty ++]\u0026nbsp;= b[i ++];\nelse\ntmp[ty ++]\u0026nbsp;= b[j ++];\nfor (int i = l; i \u0026lt; r;\u0026nbsp;++ i)\nb[i]\u0026nbsp;= tmp[i];\nreturn tx;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\ntu. init();\ntd. init();\nreadInt(m);\nreadInt(n);\nmaxa = 0;\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(a[i]. x);\nreadInt(a[i]. y);\nmaxa = max(maxa, max(a[i]. x, a[i]. y));\n}\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(b[i]. t);\nreadInt(b[i]. x);\nreadInt(b[i]. y);\nmaxa = max(maxa, max(b[i]. x, b[i]. y));\nb[i]. i = i;\nif (b[i]. t == 2)\nans[i]\u0026nbsp;= inf;\nelse\nans[i]\u0026nbsp;=\u0026nbsp;-1;\n}\n++ maxa;\nint x = cdq(0, n);\nsort(a, a + m, cmpPoint);\ncalcEff(a, m, 0, x);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nif (ans[i]\u0026nbsp;\u0026gt;\u0026nbsp;-1)\nprintf(\u0026quot;%d\\n\u0026quot;, ans[i]);\n}\n","permalink":"/oi/lofterimport_073/","summary":"看时间比较宽么，写一个log^2的cdq+树状数组么。\n然后被2648卡了。学kd-tree吧。\nnaive。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\n#define readInt(_s_)\u0026nbsp;{\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nstruct point {\nint x, y, t, i;\n};\nconst int maxn = 500009;\nconst int maxz = 1000009;\nconst int inf = 0x3f3f3f3f;\ninline bool cmpPoint(const point\u0026amp; a, const point\u0026amp; b)\u0026nbsp;{\nreturn a.","title":"BZOJ2716 [Violet 3]天使玩偶"},{"content":"看到取模瞬间想到了昨天的bc。\n应该这是取模然后求啥玩意的时候的比较通用的解法吧。p\u0026lt;=sqrt(maxv)的预处理，剩下的直接暴力。结果预处理又写丑了一回。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nconst int maxn = 100009;\nconst int maxv = 10000;\nconst int bsz = 100;\nconst int maxb = 103;\nint n, m;\nint a[maxn], vb[maxb][maxb], ve[maxb][maxb];\nint xb[maxn], xe[maxn];\nint i_buf[maxn * maxb * 2], tib;\nvoid pre()\u0026nbsp;{\nmemset(ve, 0, sizeof(ve));\nmemset(xe, 0, sizeof(xe));\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\n++ xe[a[i]];\nfor (int i = 0; i \u0026lt;= maxv;\u0026nbsp;++ i)\u0026nbsp;{\nxb[i]\u0026nbsp;= tib;\ntib += xe[i];\nxe[i]\u0026nbsp;= xb[i];\n}\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\ni_buf[xe[a[i]]\u0026nbsp;++]\u0026nbsp;= i;\nfor (int m = 1; m \u0026lt;= bsz;\u0026nbsp;++ m)\u0026nbsp;{\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\n++ ve[m][a[i]\u0026nbsp;% m];\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nvb[m][i]\u0026nbsp;= tib;\ntib += ve[m][i];\nve[m][i]\u0026nbsp;= vb[m][i];\n}\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\ni_buf[ve[m][a[i]\u0026nbsp;% m]\u0026nbsp;++]\u0026nbsp;= i;\n}\n}\nint queryb(int l0, int r0, int p, int k)\u0026nbsp;{\nif (vb[p][k]\u0026nbsp;== ve[p][k])\nreturn 0;\nint *x1\u0026nbsp;= lower_bound(i_buf + vb[p][k], i_buf + ve[p][k], l0);\nint *x2\u0026nbsp;= upper_bound(i_buf + vb[p][k], i_buf + ve[p][k], r0);\nreturn x2 - x1;\n}\nint querys(int v, int l0, int r0)\u0026nbsp;{\nif (xb[v]\u0026nbsp;== xe[v])\nreturn 0;\nint *x1\u0026nbsp;= lower_bound(i_buf + xb[v], i_buf + xe[v], l0);\nint *x2\u0026nbsp;= upper_bound(i_buf + xb[v], i_buf + xe[v], r0);\nreturn x2 - x1;\n}\nint querya(int l0, int r0, int p, int k)\u0026nbsp;{\nint ans = 0;\nfor (int i = k; i \u0026lt;= maxv; i += p)\nans += querys(i, l0, r0);\nreturn ans;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m);\ntib = 0;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nscanf(\u0026quot;%d\u0026quot;, a + i);\npre();\nwhile (m\u0026nbsp;--)\u0026nbsp;{\nint l, r, p, k;\nscanf(\u0026quot;%d%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;l,\u0026nbsp;\u0026amp;r,\u0026nbsp;\u0026amp;p,\u0026nbsp;\u0026amp;k);\nif (p\u0026nbsp;\u0026lt;= bsz)\nprintf(\u0026quot;%d\\n\u0026quot;, queryb(l, r, p, k));\nelse\nprintf(\u0026quot;%d\\n\u0026quot;, querya(l, r, p, k));\n}\n}\n","permalink":"/oi/lofterimport_074/","summary":"看到取模瞬间想到了昨天的bc。\n应该这是取模然后求啥玩意的时候的比较通用的解法吧。p\u0026lt;=sqrt(maxv)的预处理，剩下的直接暴力。结果预处理又写丑了一回。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nconst int maxn = 100009;\nconst int maxv = 10000;\nconst int bsz = 100;\nconst int maxb = 103;\nint n, m;\nint a[maxn], vb[maxb][maxb], ve[maxb][maxb];\nint xb[maxn], xe[maxn];\nint i_buf[maxn * maxb * 2], tib;\nvoid pre()\u0026nbsp;{\nmemset(ve, 0, sizeof(ve));\nmemset(xe, 0, sizeof(xe));\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\n++ xe[a[i]];\nfor (int i = 0; i \u0026lt;= maxv;\u0026nbsp;++ i)\u0026nbsp;{","title":"BZOJ2506 calc"},{"content":"数位DP好麻烦啊不想写啊怎么办啊。\n利用trie树思想直接做好了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nconst int maxn = 15;\nqw p10[maxn];\nqw x, y, ans[10], c[10];\nint n;\nchar a[maxn];\nvoid calc(qw val, int sgn)\u0026nbsp;{\nif (!val)\nreturn;\nsprintf(a + 1, lld, val);\nint n = strlen(a + 1);\nmemset(c, 0, sizeof(c));\nqw cz, cm, cr;\ncz = 1;\ncm = a[1]\u0026nbsp;- 48 - 1;\ncr = 1;\nfor (int i = 1; i \u0026lt; a[1]\u0026nbsp;- 48;\u0026nbsp;++ i)\nc[i]\u0026nbsp;+= p10[n - 1];\nc[a[1]\u0026nbsp;- 48]\u0026nbsp;+= val + 1 - p10[n - 1]\u0026nbsp;*\u0026nbsp;(cm + cz);\nfor (int i = 2; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nfor (int j = 0; j \u0026lt; 10;\u0026nbsp;++ j)\nc[j]\u0026nbsp;+= cm * p10[n - i];\nfor (int j = 1; j \u0026lt; 10;\u0026nbsp;++ j)\nc[j]\u0026nbsp;+= cz * p10[n - i];\nfor (int j = 0; j \u0026lt; a[i]\u0026nbsp;- 48;\u0026nbsp;++ j)\nc[j]\u0026nbsp;+= cr * p10[n - i];\ncm = cm * 10 + cz * 9 + cr *\u0026nbsp;(a[i]\u0026nbsp;- 48);\ncr = 1;\nc[a[i]\u0026nbsp;- 48]\u0026nbsp;+= val + 1 - p10[n - i]\u0026nbsp;*\u0026nbsp;(cm + cz);\n}\nfor (int i = 0; i \u0026lt; 10;\u0026nbsp;++ i)\nans[i]\u0026nbsp;+= c[i]\u0026nbsp;* sgn;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nmemset(ans, 0, sizeof(ans));\np10[0]\u0026nbsp;= 1;\nfor (int i = 1; i \u0026lt; maxn;\u0026nbsp;++ i)\np10[i]\u0026nbsp;= p10[i - 1]\u0026nbsp;* 10;\nscanf(lld lld,\u0026nbsp;\u0026amp;x,\u0026nbsp;\u0026amp;y);\ncalc(y, 1);\ncalc(x - 1,\u0026nbsp;-1);\nfor (int i = 0; i \u0026lt; 10;\u0026nbsp;++ i)\nprintf(lld \u0026quot;%c\u0026quot;, ans[i],\u0026nbsp;(i == 9)\u0026nbsp;? 10 : 32);\n}\n","permalink":"/oi/lofterimport_075/","summary":"数位DP好麻烦啊不想写啊怎么办啊。\n利用trie树思想直接做好了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nconst int maxn = 15;\nqw p10[maxn];\nqw x, y, ans[10], c[10];\nint n;\nchar a[maxn];\nvoid calc(qw val, int sgn)\u0026nbsp;{\nif (!val)\nreturn;\nsprintf(a + 1, lld, val);\nint n = strlen(a + 1);\nmemset(c, 0, sizeof(c));\nqw cz, cm, cr;\ncz = 1;","title":"BZOJ1833 [ZJOI2010]count 数字计数"},{"content":"乍一看不会。\n想了想，求出每一个数的前一个相同的数的位置和后一个相同的数的位置，然后询问就是L\u0026lt;=i\u0026lt;=R \u0026amp;\u0026amp; next[i]\u0026gt;=R \u0026amp;\u0026amp; last[i]\u0026nbsp;\u0026lt;= L的最大的a[i]。这三层树套树啊！？\n好像不带修改，那可以把一个Log的树优化成1的前缀和。\n然后最值不满足减法，所以就把L\u0026lt;=i\u0026lt;=R拿动态建的线段树套里面好了。\n卡空间400+MB过了，我对拍的大数据把网上的某人的程序干掉了哈哈。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct seg {\nint v, ls, rs;\n};\nconst int maxn = 100009;\nconst int maxnd = maxn * 409;\nint n, m, a[maxn], v[maxn], ls[maxn], nx[maxn], o[maxn];\nint t[maxn], sp;\nseg sl[maxnd];\ninline bool cmpO(const int\u0026amp; a, const int\u0026amp; b)\u0026nbsp;{\nreturn ls[a]\u0026nbsp;\u0026lt; ls[b];\n}\nint getLa(int l0)\u0026nbsp;{\nint l = 1, r = n;\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r + 1)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (ls[o[mid]]\u0026nbsp;\u0026lt; l0)\nl = mid;\nelse\nr = mid - 1;\n}\nreturn l;\n}\n#define vof(p)\u0026nbsp;((p)?(sl[p].v):0)\n#define lson(p)\u0026nbsp;((p)?(sl[p].ls):0)\n#define rson(p)\u0026nbsp;((p)?(sl[p].rs):0)\nint sgtIns(int q, int p0, int v0)\u0026nbsp;{\nint s =\u0026nbsp;++ sp, p = s;\nint l = 1, r = n;\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nsl[p]. v = max(vof(q), v0);\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (p0\u0026nbsp;\u0026lt;= mid)\u0026nbsp;{\nsl[p]. rs = rson(q);\nq = lson(q);\nsl[p]. ls =\u0026nbsp;++ sp;\np = lson(p);\nr = mid;\n}\nelse {\nsl[p]. ls = lson(q);\nq = rson(q);\nsl[p]. rs =\u0026nbsp;++ sp;\np = rson(p);\nl = mid + 1;\n}\n}\nsl[p]. v = max(v0, vof(q));\nsl[p]. ls = 0;\nsl[p]. rs = 0;\nreturn s;\n}\nint psgtIns(int q, int p0, int v0, int v1)\u0026nbsp;{\nint s =\u0026nbsp;++ sp, p = s;\nint l = 1, r = n + 1;\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nsl[p]. v = sgtIns(vof(q), v0, v1);\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (p0\u0026nbsp;\u0026lt;= mid)\u0026nbsp;{\nsl[p]. rs = rson(q);\nq = lson(q);\nsl[p]. ls =\u0026nbsp;++ sp;\np = lson(p);\nr = mid;\n}\nelse {\nsl[p]. ls = lson(q);\nq = rson(q);\nsl[p]. rs =\u0026nbsp;++ sp;\np = rson(p);\nl = mid + 1;\n}\n}\nsl[p]. v = sgtIns(vof(q), v0, v1);\nsl[p]. ls = 0;\nsl[p]. rs = 0;\nreturn s;\n}\nint sgtQry(int p, int l, int r, int pl, int pr)\u0026nbsp;{\nif (!p)\nreturn 0;\nelse if (l\u0026nbsp;== pl \u0026amp;\u0026amp; r == pr)\nreturn vof(p);\nelse {\nint mid =\u0026nbsp;(pl\u0026nbsp;+ pr)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (r\u0026nbsp;\u0026lt;= mid)\nreturn sgtQry(lson(p), l, r, pl, mid);\nelse if (l\u0026nbsp;\u0026gt;= mid + 1)\nreturn sgtQry(rson(p), l, r, mid + 1, pr);\nelse\nreturn max(sgtQry(lson(p), l, mid, pl, mid), sgtQry(rson(p), mid + 1, r, mid + 1, pr));\n}\n}\nint psgtQry(int p, int l0, int r0)\u0026nbsp;{\nint ans = 0;\nint l = 1, r = n + 1;\nwhile (l\u0026nbsp;\u0026lt; r \u0026amp;\u0026amp; p)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (mid\u0026nbsp;\u0026gt;= r0)\u0026nbsp;{\nans = max(ans, sgtQry(vof(rson(p)), l0, r0, 1, n));\nr = mid;\np = lson(p);\n}\nelse {\nl = mid + 1;\np = rson(p);\n}\n}\nreturn ans;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m);\nmemset(v, 0, sizeof(v));\nmemset(t, 0, sizeof(t));\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nscanf(\u0026quot;%d\u0026quot;, a + i);\nls[i]\u0026nbsp;= v[a[i]];\nv[a[i]]\u0026nbsp;= i;\n}\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nv[i]\u0026nbsp;= n + 1;\nfor (int i = n; i;\u0026nbsp;-- i)\u0026nbsp;{\nnx[i]\u0026nbsp;= v[a[i]];\nv[a[i]]\u0026nbsp;= i;\no[i]\u0026nbsp;= i;\n}\nsp = 0;\nsort(o + 1, o + 1 + n, cmpO);\nt[0]\u0026nbsp;= 0;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nt[i]\u0026nbsp;= psgtIns(t[i - 1], nx[o[i]], o[i], a[o[i]]);\nint lans = 0;\nwhile (m\u0026nbsp;--)\u0026nbsp;{\nint l, r;\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;l,\u0026nbsp;\u0026amp;r);\nl =\u0026nbsp;(l\u0026nbsp;+ lans)\u0026nbsp;% n + 1;\nr =\u0026nbsp;(r\u0026nbsp;+ lans)\u0026nbsp;% n + 1;\nif (l\u0026nbsp;\u0026gt; r)\nswap(l, r);\nint x = getLa(l);\nprintf(\u0026quot;%d\\n\u0026quot;,\u0026nbsp;(lans = psgtQry(t[x], l, r)));\n}\n}\n","permalink":"/oi/lofterimport_076/","summary":"乍一看不会。\n想了想，求出每一个数的前一个相同的数的位置和后一个相同的数的位置，然后询问就是L\u0026lt;=i\u0026lt;=R \u0026amp;\u0026amp; next[i]\u0026gt;=R \u0026amp;\u0026amp; last[i]\u0026nbsp;\u0026lt;= L的最大的a[i]。这三层树套树啊！？\n好像不带修改，那可以把一个Log的树优化成1的前缀和。\n然后最值不满足减法，所以就把L\u0026lt;=i\u0026lt;=R拿动态建的线段树套里面好了。\n卡空间400+MB过了，我对拍的大数据把网上的某人的程序干掉了哈哈。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct seg {\nint v, ls, rs;\n};\nconst int maxn = 100009;\nconst int maxnd = maxn * 409;\nint n, m, a[maxn], v[maxn], ls[maxn], nx[maxn], o[maxn];\nint t[maxn], sp;\nseg sl[maxnd];\ninline bool cmpO(const int\u0026amp; a, const int\u0026amp; b)\u0026nbsp;{\nreturn ls[a]\u0026nbsp;\u0026lt; ls[b];\n}\nint getLa(int l0)\u0026nbsp;{\nint l = 1, r = n;","title":"BZOJ3489 A simple rmq problem"},{"content":"LCT的简单题。好久不写都手生了，还把rotate写错了一点点，导致找了半天错。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\n#define readInt(_s_)\u0026nbsp;{\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxn = 300009;\nint n, m;\nint ls[maxn], rs[maxn], pt[maxn], rv[maxn], vl[maxn], vs[maxn];\ninline void update(const int\u0026amp; p)\u0026nbsp;{\nvs[p]\u0026nbsp;= vs[ls[p]]\u0026nbsp;^ vl[p]\u0026nbsp;^ vs[rs[p]];\n}\ninline void fix(int p)\u0026nbsp;{\nif (rv[p])\u0026nbsp;{\nswap(ls[p], rs[p]);\nif (ls[p])\nrv[ls[p]]\u0026nbsp;^= 1;\nif (rs[p])\nrv[rs[p]]\u0026nbsp;^= 1;\nrv[p]\u0026nbsp;= 0;\n}\n}\ninline void lRot(int q)\u0026nbsp;{\nint p = pt[q], a = pt[p];\nif (a)\u0026nbsp;{\nif (p\u0026nbsp;== ls[a])\nls[a]\u0026nbsp;= q;\nelse if (p\u0026nbsp;== rs[a])\nrs[a]\u0026nbsp;= q;\n}\nif (rs[q])\npt[rs[q]]\u0026nbsp;= p;\nls[p]\u0026nbsp;= rs[q];\nrs[q]\u0026nbsp;= p;\npt[q]\u0026nbsp;= a;\npt[p]\u0026nbsp;= q;\nupdate(p);\nupdate(q);\n}\ninline void rRot(int q)\u0026nbsp;{\nint p = pt[q], a = pt[p];\nif (a)\u0026nbsp;{\nif (p\u0026nbsp;== ls[a])\nls[a]\u0026nbsp;= q;\nelse if (p\u0026nbsp;== rs[a])\nrs[a]\u0026nbsp;= q;\n}\nif (ls[q])\npt[ls[q]]\u0026nbsp;= p;\nrs[p]\u0026nbsp;= ls[q];\nls[q]\u0026nbsp;= p;\npt[q]\u0026nbsp;= a;\npt[p]\u0026nbsp;= q;\nupdate(p);\nupdate(q);\n}\ninline bool isRoot(int p)\u0026nbsp;{\nreturn !pt[p]\u0026nbsp;||\u0026nbsp;(p\u0026nbsp;!= ls[pt[p]]\u0026nbsp;\u0026amp;\u0026amp; p != rs[pt[p]]);\n}\nvoid splay(int q)\u0026nbsp;{\nstatic int stc[maxn];\nint tst = 1, r = q;\nstc[tst]\u0026nbsp;= q;\nwhile (!isRoot(q))\u0026nbsp;{\nstc[++ tst]\u0026nbsp;= pt[q];\nq = pt[q];\n}\nwhile (tst)\nfix(stc[tst --]);\nq = r;\nwhile (!isRoot(q))\u0026nbsp;{\nint p = pt[q], a = pt[p];\nif (isRoot(p))\u0026nbsp;{\nif (q\u0026nbsp;== ls[p])\nlRot(q);\nelse\nrRot(q);\n}\nelse {\nif (p\u0026nbsp;== ls[a])\u0026nbsp;{\nif (q\u0026nbsp;== ls[p])\nlRot(p), lRot(q);\nelse\nrRot(q), lRot(q);\n}\nelse {\nif (q\u0026nbsp;== ls[p])\nlRot(q), rRot(q);\nelse\nrRot(p), rRot(q);\n}\n}\n}\n}\nint expose(int q)\u0026nbsp;{\nint p = 0;\nfor (; q; q = pt[q])\u0026nbsp;{\nsplay(q);\nfix(q);\nrs[q]\u0026nbsp;= p;\nupdate(q);\np = q;\n}\nfix(p);\nwhile (ls[p])\u0026nbsp;{\np = ls[p];\nfix(p);\n}\nreturn p;\n}\nvoid makeRoot(int p)\u0026nbsp;{\nexpose(p);\nsplay(p);\nrv[p]\u0026nbsp;^= 1;\n}\nvoid link(int u, int v)\u0026nbsp;{\nif (expose(u)\u0026nbsp;== expose(v))\nreturn;\nmakeRoot(u);\npt[u]\u0026nbsp;= v;\n}\nvoid cut(int u, int v)\u0026nbsp;{\nmakeRoot(u);\nexpose(v);\nsplay(v);\nfix(v);\nif (ls[v]\u0026nbsp;!= u)\nreturn;\npt[u]\u0026nbsp;= 0;\nls[v]\u0026nbsp;= 0;\nupdate(v);\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\nreadInt(m);\nvl[0]\u0026nbsp;= 0;\nvs[0]\u0026nbsp;= 0;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(vl[i]);\nvs[i]\u0026nbsp;= vl[i];\nls[i]\u0026nbsp;= 0;\nrs[i]\u0026nbsp;= 0;\npt[i]\u0026nbsp;= 0;\nrv[i]\u0026nbsp;= 0;\n}\nwhile (m\u0026nbsp;--)\u0026nbsp;{\nint opt, x, y;\nreadInt(opt);\nreadInt(x);\nreadInt(y);\nif (opt\u0026nbsp;== 0)\u0026nbsp;{\nmakeRoot(x);\nexpose(y);\nsplay(y);\nprintf(\u0026quot;%d\\n\u0026quot;, vs[y]);\n}\nelse if (opt\u0026nbsp;== 1)\u0026nbsp;{\nlink(x, y);\n}\nelse if (opt\u0026nbsp;== 2)\u0026nbsp;{\ncut(x, y);\n}\nelse if (opt\u0026nbsp;== 3)\u0026nbsp;{\nsplay(x);\nvl[x]\u0026nbsp;= y;\nupdate(x);\n}\n}\n}\n","permalink":"/oi/lofterimport_077/","summary":"LCT的简单题。好久不写都手生了，还把rotate写错了一点点，导致找了半天错。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nint _d_;\n#define readInt(_s_)\u0026nbsp;{\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxn = 300009;\nint n, m;\nint ls[maxn], rs[maxn], pt[maxn], rv[maxn], vl[maxn], vs[maxn];\ninline void update(const int\u0026amp; p)\u0026nbsp;{\nvs[p]\u0026nbsp;= vs[ls[p]]\u0026nbsp;^ vl[p]\u0026nbsp;^ vs[rs[p]];\n}\ninline void fix(int p)\u0026nbsp;{\nif (rv[p])\u0026nbsp;{\nswap(ls[p], rs[p]);\nif (ls[p])","title":"BZOJ3282 Tree"},{"content":"cdq分治第二题。\n最初没看清题所以一直不会做。晕。\ncdq教程里的模板题。\n显然所有卖都是卖完，买都是把钱买光。\nf[i]表示第i天结束后最多持有b卷的数量，ans表示当前最多能赚到的rmb。\n方程是：\nf[i]\u0026nbsp;= max(ans, f[j]\u0026nbsp;* r[j]\u0026nbsp;* a[i]\u0026nbsp;+ f[j]\u0026nbsp;* b[i])\u0026nbsp;/\u0026nbsp;(a[i]\u0026nbsp;* r[i]\u0026nbsp;+ b[i])。\n移项得：\nf[j]\u0026nbsp;=\u0026nbsp;-(a[i]/b[i])\u0026nbsp;*\u0026nbsp;(r[j]\u0026nbsp;* f[j])\u0026nbsp;+\u0026nbsp;(r[i]\u0026nbsp;* a[i]\u0026nbsp;+ b[i])\u0026nbsp;/ b[i]\u0026nbsp;* f[j]。\n把r[j]*f[j]看作x，把f[j]看作y，好像可以斜率优化了。\n\u0026nbsp;不急，f[j]好像没有单调性吧？不对，好像a[i]/b[i]也没有单调性！？\n平衡树维护凸壳？想起了上回那道hnoi的作业，调了一晚上，怎么能这样。\n然后，其实可以cdq。\n每次对右边有影响的是左边的凸壳，所以先跑左边，计算左边对右边的影响，再跑右边。这回是中序遍历，而不是Mokia那题的后序。\n原来cdq可以这么神奇。\n然后又把凸壳写丑了TT。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nconst int maxn = 100009;\ndouble ans, s, f[maxn], a[maxn], b[maxn], r[maxn];\nint n, h[maxn], tmp[maxn], t;\ninline double getx(const int\u0026amp; i)\u0026nbsp;{\nreturn f[i]\u0026nbsp;* r[i];\n}\ninline double gety(const int\u0026amp; i)\u0026nbsp;{\nreturn f[i];\n}\ninline double getk(const int\u0026amp; i, const int\u0026amp; j)\u0026nbsp;{\nreturn (gety(j)\u0026nbsp;- gety(i))\u0026nbsp;/\u0026nbsp;(getx(j)\u0026nbsp;- getx(i));\n}\ninline bool cmpP(const int\u0026amp; a, const int\u0026amp; b)\u0026nbsp;{\nreturn f[a]\u0026nbsp;* r[a]\u0026nbsp;\u0026lt; f[b]\u0026nbsp;* r[b]\u0026nbsp;||\u0026nbsp;(f[a]\u0026nbsp;* r[a]\u0026nbsp;== f[b]\u0026nbsp;* r[b]\u0026nbsp;\u0026amp;\u0026amp; f[a]\u0026nbsp;\u0026lt; f[b]);\n}\nint getmax(int l, int r, double k)\u0026nbsp;{\n-- r;\nif (l\u0026nbsp;== r)\nreturn h[l];\n-- r;\nif (k\u0026nbsp;\u0026lt; getk(h[r], h[r + 1]))\nreturn h[r + 1];\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (k\u0026nbsp;\u0026lt; getk(h[mid], h[mid + 1]))\nl = mid + 1;\nelse\nr = mid;\n}\nreturn h[l];\n}\ninline double mulx(const int\u0026amp; a, const int\u0026amp; b, const int\u0026amp; c, const int\u0026amp; d)\u0026nbsp;{\ndouble x1 = getx(b)\u0026nbsp;- getx(a), y1 = gety(b)\u0026nbsp;- gety(a);\ndouble x2 = getx(d)\u0026nbsp;- getx(c), y2 = gety(d)\u0026nbsp;- gety(c);\nreturn x1 * y2 - x2 * y1;\n}\nvoid cdq(int l, int r, int\u0026amp; tb, double\u0026amp; ans)\u0026nbsp;{\nif (l\u0026nbsp;+ 1 == r)\u0026nbsp;{\ndouble fn = 1.0 /\u0026nbsp;(:: r[l]\u0026nbsp;* a[l]\u0026nbsp;+ b[l]);\nif (fn\u0026nbsp;\u0026gt; f[l])\nf[l]\u0026nbsp;= fn;\nh[(tb = r)\u0026nbsp;- 1]\u0026nbsp;= l;\nans = f[l]\u0026nbsp;*\u0026nbsp;(:: r[l]\u0026nbsp;* a[l]\u0026nbsp;+ b[l]);\n}\nelse {\nint bl, br, mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\ndouble sl, sr;\ncdq(l, mid, bl, sl);\nans = sl;\nfor (int i = mid; i \u0026lt; r;\u0026nbsp;++ i)\u0026nbsp;{\nint j = getmax(l, bl,\u0026nbsp;-a[i]\u0026nbsp;/ b[i]);\ndouble fn = max(sl, f[j]\u0026nbsp;*\u0026nbsp;(:: r[j]\u0026nbsp;* a[i]\u0026nbsp;+ b[i]))\u0026nbsp;/\u0026nbsp;(:: r[i]\u0026nbsp;* a[i]\u0026nbsp;+ b[i]);\nif (fn\u0026nbsp;\u0026gt; f[i])\u0026nbsp;{\nf[i]\u0026nbsp;= fn;\n}\nans = max(ans, f[i]\u0026nbsp;*\u0026nbsp;(:: r[i]\u0026nbsp;* a[i]\u0026nbsp;+ b[i]));\n}\ncdq(mid, r, br, sr);\nans = max(ans, sr);\ntb = l;\nfor (int i = l, j = mid; i \u0026lt; bl || j \u0026lt; br;)\u0026nbsp;{\nint k;\nif (j\u0026nbsp;== br ||\u0026nbsp;(i\u0026nbsp;\u0026lt; bl \u0026amp;\u0026amp; getx(h[i])\u0026nbsp;\u0026lt; getx(h[j])))\nk = h[i ++];\nelse\nk = h[j ++];\nwhile (tb\u0026nbsp;\u0026gt; l + 1 \u0026amp;\u0026amp; mulx(tmp[tb - 2], tmp[tb - 1], tmp[tb - 2], k)\u0026nbsp;\u0026gt;= 0)\n-- tb;\ntmp[tb ++]\u0026nbsp;= k;\n}\nfor (int i = l; i \u0026lt; tb;\u0026nbsp;++ i)\nh[i]\u0026nbsp;= tmp[i];\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nmemset(f, 0, sizeof(f));\nscanf(\u0026quot;%d%lf\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;s);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nscanf(\u0026quot;%lf%lf%lf\u0026quot;, a + i, b + i, r + i);\ncdq(0, n, t, ans);\nprintf(\u0026quot;%.3lf\\n\u0026quot;, ans * s);\n}\n","permalink":"/oi/lofterimport_078/","summary":"cdq分治第二题。\n最初没看清题所以一直不会做。晕。\ncdq教程里的模板题。\n显然所有卖都是卖完，买都是把钱买光。\nf[i]表示第i天结束后最多持有b卷的数量，ans表示当前最多能赚到的rmb。\n方程是：\nf[i]\u0026nbsp;= max(ans, f[j]\u0026nbsp;* r[j]\u0026nbsp;* a[i]\u0026nbsp;+ f[j]\u0026nbsp;* b[i])\u0026nbsp;/\u0026nbsp;(a[i]\u0026nbsp;* r[i]\u0026nbsp;+ b[i])。\n移项得：\nf[j]\u0026nbsp;=\u0026nbsp;-(a[i]/b[i])\u0026nbsp;*\u0026nbsp;(r[j]\u0026nbsp;* f[j])\u0026nbsp;+\u0026nbsp;(r[i]\u0026nbsp;* a[i]\u0026nbsp;+ b[i])\u0026nbsp;/ b[i]\u0026nbsp;* f[j]。\n把r[j]*f[j]看作x，把f[j]看作y，好像可以斜率优化了。\n\u0026nbsp;不急，f[j]好像没有单调性吧？不对，好像a[i]/b[i]也没有单调性！？\n平衡树维护凸壳？想起了上回那道hnoi的作业，调了一晚上，怎么能这样。\n然后，其实可以cdq。\n每次对右边有影响的是左边的凸壳，所以先跑左边，计算左边对右边的影响，再跑右边。这回是中序遍历，而不是Mokia那题的后序。\n原来cdq可以这么神奇。\n然后又把凸壳写丑了TT。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nconst int maxn = 100009;\ndouble ans, s, f[maxn], a[maxn], b[maxn], r[maxn];\nint n, h[maxn], tmp[maxn], t;\ninline double getx(const int\u0026amp; i)\u0026nbsp;{\nreturn f[i]\u0026nbsp;* r[i];\n}\ninline double gety(const int\u0026amp; i)\u0026nbsp;{\nreturn f[i];","title":"BZOJ1492 [NOI2007]货币兑换Cash"},{"content":"好像要用二维AC自动机的样子！？不对，还要优化不然还会MLE！？\nnaive。\n哈希水过之。\n中途某处忘强转导致调了良久。\n2462丧心病狂卡stl常数，差点写平衡树了，然后想了想二分水之。\n#include \u0026lt;cstdio\u0026gt;\n#include\u0026nbsp;\u0026lt;cstring\u0026gt;\n#include\u0026nbsp;\u0026lt;set\u0026gt;\n#include\u0026nbsp;\u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\ntypedef unsigned long long uqw;\n#define _l (qw)\nconst int rmod = 345379;\nconst int b1 = 3;\nconst int b2 = 3153131;\nconst int maxn = 1009;\nint pb1[maxn];\nint n, m, x, y, q, hr[maxn][maxn], t;\nuqw hl[maxn][maxn], pb2[maxn];\nchar g[maxn];\nuqw th[maxn * maxn];\nvoid pre()\u0026nbsp;{\npb1[0]\u0026nbsp;= 1;\npb2[0]\u0026nbsp;= 1;\nfor (int i = 1; i \u0026lt; maxn;\u0026nbsp;++ i)\u0026nbsp;{\npb1[i]\u0026nbsp;= _l pb1[i - 1]\u0026nbsp;* b1 % rmod;\npb2[i]\u0026nbsp;= pb2[i - 1]\u0026nbsp;* b2;\n}\n}\nbool findv(uqw x)\u0026nbsp;{\nint l = 0, r = t - 1;\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (th[mid]\u0026nbsp;== x)\nreturn 1;\nelse if (x\u0026nbsp;\u0026lt; th[mid])\nr = mid;\nelse\nl = mid + 1;\n}\nreturn th[l]\u0026nbsp;== x;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\npre();\nscanf(\u0026quot;%d%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m,\u0026nbsp;\u0026amp;x,\u0026nbsp;\u0026amp;y);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nscanf(\u0026quot;%s\u0026quot;, g + 1);\nhr[i][0]\u0026nbsp;= 0;\nfor (int j = 1; j \u0026lt;= m;\u0026nbsp;++ j)\nhr[i][j]\u0026nbsp;=\u0026nbsp;(_l hr[i][j - 1]\u0026nbsp;* b1 + g[j]\u0026nbsp;- 48)\u0026nbsp;% rmod;\nfor (int j = m; j \u0026gt;= y;\u0026nbsp;-- j)\nhr[i][j]\u0026nbsp;=\u0026nbsp;(_l hr[i][j]\u0026nbsp;- _l hr[i][j - y]\u0026nbsp;* pb1[y]\u0026nbsp;% rmod + rmod)\u0026nbsp;% rmod;\n}\nt = 0;\nfor (int j = y; j \u0026lt;= m;\u0026nbsp;++ j)\u0026nbsp;{\nhl[0][j]\u0026nbsp;= 0;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nhl[i][j]\u0026nbsp;= hl[i - 1][j]\u0026nbsp;* b2 + hr[i][j];\nfor (int i = n; i \u0026gt;= x;\u0026nbsp;-- i)\u0026nbsp;{\nhl[i][j]\u0026nbsp;= hl[i][j]\u0026nbsp;- hl[i - x][j]\u0026nbsp;* pb2[x];\nth[t ++]\u0026nbsp;= hl[i][j];\n}\n}\nsort(th, th + t);\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;q);\nwhile (q\u0026nbsp;--)\u0026nbsp;{\nuqw hv = 0;\nfor (int i = 1; i \u0026lt;= x;\u0026nbsp;++ i)\u0026nbsp;{\nint hh = 0;\nscanf(\u0026quot;%s\u0026quot;, g + 1);\nfor (int j = 1; j \u0026lt;= y;\u0026nbsp;++ j)\nhh =\u0026nbsp;(_l hh * b1 + g[j]\u0026nbsp;- 48)\u0026nbsp;% rmod;\nhv =\u0026nbsp; hv * b2 + hh;\n}\nif (findv(hv))\nputs(\u0026quot;1\u0026quot;);\nelse\nputs(\u0026quot;0\u0026quot;);\n}\n}\n","permalink":"/oi/lofterimport_079/","summary":"好像要用二维AC自动机的样子！？不对，还要优化不然还会MLE！？\nnaive。\n哈希水过之。\n中途某处忘强转导致调了良久。\n2462丧心病狂卡stl常数，差点写平衡树了，然后想了想二分水之。\n#include \u0026lt;cstdio\u0026gt;\n#include\u0026nbsp;\u0026lt;cstring\u0026gt;\n#include\u0026nbsp;\u0026lt;set\u0026gt;\n#include\u0026nbsp;\u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\ntypedef unsigned long long uqw;\n#define _l (qw)\nconst int rmod = 345379;\nconst int b1 = 3;\nconst int b2 = 3153131;\nconst int maxn = 1009;\nint pb1[maxn];\nint n, m, x, y, q, hr[maxn][maxn], t;\nuqw hl[maxn][maxn], pb2[maxn];\nchar g[maxn];\nuqw th[maxn * maxn];\nvoid pre()\u0026nbsp;{\npb1[0]\u0026nbsp;= 1;\npb2[0]\u0026nbsp;= 1;","title":"BZOJ2351/2462 [BeiJing2011]Matrix"},{"content":"cdq分治第一题。\n最近的主题是数据结构，这玩意应该也算一种和莫队一样厉害的黑暗大法吧。有些需要你把在线写得足够厉害的题可以用这玩意来水。\n写起来很像归并排序，按时间分治，然后再按某个坐标之类的玩意归并一下，归并的时候像求逆序对一样做，计算一边对另一边的贡献，顺便用点啥数据结构维护一下之类的。\n这题有点像上帝造题七分钟。不过w的范围显然不是让你写二维树状数组。感觉那题可以用cdq水过，不过cdq好像不能用简单的二维树状数组，至少要动态一下啥的，然后空间就bye了。\n这题就是按x排序查询y。课件上的原题。\n另外依然不会迗代，还是写的递归。（找到了fft的感觉）\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nstruct query {\nint t, x, y, v;\ninline query(int t0 = 0, int x0 = 0, int y0 = 0, int v0 = 0)\u0026nbsp;{\nt = t0, x = x0, y = y0, v = v0;\n}\n};\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxm = 2000009;\nconst int maxn = 200009;\nqw ans[maxn], t[maxm];\nint tmm[maxm], ttm;\nint v0, m, n, q;\nquery a[maxn], b[maxn];\nvoid btChg(int p, int v)\u0026nbsp;{\nfor (++ p; p \u0026lt;= m; p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\nif (tmm[p]\u0026nbsp;\u0026lt; ttm)\ntmm[p]\u0026nbsp;= ttm, t[p]\u0026nbsp;= v;\nelse\nt[p]\u0026nbsp;+= v;\n}\nqw btQry(int p)\u0026nbsp;{\nqw s = 0;\nfor (++ p; p; p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\nif (tmm[p]\u0026nbsp;\u0026lt; ttm)\ntmm[p]\u0026nbsp;= ttm, t[p]\u0026nbsp;= 0;\nelse\ns += t[p];\nreturn s;\n}\nvoid cdq(int l, int r)\u0026nbsp;{\nif (l\u0026nbsp;+ 1 == r)\nreturn;\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\ncdq(l, mid);\ncdq(mid, r);\n++ ttm;\nfor (int i = l, j = mid, k = l; i \u0026lt; mid || j \u0026lt; r;)\nif (i\u0026nbsp;\u0026lt; mid \u0026amp;\u0026amp;\u0026nbsp;(a[i]. x \u0026lt;= a[j]. x || j == r))\u0026nbsp;{\nif (!a[i]. t)\nbtChg(a[i]. y, a[i]. v);\nb[k ++]\u0026nbsp;= a[i ++];\n}\nelse {\nif (a[j]. t)\u0026nbsp;{\nqw v = btQry(a[j]. y);\nif (a[j]. t == 1)\nans[a[j]. v]\u0026nbsp;+= v;\nelse\nans[a[j]. v]\u0026nbsp;-= v;\n}\nb[k ++]\u0026nbsp;= a[j ++];\n}\nfor (int i = l; i \u0026lt; r;\u0026nbsp;++ i)\na[i]\u0026nbsp;= b[i];\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nmemset(ans, 0, sizeof(ans));\nmemset(tmm, 0, sizeof(tmm));\nttm = 0;\nreadInt(v0);\nreadInt(m);\n++ m;\nn = 0;\nq = 0;\nwhile (1)\u0026nbsp;{\nint opt, x, y, u, v;\nreadInt(opt);\nif (opt\u0026nbsp;== 3)\nbreak;\nelse if (opt\u0026nbsp;== 2)\u0026nbsp;{\nreadInt(x);\nreadInt(y);\nreadInt(u);\nreadInt(v);\n-- x;\n-- y;\na[n ++]\u0026nbsp;= query(1, u, v, q);\na[n ++]\u0026nbsp;= query(1, x, y, q);\na[n ++]\u0026nbsp;= query(2, u, y, q);\na[n ++]\u0026nbsp;= query(2, x, v, q);\nans[q]\u0026nbsp;=\u0026nbsp;(qw)v0 *\u0026nbsp;(u\u0026nbsp;- x)\u0026nbsp;*\u0026nbsp;(v - y);\n++ q;\n}\nelse {\nreadInt(x);\nreadInt(y);\nreadInt(v);\na[n ++]\u0026nbsp;= query(0, x, y, v);\n}\n}\ncdq(0, n);\nfor (int i = 0; i \u0026lt; q;\u0026nbsp;++ i)\nprintf(\u0026quot;%d\\n\u0026quot;,\u0026nbsp;(int)ans[i]);\n}\n","permalink":"/oi/lofterimport_081/","summary":"cdq分治第一题。\n最近的主题是数据结构，这玩意应该也算一种和莫队一样厉害的黑暗大法吧。有些需要你把在线写得足够厉害的题可以用这玩意来水。\n写起来很像归并排序，按时间分治，然后再按某个坐标之类的玩意归并一下，归并的时候像求逆序对一样做，计算一边对另一边的贡献，顺便用点啥数据结构维护一下之类的。\n这题有点像上帝造题七分钟。不过w的范围显然不是让你写二维树状数组。感觉那题可以用cdq水过，不过cdq好像不能用简单的二维树状数组，至少要动态一下啥的，然后空间就bye了。\n这题就是按x排序查询y。课件上的原题。\n另外依然不会迗代，还是写的递归。（找到了fft的感觉）\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nstruct query {\nint t, x, y, v;\ninline query(int t0 = 0, int x0 = 0, int y0 = 0, int v0 = 0)\u0026nbsp;{\nt = t0, x = x0, y = y0, v = v0;\n}\n};","title":"BZOJ1176 [Balkan2007]Mokia"},{"content":"出题人应该才是真正的机房语文竞赛冠军。\n好厉害的数据结构。cdq的不会。\n树状数组套平衡树跑得飞快。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct flower {\nint a, b, c;\n};\nconst int maxn = 100009;\nconst int maxv = 200009;\nconst int maxl = 17;\n#define update(p)\u0026nbsp;(sz[p]=sz[ls[p]]+sz[rs[p]]+1)\nnamespace sbt {\nconst int maxnd = maxn * maxl;\nconst int balc = 10;\nint tn, ls[maxnd], rs[maxnd], sz[maxnd], vl[maxnd];\nvoid init()\u0026nbsp;{\ntn = 0;\nsz[0]\u0026nbsp;= 0;\n}\ninline void lRot(int\u0026amp; p)\u0026nbsp;{\nint q = rs[p];\nrs[p]\u0026nbsp;= ls[q];\nls[q]\u0026nbsp;= p;\nupdate(p);\nupdate(q);\np = q;\n}\ninline void rRot(int\u0026amp; p)\u0026nbsp;{\nint q = ls[p];\nls[p]\u0026nbsp;= rs[q];\nrs[q]\u0026nbsp;= p;\nupdate(p);\nupdate(q);\np = q;\n}\ninline void ins(int\u0026amp; p, int v)\u0026nbsp;{\nif (!p)\u0026nbsp;{\np =\u0026nbsp;++ tn;\nls[p]\u0026nbsp;= 0;\nrs[p]\u0026nbsp;= 0;\nsz[p]\u0026nbsp;= 1;\nvl[p]\u0026nbsp;= v;\n}\nelse {\n++ sz[p];\nif (v\u0026nbsp;\u0026lt; vl[p])\u0026nbsp;{\nins(ls[p], v);\nif (sz[ls[p]]\u0026nbsp;\u0026gt; sz[rs[p]]\u0026nbsp;+ balc)\nrRot(p);\n}\nelse {\nins(rs[p], v);\nif (sz[ls[p]]\u0026nbsp;+ balc \u0026lt; sz[rs[p]])\nlRot(p);\n}\n}\n}\nint cntLower(int p, int v)\u0026nbsp;{\nif (!p)\nreturn 0;\nelse if (v\u0026nbsp;\u0026gt;= vl[p])\nreturn sz[ls[p]]\u0026nbsp;+ 1 + cntLower(rs[p], v);\nelse\nreturn cntLower(ls[p], v);\n}\n};\ninline bool cmpFlower(const flower\u0026amp; a, const flower\u0026amp; b)\u0026nbsp;{\nreturn (a. a \u0026lt; b. a)\u0026nbsp;||\u0026nbsp;(a. a == b. a \u0026amp;\u0026amp; a. b \u0026lt; b. b)\u0026nbsp;||\u0026nbsp;(a. a == b. a \u0026amp;\u0026amp; a. b == b. b \u0026amp;\u0026amp; a. c \u0026lt; b. c);\n}\ninline bool equFlower(const flower\u0026amp; a, const flower\u0026amp; b)\u0026nbsp;{\nreturn a. a == b. a \u0026amp;\u0026amp; a. b == b. b \u0026amp;\u0026amp; a. c == b. c;\n}\nint n, m, t[maxv], ans[maxn];\nflower a[maxn];\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nsbt :: init();\nmemset(ans, 0, sizeof(ans));\nmemset(t, 0, sizeof(t));\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nscanf(\u0026quot;%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;a[i]. a,\u0026nbsp;\u0026amp;a[i]. b,\u0026nbsp;\u0026amp;a[i]. c);\nsort(a, a + n, cmpFlower);\nfor (int i = 0, j; i \u0026lt; n; i = j + 1)\u0026nbsp;{\nint s = 0;\nfor (int p = a[i]. b; p; p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\ns += sbt :: cntLower(t[p], a[i]. c);\nfor (j\u0026nbsp;= i; equFlower(a[i], a[j + 1])\u0026nbsp;\u0026amp;\u0026amp; j \u0026lt; n;\u0026nbsp;++ j);\nfor (int k = i; k \u0026lt;= j;\u0026nbsp;++ k)\u0026nbsp;{\n++ ans[s + j - i];\nfor (int p = a[k]. b; p \u0026lt;= m; p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\nsbt :: ins(t[p], a[k]. c);\n}\n}\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nprintf(\u0026quot;%d\\n\u0026quot;, ans[i]);\n}\n","permalink":"/oi/lofterimport_082/","summary":"出题人应该才是真正的机房语文竞赛冠军。\n好厉害的数据结构。cdq的不会。\n树状数组套平衡树跑得飞快。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct flower {\nint a, b, c;\n};\nconst int maxn = 100009;\nconst int maxv = 200009;\nconst int maxl = 17;\n#define update(p)\u0026nbsp;(sz[p]=sz[ls[p]]+sz[rs[p]]+1)\nnamespace sbt {\nconst int maxnd = maxn * maxl;\nconst int balc = 10;\nint tn, ls[maxnd], rs[maxnd], sz[maxnd], vl[maxnd];\nvoid init()\u0026nbsp;{\ntn = 0;\nsz[0]\u0026nbsp;= 0;\n}\ninline void lRot(int\u0026amp; p)\u0026nbsp;{","title":"BZOJ3262 陌上花开"},{"content":"BZOJ里的第二道noip题，今年防ak题，OTZ。\n最初直接用大素数取模的方法要TLE，虽然本机不会。\n用几个小质数pni，算出在模pni的同余系里0~pni-1的答案。如果x为原方程的解的话x%pni在模pni意义下也应该为0。\n然后还是会TLE，最后发现小质数乘的时候不用取模了。bzoj上这题纯粹是丧心病狂卡常数啊。\nORZMHY\n#define PROC \u0026quot;equation\u0026quot;\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef unsigned long long uqw;\ntypedef long long qw;\nconst int maxn = 109;\nconst int maxl = 10009;\nconst int maxm = 1000009;\nconst int cp = 5;\n//const int pn[cp]\u0026nbsp;=\u0026nbsp;{111119, 23333, 11113, 23251, 33329};\nconst int pn[]\u0026nbsp;=\u0026nbsp;{22861, 22871, 22877, 22901, 22907, 22921};\nconst int p10[]\u0026nbsp;=\u0026nbsp;{1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000};\nstruct bigInt {\nint v[3009], l, nag;\nbigInt()\u0026nbsp;{\nl = 0;\n}\nvoid init(char* a)\u0026nbsp;{\nchar *i\u0026nbsp;= a,\u0026nbsp;*j;\nif (a[0]\u0026nbsp;==\u0026nbsp;'-')\n++ i, nag = 1;\nelse\nnag = 0;\nj =\u0026nbsp; i;\nwhile (*j)\n++ j;\n-- j;\nl = 0;\nwhile (j\u0026nbsp;\u0026gt;= i)\u0026nbsp;{\nv[l]\u0026nbsp;= 0;\nfor (int k = 0; k \u0026lt; 8 \u0026amp;\u0026amp; j \u0026gt;= i;\u0026nbsp;-- j,\u0026nbsp;++ k)\nv[l]\u0026nbsp;= v[l]\u0026nbsp;+\u0026nbsp;(*j - 48)\u0026nbsp;* p10[k];\n++ l;\n}\n}\nint mod(int x)\u0026nbsp;{\nint t = 0;\nfor (int i = l - 1; i \u0026gt;= 0;\u0026nbsp;-- i)\nt =\u0026nbsp;((qw)t\u0026nbsp;* 100000000 + v[i])\u0026nbsp;% x;\nreturn nag ?\u0026nbsp;((x\u0026nbsp;- t)\u0026nbsp;% x)\u0026nbsp;: t;\n}\n};\nint n, m, ans[maxm], tans;\nint ha[maxn];\nint pm[cp][maxm];\nchar a[maxl];\nbigInt a0[maxn];\nint calc(int x, int m)\u0026nbsp;{\nint s = ha[n];\nfor (int i = n - 1; i \u0026gt;= 0;\u0026nbsp;-- i)\ns =\u0026nbsp;(s\u0026nbsp;* x + ha[i])\u0026nbsp;% m;\nreturn s;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(PROC \u0026quot;.in\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\nfreopen(PROC \u0026quot;.out\u0026quot;,\u0026nbsp;\u0026quot;w\u0026quot;, stdout);\n#endif\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m);\nfor (int i = 0; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nscanf(\u0026quot;%s\u0026quot;, a);\na0[i]. init(a);\n}\nfor (int i = 0; i \u0026lt; cp;\u0026nbsp;++ i)\u0026nbsp;{\nfor (int j = 0; j \u0026lt;= n;\u0026nbsp;++ j)\nha[j]\u0026nbsp;= a0[j]. mod(pn[i]);\nfor (int j = 0; j \u0026lt; pn[i];\u0026nbsp;++ j)\npm[i][j]\u0026nbsp;= calc(j, pn[i]);\n}\nfor (int i = 1; i \u0026lt;= m;\u0026nbsp;++ i)\u0026nbsp;{\nbool le = 1;\nfor (int j = 0; j \u0026lt; cp \u0026amp;\u0026amp; le;\u0026nbsp;++ j)\nif (pm[j][i\u0026nbsp;% pn[j]])\nle = 0;\nif (le)\nans[tans ++]\u0026nbsp;= i;\n}\nprintf(\u0026quot;%d\\n\u0026quot;, tans);\nfor (int i = 0; i \u0026lt; tans;\u0026nbsp;++ i)\nprintf(\u0026quot;%d\\n\u0026quot;, ans[i]);\n}\n","permalink":"/oi/lofterimport_083/","summary":"BZOJ里的第二道noip题，今年防ak题，OTZ。\n最初直接用大素数取模的方法要TLE，虽然本机不会。\n用几个小质数pni，算出在模pni的同余系里0~pni-1的答案。如果x为原方程的解的话x%pni在模pni意义下也应该为0。\n然后还是会TLE，最后发现小质数乘的时候不用取模了。bzoj上这题纯粹是丧心病狂卡常数啊。\nORZMHY\n#define PROC \u0026quot;equation\u0026quot;\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef unsigned long long uqw;\ntypedef long long qw;\nconst int maxn = 109;\nconst int maxl = 10009;\nconst int maxm = 1000009;\nconst int cp = 5;\n//const int pn[cp]\u0026nbsp;=\u0026nbsp;{111119, 23333, 11113, 23251, 33329};\nconst int pn[]\u0026nbsp;=\u0026nbsp;{22861, 22871, 22877, 22901, 22907, 22921};\nconst int p10[]\u0026nbsp;=\u0026nbsp;{1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000};","title":"BZOJ3751 [NOIP2014]解方程"},{"content":"做过。但是不对。\n迷之找负环。\n初值直接赋为0，这样可以节省找没用的最短路的时间。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t;\ndouble v;\nedge *next;\n};\nconst int maxn = 3009;\nconst int maxm = 10009;\nconst double eps = 1e-9;\nconst double finf = 1e20;\u0026nbsp;\nint n, m;\nbool iq[maxn];\ndouble d[maxn], ave;\nedge *ep,\u0026nbsp;*head[maxn], elst[maxm];\nbool dfs(int p)\u0026nbsp;{\niq[p]\u0026nbsp;= 1;\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (d[e-\u0026gt; t]\u0026nbsp;-\u0026nbsp;(d[p]\u0026nbsp;+ e-\u0026gt; v)\u0026nbsp;\u0026gt; eps)\u0026nbsp;{\nif (iq[e-\u0026gt; t])\nreturn 1;\nelse {\nd[e-\u0026gt; t]\u0026nbsp;= d[p]\u0026nbsp;+ e-\u0026gt; v;\nif (dfs(e-\u0026gt; t))\nreturn 1;\n}\n}\niq[p]\u0026nbsp;= 0;\nreturn 0;\n}\nbool findNagLoop(double ave)\u0026nbsp;{\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nd[i]\u0026nbsp;= 0;\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\nelst[i]. v -= ave;\nmemset(iq, 0, sizeof(iq));\nbool res = 0;\nfor (int i = 1; i \u0026lt;= n \u0026amp;\u0026amp;\u0026nbsp;!res;\u0026nbsp;++ i)\nres |= dfs(i);\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\nelst[i]. v += ave;\nreturn res;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\ndouble l = 0, r = 0;\nmemset(head, 0, sizeof(head));\nep = elst;\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m);\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nint u, v;\ndouble w;\nscanf(\u0026quot;%d%d%lf\u0026quot;,\u0026nbsp;\u0026amp;u,\u0026nbsp;\u0026amp;v,\u0026nbsp;\u0026amp;w);\nep-\u0026gt; t = v;\nep-\u0026gt; v = w;\nep-\u0026gt; next = head[u];\nhead[u]\u0026nbsp;= ep ++;\nl = min(l, w);\nr = max(r, w);\n}\nwhile (l\u0026nbsp;+ eps \u0026lt; r)\u0026nbsp;{\ndouble mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;/ 2.0;\nif (findNagLoop(mid))\nr = mid;\nelse\nl = mid;\n}\nprintf(\u0026quot;%.8lf\\n\u0026quot;, l);\n}\n","permalink":"/oi/lofterimport_084/","summary":"做过。但是不对。\n迷之找负环。\n初值直接赋为0，这样可以节省找没用的最短路的时间。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t;\ndouble v;\nedge *next;\n};\nconst int maxn = 3009;\nconst int maxm = 10009;\nconst double eps = 1e-9;\nconst double finf = 1e20;\u0026nbsp;\nint n, m;\nbool iq[maxn];\ndouble d[maxn], ave;\nedge *ep,\u0026nbsp;*head[maxn], elst[maxm];\nbool dfs(int p)\u0026nbsp;{\niq[p]\u0026nbsp;= 1;\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (d[e-\u0026gt; t]\u0026nbsp;-\u0026nbsp;(d[p]\u0026nbsp;+ e-\u0026gt; v)\u0026nbsp;\u0026gt; eps)\u0026nbsp;{","title":"BZOJ1486 [HNOI2009]最小圈"},{"content":"数据结构题神马的最开心了。\n乍一看动态树，其实不然。复杂度可以再乘一个log的。\n启发式合并。然后合并的时候直接暴力重构整棵子树，建主席树只和父亲节点有关，所以还是能搞定。\n写了一个机智的垃圾回收把log^2的空间变成了log。然后发现空间有512MB。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t;\nedge* next;\n};\nstruct seg {\nint v, c;\nseg *ls,\u0026nbsp;*rs;\n};\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxn = 80009;\nconst int maxl = 33;\nconst int maxnd = maxn * maxl;\nint n, m, q, v[maxn], r[maxn], sz[maxn], tsst, maxv;\nint vis[maxn], tvis;\nint d[maxn], ath[maxn][maxl];\nedge *head[maxn],\u0026nbsp;*ep;\nseg *rt[maxn],\u0026nbsp;*slst[maxnd];\nvoid init()\u0026nbsp;{\nep = new edge[maxn * 2];\nmemset(head, 0, sizeof(head));\nmemset(rt, 0, sizeof(rt));\nseg *sp\u0026nbsp;= new seg[maxnd + 9];\nfor (int i = 0; i \u0026lt; maxnd;\u0026nbsp;++i)\u0026nbsp;{\nsp-\u0026gt; ls = 0;\nsp-\u0026gt; rs = 0;\nslst[i]\u0026nbsp;= sp ++;\n}\ntsst = maxnd;\ntvis = 0;\nmemset(vis, 0, sizeof(vis));\nd[0]\u0026nbsp;= 0;\nfor (int i = 0; i \u0026lt; maxl;\u0026nbsp;++ i)\nath[0][i]\u0026nbsp;= 0;\n}\ninline seg* newSeg()\u0026nbsp;{\nseg* r = slst[-- tsst];\nif (r-\u0026gt; ls)\nif (!(-- r-\u0026gt; ls-\u0026gt; c))\nslst[tsst ++]\u0026nbsp;= r-\u0026gt; ls;\nif (r-\u0026gt; rs)\nif (!(-- r-\u0026gt; rs-\u0026gt; c))\nslst[tsst ++]\u0026nbsp;= r-\u0026gt; rs;\nreturn r;\n}\ninline void addEdge(int u, int v)\u0026nbsp;{\nep-\u0026gt; t = v;\nep-\u0026gt; next = head[u];\nhead[u]\u0026nbsp;= ep ++;\n}\n#define vof(p)\u0026nbsp;((p)?(p-\u0026gt;v):0)\n#define lson(p)\u0026nbsp;((p)?(p-\u0026gt;ls):0)\n#define rson(p)\u0026nbsp;((p)?(p-\u0026gt;rs):0)\nseg* sgtIns(seg* q, int p0)\u0026nbsp;{\nseg *s\u0026nbsp;= newSeg(),\u0026nbsp;*p = s;\nint l = 0, r = maxv + 1;\nwhile (l\u0026nbsp;+ 1 \u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\np-\u0026gt; v = vof(q)\u0026nbsp;+ 1;\np-\u0026gt; c = 1;\nif (p0\u0026nbsp;\u0026lt; mid)\u0026nbsp;{\np-\u0026gt; rs = rson(q);\nif (rson(q))\n++ q-\u0026gt; rs-\u0026gt; c;\nq = lson(q);\np-\u0026gt; ls = newSeg();\np = p-\u0026gt; ls;\nr = mid;\n}\nelse {\np-\u0026gt; ls = lson(q);\nif (lson(q))\n++ q-\u0026gt; ls-\u0026gt; c;\nq = rson(q);\np-\u0026gt; rs = newSeg();\np = p-\u0026gt; rs;\nl = mid;\n}\n}\np-\u0026gt; v = vof(q)\u0026nbsp;+ 1;\np-\u0026gt; c = 1;\np-\u0026gt; ls = 0;\np-\u0026gt; rs = 0;\nreturn s;\n}\nint sgtKth(seg* a1, seg* a2, seg* b1, seg* b2, int k)\u0026nbsp;{\nint l = 0, r = maxv + 1;\nwhile (l\u0026nbsp;+ 1 \u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nint t = vof(lson(a1))\u0026nbsp;+ vof(lson(a2))\u0026nbsp;- vof(lson(b1))\u0026nbsp;- vof(lson(b2));\nif (t\u0026nbsp;\u0026gt;= k)\u0026nbsp;{\nr = mid;\na1 = lson(a1);\na2 = lson(a2);\nb1 = lson(b1);\nb2 = lson(b2);\n}\nelse {\nk -= t;\nl = mid;\na1 = rson(a1);\na2 = rson(a2);\nb1 = rson(b1);\nb2 = rson(b2);\n}\n}\nreturn l;\n}\nint getRoot(int x)\u0026nbsp;{\nstatic int stc[maxn];\nint tst = 1;\nstc[tst]\u0026nbsp;= x;\nwhile (stc[tst]\u0026nbsp;^ r[stc[tst]])\u0026nbsp;{\nstc[tst + 1]\u0026nbsp;= r[stc[tst]];\n++ tst;\n}\nwhile (-- tst)\nr[stc[tst]]\u0026nbsp;= r[stc[tst + 1]];\nreturn r[x];\n}\nvoid rebuild(int p0, int a)\u0026nbsp;{\nstatic int q[maxn];\nint hd = 0, tl = 1;\nvis[p0]\u0026nbsp;=\u0026nbsp;++ tvis;\nath[p0][0]\u0026nbsp;= a;\nd[p0]\u0026nbsp;= d[a]\u0026nbsp;+ 1;\nq[0]\u0026nbsp;= p0;\nwhile (hd\u0026nbsp;\u0026lt; tl)\u0026nbsp;{\nint p = q[hd ++];\nif (rt[p])\nslst[tsst ++]\u0026nbsp;= rt[p], rt[p]\u0026nbsp;= 0;\nfor (int i = 1; i \u0026lt; maxl;\u0026nbsp;++ i)\nath[p][i]\u0026nbsp;= ath[ath[p][i - 1]][i - 1];\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (vis[e-\u0026gt; t]\u0026nbsp;\u0026lt; tvis)\u0026nbsp;{\nvis[e-\u0026gt; t]\u0026nbsp;= tvis;\nd[e-\u0026gt; t]\u0026nbsp;= d[p]\u0026nbsp;+ 1;\nath[e-\u0026gt; t][0]\u0026nbsp;= p;\nq[tl ++]\u0026nbsp;= e-\u0026gt; t;\n}\n}\nfor (int ti = 0; ti \u0026lt; tl;\u0026nbsp;++ ti)\nrt[q[ti]]\u0026nbsp;= sgtIns(rt[ath[q[ti]][0]], v[q[ti]]);\n}\nint LCA(int u, int v)\u0026nbsp;{\nif (d[u]\u0026nbsp;\u0026lt; d[v])\nswap(u, v);\nfor (int i = maxl - 1; i \u0026gt;= 0;\u0026nbsp;-- i)\nif (d[ath[u][i]]\u0026nbsp;\u0026gt;= d[v])\nu = ath[u][i];\nif (u\u0026nbsp;== v)\nreturn u;\nfor (int i = maxl - 1; i \u0026gt;= 0;\u0026nbsp;-- i)\nif (ath[u][i]\u0026nbsp;^ ath[v][i])\u0026nbsp;{\nu = ath[u][i];\nv = ath[v][i];\n}\nreturn ath[u][0];\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\ninit();\nreadInt(maxv);\nreadInt(n);\nreadInt(m);\nreadInt(q);\nmaxv = 0;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(v[i]);\nmaxv = max(maxv, v[i]);\n}\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nr[i]\u0026nbsp;= i, sz[i]\u0026nbsp;= 1;\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nint u, v;\nreadInt(u);\nreadInt(v);\naddEdge(u, v);\naddEdge(v, u);\nu = getRoot(u);\nv = getRoot(v);\nsz[v]\u0026nbsp;+= sz[u];\nr[u]\u0026nbsp;= v;\n}\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nif (!rt[i])\nrebuild(i, 0);\nint lans = 0;\nwhile (q\u0026nbsp;--)\u0026nbsp;{\nchar opt[2];\nint u, v, k;\nscanf(\u0026quot;%s\u0026quot;, opt);\nreadInt(u);\nreadInt(v);\nu ^= lans;\nv ^= lans;\nif (opt[0]\u0026nbsp;==\u0026nbsp;'L')\u0026nbsp;{\nint ru = getRoot(u), rv = getRoot(v);\nif (sz[ru]\u0026nbsp;\u0026lt; sz[rv])\nswap(ru, rv), swap(u, v);\nr[rv]\u0026nbsp;= ru;\nsz[ru]\u0026nbsp;+= sz[rv];\nrebuild(v, u);\naddEdge(u, v);\naddEdge(v, u);\n}\nelse {\nreadInt(k);\nk ^= lans;\nint a = LCA(u, v);\nprintf(\u0026quot;%d\\n\u0026quot;,\u0026nbsp;(lans = sgtKth(rt[u], rt[v], rt[a], rt[ath[a][0]], k)));\n}\n}\n}\n","permalink":"/oi/lofterimport_085/","summary":"数据结构题神马的最开心了。\n乍一看动态树，其实不然。复杂度可以再乘一个log的。\n启发式合并。然后合并的时候直接暴力重构整棵子树，建主席树只和父亲节点有关，所以还是能搞定。\n写了一个机智的垃圾回收把log^2的空间变成了log。然后发现空间有512MB。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t;\nedge* next;\n};\nstruct seg {\nint v, c;\nseg *ls,\u0026nbsp;*rs;\n};\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxn = 80009;\nconst int maxl = 33;\nconst int maxnd = maxn * maxl;","title":"BZOJ3123 [Sdoi2013]森林"},{"content":"只有两个星期。\n第一个星期（也就是现在）先在bzoj上写些水题来找找感觉。\n根据卷子再看一遍半期之前的知识点。然后看一看历史书。\n第二个星期去学习kd-tree，然后写题。顺便可以研究一下高维树套树的问题。\n开始做文化课的作业。数理化生跟着进度，自己选择性多做一些作业。\n","permalink":"/oi/lofterimport_086/","summary":"只有两个星期。\n第一个星期（也就是现在）先在bzoj上写些水题来找找感觉。\n根据卷子再看一遍半期之前的知识点。然后看一看历史书。\n第二个星期去学习kd-tree，然后写题。顺便可以研究一下高维树套树的问题。\n开始做文化课的作业。数理化生跟着进度，自己选择性多做一些作业。","title":"11月下旬计划"},{"content":"好恶心的数据结构题。\n考虑单个询问。把(视作1，把)视作-1，设minprefix为最小前缀和，设cp=(minprefix+1)/2，那么答案为(sum/2+cp*2)，使劲想想想得出来。\n所以就是用个splay或者smt来维护一下一段的最小前缀和以及总和。因为有两种操作所以写起来比较麻烦。要注意不要把操作看反了，还要注意标记的优先级和更新的问题。\n恶心了一下午。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct dat {\nint sm, t[2][2];\ninline void operator =(const dat\u0026amp; a)\u0026nbsp;{\nsm = a. sm;\nt[0][0]\u0026nbsp;= a. t[0][0];\nt[0][1]\u0026nbsp;= a. t[0][1];\nt[1][0]\u0026nbsp;= a. t[1][0];\nt[1][1]\u0026nbsp;= a. t[1][1];\n}\n};\nconst int maxn = 100009;\nint n, m, cr, a[maxn], sz[maxn], ls[maxn], rs[maxn], pt[maxn], vl[maxn];\nbool flip[maxn], rev[maxn];\ndat d[maxn];\ndat sgd(int v)\u0026nbsp;{\ndat r;\nr. sm = v;\nr. t[0][0]\u0026nbsp;= min(v, 0);\nr. t[1][0]\u0026nbsp;= r. t[0][0];\nr. t[0][1]\u0026nbsp;= min(-v, 0);\nr. t[1][1]\u0026nbsp;= r. t[0][1];\nreturn r;\n}\ndat mgd(const dat\u0026amp; a, const dat\u0026amp; b)\u0026nbsp;{\ndat r;\nr. sm = a. sm + b. sm;\nr. t[0][0]\u0026nbsp;= min(a. t[0][0], a. sm + b. t[0][0]);\nr. t[1][0]\u0026nbsp;= min(b. t[1][0], b. sm + a. t[1][0]);\nr. t[0][1]\u0026nbsp;= min(a. t[0][1],\u0026nbsp;-a. sm + b. t[0][1]);\nr. t[1][1]\u0026nbsp;= min(b. t[1][1],\u0026nbsp;-b. sm + a. t[1][1]);\nreturn r;\n}\ninline void fix(int p)\u0026nbsp;{\nif (flip[p])\u0026nbsp;{\nswap(ls[p], rs[p]);\nswap(d[p]. t[0][0], d[p]. t[1][0]);\nswap(d[p]. t[0][1], d[p]. t[1][1]);\nif (ls[p])\nflip[ls[p]]\u0026nbsp;^= 1;\nif (rs[p])\nflip[rs[p]]\u0026nbsp;^= 1;\nflip[p]\u0026nbsp;= 0;\n}\n}\ninline void reverse(dat\u0026amp; r)\u0026nbsp;{\nswap(r. t[0][0], r. t[0][1]);\nswap(r. t[1][0], r. t[1][1]);\nr. sm =\u0026nbsp;-r. sm;\n}\ninline void pushDown(int p)\u0026nbsp;{\nif (rev[p])\u0026nbsp;{\nif (ls[p])\u0026nbsp;{\nrev[ls[p]]\u0026nbsp;^= 1;\nreverse(d[ls[p]]);\n}\nif (rs[p])\u0026nbsp;{\nrev[rs[p]]\u0026nbsp;^= 1;\nreverse(d[rs[p]]);\n}\nvl[p]\u0026nbsp;=\u0026nbsp;-vl[p];\nrev[p]\u0026nbsp;= 0;\n}\n}\ninline void update(int p)\u0026nbsp;{\nsz[p]\u0026nbsp;= sz[ls[p]]\u0026nbsp;+ sz[rs[p]]\u0026nbsp;+ 1;\nd[p]\u0026nbsp;= sgd(rev[p]\u0026nbsp;?\u0026nbsp;-vl[p]\u0026nbsp;: vl[p]);\nif (ls[p])\u0026nbsp;{\nfix(ls[p]);\nd[p]\u0026nbsp;= mgd(d[ls[p]], d[p]);\n}\nif (rs[p])\u0026nbsp;{\nfix(rs[p]);\nd[p]\u0026nbsp;= mgd(d[p], d[rs[p]]);\n}\nif (rev[p])\nreverse(d[p]);\n}\ninline void lRot(int q)\u0026nbsp;{\nint p = pt[q], a = pt[p];\nif (rs[q])\npt[rs[q]]\u0026nbsp;= p;\nls[p]\u0026nbsp;= rs[q];\nrs[q]\u0026nbsp;= p;\npt[q]\u0026nbsp;= a;\npt[p]\u0026nbsp;= q;\nif (a)\u0026nbsp;{\nif (p\u0026nbsp;== ls[a])\nls[a]\u0026nbsp;= q;\nelse\nrs[a]\u0026nbsp;= q;\n}\nupdate(p);\nupdate(q);\n}\ninline void rRot(int q)\u0026nbsp;{\nint p = pt[q], a = pt[p];\nif (ls[q])\npt[ls[q]]\u0026nbsp;= p;\nrs[p]\u0026nbsp;= ls[q];\nls[q]\u0026nbsp;= p;\npt[q]\u0026nbsp;= a;\npt[p]\u0026nbsp;= q;\nif (a)\u0026nbsp;{\nif (p\u0026nbsp;== ls[a])\nls[a]\u0026nbsp;= q;\nelse\nrs[a]\u0026nbsp;= q;\n}\nupdate(p);\nupdate(q);\n}\nvoid splay(int q)\u0026nbsp;{\nstatic int stc[maxn];\nint tst = 1;\nstc[tst]\u0026nbsp;= q;\nwhile (pt[stc[tst]])\u0026nbsp;{\nstc[tst + 1]\u0026nbsp;= pt[stc[tst]];\n++ tst;\n}\nwhile (tst)\u0026nbsp;{\nfix(stc[tst]);\npushDown(stc[tst]);\n-- tst;\n}\nwhile (pt[q])\u0026nbsp;{\nint p = pt[q], a = pt[p];\nif (!a\u0026nbsp;||\u0026nbsp;!pt[a])\u0026nbsp;{\nif (q\u0026nbsp;== ls[p])\nlRot(q);\nelse\nrRot(q);\n}\nelse {\nif (p\u0026nbsp;== ls[a])\u0026nbsp;{\nif (q\u0026nbsp;== ls[p])\nlRot(p), lRot(q);\nelse\nrRot(q), lRot(q);\n}\nelse {\nif (q\u0026nbsp;== ls[p])\nlRot(q), rRot(q);\nelse\nrRot(p), rRot(q);\n}\n}\n}\ncr = q;\n}\nint buildTree(int l, int r)\u0026nbsp;{\nif (l\u0026nbsp;\u0026gt; r)\nreturn 0;\nint p =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nls[p]\u0026nbsp;= buildTree(l, p - 1);\nif (ls[p])\npt[ls[p]]\u0026nbsp;= p;\nrs[p]\u0026nbsp;= buildTree(p + 1, r);\nif (rs[p])\npt[rs[p]]\u0026nbsp;= p;\nsz[p]\u0026nbsp;= sz[ls[p]]\u0026nbsp;+ sz[rs[p]]\u0026nbsp;+ 1;\nrev[p]\u0026nbsp;= 0;\nflip[p]\u0026nbsp;= 0;\nvl[p]\u0026nbsp;= a[p];\nupdate(p);\nreturn p;\n}\nint kth(int p, int k)\u0026nbsp;{\nwhile (p)\u0026nbsp;{\nfix(p);\nif (sz[ls[p]]\u0026nbsp;+ 1 == k)\nbreak;\nelse if (sz[ls[p]]\u0026nbsp;+ 1 \u0026gt; k)\np = ls[p];\nelse\nk -= sz[ls[p]]\u0026nbsp;+ 1, p = rs[p];\n}\nreturn p;\n}\nint getRange(int l, int r)\u0026nbsp;{\nif (l\u0026nbsp;== 1 \u0026amp;\u0026amp; r == n)\nreturn cr;\nelse if (l\u0026nbsp;== 1)\u0026nbsp;{\nint p = kth(cr, r + 1);\nsplay(p);\nreturn ls[p];\n}\nelse if (r\u0026nbsp;== n)\u0026nbsp;{\nint p = kth(cr, l - 1);\nsplay(p);\nreturn rs[p];\n}\nelse {\nint p = kth(cr, l - 1), q = kth(cr, r + 1);\nsplay(p);\nsplay(q);\nreturn rs[p];\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nmemset(flip, 0, sizeof(flip));\nmemset(rev, 0, sizeof(rev));\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nint g;\ndo\ng = getchar();\nwhile (g\u0026nbsp;!=\u0026nbsp;'('\u0026nbsp;\u0026amp;\u0026amp; g !=\u0026nbsp;')');\na[i]\u0026nbsp;=\u0026nbsp;(g ==\u0026nbsp;'(')\u0026nbsp;? 1 :\u0026nbsp;-1;\n}\ncr = buildTree(1, n);\nwhile (m\u0026nbsp;--)\u0026nbsp;{\nint opt, l, r;\nscanf(\u0026quot;%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;opt,\u0026nbsp;\u0026amp;l,\u0026nbsp;\u0026amp;r);\nif (opt\u0026nbsp;== 0)\u0026nbsp;{\nint x = getRange(l, r);\nfix(x);\npushDown(x);\nupdate(x);\nprintf(\u0026quot;%d\\n\u0026quot;,\u0026nbsp;(d[x]. sm \u0026gt;\u0026gt; 1)\u0026nbsp;+\u0026nbsp;((-d[x]. t[0][0]\u0026nbsp;+ 1)\u0026nbsp;\u0026amp;\u0026nbsp;~1));\n}\nelse if (opt\u0026nbsp;== 2)\u0026nbsp;{\nint x = getRange(l, r);\nflip[x]\u0026nbsp;^= 1;\nsplay(x);\n}\nelse if (opt\u0026nbsp;== 1)\u0026nbsp;{\nint x = getRange(l, r);\nrev[x]\u0026nbsp;^= 1;\nreverse(d[x]);\nsplay(x);\n}\n}\n}\n","permalink":"/oi/lofterimport_087/","summary":"好恶心的数据结构题。\n考虑单个询问。把(视作1，把)视作-1，设minprefix为最小前缀和，设cp=(minprefix+1)/2，那么答案为(sum/2+cp*2)，使劲想想想得出来。\n所以就是用个splay或者smt来维护一下一段的最小前缀和以及总和。因为有两种操作所以写起来比较麻烦。要注意不要把操作看反了，还要注意标记的优先级和更新的问题。\n恶心了一下午。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct dat {\nint sm, t[2][2];\ninline void operator =(const dat\u0026amp; a)\u0026nbsp;{\nsm = a. sm;\nt[0][0]\u0026nbsp;= a. t[0][0];\nt[0][1]\u0026nbsp;= a. t[0][1];\nt[1][0]\u0026nbsp;= a. t[1][0];\nt[1][1]\u0026nbsp;= a. t[1][1];\n}\n};\nconst int maxn = 100009;\nint n, m, cr, a[maxn], sz[maxn], ls[maxn], rs[maxn], pt[maxn], vl[maxn];\nbool flip[maxn], rev[maxn];\ndat d[maxn];\ndat sgd(int v)\u0026nbsp;{\ndat r;\nr. sm = v;","title":"BZOJ2209 [Jsoi2011]括号序列"},{"content":"好厉害的数据结构题，时限太吓人了。\n最初想写莫队的，但是在数据范围下屈服了。\n用可持久化线段树套可持久化线段树来维护可过。虽然跑了97s。本机跑得快得多，虽然有两个点被卡到了18s。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct seg {\nint v, ls, rs;\n};\n#define readInt(_s_)\u0026nbsp;{\\\n_s_ = 0;\\\nint _d_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxn = 100009;\nconst int maxl = 20;\nconst int maxnd = maxn * maxl * maxl;\nseg s[maxnd];\nint n, m, t, a[maxn], d[maxn], c[maxn],\u0026nbsp;*r[maxn], sp, rt[maxn];\ninline bool cmpP(int* a, int* b)\u0026nbsp;{\nreturn *a\u0026nbsp;\u0026lt;\u0026nbsp;*b;\n}\n#define vof(p)\u0026nbsp;((p)?(s[p].v):0)\n#define lson(p)\u0026nbsp;((p)?(s[p].ls):0)\n#define rson(p)\u0026nbsp;((p)?(s[p].rs):0)\nint sgtIns(int q, int p0)\u0026nbsp;{\nint rt =\u0026nbsp;++ sp, p = rt;\nint l = 0, r = n;\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\ns[p]. v = vof(q)\u0026nbsp;+ 1;\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (p0\u0026nbsp;\u0026lt;= mid)\u0026nbsp;{\ns[p]. rs = rson(q);\nq = lson(q);\ns[p]. ls =\u0026nbsp;++ sp;\np = s[p]. ls;\nr = mid;\n}\nelse {\ns[p]. ls = lson(q);\nq = rson(q);\ns[p]. rs =\u0026nbsp;++ sp;\np = s[p]. rs;\nl = mid + 1;\n}\n}\ns[p]. v = vof(q)\u0026nbsp;+ 1;\nreturn rt;\n}\nint psgtIns(int q, int p0, int v0)\u0026nbsp;{\nint rt =\u0026nbsp;++ sp, p = rt;\nint l = 1, r = t;\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\ns[p]. v = sgtIns(vof(q), v0);\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (p0\u0026nbsp;\u0026lt;= mid)\u0026nbsp;{\ns[p]. rs = rson(q);\nq = lson(q);\ns[p]. ls =\u0026nbsp;++ sp;\u0026nbsp;\np = s[p]. ls;\nr = mid;\n}\nelse {\ns[p]. ls = lson(q);\nq = rson(q);\ns[p]. rs =\u0026nbsp;++ sp;\np = s[p]. rs;\nl = mid + 1;\n}\n}\ns[p]. v = sgtIns(vof(q), v0);\nreturn rt;\n}\nvoid dispNums()\u0026nbsp;{\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nr[i - 1]\u0026nbsp;= a + i;\nsort(r, r + n, cmpP);\nt = 0;\nfor (int i = 0, l =\u0026nbsp;*r[0]\u0026nbsp;- 1; i \u0026lt; n;\u0026nbsp;++ i)\nif (*r[i]\u0026nbsp;== l)\n*r[i]\u0026nbsp;= t;\nelse {\nd[++ t]\u0026nbsp;=\u0026nbsp;*r[i];\n\u0026nbsp;\u0026nbsp; l =\u0026nbsp;*r[i];\n*r[i]\u0026nbsp;= t;\n}\nd[++ t]\u0026nbsp;=\u0026nbsp;*r[n - 1]\u0026nbsp;+ 1;\nmemset(c, 0, sizeof(c));\nrt[0]\u0026nbsp;= 0;\nsp = 0;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nrt[i]\u0026nbsp;= psgtIns(rt[i - 1], a[i], c[a[i]]);\nc[a[i]]\u0026nbsp;= i;\n}\n}\nint sgtQry(int p, int p0)\u0026nbsp;{\nint ans = 0;\nint l = 0, r = n;\nwhile (l\u0026nbsp;\u0026lt; r \u0026amp;\u0026amp; p)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (p0\u0026nbsp;\u0026lt;= mid)\u0026nbsp;{\nr = mid;\np = lson(p);\n}\nelse {\nl = mid + 1;\nans += vof(lson(p));\np = rson(p);\n}\n}\nif (p)\nans += vof(p);\nreturn ans;\n}\nvoid psgtQry(int p, int p0, int v0, int\u0026amp; x, int\u0026amp; y)\u0026nbsp;{\nx = 0;\ny = 0;\nif (p0\u0026nbsp;== 0)\nreturn;\nint l = 1, r = t;\nwhile (l\u0026nbsp;\u0026lt; r \u0026amp;\u0026amp; p)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (p0\u0026nbsp;\u0026lt;= mid)\u0026nbsp;{\nr = mid;\np = lson(p);\n}\nelse {\nx += vof(vof(lson(p)));\ny += sgtQry(vof(lson(p)), v0);\nl = mid + 1;\np = rson(p);\n}\n}\nif (p)\u0026nbsp;{\nx += vof(vof(p));\ny += sgtQry(vof(p), v0);\n}\n}\nvoid query(int l, int r, int a, int b)\u0026nbsp;{\nint tt = 0, ct = 0, x, y;\npsgtQry(rt[r], b, l - 1, x, y);\ntt += x;\nct += y;\npsgtQry(rt[r], a - 1, l - 1, x, y);\ntt -= x;\nct -= y;\npsgtQry(rt[l - 1], b, l - 1, x, y);\ntt -= x;\nct -= y;\npsgtQry(rt[l - 1], a - 1, l - 1, x, y);\ntt += x;\nct += y;\nprintf(\u0026quot;%d %d\\n\u0026quot;, tt, ct);\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\nreadInt(m);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nreadInt(a[i]);\ndispNums();\nwhile (m\u0026nbsp;--)\u0026nbsp;{\nint l, r, a, b;\nreadInt(l);\nreadInt(r);\nreadInt(a);\nreadInt(b);\na = lower_bound(d, d + t, a)\u0026nbsp;- d;\u0026nbsp;\nb = upper_bound(d, d + t, b)\u0026nbsp;- d - 1;\nif (a\u0026nbsp;\u0026gt; b)\nputs(\u0026quot;0 0\u0026quot;);\nelse\nquery(l, r, a, b);\n}\n}\n","permalink":"/oi/lofterimport_088/","summary":"好厉害的数据结构题，时限太吓人了。\n最初想写莫队的，但是在数据范围下屈服了。\n用可持久化线段树套可持久化线段树来维护可过。虽然跑了97s。本机跑得快得多，虽然有两个点被卡到了18s。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct seg {\nint v, ls, rs;\n};\n#define readInt(_s_)\u0026nbsp;{\\\n_s_ = 0;\\\nint _d_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxn = 100009;\nconst int maxl = 20;\nconst int maxnd = maxn * maxl * maxl;\nseg s[maxnd];\nint n, m, t, a[maxn], d[maxn], c[maxn],\u0026nbsp;*r[maxn], sp, rt[maxn];","title":"BZOJ3236 作业"},{"content":"今天正式成绩出来了，听说要写总结。\n前两天写了一次，不过感觉更像是简单题解的样子。\n考了这么多年，好像没有一次让自己满意过。总是犯一些奇奇怪怪到让自己都感觉可笑的错误，然后与目标失之交臂。这就是我对noip的最深刻的印象。尽管在不断强化的训练中学会了更多保障正确性的东西，不过最后考试的时候还是出现了各种疏漏。毕竟noip，考的是细心。虽然不管是noi还是更高档的考试中，细心都是必不可少的。今年的noi就很好地证明了这一点。\n其实考试本身并没有什么好总结的。难度摆在那里。上500也不难，想ak也不简单。今年的noi可能已经预告过了，只是我们都没有把它联想到noip上来而已。考简单了不算坏事，但也不是什么好事。如果想要存活下去，那么不论什么难度都要能应对才行。\nnoip这段时间也应该算是后面长期停课的热身。有很多东西都在发生着改变。多数时间你要自己安排自己长达几个月的学习。从一天要写什么题，到一个星期要搞定什么东西，到最后要达到什么水平，都要学会自己去规划。从oi中要学会的的不仅是做题，还有很多更重要的东西。\n生活的方方面面都需要自己去平衡。文化课，锻炼等等。有时候感觉就像在走独木桥，有时候甚至脚下已经没有支撑，但是还是只有沿着既定的方向走下去。开弓没有回头箭。下面的路，我会把它走好的。\nHistorical Comments Unknown friend at 2014-11-17T23:59:39 HJA体现了一名UOI队员应有的素质，实力和信心 OTZ OTZ OTZ OTZ OTZ 我的脸更痛了T_T\nUnknown friend at 2014-11-18T08:15:18 大半夜还不睡。。\n","permalink":"/diary/lofterimport_089/","summary":"今天正式成绩出来了，听说要写总结。\n前两天写了一次，不过感觉更像是简单题解的样子。\n考了这么多年，好像没有一次让自己满意过。总是犯一些奇奇怪怪到让自己都感觉可笑的错误，然后与目标失之交臂。这就是我对noip的最深刻的印象。尽管在不断强化的训练中学会了更多保障正确性的东西，不过最后考试的时候还是出现了各种疏漏。毕竟noip，考的是细心。虽然不管是noi还是更高档的考试中，细心都是必不可少的。今年的noi就很好地证明了这一点。\n其实考试本身并没有什么好总结的。难度摆在那里。上500也不难，想ak也不简单。今年的noi可能已经预告过了，只是我们都没有把它联想到noip上来而已。考简单了不算坏事，但也不是什么好事。如果想要存活下去，那么不论什么难度都要能应对才行。\nnoip这段时间也应该算是后面长期停课的热身。有很多东西都在发生着改变。多数时间你要自己安排自己长达几个月的学习。从一天要写什么题，到一个星期要搞定什么东西，到最后要达到什么水平，都要学会自己去规划。从oi中要学会的的不仅是做题，还有很多更重要的东西。\n生活的方方面面都需要自己去平衡。文化课，锻炼等等。有时候感觉就像在走独木桥，有时候甚至脚下已经没有支撑，但是还是只有沿着既定的方向走下去。开弓没有回头箭。下面的路，我会把它走好的。\nHistorical Comments Unknown friend at 2014-11-17T23:59:39 HJA体现了一名UOI队员应有的素质，实力和信心 OTZ OTZ OTZ OTZ OTZ 我的脸更痛了T_T\nUnknown friend at 2014-11-18T08:15:18 大半夜还不睡。。","title":"NOIP2014 总结2"},{"content":"前天晚上的best coder的题。\n数据太弱暴力都放过去了，而且还是错的。当然我也太naive了TT。\n我没管k\u0026lt;=10，直接硬上树状数组套平衡树，用二分搞的。然后数组开小了不开心啊。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cmath\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\n#include \u0026lt;set\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\nusing namespace std;\nstruct query {\nint x, y, k, n;\n};\nstruct tower {\nint x, y, h;\n};\ninline bool cmpTower(const tower\u0026amp; a, const tower\u0026amp; b)\u0026nbsp;{\nreturn a. x \u0026lt; b. x;\n}\ninline bool cmpQuery(const query\u0026amp; a, const query\u0026amp; b)\u0026nbsp;{\nreturn a. x \u0026lt; b. x;\n}\ninline bool cmpP(int* a, int* b)\u0026nbsp;{\nreturn *a\u0026nbsp;\u0026lt;\u0026nbsp;*b;\n}\nconst int maxn = 30009;\nconst int maxl = 19;\nconst int maxv = 1e9 + 9;\nint n, m,\u0026nbsp;*rx[maxn * 2],\u0026nbsp;*ry[maxn * 2], mx, my;\nint ans[maxn];\ntower a[maxn];\nquery q[maxn];\nint t[maxn * 2];\nnamespace sbt {\nconst int maxnd = maxn * maxl;\nint sz[maxnd], ls[maxnd], rs[maxnd], vl[maxnd], tn;\nvoid init()\u0026nbsp;{\ntn = 0;\nsz[0]\u0026nbsp;= 0;\n}\ninline void lRot(int\u0026amp; p)\u0026nbsp;{\nint q = rs[p];\nrs[p]\u0026nbsp;= ls[q];\nls[q]\u0026nbsp;= p;\nsz[q]\u0026nbsp;= sz[p];\nsz[p]\u0026nbsp;= sz[ls[p]]\u0026nbsp;+ sz[rs[p]]\u0026nbsp;+ 1;\np = q;\n}\ninline void rRot(int\u0026amp; p)\u0026nbsp;{\nint q = ls[p];\nls[p]\u0026nbsp;= rs[q];\nrs[q]\u0026nbsp;= p;\nsz[q]\u0026nbsp;= sz[p];\nsz[p]\u0026nbsp;= sz[ls[p]]\u0026nbsp;+ sz[rs[p]]\u0026nbsp;+ 1;\np = q;\n}\ninline void maintain(int\u0026amp; p, bool dir)\u0026nbsp;{\nif (dir)\u0026nbsp;{\nif (sz[ls[p]]\u0026nbsp;\u0026gt; sz[rs[p]]\u0026nbsp;+ 1)\nrRot(p);\n}\nelse\nif (sz[ls[p]]\u0026nbsp;+ 1 \u0026lt; sz[rs[p]])\nlRot(p);\n}\nvoid ins(int\u0026amp; p, int v)\u0026nbsp;{\nif (!p)\u0026nbsp;{\np =\u0026nbsp;++ tn;\nls[p]\u0026nbsp;= 0;\nrs[p]\u0026nbsp;= 0;\nsz[p]\u0026nbsp;= 1;\nvl[p]\u0026nbsp;= v;\n}\nelse {\nif (v\u0026nbsp;\u0026lt; vl[p])\nins(ls[p], v);\nelse\nins(rs[p], v);\n++ sz[p];\nmaintain(p, v \u0026lt; vl[p]);\n}\n}\nint cntLower(int p, int v)\u0026nbsp;{\nif (!p)\nreturn 0;\nelse if (vl[p]\u0026nbsp;\u0026lt;= v)\nreturn sz[ls[p]]\u0026nbsp;+ 1 + cntLower(rs[p], v);\nelse\nreturn cntLower(ls[p], v);\n}\n};\nvoid dispNums()\u0026nbsp;{\nmx = 0;\nsort(rx, rx + n + m, cmpP);\nfor (int i = 0, l =\u0026nbsp;*rx[0]\u0026nbsp;- 1; i \u0026lt; n + m;\u0026nbsp;++ i)\nif (*rx[i]\u0026nbsp;== l)\n*rx[i]\u0026nbsp;= mx;\nelse\nl =\u0026nbsp;*rx[i],\u0026nbsp;*rx[i]\u0026nbsp;=\u0026nbsp;++ mx;\nmy = 0;\nsort(ry, ry + n + m, cmpP);\nfor (int i = 0, l =\u0026nbsp;*ry[0]\u0026nbsp;- 1; i \u0026lt; n + m;\u0026nbsp;++ i)\nif (*ry[i]\u0026nbsp;== l)\n*ry[i]\u0026nbsp;= my;\nelse\nl =\u0026nbsp;*ry[i],\u0026nbsp;*ry[i]\u0026nbsp;=\u0026nbsp;++ my;\n}\nvoid sov()\u0026nbsp;{\nsbt :: init();\nmemset(t, 0, sizeof(t));\nfor (int i = 0, j = 0; j \u0026lt; m;\u0026nbsp;++ j)\u0026nbsp;{\nwhile (i\u0026nbsp;\u0026lt; n \u0026amp;\u0026amp; a[i]. x \u0026lt;= q[j]. x)\u0026nbsp;{\nfor (int p = a[i]. y; p \u0026lt;= my; p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\nsbt :: ins(t[p], a[i]. h);\n++ i;\n}\nint l = 0, r = maxv;\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nint cnt = 0;\nfor (int p = q[j]. y; p; p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p))\ncnt += sbt :: cntLower(t[p], mid);\nif (cnt\u0026nbsp;\u0026gt;= q[j]. k)\nr = mid;\nelse\nl = mid + 1;\n}\nif (l\u0026nbsp;== maxv)\nans[q[j]. n]\u0026nbsp;=\u0026nbsp;-1;\nelse\nans[q[j]. n]\u0026nbsp;= l;\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nwhile (scanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m)\u0026nbsp;!= EOF)\u0026nbsp;{\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nscanf(\u0026quot;%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;a[i]. x,\u0026nbsp;\u0026amp;a[i]. y,\u0026nbsp;\u0026amp;a[i]. h);\nrx[i]\u0026nbsp;=\u0026nbsp;\u0026amp;a[i]. x;\nry[i]\u0026nbsp;=\u0026nbsp;\u0026amp;a[i]. y;\n}\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nscanf(\u0026quot;%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;q[i]. x,\u0026nbsp;\u0026amp;q[i]. y,\u0026nbsp;\u0026amp;q[i]. k);\nq[i]. n = i;\nrx[i + n]\u0026nbsp;=\u0026nbsp;\u0026amp;q[i]. x;\nry[i + n]\u0026nbsp;=\u0026nbsp;\u0026amp;q[i]. y;\n}\ndispNums();\nsort(a, a + n, cmpTower);\nsort(q, q + m, cmpQuery);\nsov();\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\nprintf(\u0026quot;%d\\n\u0026quot;, ans[i]);\n}\n}\n","permalink":"/oi/lofterimport_090/","summary":"前天晚上的best coder的题。\n数据太弱暴力都放过去了，而且还是错的。当然我也太naive了TT。\n我没管k\u0026lt;=10，直接硬上树状数组套平衡树，用二分搞的。然后数组开小了不开心啊。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cmath\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\n#include \u0026lt;set\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\nusing namespace std;\nstruct query {\nint x, y, k, n;\n};\nstruct tower {\nint x, y, h;\n};\ninline bool cmpTower(const tower\u0026amp; a, const tower\u0026amp; b)\u0026nbsp;{\nreturn a. x \u0026lt; b. x;\n}\ninline bool cmpQuery(const query\u0026amp; a, const query\u0026amp; b)\u0026nbsp;{\nreturn a. x \u0026lt; b. x;\n}\ninline bool cmpP(int* a, int* b)\u0026nbsp;{","title":"HDOJ5107 K-short Problem"},{"content":"做事总得有点计划性。\n省选是第二步。noip这步逗了，所以后面要加油。\n十一月和十二月重点搞数据结构。毕竟天冷不适合思考太复杂的数学问题TT比如kd-tree之类的东西拿来看一看，bzoj上以前wc的数据结构也不少。争取多刷些题。\n一月份大概会有会考，就乱刷些题当休闲了。\n二月有wc。然后到时候大神应该也比较多，可以多学习一下数学题和dp。还要把计算几何认真学习一下。\n三月大概会开始集训了。图论题比较重要。很多题就是看你记不记得那些结论。当然也有不少的烧脑题。需要多刷题来弥补智商的不足。\n四月么，加油！\n","permalink":"/oi/lofterimport_091/","summary":"做事总得有点计划性。\n省选是第二步。noip这步逗了，所以后面要加油。\n十一月和十二月重点搞数据结构。毕竟天冷不适合思考太复杂的数学问题TT比如kd-tree之类的东西拿来看一看，bzoj上以前wc的数据结构也不少。争取多刷些题。\n一月份大概会有会考，就乱刷些题当休闲了。\n二月有wc。然后到时候大神应该也比较多，可以多学习一下数学题和dp。还要把计算几何认真学习一下。\n三月大概会开始集训了。图论题比较重要。很多题就是看你记不记得那些结论。当然也有不少的烧脑题。需要多刷题来弥补智商的不足。\n四月么，加油！","title":"省选前长期计划"},{"content":"想起有这么一个总结，但是忘了带本子了，只好这样写了。\n半个学期在学习文化课的时间也不超过20天。大概是没有多少好总结的。\n半期的时候考懞了。虽然也花了三天的时间预习，不过那也只是简单地补补知识点，完全不能挽回任何东西。毕竟在高中的文化课里，书本和考试的差距还是有那么一些大的。感觉数学英语的差距要稍微小一些，另外四科就比较惨淡了。下半学期没有noip那么要紧的事情了，虽然还要停课，但是每天晚上也还是要做下作业，补一补知识点。数学物理和英语争取能跟上进度，这样压力应该会小一些。然后前半期的知识，每天做完作业之后也按顺序去前面把相应的作业做一做。班上有不少人批判刷题，但是现在血淋淋的事实就是，不刷题根本没有办法应付考试。\n另外就是竞赛吧。其实这半期也没有写多少议论文，题解和总结倒写了不少。noip考得应该还将就，明天出正式成绩。反正第一步是迈出去了，后面的路会更艰险，不过我有信心和决心去实现自己的愿望。选择了便认定这一条路走下去，剩者为王！\n好像虽然在停课，也参与了一些活动。比如运动会啥的，然后成绩也不错以至于被rp攻击了好几天。长跑教会了我不只是长跑。也许有许多人会和你在路上相遇，但是只有你自己坚持下来去冲击终点的红线。也许有人会跑得很快，但是你也不要怕，也许他们过会就会体力不支。也许有人会跑得很慢，但是也不要骄傲，他们也许是在保存实力。至于总有些人会战胜你，要保持一颗平和的心，因为有很多人也在以同样的视角看你。总之，你要做的就是不断地努力。即使是在你累得不能呼吸的时候，只要终点还在前方，你就得跑下去。长跑如是，竞赛如是，人生亦如是。当然长跑这个项目也不能停。好的身体在后面的学习中还是很重要的。\n另外在停课搞竞赛的时候也还是学到了很多其它的东西。比如如何去协助老师管理同学，如何组织大家做事，以及如何应对各种突发情况等等。这些也是人生宝贵的财富吧。管理人是比管理程序更麻烦也更有挑战性的一件事情，也是必需要学会的一件事情。\n下半学期的任务更加复杂。没有像noip一样的重大事件了，但是这半个学期将会深远地影响到高中结业以及省选，所以也要抓紧时间，提高效率。\n最后希望明天++ rp，也希望我不会再写一篇同样题目的总结。\nHistorical Comments Unknown friend at 2014-11-16T22:56:11 OTL OTL OTL OTL OTL Unknown friend at 2014-11-16T22:57:13 现在还在赶……\n","permalink":"/oi/lofterimport_092/","summary":"想起有这么一个总结，但是忘了带本子了，只好这样写了。\n半个学期在学习文化课的时间也不超过20天。大概是没有多少好总结的。\n半期的时候考懞了。虽然也花了三天的时间预习，不过那也只是简单地补补知识点，完全不能挽回任何东西。毕竟在高中的文化课里，书本和考试的差距还是有那么一些大的。感觉数学英语的差距要稍微小一些，另外四科就比较惨淡了。下半学期没有noip那么要紧的事情了，虽然还要停课，但是每天晚上也还是要做下作业，补一补知识点。数学物理和英语争取能跟上进度，这样压力应该会小一些。然后前半期的知识，每天做完作业之后也按顺序去前面把相应的作业做一做。班上有不少人批判刷题，但是现在血淋淋的事实就是，不刷题根本没有办法应付考试。\n另外就是竞赛吧。其实这半期也没有写多少议论文，题解和总结倒写了不少。noip考得应该还将就，明天出正式成绩。反正第一步是迈出去了，后面的路会更艰险，不过我有信心和决心去实现自己的愿望。选择了便认定这一条路走下去，剩者为王！\n好像虽然在停课，也参与了一些活动。比如运动会啥的，然后成绩也不错以至于被rp攻击了好几天。长跑教会了我不只是长跑。也许有许多人会和你在路上相遇，但是只有你自己坚持下来去冲击终点的红线。也许有人会跑得很快，但是你也不要怕，也许他们过会就会体力不支。也许有人会跑得很慢，但是也不要骄傲，他们也许是在保存实力。至于总有些人会战胜你，要保持一颗平和的心，因为有很多人也在以同样的视角看你。总之，你要做的就是不断地努力。即使是在你累得不能呼吸的时候，只要终点还在前方，你就得跑下去。长跑如是，竞赛如是，人生亦如是。当然长跑这个项目也不能停。好的身体在后面的学习中还是很重要的。\n另外在停课搞竞赛的时候也还是学到了很多其它的东西。比如如何去协助老师管理同学，如何组织大家做事，以及如何应对各种突发情况等等。这些也是人生宝贵的财富吧。管理人是比管理程序更麻烦也更有挑战性的一件事情，也是必需要学会的一件事情。\n下半学期的任务更加复杂。没有像noip一样的重大事件了，但是这半个学期将会深远地影响到高中结业以及省选，所以也要抓紧时间，提高效率。\n最后希望明天++ rp，也希望我不会再写一篇同样题目的总结。\nHistorical Comments Unknown friend at 2014-11-16T22:56:11 OTL OTL OTL OTL OTL Unknown friend at 2014-11-16T22:57:13 现在还在赶……","title":"高二上半期总结"},{"content":"这题就是考你怎么把能优化常数的地方都优化一下。\n做法比较清晰，分块加持久化值域线段树。大块预处理，小块暴力算。虽然最初不想写持久化数据结构就试图用平衡树去做，结果发现做法是错的，单次复杂度是O(n*lgn)的。看来我太年轻了。后来改了但是常数巨大也没法跑。\n本来是一次询问里有若干次在持久化线段树上查询的。然后首先发现可以预处理出从开头到一块末尾这一段里有多少个比后面任意一个位置大的数的个数。还有一个数前面比它大的数的个数。这俩加起来常数差不多就小到能过了。\n丧心病狂！\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nconst int maxn = 50009;\nconst int maxb = 259;\nconst int maxnd = maxn * 30;\nstruct seg {\nint v;\nseg *ls,\u0026nbsp;*rs;\n};\ninline bool cmpP(const int* a, const int* b)\u0026nbsp;{\nreturn *a\u0026nbsp;\u0026lt;\u0026nbsp;*b;\n}\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nint n, m, bs, tb, a[maxn],\u0026nbsp;*r[maxn], lans, t[maxn];\nint bb[maxb][maxb], br[maxb], bt[maxb], bi[maxb],bp[maxb][maxb], fb[maxn];\nint clo[maxn], ff[maxb][maxn];\nseg *sp,\u0026nbsp;*rt[maxn];\n#define mid(p)\u0026nbsp;((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\nint btQry(int* t, int p)\u0026nbsp;{\nint s = 0;\nwhile (p)\ns += t[p], p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p);\nreturn s;\n}\nvoid btChg(int* t, int p, int v)\u0026nbsp;{\nwhile (p\u0026nbsp;\u0026lt;= n)\nt[p]\u0026nbsp;+= v, p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p);\n}\n#define vof(x)\u0026nbsp;((x)?(x-\u0026gt;v):0)\n#define lson(x)\u0026nbsp;((x)?(x-\u0026gt;ls):0)\n#define rson(x)\u0026nbsp;((x)?(x-\u0026gt;rs):0)\nseg *sgtChg(seg* q, int p0, int v0)\u0026nbsp;{\nseg *s\u0026nbsp;= sp ++,\u0026nbsp;*p\u0026nbsp;= s;\nint l = 1, r = n;\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\np-\u0026gt; v = vof(q)\u0026nbsp;+ v0;\nif (p0\u0026nbsp;\u0026lt;= mid)\u0026nbsp;{\np-\u0026gt; rs = rson(q);\nq = lson(q);\np-\u0026gt; ls = sp ++;\np = p-\u0026gt; ls;\nr = mid;\n}\nelse {\np-\u0026gt; ls = lson(q);\nq = rson(q);\np-\u0026gt; rs = sp ++;\np = p-\u0026gt; rs;\nl = mid + 1;\n}\n}\np-\u0026gt; v = vof(q)\u0026nbsp;+ v0;\nreturn s;\n}\nint sgtQryLower(seg* p, int v)\u0026nbsp;{\nint l = 1, r = n, s = 0;\nwhile (l\u0026nbsp;\u0026lt; r \u0026amp;\u0026amp; p)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (v\u0026nbsp;\u0026gt; mid)\u0026nbsp;{\ns += vof(lson(p));\np = rson(p);\nl = mid + 1;\n}\nelse {\np = lson(p);\nr = mid;\n}\n}\nreturn s;\n}\nint query(int l, int r)\u0026nbsp;{\nint lb = fb[l]\u0026nbsp;+ 1, rb = fb[r]\u0026nbsp;- 1, ans = 0;\nif (fb[l]\u0026nbsp;== fb[r])\u0026nbsp;{\nfor (int i = l; i \u0026lt;= r;\u0026nbsp;++ i)\nans += sgtQryLower(rt[r + 1], a[i])\u0026nbsp;- clo[i];\n}\nelse {\nfor (int i = lb; i \u0026lt;= rb;\u0026nbsp;++ i)\u0026nbsp;{\nans += bi[i];\nans += bb[i][rb];\n}\nfor (int i = l; fb[i]\u0026nbsp;\u0026lt; lb;\u0026nbsp;++ i)\nans += sgtQryLower(rt[r + 1], a[i])\u0026nbsp;- clo[i];\nif (lb)\nfor (int i =\u0026nbsp;(rb\u0026nbsp;+ 1)\u0026nbsp;* bs; i \u0026lt;= r;\u0026nbsp;++ i)\nans += ff[rb][i]\u0026nbsp;- ff[lb - 1][i];\nelse\nfor (int i =\u0026nbsp;(rb\u0026nbsp;+ 1)\u0026nbsp;* bs; i \u0026lt;= r;\u0026nbsp;++ i)\nans += ff[rb][i];\nans += bp[fb[r]][r - bs * fb[r]];\n}\nreturn ans;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nmemset(br, 0, sizeof(br));\nmemset(bb, 0, sizeof(bb));\nmemset(bi, 0, sizeof(bi));\nmemset(bt, 0, sizeof(bt));\nreadInt(n);\nsp = new seg[maxn * 30];\nfor (bs\u0026nbsp;= 1; bs * bs \u0026lt; n;\u0026nbsp;++ bs);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(a[i]);\n\u0026nbsp;\u0026nbsp; r[i]\u0026nbsp;= a + i;\n\u0026nbsp;\u0026nbsp; fb[i]\u0026nbsp;= i / bs;\n}\nfb[n]\u0026nbsp;= n;\nsort(r, r + n, cmpP);\nfor (int i = 0, l =\u0026nbsp;*r[0]\u0026nbsp;- 1, v = 0; i \u0026lt; n;\u0026nbsp;++ i)\nif (*r[i]\u0026nbsp;== l)\n*r[i]\u0026nbsp;= v;\nelse\nl =\u0026nbsp;*r[i],\u0026nbsp;*r[i]\u0026nbsp;=\u0026nbsp;++ v;\nrt[0]\u0026nbsp;= 0;\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nbi[fb[i]]\u0026nbsp;+= i - fb[i]\u0026nbsp;* bs - btQry(t, a[i]);\nbp[fb[i]][i - fb[i]\u0026nbsp;* bs]\u0026nbsp;= bi[fb[i]];\nbtChg(t, a[i], 1);\nrt[i + 1]\u0026nbsp;= sgtChg(rt[i], a[i], 1);\nclo[i]\u0026nbsp;= sgtQryLower(rt[i], a[i]);\nif (fb[i]\u0026nbsp;^ fb[i + 1])\nmemset(t, 0, sizeof(t));\n}\ntb = fb[n - 1];\nfor (int i = 0; i \u0026lt; tb;\u0026nbsp;++ i)\u0026nbsp;{\nint s = 0, c = 0;\nmemset(t, 0, sizeof(t));\nfor (int j = i * bs; fb[j]\u0026nbsp;== fb[i * bs];\u0026nbsp;++ j)\nbtChg(t, a[j], 1),\u0026nbsp;++ c;\nfor (int j =\u0026nbsp;(i\u0026nbsp;+ 1)\u0026nbsp;* bs; j \u0026lt; n;\u0026nbsp;++ j)\u0026nbsp;{\ns += c - btQry(t, a[j]);\nif (fb[j]\u0026nbsp;^ fb[j + 1])\nbb[i][fb[j]]\u0026nbsp;= s;\n}\n}\nfor (int i = 0; i \u0026lt; tb;\u0026nbsp;++ i)\u0026nbsp;{\nint c = 0;\nmemset(t, 0, sizeof(t));\nfor (int j = 0; fb[j]\u0026nbsp;\u0026lt;= fb[i * bs];\u0026nbsp;++ j)\nbtChg(t, a[j], 1),\u0026nbsp;++ c;\nfor (int j =\u0026nbsp;(i\u0026nbsp;+ 1)\u0026nbsp;* bs; j \u0026lt; n;\u0026nbsp;++ j)\nff[i][j]\u0026nbsp;= c - btQry(t, a[j]);\n}\nlans = 0;\nreadInt(m);\nwhile (m\u0026nbsp;--)\u0026nbsp;{\nint l, r;\nreadInt(l);\nreadInt(r);\nl ^= lans;\nr ^= lans;\n-- l;\n-- r;\nprintf(\u0026quot;%d\\n\u0026quot;,\u0026nbsp;(lans = query(l, r)));\n}\n}\n","permalink":"/oi/lofterimport_095/","summary":"这题就是考你怎么把能优化常数的地方都优化一下。\n做法比较清晰，分块加持久化值域线段树。大块预处理，小块暴力算。虽然最初不想写持久化数据结构就试图用平衡树去做，结果发现做法是错的，单次复杂度是O(n*lgn)的。看来我太年轻了。后来改了但是常数巨大也没法跑。\n本来是一次询问里有若干次在持久化线段树上查询的。然后首先发现可以预处理出从开头到一块末尾这一段里有多少个比后面任意一个位置大的数的个数。还有一个数前面比它大的数的个数。这俩加起来常数差不多就小到能过了。\n丧心病狂！\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nconst int maxn = 50009;\nconst int maxb = 259;\nconst int maxnd = maxn * 30;\nstruct seg {\nint v;\nseg *ls,\u0026nbsp;*rs;\n};\ninline bool cmpP(const int* a, const int* b)\u0026nbsp;{\nreturn *a\u0026nbsp;\u0026lt;\u0026nbsp;*b;\n}\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\","title":"BZOJ3744 Gty的妹子序列"},{"content":"暑假的时候就听zhx讲过这题，不过好像当时讲复杂了。\n很容易知道答案就是每次减去被出列的人里面没有出过列的人在原序列里右边的比她矮的人的个数。\n所以每个人只会被算一次，均摊下来是O(n)的。然后就是怎么很快地找到这些人。我觉得用线段树比较方便，时间可以做到log。不知道是不是能用并查集。\n好写好调。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstdlib\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\n_s_ = 0;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nstruct seg {\nint l, r, v, p;\nseg *ls,\u0026nbsp;*rs;\n};\nconst int maxn = 500009;\nconst int inf = 0x3f3f3f3f;\nint n, m, h, a[maxn], s[maxn],\u0026nbsp;*r[maxn], t[maxn];\nqw ans;\nseg *rt,\u0026nbsp;*sp;\ninline bool cmpP(const int* a, const int* b)\u0026nbsp;{\nreturn *a\u0026nbsp;\u0026lt;\u0026nbsp;*b;\n}\nint btQry(int* t, int p)\u0026nbsp;{\nint s = 0;\nwhile (p)\ns += t[p], p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p);\nreturn s;\n}\nvoid btChg(int* t, int p, int v)\u0026nbsp;{\nwhile (p\u0026nbsp;\u0026lt; maxn)\nt[p]\u0026nbsp;+= v, p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p);\n}\n#define mid(p)\u0026nbsp;((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\nseg* sgtBuild(int l, int r)\u0026nbsp;{\nseg* p = sp ++;\np-\u0026gt; l = l;\np-\u0026gt; r = r;\np-\u0026gt; v = inf;\nif (l\u0026nbsp;+ 1 \u0026lt; r)\u0026nbsp;{\np-\u0026gt; ls = sgtBuild(l, mid(p));\np-\u0026gt; rs = sgtBuild(mid(p), r);\n}\nelse\np-\u0026gt; p = l;\nreturn p;\n}\nvoid sgtChg(seg* p, int p0, int v0)\u0026nbsp;{\nif (p-\u0026gt; l + 1 == p-\u0026gt; r)\np-\u0026gt; v = v0;\nelse {\nif (p0\u0026nbsp;\u0026lt; mid(p))\nsgtChg(p-\u0026gt; ls, p0, v0);\nelse\nsgtChg(p-\u0026gt; rs, p0, v0);\nif (p-\u0026gt; rs-\u0026gt; v \u0026lt;= p-\u0026gt; ls-\u0026gt; v)\u0026nbsp;{\np-\u0026gt; v = p-\u0026gt; rs-\u0026gt; v;\np-\u0026gt; p = p-\u0026gt; rs-\u0026gt; p;\n}\nelse {\np-\u0026gt; v = p-\u0026gt; ls-\u0026gt; v;\np-\u0026gt; p = p-\u0026gt; ls-\u0026gt; p;\n}\n}\n}\nint sgtLower(seg* p, int l, int v)\u0026nbsp;{\nif (l\u0026nbsp;== p-\u0026gt; l)\nreturn (p-\u0026gt; v \u0026lt;= v)\u0026nbsp;? p-\u0026gt; p : inf;\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nreturn sgtLower(p-\u0026gt; rs, l, v);\nelse {\nint x = sgtLower(p-\u0026gt; ls, l, v);\nif (x\u0026nbsp;\u0026lt; inf)\nreturn x;\nelse\nreturn (p-\u0026gt; rs-\u0026gt; v \u0026lt;= v)\u0026nbsp;? p-\u0026gt; rs-\u0026gt; p : inf;\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nsp = new seg[maxn * 3];\nreadInt(n);\nreadInt(m);\nrt = sgtBuild(1, n + 1);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(a[i]);\nr[i - 1]\u0026nbsp;= a + i;\n}\nsort(r, r + n, cmpP);\nfor (int i = 0, l =\u0026nbsp;*r[0]\u0026nbsp;- 1, v = 0; i \u0026lt; n;\u0026nbsp;++ i)\nif (*r[i]\u0026nbsp;== l)\n*r[i]\u0026nbsp;= v;\nelse\nl =\u0026nbsp;*r[i],\u0026nbsp;*r[i]\u0026nbsp;=\u0026nbsp;++ v;\nans = 0;\nfor (int i = n; i;\u0026nbsp;-- i)\u0026nbsp;{\nsgtChg(rt, i, a[i]);\ns[i]\u0026nbsp;= btQry(t, a[i]\u0026nbsp;- 1);\nans += s[i];\nbtChg(t, a[i], 1);\n}\nprintf(lld \u0026quot;\\n\u0026quot;, ans);\nwhile (m\u0026nbsp;--)\u0026nbsp;{\nint l, p;\nreadInt(l);\nint h = a[l];\nif (h\u0026nbsp;\u0026lt; inf)\nwhile ((p\u0026nbsp;= sgtLower(rt, l, h))\u0026nbsp;\u0026lt; inf)\u0026nbsp;{\nans -= s[p];\na[p]\u0026nbsp;= inf;\nsgtChg(rt, p, a[p]);\n}\nprintf(lld \u0026quot;\\n\u0026quot;, ans);\n}\n}\nHistorical Comments Unknown friend at 2014-11-14T19:14:19 OTL\nUnknown friend at 2014-11-14T21:09:07 居然有人回复，好感动～\nUnknown friend at 2014-11-14T22:33:39 专门注册了才好评论……不然你不知道我看过\nUnknown friend at 2014-11-15T08:47:35 tan\u0026hellip;\n","permalink":"/oi/lofterimport_096/","summary":"暑假的时候就听zhx讲过这题，不过好像当时讲复杂了。\n很容易知道答案就是每次减去被出列的人里面没有出过列的人在原序列里右边的比她矮的人的个数。\n所以每个人只会被算一次，均摊下来是O(n)的。然后就是怎么很快地找到这些人。我觉得用线段树比较方便，时间可以做到log。不知道是不是能用并查集。\n好写好调。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstdlib\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\n_s_ = 0;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nstruct seg {\nint l, r, v, p;\nseg *ls,\u0026nbsp;*rs;\n};\nconst int maxn = 500009;","title":"BZOJ3333 排队计划"},{"content":"连yjq都会做，简直是水暴了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\n\u0026nbsp;\nusingnamespacestd;\n\u0026nbsp;\nconstintmaxn = 20009;\n\u0026nbsp;\nintn, m, a[maxn], t[maxn],\u0026nbsp;*r[maxn], s;\n\u0026nbsp;\nintbtQry(int* t, intp)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; ints = 0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; while(p)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; s += t[p], p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; returns;\n}\n\u0026nbsp;\nvoidbtChg(int* t, intp, intv)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; while(p \u0026lt; maxn)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; t[p]\u0026nbsp;+= v, p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p);\n}\n\u0026nbsp;\ninlineboolcmpP(constint* a, constint* b)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; return*a \u0026lt;\u0026nbsp;*b;\n}\n\u0026nbsp;\nintmain()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\n\u0026nbsp;\u0026nbsp;\u0026nbsp; freopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\n\u0026nbsp;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; scanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;n);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; s = 0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 1; i \u0026lt;= n;\u0026nbsp;++ i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; scanf(\u0026quot;%d\u0026quot;, a + i), r[i - 1]\u0026nbsp;= a + i;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; sort(r, r + n, cmpP);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 0, l =\u0026nbsp;*r[0]\u0026nbsp;- 1, v = 0; i \u0026lt; n;\u0026nbsp;++ i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(*r[i]\u0026nbsp;== l)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;*r[i]\u0026nbsp;= v;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; else\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; l =\u0026nbsp;*r[i],\u0026nbsp;*r[i]\u0026nbsp;=\u0026nbsp;++ v;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; s += i - btQry(t, a[i])\u0026nbsp;- 1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; btChg(t, a[i], 1);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; printf(\u0026quot;%d\\n\u0026quot;, s);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; scanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;m);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; while(m --)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; intl, r;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; scanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;l,\u0026nbsp;\u0026amp;r);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(l \u0026gt; r)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; swap(l, r);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = l + 1; i \u0026lt; r;\u0026nbsp;++ i)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(a[i]\u0026nbsp;\u0026gt; a[r])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;-- s;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; elseif(a[i]\u0026nbsp;\u0026lt; a[r])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;++ s;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(a[i]\u0026nbsp;\u0026gt; a[l])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;++ s;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; elseif(a[i]\u0026nbsp;\u0026lt; a[l])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;-- s;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(a[l]\u0026nbsp;\u0026gt; a[r])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;-- s;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; elseif(a[l]\u0026nbsp;\u0026lt; a[r])\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;++ s;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; swap(a[l], a[r]);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; printf(\u0026quot;%d\\n\u0026quot;, s);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n}\nHistorical Comments Unknown friend at 2014-11-14T19:14:09 OTL\n","permalink":"/oi/lofterimport_097/","summary":"连yjq都会做，简直是水暴了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstring\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\n\u0026nbsp;\nusingnamespacestd;\n\u0026nbsp;\nconstintmaxn = 20009;\n\u0026nbsp;\nintn, m, a[maxn], t[maxn],\u0026nbsp;*r[maxn], s;\n\u0026nbsp;\nintbtQry(int* t, intp)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; ints = 0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; while(p)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; s += t[p], p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; returns;\n}\n\u0026nbsp;\nvoidbtChg(int* t, intp, intv)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; while(p \u0026lt; maxn)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; t[p]\u0026nbsp;+= v, p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p);\n}\n\u0026nbsp;\ninlineboolcmpP(constint* a, constint* b)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; return*a \u0026lt;\u0026nbsp;*b;\n}\n\u0026nbsp;\nintmain()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\n\u0026nbsp;\u0026nbsp;\u0026nbsp; freopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif","title":"BZOJ2141 排队"},{"content":"今天用unoffical数据测了。看到这个成绩感觉还是有点复杂。\n大概省rank10左右。扔江浙那边估计是二等奖都悬了。\n每天的前两题都还是稳住了，没有出啥事情。\n其实考试的时候拍出了一些问题，不过都改正了。\nday1第一题打表可过。要注意矩阵的左下三角和右上三角是相反的。\nday1第二题是树。考虑中间那个点加加减减就完了。最初乘暴了，幸好对拍出来了。\n出事的是bird。k=0的情况死硬了。也就是说让别人暴力过的六个点我扔了。\n这题是dp。转移的时候稍微优化一下，记下每个对xi取模之后的最小的fi-i/x就可以了。注意k=0的情况。\nday2第一题我用了二维前缀和。注意覆盖范围可以超出城市。\nday2第二题倒着一遍bfs去点然后正着一遍bfs就完了。\nday2第三题大概是不能过的，不过数据里后三个点都卡掉了自然溢出，还是有点郁闷。也许官方数据没有这么强吧。后来想出取模然后求导二分的做法，不过好像没有人提到。我也不想去写了。不过后30分还是悬之又悬啊。\n所以追逐了六年的ak之梦还是没有实现。毕竟我还太年轻。\n","permalink":"/diary/lofterimport_098/","summary":"今天用unoffical数据测了。看到这个成绩感觉还是有点复杂。\n大概省rank10左右。扔江浙那边估计是二等奖都悬了。\n每天的前两题都还是稳住了，没有出啥事情。\n其实考试的时候拍出了一些问题，不过都改正了。\nday1第一题打表可过。要注意矩阵的左下三角和右上三角是相反的。\nday1第二题是树。考虑中间那个点加加减减就完了。最初乘暴了，幸好对拍出来了。\n出事的是bird。k=0的情况死硬了。也就是说让别人暴力过的六个点我扔了。\n这题是dp。转移的时候稍微优化一下，记下每个对xi取模之后的最小的fi-i/x就可以了。注意k=0的情况。\nday2第一题我用了二维前缀和。注意覆盖范围可以超出城市。\nday2第二题倒着一遍bfs去点然后正着一遍bfs就完了。\nday2第三题大概是不能过的，不过数据里后三个点都卡掉了自然溢出，还是有点郁闷。也许官方数据没有这么强吧。后来想出取模然后求导二分的做法，不过好像没有人提到。我也不想去写了。不过后30分还是悬之又悬啊。\n所以追逐了六年的ak之梦还是没有实现。毕竟我还太年轻。","title":"NOIP2014 总结1"},{"content":"居然感冒了，嗓子痛死了。\n8:00 进考场了，不准动机器，那还怎么配vim啊TT\n8:30 这密码。看了下题好像也不是特别麻烦啊，除了最后一题有个10^10000。\n8:35 第一题敲完了？\n8:45 第二题敲完了？\n8:50 第三题想不出其它的做法啊。哈希吧。\n9:10 花了四十分钟就做完了？点开扫雷的时候看到了身旁某兄怨念的眼神。\n10:00 第三题极限数据居然会tle。想打数据分治但是觉得不好的。发现可以先用自然溢出，如果没有暴再用模质数检查。这样好像0.5s能跑完。希望评测机不要比这个机子慢太多。\n11:00 第一题居然把++ x写scanf上面了，作死。\n12:00 终于交卷了。又老了一岁的感觉。\n12:15 照相，讨论。jason_yu好像第三题写得不太一样，其他人基本都想得一样。看谁长得帅了。\n然后某人的第六次noip就结束了。\n","permalink":"/oi/lofterimport_099/","summary":"居然感冒了，嗓子痛死了。\n8:00 进考场了，不准动机器，那还怎么配vim啊TT\n8:30 这密码。看了下题好像也不是特别麻烦啊，除了最后一题有个10^10000。\n8:35 第一题敲完了？\n8:45 第二题敲完了？\n8:50 第三题想不出其它的做法啊。哈希吧。\n9:10 花了四十分钟就做完了？点开扫雷的时候看到了身旁某兄怨念的眼神。\n10:00 第三题极限数据居然会tle。想打数据分治但是觉得不好的。发现可以先用自然溢出，如果没有暴再用模质数检查。这样好像0.5s能跑完。希望评测机不要比这个机子慢太多。\n11:00 第一题居然把++ x写scanf上面了，作死。\n12:00 终于交卷了。又老了一岁的感觉。\n12:15 照相，讨论。jason_yu好像第三题写得不太一样，其他人基本都想得一样。看谁长得帅了。\n然后某人的第六次noip就结束了。","title":"NOIP2014 DIARY2"},{"content":"记得noi的时候写了日记，那么noip也那么写一写。\n听说今天的题很水，虽然我心里总有种不确定的感觉。\n6:00 醒了。好像下雨了，有点冷。再睡会。\n6:30 起床。\n7:40 到考场了。因为下雨所以外面的广场上都没站什么人。倒是看到了徐老和初中的小伙伴。\n8:10 开始配vim。好像我的键盘和旁边的同学不太一样，敲起来手感比较不错。\n8:25?\u0026nbsp;发密码了。很淡定地输入，打开。好像之前已经重复做这个动作做了很多遍了，异常淡定。\n8:30 第一题n才200？直接模拟？打表，写。\n8:40 原来第二题是树。写。\n8:55 第三题n*m^2会tle?难道不应该是f[i]-i=max(f[j]-j)?写！\n9:10 写完好晕，怎么过不了样例啊。打印中间变量发现如果上升的话就不会下降了，囧。\n9:40 好像写完了，对拍吧。\n10:xx 第二题居然乘暴了。原来要取模。\n11:xx 第三题拍出错了！？仔细一看暴力有bug。\n12:00 终于交卷了，尿胀慌了。\n出来看到小伙伴们也比较开心。心里还是那种很不确定的感觉。估分的时候扔了个300，大概是在向flag学说发出挑战。还好有mhy陪我挑战。\nday1就这么过去了。原来我是如此之年轻。\n","permalink":"/oi/lofterimport_100/","summary":"记得noi的时候写了日记，那么noip也那么写一写。\n听说今天的题很水，虽然我心里总有种不确定的感觉。\n6:00 醒了。好像下雨了，有点冷。再睡会。\n6:30 起床。\n7:40 到考场了。因为下雨所以外面的广场上都没站什么人。倒是看到了徐老和初中的小伙伴。\n8:10 开始配vim。好像我的键盘和旁边的同学不太一样，敲起来手感比较不错。\n8:25?\u0026nbsp;发密码了。很淡定地输入，打开。好像之前已经重复做这个动作做了很多遍了，异常淡定。\n8:30 第一题n才200？直接模拟？打表，写。\n8:40 原来第二题是树。写。\n8:55 第三题n*m^2会tle?难道不应该是f[i]-i=max(f[j]-j)?写！\n9:10 写完好晕，怎么过不了样例啊。打印中间变量发现如果上升的话就不会下降了，囧。\n9:40 好像写完了，对拍吧。\n10:xx 第二题居然乘暴了。原来要取模。\n11:xx 第三题拍出错了！？仔细一看暴力有bug。\n12:00 终于交卷了，尿胀慌了。\n出来看到小伙伴们也比较开心。心里还是那种很不确定的感觉。估分的时候扔了个300，大概是在向flag学说发出挑战。还好有mhy陪我挑战。\nday1就这么过去了。原来我是如此之年轻。","title":"NOIP2014 DIARY1"},{"content":"好奇怪的题目。\n明天就要考noip了。第六年了，该成熟点了。\n仿佛也在几个小时前有一些紧张。这么多年这么些路走过来了，这算是最后一博了吧？\n更多的是一种成长的感觉吧。这一年，改变了太多太多了。从noip2013的惨败开始，有wc的奇奇怪怪的noip后遗症，然后是省选莫名其妙自己扔了一百多分，然后混进noi又疏忽地把au拿去喂狗了。没有什么好看的成绩，只有一双越来越快的敲键盘的手。\n这两天的集训考得还是将就。但是也没有九月那么绝对了。也许是我的心态也没有经受住挑战，也许是大家都进步了吧。两者都有。总觉得过去的一切离我好遥远，好像去年的我和今年的我是老死不相识的两个人似的。这叫作成长？或者是太专注一件事情导致的沧桑？\noi就是那么玄妙。不见到ccf官网上的成绩，一切就是未知数。即使考前能场场ak，也说不准考场上会发生什么，何况我也没有那个实力去ak。换个角度说，noip，考的是细心。\n只能说调整好自己的心态，\u0026nbsp;淡定地去战斗吧。\n预祝所有人能成功，即使没有什么人会看到这句话。\n","permalink":"/oi/lofterimport_101/","summary":"好奇怪的题目。\n明天就要考noip了。第六年了，该成熟点了。\n仿佛也在几个小时前有一些紧张。这么多年这么些路走过来了，这算是最后一博了吧？\n更多的是一种成长的感觉吧。这一年，改变了太多太多了。从noip2013的惨败开始，有wc的奇奇怪怪的noip后遗症，然后是省选莫名其妙自己扔了一百多分，然后混进noi又疏忽地把au拿去喂狗了。没有什么好看的成绩，只有一双越来越快的敲键盘的手。\n这两天的集训考得还是将就。但是也没有九月那么绝对了。也许是我的心态也没有经受住挑战，也许是大家都进步了吧。两者都有。总觉得过去的一切离我好遥远，好像去年的我和今年的我是老死不相识的两个人似的。这叫作成长？或者是太专注一件事情导致的沧桑？\noi就是那么玄妙。不见到ccf官网上的成绩，一切就是未知数。即使考前能场场ak，也说不准考场上会发生什么，何况我也没有那个实力去ak。换个角度说，noip，考的是细心。\n只能说调整好自己的心态，\u0026nbsp;淡定地去战斗吧。\n预祝所有人能成功，即使没有什么人会看到这句话。","title":"noip2014 计划"},{"content":"noip前的最后一天了。\n第一题也没想出来。最后分块过的。既然能分块多半能线段树。\n第二题动态规划，不过我把暴力都写丑了。没救了。\n第三题倒是个水水的hash+dp。\n一年就晃完了。明天就上场了。\n","permalink":"/diary/lofterimport_102/","summary":"noip前的最后一天了。\n第一题也没想出来。最后分块过的。既然能分块多半能线段树。\n第二题动态规划，不过我把暴力都写丑了。没救了。\n第三题倒是个水水的hash+dp。\n一年就晃完了。明天就上场了。","title":"20141107 总结"},{"content":"信心题真是不给我信心。扫雷扫了好久只赢了一盘高级。\n其实做得比较心惊胆战，不过拍了之后好像也没出啥错。\n第一题三方的枚举+dp就能过。平方的断边找直径应该也行。\n第二题简单粗暴加个堆。或者排序就行了。\n第三题顺着走贪心好像没有拍出错。\n所以呢，虽然我还是年轻，但是noip还是要加油了。\n","permalink":"/diary/lofterimport_103/","summary":"信心题真是不给我信心。扫雷扫了好久只赢了一盘高级。\n其实做得比较心惊胆战，不过拍了之后好像也没出啥错。\n第一题三方的枚举+dp就能过。平方的断边找直径应该也行。\n第二题简单粗暴加个堆。或者排序就行了。\n第三题顺着走贪心好像没有拍出错。\n所以呢，虽然我还是年轻，但是noip还是要加油了。","title":"20141106 总结"},{"content":"严重地被打脸了。\n今天可能最后一题是比较难的吧。\n第一题直接费马小。依稀记得第一次知道这玩意是在noi2013的时候。然后竟然那么多人都不知道。不过十进制快速幂也能过的说。\n第二题是简单但是很恶心的搜索题。orz代码比我短的。\n第三题是最短路或者dp。最初想错了，把点拆少了。下午调了好一会。\n所以我就Naive地被打脸了。\n","permalink":"/diary/lofterimport_104/","summary":"严重地被打脸了。\n今天可能最后一题是比较难的吧。\n第一题直接费马小。依稀记得第一次知道这玩意是在noi2013的时候。然后竟然那么多人都不知道。不过十进制快速幂也能过的说。\n第二题是简单但是很恶心的搜索题。orz代码比我短的。\n第三题是最短路或者dp。最初想错了，把点拆少了。下午调了好一会。\n所以我就Naive地被打脸了。","title":"20141105 总结"},{"content":"原来lofter会自动忽略html格式。无语。\n今天用自己写的oj来评测的。虽然有点慢，不过和Lemon测出来结果差别不大。说明至少是写成功了的。\n但是自己比较不开心。\n第一题随便贪了个心。朴素dfs只能跑n=3的数据，不过还是过了。\n第二题离散前几天高一acm的时候好像有差不多的题吧。离散一下搞定。\n第三题顿时凌乱了。想了很久觉得不靠谱然后就去写了一个朴素。然后发现是题看错了。不开心。正解未知，不过暴力可过。\n然后我就真的太年轻了。\n","permalink":"/diary/lofterimport_105/","summary":"原来lofter会自动忽略html格式。无语。\n今天用自己写的oj来评测的。虽然有点慢，不过和Lemon测出来结果差别不大。说明至少是写成功了的。\n但是自己比较不开心。\n第一题随便贪了个心。朴素dfs只能跑n=3的数据，不过还是过了。\n第二题离散前几天高一acm的时候好像有差不多的题吧。离散一下搞定。\n第三题顿时凌乱了。想了很久觉得不靠谱然后就去写了一个朴素。然后发现是题看错了。不开心。正解未知，不过暴力可过。\n然后我就真的太年轻了。","title":"20141104 总结"},{"content":"\u0026nbsp;\u0026nbsp;昨天一天都在写oj连总结都忘写了\n\u0026nbsp;\u0026nbsp;依稀记得仿佛好像AK了。\n第一题是啥？cv上原题原来也讲过。就调和级数来算算时间就完了。\n第二题好像有点坑，std被卡掉了。反正就是搜索再多加点剪枝呗。还有记忆化。\n第三题又是啥？原题，加个map就完了。\n反正太年轻了。\n","permalink":"/diary/lofterimport_106/","summary":"\u0026nbsp;\u0026nbsp;昨天一天都在写oj连总结都忘写了\n\u0026nbsp;\u0026nbsp;依稀记得仿佛好像AK了。\n第一题是啥？cv上原题原来也讲过。就调和级数来算算时间就完了。\n第二题好像有点坑，std被卡掉了。反正就是搜索再多加点剪枝呗。还有记忆化。\n第三题又是啥？原题，加个map就完了。\n反正太年轻了。","title":"20141103 总结"},{"content":"今天t成250了。虽然三道题自测都能过。\n\u0026nbsp;\n第一题比较简单。不过我用了multiset然后它就tle了。\n\u0026nbsp;\n第二题讲过做过原题而且连高精都省了。\n\u0026nbsp;\n第三题写的dlx。其实不用这么麻烦，直接压位也能过。可是我就那么天真，还t掉了。惨不忍睹。\n\u0026nbsp;\n所以我太年轻了点。\n","permalink":"/diary/lofterimport_107/","summary":"今天t成250了。虽然三道题自测都能过。\n\u0026nbsp;\n第一题比较简单。不过我用了multiset然后它就tle了。\n\u0026nbsp;\n第二题讲过做过原题而且连高精都省了。\n\u0026nbsp;\n第三题写的dlx。其实不用这么麻烦，直接压位也能过。可是我就那么天真，还t掉了。惨不忍睹。\n\u0026nbsp;\n所以我太年轻了点。","title":"20141102 总结"},{"content":"噗一声ak它就飞掉了。\n今天考试其实难度要稍微高一点。写完所有代码大概花了两个小时。\n第一题还好。直接用单调性枚举边界。要注意一下边界的开和闭。然后分成四份算可以减少代码量。\n第二题居然是仙人掌。幸好不是动态的。做法也是用lca。不过每个仙人掌内部也要维护一下。写了200+行过掉了。虽然是第一次写。\n第三题是个dp。推了半天。拿ai做体积，最小化sigma(ai^2)。然后因为没有说平台编号一定是与高度正相关的。然后我很傻地去特判了一下ea[i]\u0026gt;eb[i]的东西，于是70分就飞走了。不高兴啊tan。noip的时候得注意认真看题。\n所以说我太过于年轻了。\n","permalink":"/diary/lofterimport_108/","summary":"噗一声ak它就飞掉了。\n今天考试其实难度要稍微高一点。写完所有代码大概花了两个小时。\n第一题还好。直接用单调性枚举边界。要注意一下边界的开和闭。然后分成四份算可以减少代码量。\n第二题居然是仙人掌。幸好不是动态的。做法也是用lca。不过每个仙人掌内部也要维护一下。写了200+行过掉了。虽然是第一次写。\n第三题是个dp。推了半天。拿ai做体积，最小化sigma(ai^2)。然后因为没有说平台编号一定是与高度正相关的。然后我很傻地去特判了一下ea[i]\u0026gt;eb[i]的东西，于是70分就飞走了。不高兴啊tan。noip的时候得注意认真看题。\n所以说我太过于年轻了。","title":"20141101"},{"content":"十月最后一场考试了。\nnoip又近一步了。\n今天的题还是比较简单。\n第一题直接gcd。不过要小心long long。\n第二题有点像去年提高day1的第二题。写法也差不多。就是分开求个逆序对。\n第三题树形dp。应该也可以用点分治，虽然还要多个log好麻烦的说。\noj第一次成功地交题，开心。不过还要继续努力。\n","permalink":"/diary/lofterimport_109/","summary":"十月最后一场考试了。\nnoip又近一步了。\n今天的题还是比较简单。\n第一题直接gcd。不过要小心long long。\n第二题有点像去年提高day1的第二题。写法也差不多。就是分开求个逆序对。\n第三题树形dp。应该也可以用点分治，虽然还要多个log好麻烦的说。\noj第一次成功地交题，开心。不过还要继续努力。","title":"20141031 总结"},{"content":"居然写了一半手贱就把所有东西都弄没了。严重地不开心。\n既然这样那么简单说吧。\n长度≤10^5这个条件在bzoj上没说。\n用fft求出长度和为leni的组数。\n枚举第三根火柴，可行的是（它作为最长的总组合数\u0026nbsp;-\u0026nbsp;（长度≤它的组合数））那么多组。\nfft必需常数够小。不写蝴蝶会tle。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cmath\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nstruct cplx {\ndouble r, i;\ninline cplx()\u0026nbsp;{\nr = 0, i = 0;\n}\ninline cplx(double r0, double i0)\u0026nbsp;{\nr = r0, i = i0;\n}\ninline cplx operator =(const cplx\u0026amp; a)\u0026nbsp;{\nr = a. r, i = a. i;\nreturn *this;\n}\ninline cplx operator +(const cplx\u0026amp; a)\u0026nbsp;{\nreturn cplx(r + a. r, i + a. i);\n}\ninline cplx operator -(const cplx\u0026amp; a)\u0026nbsp;{\nreturn cplx(r - a. r, i - a. i);\n}\ninline cplx operator *(const cplx\u0026amp; a)\u0026nbsp;{\nreturn cplx(r * a. r - i * a. i, r * a. i + i * a. r);\n}\n};\n#define pow2(x)\u0026nbsp;(1\u0026lt;\u0026lt;(x))\n#define _l (long long int)\nconst int maxn = 300009;\nconst double pi = asin(1)\u0026nbsp;* 2.0;\nint n, x[maxn], cn[maxn];\nqw v[maxn];\ncplx a[maxn], b[maxn];\nint cBit(int x)\u0026nbsp;{\nint s = 0;\nwhile (x\u0026nbsp;\u0026gt;\u0026gt;= 1)\n++ s;\nreturn s;\n}\nvoid rader(cplx* a, int n)\u0026nbsp;{\nfor (int i = 1, j =\u0026nbsp;(n\u0026nbsp;\u0026gt;\u0026gt; 1), k; i \u0026lt; n - 1;\u0026nbsp;++ i)\u0026nbsp;{\nif (i\u0026nbsp;\u0026lt; j)\nswap(a[i], a[j]);\nk = n \u0026gt;\u0026gt; 1;\nwhile (j\u0026nbsp;\u0026gt;= k)\u0026nbsp;{\nj -= k;\nk \u0026gt;\u0026gt;= 1;\n}\nif (j\u0026nbsp;\u0026lt; k)\nj += k;\n//printf(\u0026quot;%d %d\\n\u0026quot;, k, j);\n}\n}\nvoid fft(cplx* a, int n, bool rv = 0)\u0026nbsp;{\nrader(a, n);\nfor (int h = 2; h \u0026lt;= n; h \u0026lt;\u0026lt;= 1)\u0026nbsp;{\ncplx ww(cos(pi * 2 /\u0026nbsp;(double)h), sin(pi * 2 /\u0026nbsp;(double)h));\nif (rv)\nww. i =\u0026nbsp;- ww. i;\nfor (int i = 0; i \u0026lt; n; i += h)\u0026nbsp;{\ncplx w(1, 0);\nfor (int j = i; j \u0026lt; i +\u0026nbsp;(h\u0026nbsp;\u0026gt;\u0026gt; 1);\u0026nbsp;++ j)\u0026nbsp;{\ncplx x = a[j], y = a[j +\u0026nbsp;(h\u0026nbsp;\u0026gt;\u0026gt; 1)]\u0026nbsp;* w;\na[j]\u0026nbsp;= x + y;\na[j +\u0026nbsp;(h\u0026nbsp;\u0026gt;\u0026gt; 1)]\u0026nbsp;= x - y;\nw = w * ww;\n}\n}\n}\n}\ndouble sov()\u0026nbsp;{\nint m = 0, t;\nmemset(cn, 0, sizeof(cn));\nreadInt(n);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(x[i]);\n++ cn[x[i]];\nm = max(m, x[i]);\n}\nfor (t\u0026nbsp;= 1; t \u0026lt;= m; t \u0026lt;\u0026lt;= 1);\nt \u0026lt;\u0026lt;= 1;\nfor (int i = 0; i \u0026lt; t;\u0026nbsp;++ i)\na[i]\u0026nbsp;= cplx(cn[i], 0);\nfft(a, t);\nfor (int i = 0; i \u0026lt; t;\u0026nbsp;++ i)\nb[i]\u0026nbsp;= a[i]\u0026nbsp;* a[i];\nfft(b, t, 1);\nqw tot = _l n *\u0026nbsp;(n\u0026nbsp;- 1)\u0026nbsp;*\u0026nbsp;(n - 2)\u0026nbsp;/ 6, cnt = 0;\nfor (int i = 0; i \u0026lt; t;\u0026nbsp;++ i)\nv[i]\u0026nbsp;=\u0026nbsp;(qw)(b[i]. r / t + 0.499);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\n-- v[x[i]\u0026nbsp;\u0026lt;\u0026lt; 1];\nfor (int i = 1; i \u0026lt; t;\u0026nbsp;++ i)\nv[i]\u0026nbsp;+= v[i - 1];\nsort(x, x + n);\nfor (int i = 2; i \u0026lt; n;\u0026nbsp;++ i)\ncnt +=\u0026nbsp;(_l i *\u0026nbsp;(i\u0026nbsp;- 1)\u0026nbsp;- v[x[i]])\u0026nbsp;\u0026gt;\u0026gt; 1;\nreturn (double)cnt\u0026nbsp;/ tot;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nint t;\nreadInt(t);\nwhile (t\u0026nbsp;--)\nprintf(\u0026quot;%.7lf\\n\u0026quot;, sov());\n}\n","permalink":"/oi/lofterimport_110/","summary":"居然写了一半手贱就把所有东西都弄没了。严重地不开心。\n既然这样那么简单说吧。\n长度≤10^5这个条件在bzoj上没说。\n用fft求出长度和为leni的组数。\n枚举第三根火柴，可行的是（它作为最长的总组合数\u0026nbsp;-\u0026nbsp;（长度≤它的组合数））那么多组。\nfft必需常数够小。不写蝴蝶会tle。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cmath\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nstruct cplx {\ndouble r, i;\ninline cplx()\u0026nbsp;{\nr = 0, i = 0;\n}\ninline cplx(double r0, double i0)\u0026nbsp;{\nr = r0, i = i0;","title":"BZOJ3513 [MUTC2013]idiots"},{"content":"很久之前就看过的题。不过一直没有勇气去做。爱真的需要勇气。\nmex这个函数的性质比较奇妙。一端确定的话一定是单增的。两段和起来也一定是增加的。\n可以很方便地求出从1到任何一个位置的mex。考虑把询问离线。按左端点排序。如果去掉一个数，那么对于右端点在（从这个数到下一个等于这个数的位置）这一段里的询问，它的值至多是这个数。\n所以用线段树维护区修单查维护一下区间最小值就好了。注意如果没有下一个数了那么右端点是n。\n据说要离散不过被我用map给水过去了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;map\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nstruct seg {\nint l, r, z;\nseg *ls,\u0026nbsp;*rs;\n};\nstruct query {\nint l, r, n;\n};\ninline bool cmpQuery(const query\u0026amp; a, const query\u0026amp; b)\u0026nbsp;{\nreturn a. l \u0026lt; b. l;\n}\ntypedef pair \u0026lt;int, int\u0026gt; rpair;\nconst int maxn = 200009;\nconst int inf = 0x3f3f3f3f;\nint n, m, a[maxn], tmp[maxn], nv[maxn], m0[maxn], ans[maxn];\nbool fv[maxn];\nseg *rt,\u0026nbsp;*sp;\nquery q[maxn];\nmap \u0026lt;int, int\u0026gt; rp;\ninline bool cmpTmp(const int\u0026amp; x, const int\u0026amp; y)\u0026nbsp;{\nreturn (a[x]\u0026nbsp;\u0026lt; a[y])\u0026nbsp;||\u0026nbsp;(a[x]\u0026nbsp;== a[y]\u0026nbsp;\u0026amp;\u0026amp; x \u0026lt; y);\n}\n#define mid(p)\u0026nbsp;((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\nseg* sgtBuild(int l, int r)\u0026nbsp;{\nseg* p = sp ++;\np-\u0026gt; l = l;\np-\u0026gt; r = r;\np-\u0026gt; z = inf;\nif (l\u0026nbsp;+ 1 \u0026lt; r)\u0026nbsp;{\np-\u0026gt; ls = sgtBuild(l, mid(p));\np-\u0026gt; rs = sgtBuild(mid(p), r);\n}\nelse\np-\u0026gt; z = m0[l];\nreturn p;\n}\nvoid sgtChg(seg* p, int l, int r, int v)\u0026nbsp;{\nif (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r)\np-\u0026gt; z = min(p-\u0026gt; z, v);\nelse if (r\u0026nbsp;\u0026lt;= mid(p))\nsgtChg(p-\u0026gt; ls, l, r, v);\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nsgtChg(p-\u0026gt; rs, l, r, v);\nelse {\nsgtChg(p-\u0026gt; ls, l, mid(p), v);\nsgtChg(p-\u0026gt; rs, mid(p), r, v);\n}\n}\nint sgtQry(seg* p, int p0)\u0026nbsp;{\nif (p-\u0026gt; l + 1 == p-\u0026gt; r)\nreturn p-\u0026gt; z;\nelse if (p0\u0026nbsp;\u0026lt; mid(p))\nreturn min(sgtQry(p-\u0026gt; ls, p0), p-\u0026gt; z);\nelse\nreturn min(sgtQry(p-\u0026gt; rs, p0), p-\u0026gt; z);\n}\nvoid preSeq()\u0026nbsp;{\na[0]\u0026nbsp;=\u0026nbsp;-1;\nfor (int i = 0; i \u0026lt;= n;\u0026nbsp;++ i)\ntmp[i]\u0026nbsp;= i;\nsort(tmp, tmp + n + 1, cmpTmp);\nm0[n]\u0026nbsp;= 0;\nfor (int i = 0; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nif (a[tmp[i]]\u0026nbsp;== m0[n])\n++ m0[n];\nif (i\u0026nbsp;\u0026amp;\u0026amp; a[tmp[i]]\u0026nbsp;\u0026gt; a[tmp[i - 1]])\nfv[tmp[i]]\u0026nbsp;= 1;\nelse\nfv[tmp[i]]\u0026nbsp;= 0;\n}\nnv[n]\u0026nbsp;=\u0026nbsp;-1;\nfor (int i = n; i;\u0026nbsp;-- i)\u0026nbsp;{\nif (!fv[i]\u0026nbsp;|| a[i]\u0026nbsp;\u0026gt; m0[i])\nm0[i - 1]\u0026nbsp;= m0[i];\nelse\nm0[i - 1]\u0026nbsp;= a[i];\nmap \u0026lt;int, int\u0026gt;\u0026nbsp;:: iterator it = rp. find(a[i]);\nif (it\u0026nbsp;== rp. end())\u0026nbsp;{\nnv[i]\u0026nbsp;=\u0026nbsp;-1;\nrp. insert(rpair(a[i], i));\n}\nelse {\nnv[i]\u0026nbsp;= it-\u0026gt; second;\nit-\u0026gt; second = i;\n}\n}\nsp = new seg[maxn * 3];\nrt = sgtBuild(1, n + 1);\n}\nvoid rmvNum(int i)\u0026nbsp;{\nif (nv[i]\u0026nbsp;\u0026gt;\u0026nbsp;-1)\nsgtChg(rt, i, nv[i], a[i]);\nelse\nsgtChg(rt, i, n + 1, a[i]);\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\nreadInt(m);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nreadInt(a[i]);\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(q[i]. l);\nreadInt(q[i]. r);\nq[i]. n = i;\n}\nsort(q, q + m, cmpQuery);\npreSeq();\nfor (int i = 0, j = 1; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nfor (; j \u0026lt; q[i]. l;\u0026nbsp;++ j)\nrmvNum(j);\nans[q[i]. n]\u0026nbsp;= sgtQry(rt, q[i]. r);\n}\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\nprintf(\u0026quot;%d\\n\u0026quot;, ans[i]);\n}\n","permalink":"/oi/lofterimport_112/","summary":"很久之前就看过的题。不过一直没有勇气去做。爱真的需要勇气。\nmex这个函数的性质比较奇妙。一端确定的话一定是单增的。两段和起来也一定是增加的。\n可以很方便地求出从1到任何一个位置的mex。考虑把询问离线。按左端点排序。如果去掉一个数，那么对于右端点在（从这个数到下一个等于这个数的位置）这一段里的询问，它的值至多是这个数。\n所以用线段树维护区修单查维护一下区间最小值就好了。注意如果没有下一个数了那么右端点是n。\n据说要离散不过被我用map给水过去了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;map\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nstruct seg {\nint l, r, z;\nseg *ls,\u0026nbsp;*rs;\n};\nstruct query {\nint l, r, n;\n};\ninline bool cmpQuery(const query\u0026amp; a, const query\u0026amp; b)\u0026nbsp;{\nreturn a. l \u0026lt; b.","title":"BZOJ3585 mex"},{"content":"今天好像又AK了。其实就打了一个多小时的代码，后面就在对拍和玩旁边的服务器还有和emacs下五子棋啥的TT\n好像是个天津人出的，noi还没有smy考得好。tan。\n第一题倒着做并查集就好了。上个寒假就做过。拿set存边挺短的。\n第二题是树。直接用dfs序+树状数组就搞定了。std还写错了。改在线的数据好痛苦啊。\n第三题不就是tarjan求scc么。虽然很久没有写过tarjan了都快忘了不过还是一次写对了。\n所以今天是我年轻了吧。\u0026nbsp;\n","permalink":"/diary/lofterimport_113/","summary":"今天好像又AK了。其实就打了一个多小时的代码，后面就在对拍和玩旁边的服务器还有和emacs下五子棋啥的TT\n好像是个天津人出的，noi还没有smy考得好。tan。\n第一题倒着做并查集就好了。上个寒假就做过。拿set存边挺短的。\n第二题是树。直接用dfs序+树状数组就搞定了。std还写错了。改在线的数据好痛苦啊。\n第三题不就是tarjan求scc么。虽然很久没有写过tarjan了都快忘了不过还是一次写对了。\n所以今天是我年轻了吧。\u0026nbsp;","title":"20141030 总结"},{"content":"只要你尽力了，她便不会怪罪你。\n所以今天好像AK了，虽然第三题不是正解。\n第一题水过。直接找连续的区间，相邻的判一下。\n第二题比较不好想。但是想了一会还是想到了。对于一个操作如果有等效的操作那么不算，否则答案*2。用并查集可以做到O(n)。代码也很短。\n第三题比较坑。多解的情况std没有判，所以少了20分，虽然后来改回来了。正解比较迷离。不过朴素就能过。看到题的第一反应是这题数据好难造。\n所以我依然是年轻的。\u0026nbsp;\n","permalink":"/diary/lofterimport_114/","summary":"只要你尽力了，她便不会怪罪你。\n所以今天好像AK了，虽然第三题不是正解。\n第一题水过。直接找连续的区间，相邻的判一下。\n第二题比较不好想。但是想了一会还是想到了。对于一个操作如果有等效的操作那么不算，否则答案*2。用并查集可以做到O(n)。代码也很短。\n第三题比较坑。多解的情况std没有判，所以少了20分，虽然后来改回来了。正解比较迷离。不过朴素就能过。看到题的第一反应是这题数据好难造。\n所以我依然是年轻的。\u0026nbsp;","title":"20141029 总结"},{"content":"被严重地打脸了。\n今天考得再次稀烂。\n第一题输出方案的五十分没有输出答案。\n第二题想歪了。正解也比较不好懂。至少到现在没想清楚为什么是2。\n第三题明明前缀和非要写树状数组。虽然我感觉树状数组可能会比较好写。不过，naive。\n下午写了点bzoj的水题都懒得发题解了。\n\u0026nbsp;\u0026nbsp;晚上学一学html也当放松了吧。\u0026nbsp;\u0026nbsp;虽然没有成功地在这句话上加上链接。\n","permalink":"/diary/lofterimport_115/","summary":"被严重地打脸了。\n今天考得再次稀烂。\n第一题输出方案的五十分没有输出答案。\n第二题想歪了。正解也比较不好懂。至少到现在没想清楚为什么是2。\n第三题明明前缀和非要写树状数组。虽然我感觉树状数组可能会比较好写。不过，naive。\n下午写了点bzoj的水题都懒得发题解了。\n\u0026nbsp;\u0026nbsp;晚上学一学html也当放松了吧。\u0026nbsp;\u0026nbsp;虽然没有成功地在这句话上加上链接。","title":"20141028 总结"},{"content":"比较神奇的一道树的题。\n做法是离线。想了好久的在线啊。\n把询问拆成0~l-1和0~r。挨个从0开始加点。加点就是把从根到这个点的所有点权+1，询问就是询问这个点到根的点权和。好机智的做法。\n代码还比较舒服。dfs+树链剖分+树状数组。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t;\nedge *next;\n};\nstruct query {\nint p, v, n, c;\ninline query(int p0 = 0, int v0 = 0, int n0 = 0, int c0 = 0)\u0026nbsp;{\np = p0, v = v0, n = n0, c = c0;\n}\n};\nconst int maxn = 50009;\nconst int mod = 201314;\nvoid btChg(int* t, int p, int v)\u0026nbsp;{\nwhile (p\u0026nbsp;\u0026lt; maxn)\n(t[p]\u0026nbsp;+= v)\u0026nbsp;%= mod, p +=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p);\n}\nint btQry(int* t, int p)\u0026nbsp;{\nint s = 0;\nwhile (p)\n(s += t[p])\u0026nbsp;%= mod, p -=\u0026nbsp;(p\u0026nbsp;\u0026amp;\u0026nbsp;-p);\nreturn s;\n}\ninline bool cmpQuery(const query\u0026amp; a, const query\u0026amp; b)\u0026nbsp;{\nreturn a. p \u0026lt; b. p;\n}\nedge *head[maxn],\u0026nbsp;*ep;\nquery q[maxn * 2];\nint n, m, fa[maxn], ans[maxn];\nint tc, sz[maxn], fc[maxn], ch[maxn], fs[maxn];\nint dfo[maxn], dfb[maxn];\nint t[maxn], s[maxn];\ninline void addEdge(int u, int v)\u0026nbsp;{\nep-\u0026gt; t = v;\nep-\u0026gt; next = head[u];\nhead[u]\u0026nbsp;= ep ++;\n}\nvoid dfs()\u0026nbsp;{\nstatic int stc[maxn];\nint tstc = 1, dfn = 0;\nstc[1]\u0026nbsp;= 0;\nwhile (tstc)\u0026nbsp;{\nint p = stc[tstc --];\ndfo[++ dfn]\u0026nbsp;= p;\ndfb[p]\u0026nbsp;= dfn;\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (!dfb[e-\u0026gt; t])\nstc[++ tstc]\u0026nbsp;= e-\u0026gt; t;\n}\ntc = 0;\nfor (int i = n; i;\u0026nbsp;-- i)\u0026nbsp;{\nint p = dfo[i], x =\u0026nbsp;-1;\nsz[p]\u0026nbsp;= 1;\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (dfb[e-\u0026gt; t]\u0026nbsp;\u0026gt; dfb[p])\u0026nbsp;{\nsz[p]\u0026nbsp;+= sz[e-\u0026gt; t];\nif (x\u0026nbsp;==\u0026nbsp;-1\u0026nbsp;|| sz[e-\u0026gt; t]\u0026nbsp;\u0026gt; sz[x])\nx = e-\u0026gt; t;\n}\nfs[p]\u0026nbsp;= x;\nif (x\u0026nbsp;==\u0026nbsp;-1)\u0026nbsp;{\nfc[p]\u0026nbsp;=\u0026nbsp;++ tc;\nch[fc[p]]\u0026nbsp;= p;\n}\nelse {\nfc[p]\u0026nbsp;= fc[x];\nch[fc[p]]\u0026nbsp;= p;\n}\n}\ntstc = 1;\nstc[1]\u0026nbsp;= 0;\ndfn = 0;\nmemset(dfb, 0, sizeof(dfb));\nwhile (tstc)\u0026nbsp;{\nint p = stc[tstc --];\ndfo[++ dfn]\u0026nbsp;= p;\ndfb[p]\u0026nbsp;= dfn;\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (e-\u0026gt; t ^ fs[p])\nstc[++ tstc]\u0026nbsp;= e-\u0026gt; t;\nif (fs[p]\u0026nbsp;\u0026gt;\u0026nbsp;-1)\nstc[++ tstc]\u0026nbsp;= fs[p];\n}\n}\nvoid segChg(int l, int r, int v)\u0026nbsp;{\nbtChg(t, l, v);\nbtChg(s, l, l * v % mod);\nbtChg(t, r + 1, mod - v);\nbtChg(s, r + 1, mod -\u0026nbsp;(r\u0026nbsp;+ 1)\u0026nbsp;* v % mod);\n}\nint segQry(int l, int r)\u0026nbsp;{\nreturn ((btQry(t, r)\u0026nbsp;*\u0026nbsp;(r + 1)\u0026nbsp;% mod - btQry(s, r)\\\n- btQry(t, l - 1)\u0026nbsp;* l % mod + btQry(s, l - 1))\u0026nbsp;% mod + mod)\u0026nbsp;% mod;\n}\nvoid ins(int p)\u0026nbsp;{\nwhile (p\u0026nbsp;^\u0026nbsp;-1)\u0026nbsp;{\nsegChg(dfb[ch[fc[p]]], dfb[p], 1);\np = fa[ch[fc[p]]];\n}\n}\nint qry(int p)\u0026nbsp;{\nint s = 0;\nwhile (p\u0026nbsp;^\u0026nbsp;-1)\u0026nbsp;{\n(s += segQry(dfb[ch[fc[p]]], dfb[p]))\u0026nbsp;%= mod;\np = fa[ch[fc[p]]];\n}\nreturn s;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nmemset(head, 0, sizeof(head));\nep = new edge[maxn * 2];\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m);\nfa[0]\u0026nbsp;=\u0026nbsp;-1;\nfor (int i = 1; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nscanf(\u0026quot;%d\u0026quot;, fa + i);\naddEdge(fa[i], i);\n}\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nint l, r, p;\nscanf(\u0026quot;%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;l,\u0026nbsp;\u0026amp;r,\u0026nbsp;\u0026amp;p);\nq[i \u0026lt;\u0026lt; 1]\u0026nbsp;= query(l - 1, p, i,\u0026nbsp;-1);\nq[(i \u0026lt;\u0026lt; 1)\u0026nbsp;| 1]\u0026nbsp;= query(r, p, i, 1);\n}\nsort(q, q + m * 2, cmpQuery);\ndfs();\nfor (int i = 0, j = 0; j \u0026lt; m * 2;)\u0026nbsp;{\nfor (; i \u0026lt;= q[j]. p;\u0026nbsp;++ i)\nins(i);\nfor (; j \u0026lt; m * 2 \u0026amp;\u0026amp; q[j]. p == i - 1;\u0026nbsp;++ j)\nans[q[j]. n]\u0026nbsp;+= q[j]. c * qry(q[j]. v);\n}\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\nprintf(\u0026quot;%d\\n\u0026quot;,\u0026nbsp;(ans[i]\u0026nbsp;% mod + mod)\u0026nbsp;% mod);\n}\n","permalink":"/oi/lofterimport_116/","summary":"比较神奇的一道树的题。\n做法是离线。想了好久的在线啊。\n把询问拆成0~l-1和0~r。挨个从0开始加点。加点就是把从根到这个点的所有点权+1，询问就是询问这个点到根的点权和。好机智的做法。\n代码还比较舒服。dfs+树链剖分+树状数组。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t;\nedge *next;\n};\nstruct query {\nint p, v, n, c;\ninline query(int p0 = 0, int v0 = 0, int n0 = 0, int c0 = 0)\u0026nbsp;{\np = p0, v = v0, n = n0, c = c0;\n}\n};\nconst int maxn = 50009;\nconst int mod = 201314;","title":"BZOJ3626 LCA"},{"content":"死得很惨。\n其实前两题和第三题的70分都不难。\n第一题是简单数学题。不过没有看到绝对值符号，于是光荣wa20。\n第二题数据分治的时候脑子抽了一抽，然后常数打错直接再见了。\n第三题前60分简单贪心拿到了。剩下10分懒得写了。再剩下的玩意不会啊。\norz xyz。\n","permalink":"/diary/lofterimport_117/","summary":"死得很惨。\n其实前两题和第三题的70分都不难。\n第一题是简单数学题。不过没有看到绝对值符号，于是光荣wa20。\n第二题数据分治的时候脑子抽了一抽，然后常数打错直接再见了。\n第三题前60分简单贪心拿到了。剩下10分懒得写了。再剩下的玩意不会啊。\norz xyz。","title":"20141027 总结"},{"content":"离noip只有12天了。这是我的倒数第二次noip中，正数第六次。\n作为一个老人不需要太多的惊慌或者什么的。保持一颗平和与淡定的心是最重要的。\n接下来都是连续的考试了。总共有10套题。这个时候也不是大规划地去补算法的时候。更多的是要调整好自己，学会怎样去应试。\noi中的一系列赛事里只有noip是三个半小时，而不是五个小时。当然它的难度与普及度决定了这一点。所以你没有更多的时间去思考和感受。更多需要的是准确的直觉和高效的代码。\n任何一个小处的失误，都是致使的。唯一的办法是检查，检查，再检查。后面的考试里尽量要多坐一会，能对拍的都多拍一些数据。可能考试的时候还是会用windows，虽然这几天还是在noi-linux下练习。不过这也只是写bash脚本对拍和写bat对拍的小小区别而已。当然不要在这些小细节上浪费时间。不行用cpp就好。\nnoip的题目更多的在于思维难度，而不是代码难度。所以也要养成多动笔多打草稿多yy的习惯。\n每天的安排也就是上午写题下午补题顺便刷题晚上刷题跑步散心睡觉。\n嗯，哦，唉，\u0026times;，fighting。\n","permalink":"/oi/lofterimport_118/","summary":"离noip只有12天了。这是我的倒数第二次noip中，正数第六次。\n作为一个老人不需要太多的惊慌或者什么的。保持一颗平和与淡定的心是最重要的。\n接下来都是连续的考试了。总共有10套题。这个时候也不是大规划地去补算法的时候。更多的是要调整好自己，学会怎样去应试。\noi中的一系列赛事里只有noip是三个半小时，而不是五个小时。当然它的难度与普及度决定了这一点。所以你没有更多的时间去思考和感受。更多需要的是准确的直觉和高效的代码。\n任何一个小处的失误，都是致使的。唯一的办法是检查，检查，再检查。后面的考试里尽量要多坐一会，能对拍的都多拍一些数据。可能考试的时候还是会用windows，虽然这几天还是在noi-linux下练习。不过这也只是写bash脚本对拍和写bat对拍的小小区别而已。当然不要在这些小细节上浪费时间。不行用cpp就好。\nnoip的题目更多的在于思维难度，而不是代码难度。所以也要养成多动笔多打草稿多yy的习惯。\n每天的安排也就是上午写题下午补题顺便刷题晚上刷题跑步散心睡觉。\n嗯，哦，唉，\u0026times;，fighting。","title":"20141027-1107 计划"},{"content":"上午下午刷bzoj的数据结构题比较开心。虽然死了好多脑细胞。\n以为晚上的题会比较难，结果就不是一套。\n第一题扫描线裸题。数据有错。\n第二题只和对角线有关。呵呵题。\n第三题写丑了。其实一个多简单的贪心的。\n看来我是没救了。\n","permalink":"/diary/lofterimport_119/","summary":"上午下午刷bzoj的数据结构题比较开心。虽然死了好多脑细胞。\n以为晚上的题会比较难，结果就不是一套。\n第一题扫描线裸题。数据有错。\n第二题只和对角线有关。呵呵题。\n第三题写丑了。其实一个多简单的贪心的。\n看来我是没救了。","title":"20141023 总结"},{"content":"一堆标记的线段树。\n翻过的，没翻过的，都分开记下来。然后还要注意flip标记与set标记的优先级关系和互相之间的影响。然后就完了。\n虽说在这个颓废的下午还是花了好一会才调通。\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct dat {\nint l, r, s, t, m;\n};\nstruct seg {\nint l, r, f, z;\ndat d[2];\nseg *ls,\u0026nbsp;*rs;\n};\nconst int maxn = 100009;\nseg *rt,\u0026nbsp;*sp;\nint n, m, a[maxn];\ninline dat sgd(int v, int s = 1)\u0026nbsp;{\ndat r;\nr. l = s * v;\nr. r = s * v;\nr. s = s * v;\nr. t = s;\nr. m = s * v;\nreturn r;\n}\ninline dat mgd(const dat\u0026amp; a, const dat\u0026amp; b)\u0026nbsp;{\ndat r;\nr. l =\u0026nbsp;((a. l == a. t)\u0026nbsp;?\u0026nbsp;(a. t + b. l)\u0026nbsp;: a. l);\nr. r =\u0026nbsp;((b. r == b. t)\u0026nbsp;?\u0026nbsp;(b. t + a. r)\u0026nbsp;: b. r);\nr. s = max(max(a. s, b. s), a. r + b. l);\nr. t = a. t + b. t;\nr. m = a. m + b. m;\nreturn r;\n}\n#define mid(p)\u0026nbsp;((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\ninline void update(seg* p)\u0026nbsp;{\nif (p-\u0026gt; z \u0026gt;\u0026nbsp;-1)\u0026nbsp;{\np-\u0026gt; d[0]\u0026nbsp;= sgd(p-\u0026gt; z, p-\u0026gt; r - p-\u0026gt; l);\np-\u0026gt; d[1]\u0026nbsp;= sgd(p-\u0026gt; z ^ 1, p-\u0026gt; r - p-\u0026gt; l);\n}\nelse if (p-\u0026gt; l + 1 == p-\u0026gt; r)\u0026nbsp;{\np-\u0026gt; d[0]\u0026nbsp;= sgd(a[p-\u0026gt; l]\u0026nbsp;^ p-\u0026gt; f);\np-\u0026gt; d[1]\u0026nbsp;= sgd(a[p-\u0026gt; l]\u0026nbsp;^ p-\u0026gt; f ^ 1);\n}\nelse {\np-\u0026gt; d[p-\u0026gt; f]\u0026nbsp;= mgd(p-\u0026gt; ls-\u0026gt; d[0], p-\u0026gt; rs-\u0026gt; d[0]);\np-\u0026gt; d[p-\u0026gt; f ^ 1]\u0026nbsp;= mgd(p-\u0026gt; ls-\u0026gt; d[1], p-\u0026gt; rs-\u0026gt; d[1]);\n}\n}\ninline void pushDown(seg* p)\u0026nbsp;{\nif (p-\u0026gt; f)\u0026nbsp;{\np-\u0026gt; ls-\u0026gt; f ^= 1;\nif (p-\u0026gt; ls-\u0026gt; z \u0026gt;\u0026nbsp;-1)\np-\u0026gt; ls-\u0026gt; z ^= 1;\np-\u0026gt; rs-\u0026gt; f ^= 1;\nif (p-\u0026gt; rs-\u0026gt; z \u0026gt;\u0026nbsp;-1)\np-\u0026gt; rs-\u0026gt; z ^= 1;\np-\u0026gt; f = 0;\n}\nif (p-\u0026gt; z \u0026gt;\u0026nbsp;-1)\u0026nbsp;{\np-\u0026gt; ls-\u0026gt; z = p-\u0026gt; z;\np-\u0026gt; rs-\u0026gt; z = p-\u0026gt; z;\np-\u0026gt; z =\u0026nbsp;-1;\n}\nupdate(p-\u0026gt; ls);\nupdate(p-\u0026gt; rs);\n}\ninline seg* sgtBuild(int l, int r)\u0026nbsp;{\nseg* p = sp ++;\np-\u0026gt; l = l;\np-\u0026gt; r = r;\np-\u0026gt; f = 0;\np-\u0026gt; z =\u0026nbsp;-1;\nif (l\u0026nbsp;+ 1 == r)\u0026nbsp;{\np-\u0026gt; d[0]\u0026nbsp;= sgd(a[l]);\np-\u0026gt; d[1]\u0026nbsp;= sgd(a[l]\u0026nbsp;^ 1);\n}\nelse {\np-\u0026gt; ls = sgtBuild(l, mid(p));\np-\u0026gt; rs = sgtBuild(mid(p), r);\np-\u0026gt; d[0]\u0026nbsp;= mgd(p-\u0026gt; ls-\u0026gt; d[0], p-\u0026gt; rs-\u0026gt; d[0]);\np-\u0026gt; d[1]\u0026nbsp;= mgd(p-\u0026gt; ls-\u0026gt; d[1], p-\u0026gt; rs-\u0026gt; d[1]);\n}\nreturn p;\n}\nvoid sgtSet(seg* p, int l, int r, int v)\u0026nbsp;{\nif (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r)\np-\u0026gt; z = v;\nelse {\npushDown(p);\nif (r\u0026nbsp;\u0026lt;= mid(p))\nsgtSet(p-\u0026gt; ls, l, r, v);\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nsgtSet(p-\u0026gt; rs, l, r, v);\nelse {\nsgtSet(p-\u0026gt; ls, l, mid(p), v);\nsgtSet(p-\u0026gt; rs, mid(p), r, v);\n}\n}\nupdate(p);\n}\nvoid sgtRev(seg* p, int l, int r)\u0026nbsp;{\nif (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r)\u0026nbsp;{\np-\u0026gt; f ^= 1;\nif (p-\u0026gt; z \u0026gt;\u0026nbsp;-1)\np-\u0026gt; z ^= 1;\n}\nelse {\npushDown(p);\nif (r\u0026nbsp;\u0026lt;= mid(p))\nsgtRev(p-\u0026gt; ls, l, r);\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nsgtRev(p-\u0026gt; rs, l, r);\nelse {\nsgtRev(p-\u0026gt; ls, l, mid(p));\nsgtRev(p-\u0026gt; rs, mid(p), r);\n}\n}\nupdate(p);\n}\ndat sgtQry(seg* p, int l, int r)\u0026nbsp;{\nif (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r)\nreturn p-\u0026gt; d[0];\nelse if (p-\u0026gt; z \u0026gt;\u0026nbsp;-1)\nreturn sgd(p-\u0026gt; z, r - l);\nelse {\npushDown(p);\nif (r\u0026nbsp;\u0026lt;= mid(p))\nreturn sgtQry(p-\u0026gt; ls, l, r);\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nreturn sgtQry(p-\u0026gt; rs, l, r);\nelse\nreturn mgd(sgtQry(p-\u0026gt; ls, l, mid(p)), sgtQry(p-\u0026gt; rs, mid(p), r));\n}\n}\nvoid sgtDisp(seg* p, bool r = 0, bool s = 1)\u0026nbsp;{\nif (p-\u0026gt; z \u0026gt;\u0026nbsp;-1)\nfor (int i = p-\u0026gt; l; i \u0026lt; p-\u0026gt; r;\u0026nbsp;++ i)\nprintf(\u0026quot;%d\u0026quot;, p-\u0026gt; z ^ r);\nelse if (p-\u0026gt; l + 1 == p-\u0026gt; r)\nprintf(\u0026quot;%d\u0026quot;, p-\u0026gt; d[0]. s ^ r);\nelse {\nsgtDisp(p-\u0026gt; ls, r ^ p-\u0026gt; f, 0);\nsgtDisp(p-\u0026gt; rs, r ^ p-\u0026gt; f, 0);\n}\nif (s)\nputchar(10);\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;n,\u0026nbsp;\u0026amp;m);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nscanf(\u0026quot;%d\u0026quot;, a + i);\nsp = new seg[maxn * 3];\nrt = sgtBuild(0, n);\nwhile (m\u0026nbsp;--)\u0026nbsp;{\nint opt, a, b;\nscanf(\u0026quot;%d%d%d\u0026quot;,\u0026nbsp;\u0026amp;opt,\u0026nbsp;\u0026amp;a,\u0026nbsp;\u0026amp;b);\nif (opt\u0026nbsp;\u0026lt;= 1)\nsgtSet(rt, a, b + 1, opt);\nelse if (opt\u0026nbsp;== 2)\nsgtRev(rt, a, b + 1);\nelse {\ndat g = sgtQry(rt, a, b + 1);\nif (opt\u0026nbsp;== 3)\nprintf(\u0026quot;%d\\n\u0026quot;, g. m);\nelse\nprintf(\u0026quot;%d\\n\u0026quot;, g. s);\n}\n//sgtDisp(rt);\n}\n}\n","permalink":"/oi/lofterimport_120/","summary":"一堆标记的线段树。\n翻过的，没翻过的，都分开记下来。然后还要注意flip标记与set标记的优先级关系和互相之间的影响。然后就完了。\n虽说在这个颓废的下午还是花了好一会才调通。\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct dat {\nint l, r, s, t, m;\n};\nstruct seg {\nint l, r, f, z;\ndat d[2];\nseg *ls,\u0026nbsp;*rs;\n};\nconst int maxn = 100009;\nseg *rt,\u0026nbsp;*sp;\nint n, m, a[maxn];\ninline dat sgd(int v, int s = 1)\u0026nbsp;{\ndat r;\nr. l = s * v;\nr. r = s * v;\nr. s = s * v;","title":"BZOJ1858 序列操作"},{"content":"数据结构题总是很令人开心的。\n这题据说可以主席树？好麻烦的说。\n树链剖分+线段树+treap就好了吧。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstdlib\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t;\nedge *next;\n};\nstruct seg {\nint l, r, v;\nseg *ls,\u0026nbsp;*rs;\n};\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxn = 80009;\nconst int maxv = 1e8;\nnamespace treap {\nstruct node {\nint ls, rs, v, w, sz;\n};\nconst int maxnd = 80009 * 19;\nnode a[maxnd];\nint tn, nst[maxnd];\nvoid init()\u0026nbsp;{\nsrand(239407234);\na[0]. sz = 0;\ntn = 0;\nfor (int i = 1; i \u0026lt; maxnd;\u0026nbsp;++ i)\nnst[++ tn]\u0026nbsp;= i;\n}\ninline int newNode(int v)\u0026nbsp;{\nint p = nst[tn --];\na[p]. ls = 0;\na[p]. rs = 0;\na[p]. v = v;\na[p]. w = rand()\u0026nbsp;|\u0026nbsp;(rand()\u0026nbsp;\u0026lt;\u0026lt; 16);\na[p]. sz = 1;\nreturn p;\n}\ninline void update(const int\u0026amp; p)\u0026nbsp;{\na[p]. sz = a[a[p]. ls]. sz + a[a[p]. rs]. sz + 1;\n}\ninline void lRot(int\u0026amp; p)\u0026nbsp;{\nint q = a[p]. rs;\na[p]. rs = a[q]. ls;\na[q]. ls = p;\nupdate(p);\nupdate(q);\np = q;\n}\ninline void rRot(int\u0026amp; p)\u0026nbsp;{\nint q = a[p]. ls;\na[p]. ls = a[q]. rs;\na[q]. rs = p;\nupdate(p);\nupdate(q);\np = q;\n}\ninline void maintain(int\u0026amp; p, bool d)\u0026nbsp;{\nif (d)\u0026nbsp;{\nif (a[a[p]. ls]. w \u0026gt; a[p]. w)\nrRot(p);\n}\nelse\nif (a[a[p]. rs]. w \u0026gt; a[p]. w)\nlRot(p);\n}\ninline void ins(int\u0026amp; p, int v)\u0026nbsp;{\nif (!p)\np = newNode(v);\nelse {\nif (v\u0026nbsp;\u0026lt; a[p]. v)\nins(a[p]. ls, v);\nelse\nins(a[p]. rs, v);\nupdate(p);\nmaintain(p, v \u0026lt; a[p]. v);\n}\n}\ninline void ers(int\u0026amp; p, int v)\u0026nbsp;{\nif (!p)\nreturn;\nelse if (a[p]. v == v)\u0026nbsp;{\nif (!a[p]. ls)\np = a[p]. rs;\nelse if (!a[p]. rs)\np = a[p]. ls;\nelse {\nint q = a[p]. ls;\nwhile (a[q]. rs)\nq = a[q]. rs;\na[p]. v = a[q]. v;\ners(a[p]. ls, a[p]. v);\nupdate(p);\n}\n}\nelse {\nif (v\u0026nbsp;\u0026lt; a[p]. v)\ners(a[p]. ls, v);\nelse\ners(a[p]. rs, v);\nupdate(p);\n}\n}\ninline int cnt(int p, int v)\u0026nbsp;{\nif (!p)\nreturn 0;\nelse if (v\u0026nbsp;\u0026lt;= a[p]. v)\nreturn cnt(a[p]. ls, v);\nelse\nreturn a[a[p]. ls]. sz + 1 + cnt(a[p]. rs, v);\n}\n};\nint n, q, v[maxn];\nint tc, d[maxn], fa[maxn], sz[maxn], ch[maxn], fc[maxn], cl[maxn];\nseg *rt[maxn],\u0026nbsp;*sp;\nedge *ep,\u0026nbsp;*head[maxn];\ninline void addEdge(int u, int v)\u0026nbsp;{\nep-\u0026gt; t = v;\nep-\u0026gt; next = head[u];\nhead[u]\u0026nbsp;= ep ++;\n}\n#define mid(p)\u0026nbsp;((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\ninline seg* sgtBuild(int l, int r)\u0026nbsp;{\nseg* p = sp ++;\np-\u0026gt; l = l;\np-\u0026gt; r = r;\np-\u0026gt; v = 0;\nif (l\u0026nbsp;+ 1 \u0026lt; r)\u0026nbsp;{\np-\u0026gt; ls = sgtBuild(l, mid(p));\np-\u0026gt; rs = sgtBuild(mid(p), r);\n}\nreturn p;\n}\ninline void sgtChg(seg* p, int p0, int v, int ty)\u0026nbsp;{\nif (ty\u0026nbsp;== 1)\ntreap :: ins(p-\u0026gt; v, v);\nelse\ntreap :: ers(p-\u0026gt; v, v);\nif (p-\u0026gt; l + 1 == p-\u0026gt; r)\nreturn;\nelse if (p0\u0026nbsp;\u0026lt; mid(p))\nsgtChg(p-\u0026gt; ls, p0, v, ty);\nelse\nsgtChg(p-\u0026gt; rs, p0, v, ty);\n}\ninline int sgtQry(seg* p, int l, int r, int v)\u0026nbsp;{\nif (l\u0026nbsp;\u0026gt;= r)\nreturn 0;\nelse if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r)\nreturn treap :: cnt(p-\u0026gt; v, v);\nelse if (r\u0026nbsp;\u0026lt;= mid(p))\nreturn sgtQry(p-\u0026gt; ls, l, r, v);\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nreturn sgtQry(p-\u0026gt; rs, l, r, v);\nelse\nreturn sgtQry(p-\u0026gt; ls, l, mid(p), v)\u0026nbsp;+ sgtQry(p-\u0026gt; rs, mid(p), r, v);\n}\n#define cpos(_p_)\u0026nbsp;(d[_p_]-d[ch[fc[_p_]]])\nvoid divide()\u0026nbsp;{\nstatic int q[maxn];\nint hd = 0, tl = 1;\nmemset(d, 0, sizeof(d));\nd[1]\u0026nbsp;= 1;\nfa[1]\u0026nbsp;= 0;\nq[0]\u0026nbsp;= 1;\nwhile (hd\u0026nbsp;\u0026lt; tl)\u0026nbsp;{\nint p = q[hd ++];\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (!d[e-\u0026gt; t])\u0026nbsp;{\nd[e-\u0026gt; t]\u0026nbsp;= d[p]\u0026nbsp;+ 1;\nfa[e-\u0026gt; t]\u0026nbsp;= p;\nq[tl ++]\u0026nbsp;= e-\u0026gt; t;\n}\n}\ntc = 0;\nfor (int ti = tl - 1; ti \u0026gt;= 0;\u0026nbsp;-- ti)\u0026nbsp;{\nint p = q[ti], x =\u0026nbsp;-1;\nsz[p]\u0026nbsp;= 1;\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (fa[e-\u0026gt; t]\u0026nbsp;== p)\u0026nbsp;{\nsz[p]\u0026nbsp;+= sz[e-\u0026gt; t];\nif (x\u0026nbsp;==\u0026nbsp;-1\u0026nbsp;|| sz[e-\u0026gt; t]\u0026nbsp;\u0026gt; sz[x])\nx = e-\u0026gt; t;\n}\nif (x\u0026nbsp;==\u0026nbsp;-1)\u0026nbsp;{\nfc[p]\u0026nbsp;=\u0026nbsp;++ tc;\nch[fc[p]]\u0026nbsp;= p;\ncl[fc[p]]\u0026nbsp;= 1;\n}\nelse {\nfc[p]\u0026nbsp;= fc[x];\nch[fc[p]]\u0026nbsp;= p;\n++ cl[fc[p]];\n}\n}\nsp = new seg[maxn * 4];\nfor (int i = 1; i \u0026lt;= tc;\u0026nbsp;++ i)\nrt[i]\u0026nbsp;= sgtBuild(0, cl[i]);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nsgtChg(rt[fc[i]], cpos(i), v[i], 1);\n}\nint LCA(int u, int v)\u0026nbsp;{\nwhile (fc[u]\u0026nbsp;^ fc[v])\nif (d[ch[fc[u]]]\u0026nbsp;\u0026gt; d[ch[fc[v]]])\nu = fa[ch[fc[u]]];\nelse\nv = fa[ch[fc[v]]];\nif (d[u]\u0026nbsp;\u0026lt; d[v])\nreturn u;\nelse\nreturn v;\n}\nint cntChain(int u, int a, int v)\u0026nbsp;{\nint s = 0;\nwhile (fc[u]\u0026nbsp;^ fc[a])\u0026nbsp;{\ns += sgtQry(rt[fc[u]], 0, cpos(u)\u0026nbsp;+ 1, v);\nu = fa[ch[fc[u]]];\n}\nif (u\u0026nbsp;^ a)\ns += sgtQry(rt[fc[u]], cpos(a)\u0026nbsp;+ 1, cpos(u)\u0026nbsp;+ 1, v);\nreturn s;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\ntreap :: init();\nmemset(head, 0, sizeof(head));\nep = new edge[maxn * 2];\nreadInt(n);\nreadInt(q);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nreadInt(v[i]);\nfor (int i = 0; i \u0026lt; n - 1;\u0026nbsp;++ i)\u0026nbsp;{\nint u, v;\nreadInt(u);\nreadInt(v);\naddEdge(u, v);\naddEdge(v, u);\n}\ndivide();\nwhile (q\u0026nbsp;--)\u0026nbsp;{\nint k, a, b;\nreadInt(k);\nreadInt(a);\nreadInt(b);\nif (!k)\u0026nbsp;{\nsgtChg(rt[fc[a]], cpos(a), v[a],\u0026nbsp;-1);\nv[a]\u0026nbsp;= b;\nsgtChg(rt[fc[a]], cpos(a), v[a], 1);\n}\nelse {\nint l = 0, r = maxv, c = LCA(a, b);\nif (d[a]\u0026nbsp;+ d[b]\u0026nbsp;- d[c]\u0026nbsp;* 2 + 1 \u0026lt; k)\nputs(\u0026quot;invalid request!\u0026quot;);\nelse {\nk = d[a]\u0026nbsp;+ d[b]\u0026nbsp;- d[c]\u0026nbsp;* 2 + 2 - k;\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r + 1)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (cntChain(a, c, mid)\u0026nbsp;+ cntChain(b, fa[c], mid)\u0026nbsp;\u0026gt;= k)\nr = mid - 1;\nelse\nl = mid;\n}\nprintf(\u0026quot;%d\\n\u0026quot;, l);\n}\n}\n}\n}\n","permalink":"/oi/lofterimport_121/","summary":"数据结构题总是很令人开心的。\n这题据说可以主席树？好麻烦的说。\n树链剖分+线段树+treap就好了吧。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstdlib\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t;\nedge *next;\n};\nstruct seg {\nint l, r, v;\nseg *ls,\u0026nbsp;*rs;\n};\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxn = 80009;\nconst int maxv = 1e8;\nnamespace treap {","title":"BZOJ1146 [CTSC2008]网络管理Network"},{"content":"啊啊看到动态树被吓尿了。\n然后发现动的不是树的形态是点权。\n树链剖分+dfs序么。\n重点是我TLE了。\n最初的写法是直接查询然后把访问过的点打个标记。一个询问做完再标记回去。然后，tle。\n参考jason_yu的做法，找出所有dfs序上要询问的区间，合并之后询问，应该不会tle了吧？还是tle。\n最后发现是线段树lazy标记的地方写成n^2了。开心啊。\n事实证明第一种写法12秒左右，第二种写法3秒多。当然也要考虑我巨丑的常数。\n所以我还是太naive了。\n代码当然要粘快的。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t;\nedge *next;\n};\nstruct seg {\nint l, r, a, v;\nseg *ls,\u0026nbsp;*rs;\n};\nstruct rect {\nint l, r;\ninline rect(int l0 = 0, int r0 = 0)\u0026nbsp;{\nl = l0, r = r0;\n}\ninline rect operator +(const rect\u0026amp; a) const {\nreturn rect(min(l, a. l), max(r, a. r));\n}\ninline rect operator =(const rect\u0026amp; a)\u0026nbsp;{\nl = a. l, r = a. r;\nreturn *this;\n}\n};\ninline bool cmpRect(const rect\u0026amp; a, const rect\u0026amp; b)\u0026nbsp;{\nreturn a. l \u0026lt; b. l;\n}\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxn = 200009;\nint n, q, dfo[maxn], dfb[maxn], dfe[maxn];\nint fs[maxn], fa[maxn], d[maxn], fc[maxn], ch[maxn], sz[maxn], tc;\nint tre;\nrect cre[maxn];\nedge *head[maxn],\u0026nbsp;*ep;\nseg *rt,\u0026nbsp;*sp;\ninline void addEdge(int u, int v)\u0026nbsp;{\nep-\u0026gt; t = v;\nep-\u0026gt; next = head[u];\nhead[u]\u0026nbsp;= ep ++;\n}\n#define mid(p)\u0026nbsp;((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\ninline seg *sgtBuild(int l, int r)\u0026nbsp;{\nseg* p = sp ++;\np-\u0026gt; l = l;\np-\u0026gt; r = r;\np-\u0026gt; a = 0;\np-\u0026gt; v = 0;\nif (l\u0026nbsp;+ 1 \u0026lt; r)\u0026nbsp;{\np-\u0026gt; ls = sgtBuild(l, mid(p));\np-\u0026gt; rs = sgtBuild(mid(p), r);\n}\nreturn p;\n}\ninline void sgtAdd(seg* p, int l, int r, int v)\u0026nbsp;{\nif (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r)\np-\u0026gt; a += v;\nelse if (r\u0026nbsp;\u0026lt;= mid(p))\nsgtAdd(p-\u0026gt; ls, l, r, v);\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nsgtAdd(p-\u0026gt; rs, l, r, v);\nelse {\nsgtAdd(p-\u0026gt; ls, l, mid(p), v);\nsgtAdd(p-\u0026gt; rs, mid(p), r, v);\n}\np-\u0026gt; v += v *\u0026nbsp;(r\u0026nbsp;- l);\n}\ninline int sgtQry(seg* p, int l, int r)\u0026nbsp;{\nif (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r)\nreturn p-\u0026gt; v;\nelse {\nint a =\u0026nbsp;(r\u0026nbsp;- l)\u0026nbsp;* p-\u0026gt; a;\nif (r\u0026nbsp;\u0026lt;= mid(p))\nreturn sgtQry(p-\u0026gt; ls, l, r)\u0026nbsp;+ a;\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nreturn sgtQry(p-\u0026gt; rs, l, r)\u0026nbsp;+ a;\nelse\nreturn sgtQry(p-\u0026gt; ls, l, mid(p))\u0026nbsp;+ sgtQry(p-\u0026gt; rs, mid(p), r)\u0026nbsp;+ a;\n}\n}\nvoid divide()\u0026nbsp;{\nstatic int stc[maxn];\nint tstc = 1, dfn = 0;\nmemset(d, 0, sizeof(d));\nstc[1]\u0026nbsp;= 1;\nd[1]\u0026nbsp;= 1;\nwhile (tstc)\u0026nbsp;{\nint p = stc[tstc --];\ndfb[p]\u0026nbsp;=\u0026nbsp;++ dfn;\ndfo[dfn]\u0026nbsp;= p;\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (!d[e-\u0026gt; t])\u0026nbsp;{\nd[e-\u0026gt; t]\u0026nbsp;= d[p]\u0026nbsp;+ 1;\nfa[e-\u0026gt; t]\u0026nbsp;= p;\nstc[++ tstc]\u0026nbsp;= e-\u0026gt; t;\n}\n}\ntc = 0;\nfor (int i = n; i;\u0026nbsp;-- i)\u0026nbsp;{\nint p = dfo[i], x =\u0026nbsp;-1;\nsz[p]\u0026nbsp;= 1;\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (fa[e-\u0026gt; t]\u0026nbsp;== p)\u0026nbsp;{\nsz[p]\u0026nbsp;+= sz[e-\u0026gt; t];\nif (x\u0026nbsp;==\u0026nbsp;-1\u0026nbsp;|| sz[e-\u0026gt; t]\u0026nbsp;\u0026gt; sz[x])\nx = e-\u0026gt; t;\n}\nfs[p]\u0026nbsp;= x;\nif (x\u0026nbsp;\u0026gt;\u0026nbsp;-1)\u0026nbsp;{\nfc[p]\u0026nbsp;= fc[x];\nch[fc[p]]\u0026nbsp;= p;\n}\nelse {\nfc[p]\u0026nbsp;=\u0026nbsp;++ tc;\nch[fc[p]]\u0026nbsp;= p;\n}\n}\ntstc = 1;\nstc[1]\u0026nbsp;= 1;\ndfn = 0;\nwhile (tstc)\u0026nbsp;{\nint p = stc[tstc --];\ndfb[p]\u0026nbsp;=\u0026nbsp;++ dfn;\ndfe[p]\u0026nbsp;= dfb[p];\ndfo[dfn]\u0026nbsp;= p;\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\nif (fa[e-\u0026gt; t]\u0026nbsp;== p \u0026amp;\u0026amp; e-\u0026gt; t != fs[p])\nstc[++ tstc]\u0026nbsp;= e-\u0026gt; t;\nif (fs[p]\u0026nbsp;\u0026gt;\u0026nbsp;-1)\nstc[++ tstc]\u0026nbsp;= fs[p];\n}\nfor (int i = n; i \u0026gt; 1;\u0026nbsp;-- i)\ndfe[fa[dfo[i]]]\u0026nbsp;= max(dfe[fa[dfo[i]]], dfe[dfo[i]]);\nrt = sgtBuild(1, n + 1);\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nmemset(head, 0, sizeof(head));\nep = new edge[maxn * 2];\nsp = new seg[maxn * 3];\nreadInt(n);\nfor (int i = 0; i \u0026lt; n - 1;\u0026nbsp;++ i)\u0026nbsp;{\nint u, v;\nreadInt(u);\nreadInt(v);\naddEdge(u, v);\naddEdge(v, u);\n}\ndivide();\nreadInt(q);\nwhile (q\u0026nbsp;--)\u0026nbsp;{\nint k, u, v;\nreadInt(k);\nif (!k)\u0026nbsp;{\nreadInt(u);\nreadInt(v);\nsgtAdd(rt, dfb[u], dfe[u]\u0026nbsp;+ 1, v);\n}\nelse {\nreadInt(k);\nint ans = 0;\ntre = 0;\nfor (int i = 0; i \u0026lt; k;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(u);\nreadInt(v);\nif (d[u]\u0026nbsp;\u0026lt; d[v])\nswap(u, v);\nwhile (fc[u]\u0026nbsp;^ fc[v])\u0026nbsp;{\ncre[tre ++]\u0026nbsp;= rect(dfb[ch[fc[u]]], dfb[u]\u0026nbsp;+ 1);\nu = fa[ch[fc[u]]];\n}\ncre[tre ++]\u0026nbsp;= rect(dfb[v], dfb[u]\u0026nbsp;+ 1);\n}\nsort(cre, cre + tre, cmpRect);\nfor (int i = 0; i \u0026lt; tre;\u0026nbsp;++ i)\nif (i\u0026nbsp;\u0026lt; tre - 1 \u0026amp;\u0026amp; cre[i]. r \u0026gt;= cre[i + 1]. l)\ncre[i + 1]\u0026nbsp;= cre[i]\u0026nbsp;+ cre[i + 1];\nelse\nans += sgtQry(rt, cre[i]. l, cre[i]. r);\nprintf(\u0026quot;%d\\n\u0026quot;, ans \u0026amp; 2147483647);\n}\n}\n}\n","permalink":"/oi/lofterimport_122/","summary":"啊啊看到动态树被吓尿了。\n然后发现动的不是树的形态是点权。\n树链剖分+dfs序么。\n重点是我TLE了。\n最初的写法是直接查询然后把访问过的点打个标记。一个询问做完再标记回去。然后，tle。\n参考jason_yu的做法，找出所有dfs序上要询问的区间，合并之后询问，应该不会tle了吧？还是tle。\n最后发现是线段树lazy标记的地方写成n^2了。开心啊。\n事实证明第一种写法12秒左右，第二种写法3秒多。当然也要考虑我巨丑的常数。\n所以我还是太naive了。\n代码当然要粘快的。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t;\nedge *next;\n};\nstruct seg {\nint l, r, a, v;\nseg *ls,\u0026nbsp;*rs;\n};\nstruct rect {\nint l, r;\ninline rect(int l0 = 0, int r0 = 0)\u0026nbsp;{\nl = l0, r = r0;\n}\ninline rect operator +(const rect\u0026amp; a) const {","title":"BZOJ3589 动态树"},{"content":"最近都在认真写Noip难度题（虽然跑题有点严重）。\n专题大概是差不多了。\n今天换个口味写数据结构好了。\n就这么愉快地决定了。\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n","permalink":"/oi/lofterimport_123/","summary":"最近都在认真写Noip难度题（虽然跑题有点严重）。\n专题大概是差不多了。\n今天换个口味写数据结构好了。\n就这么愉快地决定了。\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;","title":"20141023 计划"},{"content":"跑题了。\n好像刷了几道水水的图论吧。估计也不会考到Msc或者极大团之类的玩意，所以也没写。\n然后就刷了一天bzoj。第一次一天10道，好开心。\nnoip也不远了，感受到了各路大神的压力。\n想要生存下去，唯一的出路是让自己不断变得更强。\n","permalink":"/oi/lofterimport_124/","summary":"跑题了。\n好像刷了几道水水的图论吧。估计也不会考到Msc或者极大团之类的玩意，所以也没写。\n然后就刷了一天bzoj。第一次一天10道，好开心。\nnoip也不远了，感受到了各路大神的压力。\n想要生存下去，唯一的出路是让自己不断变得更强。","title":"20141022 总结"},{"content":"比较神奇的数学题。\n重要的结论是\u0026lt;n且与n素质的数的和是phi(n)*n/2。\n所以就枚举一下gcd就好了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\n#define _l (qw)\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxn = 1000009;\nqw ans[maxn];\nint tp, pn[maxn], phi[maxn];\nbool pr[maxn];\nvoid pre()\u0026nbsp;{\nmemset(pr, 0, sizeof(pr));\ntp = 0;\nphi[1]\u0026nbsp;= 1;\nfor (int i = 2; i \u0026lt; maxn;\u0026nbsp;++ i)\u0026nbsp;{\nif (!pr[i])\u0026nbsp;{\npn[tp ++]\u0026nbsp;= i;\nphi[i]\u0026nbsp;= i - 1;\n}\nfor (int j = 0; j \u0026lt; tp \u0026amp;\u0026amp; i * pn[j]\u0026nbsp;\u0026lt; maxn;\u0026nbsp;++ j)\u0026nbsp;{\npr[i * pn[j]]\u0026nbsp;= 1;\nif (i\u0026nbsp;% pn[j])\nphi[i * pn[j]]\u0026nbsp;= phi[i]\u0026nbsp;* phi[pn[j]];\nelse {\nphi[i * pn[j]]\u0026nbsp;= phi[i]\u0026nbsp;* pn[j];\nbreak;\n}\n}\n}\nmemset(ans, 0, sizeof(ans));\nfor (int i = 1; i \u0026lt; maxn;\u0026nbsp;++ i)\u0026nbsp;{\nfor (int j = 2; j * i \u0026lt; maxn;\u0026nbsp;++ j)\nans[i * j]\u0026nbsp;+= _l i * j * j * phi[j]\u0026nbsp;/ 2;\n}\nfor (int i = 1; i \u0026lt; maxn;\u0026nbsp;++ i)\nans[i]\u0026nbsp;+= i;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\npre();\nint t;\nreadInt(t);\nwhile (t\u0026nbsp;--)\u0026nbsp;{\nint x;\nreadInt(x);\nprintf(lld \u0026quot;\\n\u0026quot;, ans[x]);\n}\n}\n","permalink":"/oi/lofterimport_125/","summary":"比较神奇的数学题。\n重要的结论是\u0026lt;n且与n素质的数的和是phi(n)*n/2。\n所以就枚举一下gcd就好了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\n#define _l (qw)\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxn = 1000009;\nqw ans[maxn];\nint tp, pn[maxn], phi[maxn];\nbool pr[maxn];\nvoid pre()\u0026nbsp;{\nmemset(pr, 0, sizeof(pr));","title":"BZOJ2226 LCMSum"},{"content":"补昨天的题。\n比较好想的计算几何。就看每个点在不在另一个颜色的点形成的上凸壳下面，下凸壳上面。这个用二分可以做到单次log。用单调应该也能O(n)。\n但是写起来非常坑，要用long long，还有各种等号啥的。\n写win32 app来显示点的代码比交上去的代码还长。开心。\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\n\u0026nbsp;\nusingnamespacestd;\n\u0026nbsp;\ntypedeflonglongqw;\n\u0026nbsp;\n#define _l (qw)\n\u0026nbsp;\nstructpoint {\n\u0026nbsp;\u0026nbsp;\u0026nbsp; intx, y;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; point (intx0\u0026nbsp;= 0, inty0 = 0)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; x = x0, y = y0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; inlinevoidread()\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; scanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;x,\u0026nbsp;\u0026amp;y);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n};\nstructvect {\n\u0026nbsp;\u0026nbsp;\u0026nbsp; intx, y;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; vect(intx0 = 0, inty0 = 0)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; x = x0, y = y0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; vect(constpoint\u0026amp; a, constpoint\u0026amp; b)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; x = b. x - a. x, y = b. y - a. y;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; inlineqw mulx(constvect\u0026amp; a) const{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; return_l x * a. y - _l y * a. x;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n};\n\u0026nbsp;\ninlineboolcmpPoint(constpoint\u0026amp; a, constpoint\u0026amp; b)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; returna. x \u0026lt; b. x ||\u0026nbsp;(a. x == b. x \u0026amp;\u0026amp; a. y \u0026lt; b. y);\n}\n\u0026nbsp;\nconstintmaxn = 50009;\n\u0026nbsp;\nintn, l[maxn], q[maxn], t;\npoint a[maxn], b[maxn];\n\u0026nbsp;\nqw direc(point d)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; if(d. x \u0026gt; b[q[t]]. x || d. x \u0026lt; b[q[1]]. x)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; return-1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; intl = 1, r = t - 1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; while(l \u0026lt; r)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; intmid =\u0026nbsp;(l\u0026nbsp;+ r + 1)\u0026nbsp;\u0026gt;\u0026gt; 1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(b[q[mid]]. x \u0026lt; d. x)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; l = mid;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; else\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; r = mid - 1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; if(d. x == b[q[l]]. x \u0026amp;\u0026amp; b[q[l]]. x == b[q[l + 1]]. x)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(d. y \u0026gt;= b[q[l]]. y \u0026amp;\u0026amp; d. y \u0026lt;= b[q[l + 1]]. y)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; return0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; elseif(d. y \u0026lt;= b[q[l]]. y)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; return-1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; else\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; return1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; else\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; returnvect(b[q[l]], b[q[l + 1]]). mulx(vect(b[q[l]], d));\n}\n\u0026nbsp;\nintcalc()\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; ints = 0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 0; i \u0026lt; n;\u0026nbsp;++ i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; l[i]\u0026nbsp;= 0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; t = 1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; q[1]\u0026nbsp;= 0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 1; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; while(t \u0026gt; 1 \u0026amp;\u0026amp; vect(b[q[t - 1]], b[q[t]]). mulx(vect(b[q[t]], b[i]))\u0026nbsp;\u0026lt;= 0)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;-- t;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; q[++ t]\u0026nbsp;= i;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 0; i \u0026lt; n;\u0026nbsp;++ i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(direc(a[i])\u0026nbsp;\u0026gt;= 0)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;++ l[i];\n\u0026nbsp;\u0026nbsp;\u0026nbsp; t = 1;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; q[1]\u0026nbsp;= 0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 1; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; while(t \u0026gt; 1 \u0026amp;\u0026amp; vect(b[q[t - 1]], b[q[t]]). mulx(vect(b[q[t]], b[i]))\u0026nbsp;\u0026gt;= 0)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;-- t;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; q[++ t]\u0026nbsp;= i;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 0; i \u0026lt; n;\u0026nbsp;++ i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(direc(a[i])\u0026nbsp;\u0026lt;= 0)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;++ l[i];\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 0; i \u0026lt; n;\u0026nbsp;++ i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(l[i]\u0026nbsp;== 2 \u0026amp;\u0026amp; a[i]. x \u0026gt;= b[0]. x \u0026amp;\u0026amp; a[i]. x \u0026lt;= b[n - 1]. x)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;++ s;\u0026nbsp;\u0026nbsp;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; returns;\n}\n\u0026nbsp;\nintmain()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\n\u0026nbsp;\u0026nbsp;\u0026nbsp; freopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\n\u0026nbsp;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; scanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;n);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 0; i \u0026lt; n;\u0026nbsp;++ i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; a[i]. read();\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 0; i \u0026lt; n;\u0026nbsp;++ i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; b[i]. read();\n\u0026nbsp;\u0026nbsp;\u0026nbsp; sort(a, a + n, cmpPoint);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; sort(b, b + n, cmpPoint);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; intansa = calc();\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for(inti = 0; i \u0026lt; n;\u0026nbsp;++ i)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; swap(a[i], b[i]);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; intansb = calc();\n\u0026nbsp;\u0026nbsp;\u0026nbsp; printf(\u0026quot;%d %d\\n\u0026quot;, ansb, ansa);\n}\n","permalink":"/oi/lofterimport_126/","summary":"补昨天的题。\n比较好想的计算几何。就看每个点在不在另一个颜色的点形成的上凸壳下面，下凸壳上面。这个用二分可以做到单次log。用单调应该也能O(n)。\n但是写起来非常坑，要用long long，还有各种等号啥的。\n写win32 app来显示点的代码比交上去的代码还长。开心。\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\n\u0026nbsp;\nusingnamespacestd;\n\u0026nbsp;\ntypedeflonglongqw;\n\u0026nbsp;\n#define _l (qw)\n\u0026nbsp;\nstructpoint {\n\u0026nbsp;\u0026nbsp;\u0026nbsp; intx, y;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; point (intx0\u0026nbsp;= 0, inty0 = 0)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; x = x0, y = y0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; inlinevoidread()\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; scanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;x,\u0026nbsp;\u0026amp;y);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n};\nstructvect {\n\u0026nbsp;\u0026nbsp;\u0026nbsp; intx, y;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; vect(intx0 = 0, inty0 = 0)\u0026nbsp;{\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; x = x0, y = y0;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; vect(constpoint\u0026amp; a, constpoint\u0026amp; b)\u0026nbsp;{","title":"BZOJ3428 [Usaco2014 Jan]Cow Curling"},{"content":"因为运动会，好像时间又变少了。\n早上本来想补觉来着，打开电脑就睡不着了。\n上午先补题吧。\n然后今天就去刷图论好了。最小生成树啊最短路啊还有各种神奇的东西都去写一写。\n美好的一天。\n","permalink":"/oi/lofterimport_127/","summary":"因为运动会，好像时间又变少了。\n早上本来想补觉来着，打开电脑就睡不着了。\n上午先补题吧。\n然后今天就去刷图论好了。最小生成树啊最短路啊还有各种神奇的东西都去写一写。\n美好的一天。","title":"20141022 计划"},{"content":"上午基本完成了任务。\n下午在bzoj上说好的图论就变成了算几。我觉得要是noip真来道算几的话肯定特别开心。\n然后因为很值得吐槽的排练就废了。最后一道题还没调出来。我的254。\n晚上考试真心naive了。晚上状态不好是实话，但是不是没考好的借口。\n第一题就是贪心，不过显然我想错了。横着放的情况有其它做法。\n第二题题意比较坑，最初都看错了。我的做法是不稳定的，然后又wa了一个点。而且用三方的正解还是不对。还在调。\n第三题比较伤心。觉得比较水所以都没写暴力对拍。然后就wa得和骗分一个分了。不开心啊。\n所以我还是太年轻了。\n","permalink":"/diary/lofterimport_128/","summary":"上午基本完成了任务。\n下午在bzoj上说好的图论就变成了算几。我觉得要是noip真来道算几的话肯定特别开心。\n然后因为很值得吐槽的排练就废了。最后一道题还没调出来。我的254。\n晚上考试真心naive了。晚上状态不好是实话，但是不是没考好的借口。\n第一题就是贪心，不过显然我想错了。横着放的情况有其它做法。\n第二题题意比较坑，最初都看错了。我的做法是不稳定的，然后又wa了一个点。而且用三方的正解还是不对。还在调。\n第三题比较伤心。觉得比较水所以都没写暴力对拍。然后就wa得和骗分一个分了。不开心啊。\n所以我还是太年轻了。","title":"20141021 总结"},{"content":"本来以为是上回那道数正方形的原题的。结果发现不要求边与座标轴平行，于是我就naive了。然后数据结构变身计算几何一堆东西吼吼。\n矩形的对角线相等且互相平分（来自初二数学书）。把所有点对的中点找出来，把所有相等且平分的放一起用单调性，有点像旋转卡(qia3)壳(qiao4)的做法。jason_yu说暴力枚举都能过，而且他跑得比我快！\n计算几何也写得比较naive。调了半天啊。\n毕竟我弱嘛。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cmath\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\n#define _l (qw)\nconst double eps = 1e-8;\nconst int maxn = 1509;\n#define sqr(x)\u0026nbsp;((x)*(x))\n#define dist(a,b)\u0026nbsp;(sqr(a.x-b.x)+sqr(a.y-b.y))\n#define nextele(_x_)\u0026nbsp;((_x_+1==r)?(l):(_x_+1))\nstruct point {\nqw x, y;\npoint(qw x0 = 0, qw y0 = 0)\u0026nbsp;{\nx = x0, y = y0;\n}\ninline point operator =(const point\u0026amp; a)\u0026nbsp;{\nx = a. x, y = a. y;\nreturn *this;\n}\n};\nstruct vect {\nqw x, y;\ninline vect(qw x0 = 0, qw y0 = 0)\u0026nbsp;{\nx = x0, y = y0;\n}\ninline vect(point a, point b)\u0026nbsp;{\nx = b. x - a. x, y = b. y - a. y;\n}\ninline qw mulx(const vect\u0026amp; a) const {\nreturn x * a. y - y * a. x;\n}\ninline vect operator =(const vect\u0026amp; a)\u0026nbsp;{\nx = a. x, y = a. y;\nreturn *this;\n}\ninline void reverse()\u0026nbsp;{\nx =\u0026nbsp;-x, y =\u0026nbsp;-y;\n}\n};\nstruct mid_point {\nqw x, y, l;\nvect d;\ninline mid_point()\u0026nbsp;{\n}\ninline mid_point(point a, point b)\u0026nbsp;{\nx =\u0026nbsp;(a. x + b. x)\u0026nbsp;\u0026gt;\u0026gt; 1;\ny =\u0026nbsp;(a. y + b. y)\u0026nbsp;\u0026gt;\u0026gt; 1;\nl = dist(a, b);\nd = vect(b. x - x, b. y - y);\nif (d. x \u0026lt; 0)\nd. reverse();\n}\ninline bool operator ==(const mid_point\u0026amp; a)\u0026nbsp;{\nreturn x == a. x \u0026amp;\u0026amp; y == a. y \u0026amp;\u0026amp; l == a. l;\n}\ninline mid_point operator =(const mid_point\u0026amp; a)\u0026nbsp;{\nx = a. x, y = a. y, l = a. l, d = a. d;\nreturn *this;\n}\n};\ninline bool cmpPoint(const point\u0026amp; a, const point\u0026amp; b)\u0026nbsp;{\nreturn a. x \u0026lt; b. x ||\u0026nbsp;(a. x == b. x \u0026amp;\u0026amp; a. y \u0026lt; b. y);\n}\ninline bool cmpMPoint(const mid_point\u0026amp; a, const mid_point\u0026amp; b)\u0026nbsp;{\nreturn a. x \u0026lt; b. x ||\u0026nbsp;(a. x == b. x \u0026amp;\u0026amp; a. y \u0026lt; b. y)\u0026nbsp;||\u0026nbsp;\\\n(a. x == b. x \u0026amp;\u0026amp; a. y == b. y \u0026amp;\u0026amp; a. l \u0026lt; b. l)\u0026nbsp;||\u0026nbsp;\\\n(a. x == b. x \u0026amp;\u0026amp; a. y == b. y \u0026amp;\u0026amp; a. l == b. l \u0026amp;\u0026amp; a. d. mulx(b. d)\u0026nbsp;\u0026gt; 0);\n}\nint n, t;\nqw ans;\npoint a[maxn];\nmid_point b[maxn * maxn];\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nans = 0;\nt = 0;\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;n);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nscanf(lld lld,\u0026nbsp;\u0026amp;a[i]. x,\u0026nbsp;\u0026amp;a[i]. y);\na[i]. x \u0026lt;\u0026lt;= 1;\na[i]. y \u0026lt;\u0026lt;= 1;\nfor (int j = 0; j \u0026lt; i;\u0026nbsp;++ j)\nb[t ++]\u0026nbsp;= mid_point(a[i], a[j]);\n}\nsort(b, b + t, cmpMPoint);\nfor (int l = 0, r; l \u0026lt; t; l = r)\u0026nbsp;{\nfor (r\u0026nbsp;= l + 1; r \u0026lt; t \u0026amp;\u0026amp; b[r]\u0026nbsp;== b[l];\u0026nbsp;++ r);\nif (r\u0026nbsp;- l \u0026lt; 2)\ncontinue;\nfor (int i = l, j = l; i \u0026lt; r;\u0026nbsp;++ i)\u0026nbsp;{\nif (j\u0026nbsp;== i)\nj = nextele(j);\nwhile (b[i]. d. mulx(b[j]. d)\u0026nbsp;\u0026lt; b[i]. d. mulx(b[nextele(j)]. d))\nj = nextele(j);\nans = max(ans, abs(b[i]. d. mulx(b[j]. d)));\n}\n}\nprintf(lld \u0026quot;\\n\u0026quot;, ans \u0026gt;\u0026gt; 1);\n}\n","permalink":"/oi/lofterimport_129/","summary":"本来以为是上回那道数正方形的原题的。结果发现不要求边与座标轴平行，于是我就naive了。然后数据结构变身计算几何一堆东西吼吼。\n矩形的对角线相等且互相平分（来自初二数学书）。把所有点对的中点找出来，把所有相等且平分的放一起用单调性，有点像旋转卡(qia3)壳(qiao4)的做法。jason_yu说暴力枚举都能过，而且他跑得比我快！\n计算几何也写得比较naive。调了半天啊。\n毕竟我弱嘛。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cmath\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\n#define _l (qw)\nconst double eps = 1e-8;\nconst int maxn = 1509;\n#define sqr(x)\u0026nbsp;((x)*(x))\n#define dist(a,b)\u0026nbsp;(sqr(a.x-b.x)+sqr(a.y-b.y))\n#define nextele(_x_)\u0026nbsp;((_x_+1==r)?(l):(_x_+1))\nstruct point {\nqw x, y;\npoint(qw x0 = 0, qw y0 = 0)\u0026nbsp;{\nx = x0, y = y0;\n}\ninline point operator =(const point\u0026amp; a)\u0026nbsp;{","title":"BZOJ2338 数矩形"},{"content":"找到一道水题真是一件令人开心的事情。\n最小生成树。完了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cmath\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define sqr(x)\u0026nbsp;((x)*(x))\nstruct edge {\nint a, b, v;\nedge(int a0 = 0, int b0 = 0, int v0 = 0)\u0026nbsp;{\na = a0, b = b0, v = v0;\n}\n};\nconst int maxn = 1009;\nint n, m, a[maxn], t, x[maxn], y[maxn], r[maxn];\nedge e[maxn * maxn];\ninline bool cmpE(const edge\u0026amp; a, const edge\u0026amp; b)\u0026nbsp;{\nreturn a. v \u0026lt; b. v;\n}\ninline int getRoot(int x)\u0026nbsp;{\nreturn (r[x]\u0026nbsp;== x)\u0026nbsp;? x :\u0026nbsp;(r[x]\u0026nbsp;= getRoot(r[x]));\n}\nint kruskal()\u0026nbsp;{\nint s = 0;\nsort(e, e + t, cmpE);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nr[i]\u0026nbsp;= i;\nfor (int i = 0; i \u0026lt; t;\u0026nbsp;++ i)\nif (getRoot(e[i]. a)\u0026nbsp;^ getRoot(e[i]. b))\u0026nbsp;{\ns = e[i]. v;\nr[getRoot(e[i]. a)]\u0026nbsp;= getRoot(e[i]. b);\n}\nreturn s;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;m);\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\nscanf(\u0026quot;%d\u0026quot;, a + i);\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;n);\nt = 0;\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nscanf(\u0026quot;%d%d\u0026quot;, x + i, y + i);\nfor (int j = 0; j \u0026lt; i;\u0026nbsp;++ j)\ne[t ++]\u0026nbsp;= edge(i, j, sqr(x[i]\u0026nbsp;- x[j])\u0026nbsp;+ sqr(y[i]\u0026nbsp;- y[j]));\n}\nint v = kruskal(), s = 0;\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\nif (sqr(a[i])\u0026nbsp;\u0026gt;= v)\n++ s;\nprintf(\u0026quot;%d\\n\u0026quot;, s);\n}\n","permalink":"/oi/lofterimport_130/","summary":"找到一道水题真是一件令人开心的事情。\n最小生成树。完了。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cmath\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define sqr(x)\u0026nbsp;((x)*(x))\nstruct edge {\nint a, b, v;\nedge(int a0 = 0, int b0 = 0, int v0 = 0)\u0026nbsp;{\na = a0, b = b0, v = v0;\n}\n};\nconst int maxn = 1009;\nint n, m, a[maxn], t, x[maxn], y[maxn], r[maxn];\nedge e[maxn * maxn];\ninline bool cmpE(const edge\u0026amp; a, const edge\u0026amp; b)\u0026nbsp;{\nreturn a. v \u0026lt; b.","title":"BZOJ2429 聪明的猴子"},{"content":"好端端的上午被体检腰斩了。\n早上先花两节课继续复习数学吧。\n然后去写图论。\n下午爬梯子和bzoj。还有高一小朋友的图论基础（虽然多半听不到两分钟就受不了了）。\n然后晚上还要考试好开心。\n","permalink":"/oi/lofterimport_131/","summary":"好端端的上午被体检腰斩了。\n早上先花两节课继续复习数学吧。\n然后去写图论。\n下午爬梯子和bzoj。还有高一小朋友的图论基础（虽然多半听不到两分钟就受不了了）。\n然后晚上还要考试好开心。","title":"20141021 计划"},{"content":"今天大概还是完成了早上安排的任务吧。\n上午下午都在刷比较简单的数学题。再次科普了一下exgcd。这玩意快成我家黑洞了。希望看到还能推出来。\n问题是没有顾及的miller-rabin。明天还得补一补。\n下午也顺带写了点天梯。有点郁闷。有不是一点点粗心啊。刷题的时候状态不太好。晚上得早点睡。\n晚上刷的bzoj好像和数学关系不大？不管嘛，现在在bzoj上还不是能刷什么刷什么了。毕竟太弱是吧。\n去跑步的时候发现舞狮的同学也在辛苦训练。\n你永远不知道别人在黑暗里付出了多少，所以在他们放出光彩的时候才会使你感到惊奇。同样的，你为了让别人惊奇，也得付出更多。\n","permalink":"/diary/lofterimport_132/","summary":"今天大概还是完成了早上安排的任务吧。\n上午下午都在刷比较简单的数学题。再次科普了一下exgcd。这玩意快成我家黑洞了。希望看到还能推出来。\n问题是没有顾及的miller-rabin。明天还得补一补。\n下午也顺带写了点天梯。有点郁闷。有不是一点点粗心啊。刷题的时候状态不太好。晚上得早点睡。\n晚上刷的bzoj好像和数学关系不大？不管嘛，现在在bzoj上还不是能刷什么刷什么了。毕竟太弱是吧。\n去跑步的时候发现舞狮的同学也在辛苦训练。\n你永远不知道别人在黑暗里付出了多少，所以在他们放出光彩的时候才会使你感到惊奇。同样的，你为了让别人惊奇，也得付出更多。","title":"20141020 总结"},{"content":"大概也不是很难。毕竟只有做水题的份。\n就把原来的土地按x排个序，把能合并的合并，变成一个x单增y单减的序列。\n然后就是dp。f[i]\u0026nbsp;= min(f[j]\u0026nbsp;+ y[j+1]*x[i])，可以单调的斜率优化。\n符号比较郁闷还搞错了好几次。\n所以说我太弱了啊怎么办啊。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\ntypedef long double exf;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\n#define _l (qw)\n#define _f (exf)\nstruct field {\nint x, y;\n};\ninline bool cmpField(const field\u0026amp; a, const field\u0026amp; b)\u0026nbsp;{\nreturn (a. x \u0026lt; b. x)\u0026nbsp;||\u0026nbsp;(a. x == b. x \u0026amp;\u0026amp; a. y \u0026lt; b. y);\n}\nconst int maxn = 50009;\nint n, t;\nint q[maxn];\nqw f[maxn];\nfield o[maxn], a[maxn];\n#define getK(_x_,_y_)\u0026nbsp;((_f f[_y_]-f[_x_])/(_f a[_x_+1].y-a[_y_+1].y))\nvoid dp()\u0026nbsp;{\nint hd = 0, tl = 1;\na[0]. x = 0;\na[0]. y = 0;\nf[0]\u0026nbsp;= 0;\nq[hd]\u0026nbsp;= 0;\nfor (int i = 1; i \u0026lt;= t;\u0026nbsp;++ i)\u0026nbsp;{\nwhile (hd\u0026nbsp;+ 1 \u0026lt; tl \u0026amp;\u0026amp; getK(q[hd], q[hd + 1])\u0026nbsp;\u0026lt; a[i]. x)\n++ hd;\nf[i]\u0026nbsp;= f[q[hd]]\u0026nbsp;+ _l a[q[hd]\u0026nbsp;+ 1]. y * a[i]. x;\nif (i\u0026nbsp;== t)\nbreak;\nwhile (hd\u0026nbsp;+ 1 \u0026lt; tl \u0026amp;\u0026amp; getK(q[tl - 2], q[tl - 1])\u0026nbsp;\u0026gt; getK(q[tl - 2], i))\n-- tl;\nq[tl ++]\u0026nbsp;= i;\n}\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nscanf(\u0026quot;%d\u0026quot;,\u0026nbsp;\u0026amp;n);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nscanf(\u0026quot;%d%d\u0026quot;,\u0026nbsp;\u0026amp;o[i]. x,\u0026nbsp;\u0026amp;o[i]. y);\nsort(o, o + n, cmpField);\nt = 1;\na[1]\u0026nbsp;= o[0];\nfor (int i = 1; i \u0026lt; n;\u0026nbsp;++ i)\u0026nbsp;{\nwhile (t\u0026nbsp;\u0026amp;\u0026amp; o[i]. y \u0026gt; a[t]. y)\n-- t;\nif (!t\u0026nbsp;|| o[i]. x \u0026gt; a[t]. x)\na[++ t]\u0026nbsp;= o[i];\n}\ndp();\nprintf(lld \u0026quot;\\n\u0026quot;, f[t]);\n}\n","permalink":"/oi/lofterimport_133/","summary":"大概也不是很难。毕竟只有做水题的份。\n就把原来的土地按x排个序，把能合并的合并，变成一个x单增y单减的序列。\n然后就是dp。f[i]\u0026nbsp;= min(f[j]\u0026nbsp;+ y[j+1]*x[i])，可以单调的斜率优化。\n符号比较郁闷还搞错了好几次。\n所以说我太弱了啊怎么办啊。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\ntypedef long double exf;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\n#define _l (qw)\n#define _f (exf)\nstruct field {\nint x, y;\n};\ninline bool cmpField(const field\u0026amp; a, const field\u0026amp; b)\u0026nbsp;{\nreturn (a. x \u0026lt; b. x)\u0026nbsp;||\u0026nbsp;(a. x == b. x \u0026amp;\u0026amp; a. y \u0026lt; b. y);\n}","title":"BZOJ1597 [Usaco2008 Mar]土地购买"},{"content":"感觉几百年没有刷bzoj了？虽然昨天才写了题，下午也还交了题的。\n还是挺水的一道矩阵题。看到数列想得到矩阵，不知道没看到数列能不能想到矩阵。\n关键是求和比较不好想。其实新加一行把和记下来就行了。重点就是构造对吧。\n然后矩阵快速幂啥的还好。主要是要记得快速乘。（想起了zhx的babysit）\n#include \u0026lt;iostream\u0026gt;\n#ifndef ONLINE_JUDGE\n#include \u0026lt;fstream\u0026gt;\n#define cin _cin_\nstd :: ifstream cin(\u0026quot;in.txt\u0026quot;);\n#endif\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\nconst int maxn = 19;\nqw n, b[maxn], c[maxn], x, y, mod;\nqw modMul(qw a, qw b)\u0026nbsp;{\nqw s = 0;\nfor (; b; b \u0026gt;\u0026gt;= 1, a =\u0026nbsp;(a\u0026nbsp;\u0026lt;\u0026lt; 1)\u0026nbsp;% mod)\nif (b\u0026nbsp;\u0026amp; 1)\ns =\u0026nbsp;(s\u0026nbsp;+ a)\u0026nbsp;% mod;\nreturn s;\n}\nclass matrix {\npublic:\nint n;\nqw a[maxn][maxn];\nmatrix(int n0)\u0026nbsp;{\nn = n0;\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nfor (int j = 0; j \u0026lt; n;\u0026nbsp;++ j)\na[i][j]\u0026nbsp;=\u0026nbsp;(i == j);\n}\nmatrix(int n0, qw v0)\u0026nbsp;{\nn = n0;\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nfor (int j = 0; j \u0026lt; n;\u0026nbsp;++ j)\na[i][j]\u0026nbsp;= v0;\n}\nvoid operator =(const matrix\u0026amp; x)\u0026nbsp;{\nn = x. n;\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nfor (int j = 0; j \u0026lt; n;\u0026nbsp;++ j)\na[i][j]\u0026nbsp;= x. a[i][j];\n}\nmatrix operator *(const matrix\u0026amp; x)\u0026nbsp;{\nmatrix s(n, 0);\nfor (int i = 0; i \u0026lt; n;\u0026nbsp;++ i)\nfor (int j = 0; j \u0026lt; n;\u0026nbsp;++ j)\nfor (int k = 0; k \u0026lt; n;\u0026nbsp;++ k)\ns. a[i][j]\u0026nbsp;=\u0026nbsp;(s. a[i][j]\u0026nbsp;+ modMul(a[i][k], x. a[k][j]))\u0026nbsp;% mod;\nreturn s;\n}\n};\nqw sov(qw x)\u0026nbsp;{\nif (x\u0026nbsp;\u0026lt;= n)\u0026nbsp;{\nqw s = 0;\nfor (int i = 1; i \u0026lt;= x;\u0026nbsp;++ i)\ns =\u0026nbsp;(s\u0026nbsp;+ b[i])\u0026nbsp;% mod;\nreturn s;\n}\nelse {\nqw t = 0;\nmatrix a(n + 1, 0), s(n + 1);\na. a[0][0]\u0026nbsp;= 1;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\na. a[0][i]\u0026nbsp;= c[i];\na. a[1][i]\u0026nbsp;= c[i];\nif (i\u0026nbsp;\u0026gt; 1)\na. a[i][i - 1]\u0026nbsp;= 1;\n}\nfor (x\u0026nbsp;-= n; x; x \u0026gt;\u0026gt;= 1, a = a * a)\nif (x\u0026nbsp;\u0026amp; 1)\ns = s * a;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nt =\u0026nbsp;(t\u0026nbsp;+ b[i]\u0026nbsp;+ modMul(b[n - i + 1], s. a[0][i]))\u0026nbsp;% mod;\nreturn t;\n}\n}\nint main()\u0026nbsp;{\ncin \u0026gt;\u0026gt; n;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\ncin \u0026gt;\u0026gt; b[i];\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\ncin \u0026gt;\u0026gt; c[i];\ncin \u0026gt;\u0026gt; x \u0026gt;\u0026gt; y \u0026gt;\u0026gt; mod;\ncout \u0026lt;\u0026lt;\u0026nbsp;(sov(y)\u0026nbsp;- sov(x - 1)\u0026nbsp;+ mod)\u0026nbsp;% mod \u0026lt;\u0026lt; endl;\n}\n","permalink":"/oi/lofterimport_134/","summary":"感觉几百年没有刷bzoj了？虽然昨天才写了题，下午也还交了题的。\n还是挺水的一道矩阵题。看到数列想得到矩阵，不知道没看到数列能不能想到矩阵。\n关键是求和比较不好想。其实新加一行把和记下来就行了。重点就是构造对吧。\n然后矩阵快速幂啥的还好。主要是要记得快速乘。（想起了zhx的babysit）\n#include \u0026lt;iostream\u0026gt;\n#ifndef ONLINE_JUDGE\n#include \u0026lt;fstream\u0026gt;\n#define cin _cin_\nstd :: ifstream cin(\u0026quot;in.txt\u0026quot;);\n#endif\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\nconst int maxn = 19;\nqw n, b[maxn], c[maxn], x, y, mod;\nqw modMul(qw a, qw b)\u0026nbsp;{\nqw s = 0;\nfor (; b; b \u0026gt;\u0026gt;= 1, a =\u0026nbsp;(a\u0026nbsp;\u0026lt;\u0026lt; 1)\u0026nbsp;% mod)\nif (b\u0026nbsp;\u0026amp; 1)\ns =\u0026nbsp;(s\u0026nbsp;+ a)\u0026nbsp;% mod;\nreturn s;\n}\nclass matrix {","title":"BZOJ3231 递归数列"},{"content":"突然感到noip已经很近了。\n恐怕只剩下一周自己刷题了。\n现在还没补完的专题？数学和图论。\n今天先搞点数学题吧。\n上午下午都用来刷cv好了。\n晚上么，bzoj。\n","permalink":"/oi/lofterimport_135/","summary":"突然感到noip已经很近了。\n恐怕只剩下一周自己刷题了。\n现在还没补完的专题？数学和图论。\n今天先搞点数学题吧。\n上午下午都用来刷cv好了。\n晚上么，bzoj。","title":"20141020 计划"},{"content":"题意是严格次小生成树。\n想了一下发现应该是一条不在最小生成树上的边构成的环上替换一条边就行了。感觉好想noi那道lct，哈。其实不用那么复杂的。\n就用倍增就可以了。不过我还是比较倾向于用链剖。感觉链剖空间小而且写起来倍爽。不像倍增写挂了不只一次了。\n要注意的是不仅要找最大值还要找严格次大值，因为要找严格次小。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nstruct edge_g {\nint a, b, v, mk;\n};\nstruct edge_t {\nint t, v;\nedge_t *next;\n};\nstruct dat {\nint a, b;\ndat(int v0 =\u0026nbsp;-1)\u0026nbsp;{\na = v0, b =\u0026nbsp;-1;\n}\ndat(int a0, int b0)\u0026nbsp;{\na = a0, b = b0;\n}\n};\nstruct seg {\nint l, r;\ndat d;\nseg *ls,\u0026nbsp;*rs;\n};\ninline bool cmpEG(const edge_g\u0026amp; a, const edge_g\u0026amp; b)\u0026nbsp;{\nreturn a. v \u0026lt; b. v;\n}\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxn = 100009;\nconst int maxe = 300009;\nint n, m, r[maxn];\nedge_g g[maxe];\nedge_t *head[maxn],\u0026nbsp;*ep;\nint d[maxn], fa[maxn], sz[maxn], fc[maxn], ch[maxn], cl[maxn], df[maxn], tc;\nseg *rt[maxn],\u0026nbsp;*sp;\nint getRoot(int x)\u0026nbsp;{\nstatic int stc[maxn];\nint tstc = 1;\nstc[1]\u0026nbsp;= x;\nwhile (r[stc[tstc]]\u0026nbsp;^ stc[tstc])\nstc[tstc + 1]\u0026nbsp;= r[stc[tstc]],\u0026nbsp;++ tstc;\nwhile (-- tstc)\nr[stc[tstc]]\u0026nbsp;= r[stc[tstc + 1]];\nreturn r[x];\n}\ninline void addEdge(int u, int v, int w)\u0026nbsp;{\nep-\u0026gt; t = v;\nep-\u0026gt; v = w;\nep-\u0026gt; next = head[u];\nhead[u]\u0026nbsp;= ep ++;\n}\nqw kruskal()\u0026nbsp;{\nqw s = 0;\nep = new edge_t[maxn * 2];\nsort(g, g + m, cmpEG);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nr[i]\u0026nbsp;= i;\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\nif (getRoot(g[i]. a)\u0026nbsp;^ getRoot(g[i]. b))\u0026nbsp;{\naddEdge(g[i]. a, g[i]. b, g[i]. v);\naddEdge(g[i]. b, g[i]. a, g[i]. v);\ng[i]. mk = 1;\ns += g[i]. v;\nr[getRoot(g[i]. a)]\u0026nbsp;= getRoot(g[i]. b);\n}\nreturn s;\n}\n#define cpos(x)\u0026nbsp;(d[x]-d[ch[fc[x]]])\n#define mid(p)\u0026nbsp;((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\ninline dat ind(int v0)\u0026nbsp;{\nreturn dat(v0);\n}\ninline dat mkd(const dat\u0026amp; a, const dat\u0026amp; b)\u0026nbsp;{\ndat r;\nif (a. a \u0026gt; b. a)\u0026nbsp;{\nr. a = a. a;\nif (b. a == a. a)\nr. b = max(a. b, b. b);\nelse\nr. b = max(a. b, b. a);\n}\nelse {\nr. a = b. a;\nif (b. b == a. a)\nr. b = max(a. b, b. b);\nelse\nr. b = max(a. a, b. b);\n}\nreturn r;\n}\nseg* sgtBuild(int l, int r)\u0026nbsp;{\nseg *p\u0026nbsp;= sp ++;\np-\u0026gt; l = l;\np-\u0026gt; r = r;\nif (l\u0026nbsp;+ 1 \u0026lt; r)\u0026nbsp;{\np-\u0026gt; ls = sgtBuild(l, mid(p));\np-\u0026gt; rs = sgtBuild(mid(p), r);\n}\nreturn p;\n}\nvoid sgtChg(seg* p, int p0, int v0)\u0026nbsp;{\nif (p-\u0026gt; l + 1 == p-\u0026gt; r)\np-\u0026gt; d = ind(v0);\nelse {\nif (p0\u0026nbsp;\u0026lt; mid(p))\nsgtChg(p-\u0026gt; ls, p0, v0);\nelse\nsgtChg(p-\u0026gt; rs, p0, v0);\np-\u0026gt; d = mkd(p-\u0026gt; ls-\u0026gt; d, p-\u0026gt; rs-\u0026gt; d);\n}\n}\ndat sgtQry(seg* p, int l, int r)\u0026nbsp;{\nif (l\u0026nbsp;\u0026gt;= r)\nreturn dat();\nelse if (p-\u0026gt; l == l \u0026amp;\u0026amp; p-\u0026gt; r == r)\nreturn p-\u0026gt; d;\nelse if (r\u0026nbsp;\u0026lt;= mid(p))\nreturn sgtQry(p-\u0026gt; ls, l, r);\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nreturn sgtQry(p-\u0026gt; rs, l, r);\nelse\nreturn mkd(sgtQry(p-\u0026gt; ls, l, mid(p)), sgtQry(p-\u0026gt; rs, mid(p), r));\n}\nvoid divide()\u0026nbsp;{\nstatic int q[maxn];\nint hd = 0, tl = 1;\nmemset(d, 0, sizeof(d));\nq[hd]\u0026nbsp;= 1;\nd[1]\u0026nbsp;= 1;\nwhile (hd\u0026nbsp;\u0026lt; tl)\u0026nbsp;{\nint p = q[hd ++];\nfor (edge_t\u0026nbsp;*e\u0026nbsp;= head[p]; e; e = e-\u0026gt; next)\nif (!d[e-\u0026gt; t])\u0026nbsp;{\nd[e-\u0026gt; t]\u0026nbsp;= d[p]\u0026nbsp;+ 1;\nfa[e-\u0026gt; t]\u0026nbsp;= p;\ndf[e-\u0026gt; t]\u0026nbsp;= e-\u0026gt; v;\nq[tl ++]\u0026nbsp;= e-\u0026gt; t;\n}\n}\ntc = 0;\nfor (int ti = tl - 1; ti \u0026gt;= 0;\u0026nbsp;-- ti)\u0026nbsp;{\nint p = q[ti], fs =\u0026nbsp;-1;\nsz[p]\u0026nbsp;= 1;\nfor (edge_t\u0026nbsp;*e\u0026nbsp;= head[p]; e; e = e-\u0026gt; next)\nif (fa[e-\u0026gt; t]\u0026nbsp;== p)\u0026nbsp;{\nsz[p]\u0026nbsp;+= sz[e-\u0026gt; t];\nif (fs\u0026nbsp;==\u0026nbsp;-1\u0026nbsp;|| sz[e-\u0026gt; t]\u0026nbsp;\u0026gt; sz[fs])\nfs = e-\u0026gt; t;\n}\nif (fs\u0026nbsp;==\u0026nbsp;-1)\u0026nbsp;{\nfc[p]\u0026nbsp;= tc ++;\nch[fc[p]]\u0026nbsp;= p;\ncl[fc[p]]\u0026nbsp;= 1;\n}\nelse {\nfc[p]\u0026nbsp;= fc[fs];\nch[fc[p]]\u0026nbsp;= p;\n++ cl[fc[p]];\n}\n}\nsp = new seg[maxn * 5];\nfor (int i = 0; i \u0026lt; tc;\u0026nbsp;++ i)\nrt[i]\u0026nbsp;= sgtBuild(0, cl[i]);\nfor (int p = 1; p \u0026lt;= n;\u0026nbsp;++ p)\nsgtChg(rt[fc[p]], cpos(p), df[p]);\n}\ndat query(int u, int v)\u0026nbsp;{\ndat s;\nwhile (fc[u]\u0026nbsp;^ fc[v])\nif (d[ch[fc[u]]]\u0026nbsp;\u0026gt; d[ch[fc[v]]])\u0026nbsp;{\ns = mkd(s, sgtQry(rt[fc[u]], 0, cpos(u)\u0026nbsp;+ 1));\nu = fa[ch[fc[u]]];\n}\nelse {\ns = mkd(s, sgtQry(rt[fc[v]], 0, cpos(v)\u0026nbsp;+ 1));\nv = fa[ch[fc[v]]];\n}\nif (d[u]\u0026nbsp;\u0026gt; d[v])\ns = mkd(s, sgtQry(rt[fc[u]], cpos(v)\u0026nbsp;+ 1, cpos(u)\u0026nbsp;+ 1));\nelse if (d[v]\u0026nbsp;\u0026gt; d[u])\ns = mkd(s, sgtQry(rt[fc[v]], cpos(u)\u0026nbsp;+ 1, cpos(v)\u0026nbsp;+ 1));\nreturn s;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\nreadInt(m);\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(g[i]. a);\nreadInt(g[i]. b);\nreadInt(g[i]. v);\ng[i]. mk = 0;\n}\nqw v0 = kruskal();\ndivide();\nint v1 = 0x3f3f3f3f;\nfor (int i = 0; i \u0026lt; m;\u0026nbsp;++ i)\nif (!g[i]. mk)\u0026nbsp;{\ndat h = query(g[i]. a, g[i]. b);\nif (g[i]. v \u0026gt; h. b \u0026amp;\u0026amp; h. b \u0026gt;\u0026nbsp;-1)\nv1 = min(v1, g[i]. v - h. b);\nif (g[i]. v \u0026gt; h. a \u0026amp;\u0026amp; h. a \u0026gt;\u0026nbsp;-1)\nv1 = min(v1, g[i]. v - h. a);\n}\nprintf(lld \u0026quot;\\n\u0026quot;, v0 + v1);\n}\n","permalink":"/oi/lofterimport_136/","summary":"题意是严格次小生成树。\n想了一下发现应该是一条不在最小生成树上的边构成的环上替换一条边就行了。感觉好想noi那道lct，哈。其实不用那么复杂的。\n就用倍增就可以了。不过我还是比较倾向于用链剖。感觉链剖空间小而且写起来倍爽。不像倍增写挂了不只一次了。\n要注意的是不仅要找最大值还要找严格次大值，因为要找严格次小。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\nstruct edge_g {\nint a, b, v, mk;\n};\nstruct edge_t {\nint t, v;\nedge_t *next;\n};\nstruct dat {\nint a, b;\ndat(int v0 =\u0026nbsp;-1)\u0026nbsp;{\na = v0, b =\u0026nbsp;-1;\n}\ndat(int a0, int b0)\u0026nbsp;{\na = a0, b = b0;","title":"BZOJ1977 次小生成树"},{"content":"今天整个人都不太好。\n上午下午刷cv坑了无数次，每次都是一些小错误导致调很久。虽然还是把钻石过了。大师的题好多都不会啊。还要努力。\n晚上的bc更坑了。第一题一直以为是我物死早。最后才知道是读入坑了所以才wa傻了的。不知道为啥会这样。第二题直接暴力全排列懒得写dp了然后就fst了。第三题线段树最初把题意看错了其实还是比较好写好调的。最后一题naive了其实不能二分的。呵了个大呵。\n所以我还是太过于年轻了点。在noip的时候还是要记得成熟一点。\n","permalink":"/diary/lofterimport_137/","summary":"今天整个人都不太好。\n上午下午刷cv坑了无数次，每次都是一些小错误导致调很久。虽然还是把钻石过了。大师的题好多都不会啊。还要努力。\n晚上的bc更坑了。第一题一直以为是我物死早。最后才知道是读入坑了所以才wa傻了的。不知道为啥会这样。第二题直接暴力全排列懒得写dp了然后就fst了。第三题线段树最初把题意看错了其实还是比较好写好调的。最后一题naive了其实不能二分的。呵了个大呵。\n所以我还是太过于年轻了点。在noip的时候还是要记得成熟一点。","title":"20141018"},{"content":"居然继续沦落到写CV的题解的地步了。\n这又是一道坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑题。\n思路很简单。就是记a的列前缀和和b的行前缀和，每次询问的时候O(n)的扫一遍乘积累和。\n但是，极限数据本地要跑3.2s。虽然我笔记本是慢，但是也不能这样玩我啊。交了好久都在tle。\n最后想到一个常数优化的办法。因为每次是把一行或者一列的数都访问一遍，所以用一个指针把数组的那一行记下来。这样寻址会快一些。事实证明快了不只一些。\n坑，哈哈。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\n#define _l (qw)\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxn = 2001;\nint a[maxn][maxn], b[maxn][maxn], n, m;\nint main()\u0026nbsp;{\nreadInt(n);\nreadInt(m);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\na[0][i]\u0026nbsp;= 0, b[i][0]\u0026nbsp;= 0;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nfor (int j = 1; j \u0026lt;= n;\u0026nbsp;++ j)\u0026nbsp;{\nreadInt(a[i][j]);\na[i][j]\u0026nbsp;+= a[i - 1][j];\n}\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;\nfor (int j = 1; j \u0026lt;= n;\u0026nbsp;++ j)\nreadInt(b[j][i]);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;\nfor (int j = 1; j \u0026lt;= n;\u0026nbsp;++ j)\nb[i][j]\u0026nbsp;+= b[i - 1][j];\n++ m;\nwhile (-- m)\u0026nbsp;{\nint p, q, r, s;\nreadInt(p);\nreadInt(q);\nreadInt(r);\nreadInt(s);\nif (p\u0026nbsp;\u0026gt; r)\nswap(p, r);\nif (q\u0026nbsp;\u0026gt; s)\nswap(q, s);\n-- p;\n-- q;\nqw ans = 0;\nint *x0\u0026nbsp;= a[r],\u0026nbsp;*x1 = a[p];\nint *y0\u0026nbsp;= b[s],\u0026nbsp;*y1 = b[q];\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nans +=\u0026nbsp;(_l x1[i]\u0026nbsp;- x0[i])\u0026nbsp;*\u0026nbsp;(y1[i]\u0026nbsp;- y0[i]);\nprintf(lld \u0026quot;\\n\u0026quot;, ans);\n}\n}\n","permalink":"/oi/lofterimport_138/","summary":"居然继续沦落到写CV的题解的地步了。\n这又是一道坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑题。\n思路很简单。就是记a的列前缀和和b的行前缀和，每次询问的时候O(n)的扫一遍乘积累和。\n但是，极限数据本地要跑3.2s。虽然我笔记本是慢，但是也不能这样玩我啊。交了好久都在tle。\n最后想到一个常数优化的办法。因为每次是把一行或者一列的数都访问一遍，所以用一个指针把数组的那一行记下来。这样寻址会快一些。事实证明快了不只一些。\n坑，哈哈。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\ntypedef long long qw;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\n#define _l (qw)\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nconst int maxn = 2001;\nint a[maxn][maxn], b[maxn][maxn], n, m;\nint main()\u0026nbsp;{\nreadInt(n);","title":"CodeVS3147 矩阵乘法2"},{"content":"早上adam发话说要好好准备noip。\n不能再颓废下去了。\ntyvj520了。所以先让它好看一点吧。那么今天去爬cv的天梯好了。好多恶心的代码题也可以写一写了。\n下午的话继续。\n晚上大概可以回家了。然后有bc吧。\n","permalink":"/oi/lofterimport_139/","summary":"早上adam发话说要好好准备noip。\n不能再颓废下去了。\ntyvj520了。所以先让它好看一点吧。那么今天去爬cv的天梯好了。好多恶心的代码题也可以写一写了。\n下午的话继续。\n晚上大概可以回家了。然后有bc吧。","title":"20141018 计划"},{"content":"上午在考试。主要时间都拿去玩答案提交题去了。搞出7个点，但是最后一个点好像没搞对只拿了1分。然后格式错误死完。\n下午本来准备搞gss6的，然后就去打了一下午的羽毛球。\n晚上说好的文化课呢？只好先花一个半小时搞gss6了。唉。\n然后得知noip初赛考得一团糟。之前已经大概估计到结果了。虽然考了六年第一次认真考初赛。认真准备了一件事情却没有获得预计的结果。也许我还是太naive了。也许我所谓的努力和别人比起来根本不值一提吧。\n所以？做好自己。\n","permalink":"/diary/lofterimport_140/","summary":"上午在考试。主要时间都拿去玩答案提交题去了。搞出7个点，但是最后一个点好像没搞对只拿了1分。然后格式错误死完。\n下午本来准备搞gss6的，然后就去打了一下午的羽毛球。\n晚上说好的文化课呢？只好先花一个半小时搞gss6了。唉。\n然后得知noip初赛考得一团糟。之前已经大概估计到结果了。虽然考了六年第一次认真考初赛。认真准备了一件事情却没有获得预计的结果。也许我还是太naive了。也许我所谓的努力和别人比起来根本不值一提吧。\n所以？做好自己。","title":"20141017 总结"},{"content":"看上去挺水水水水水水水水的一道平衡树维护序列的数据结构题啊。\n先用split-merge tree写，tle。\n然后改用splay，tle。\n最后据说把splay的裸数组改到struct node里就能过。于是再写了一个程序来改代码。\n不\u0026nbsp;带\u0026nbsp;这\u0026nbsp;么\u0026nbsp;坑\u0026nbsp;的\u0026nbsp;！\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstdlib\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n/*#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\nbool _nag_ = 0;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()))\\\nif (_d_\u0026nbsp;==\u0026nbsp;'-')\\\n_nag_ = 1;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\nif (_nag_)\\\n_s_ =\u0026nbsp;- _s_;\\\n}*/\n#define readInt(_s_) scanf(\u0026quot;%d\u0026quot;,\u0026amp;_s_);\n#define readOpt(_s_)\u0026nbsp;{\\\ndo\\\n_s_ = getchar();\\\nwhile (_s_\u0026nbsp;!=\u0026nbsp;'I'\u0026nbsp;\u0026amp;\u0026amp; _s_ !=\u0026nbsp;'D'\u0026nbsp;\u0026amp;\u0026amp; _s_ !=\u0026nbsp;'R'\u0026nbsp;\u0026amp;\u0026amp; _s_ !=\u0026nbsp;'Q');\\\n}\nconst int maxn = 200009;\nstruct node {\nint vl, ls, rs, pt, sz, sl, sr, sm, s;\n};\nint v0[maxn];\nint n, m, rt, tn, cr;\nnode tree[maxn];\ninline void initDat(const int\u0026amp; p, const int\u0026amp; v0)\u0026nbsp;{\ntree[p]. sl = v0;\ntree[p]. sr = v0;\ntree[p]. sm = v0;\ntree[p]. s = v0;\n}\ninline void mergeDat(const int\u0026amp; p, const int\u0026amp; a, const int\u0026amp; b)\u0026nbsp;{\nint nl = max(tree[a]. sl, tree[a]. sm + tree[b]. sl);\nint nr = max(tree[b]. sr, tree[b]. sm + tree[a]. sr);\nint nm = tree[a]. sm + tree[b]. sm;\nint nx = max(max(tree[a]. s, tree[b]. s), tree[a]. sr + tree[b]. sl);\ntree[p]. sl = nl;\ntree[p]. sr = nr;\ntree[p]. sm = nm;\ntree[p]. s = nx;\n}\nint newNode(int v0)\u0026nbsp;{\n++ tn;\ntree[tn]. vl = v0;\ntree[tn]. ls = 0;\ntree[tn]. rs = 0;\ntree[tn]. sz = 1;\ninitDat(tn, v0);\nreturn tn;\n}\n#define update(_p_)\u0026nbsp;{\\\ntree[_p_]. sz = tree[tree[_p_]. ls]. sz + tree[tree[_p_]. rs]. sz + 1;\\\ninitDat(_p_, tree[_p_]. vl);\\\nif (tree[_p_]. ls)\\\nmergeDat(_p_, tree[_p_]. ls, _p_);\\\nif (tree[_p_]. rs)\\\nmergeDat(_p_, _p_, tree[_p_]. rs);\\\n}\ninline void lRot(int q)\u0026nbsp;{\nint p = tree[q]. pt, a = tree[p]. pt;\nif (tree[q]. rs)\ntree[tree[q]. rs]. pt = p;\ntree[p]. ls = tree[q]. rs;\ntree[q]. rs = p;\ntree[q]. pt = a;\ntree[p]. pt = q;\nif (a)\u0026nbsp;{\nif (p\u0026nbsp;== tree[a]. ls)\ntree[a]. ls = q;\nelse\ntree[a]. rs = q;\n}\nupdate(p);\nupdate(q);\n}\ninline void rRot(int q)\u0026nbsp;{\nint p = tree[q]. pt, a = tree[p]. pt;\nif (tree[q]. ls)\ntree[tree[q]. ls]. pt = p;\ntree[p]. rs = tree[q]. ls;\ntree[q]. ls = p;\ntree[q]. pt = a;\ntree[p]. pt = q;\nif (a)\u0026nbsp;{\nif (p\u0026nbsp;== tree[a]. ls)\ntree[a]. ls = q;\nelse\ntree[a]. rs = q;\n}\nupdate(p);\nupdate(q);\n}\nvoid splay(int q)\u0026nbsp;{\nwhile (tree[q]. pt)\u0026nbsp;{\nint p = tree[q]. pt, a = tree[p]. pt;\nif (!a\u0026nbsp;||\u0026nbsp;!tree[a]. pt)\u0026nbsp;{\nif (q\u0026nbsp;== tree[p]. ls)\nlRot(q);\nelse\nrRot(q);\n}\nelse {\nif (p\u0026nbsp;== tree[a]. ls)\u0026nbsp;{\nif (q\u0026nbsp;== tree[p]. ls)\u0026nbsp;{\nlRot(p);\nlRot(q);\n}\nelse {\nrRot(q);\nlRot(q);\n}\n}\nelse {\nif (q\u0026nbsp;== tree[p]. rs)\u0026nbsp;{\nrRot(p);\nrRot(q);\n}\nelse {\nlRot(q);\nrRot(q);\n}\n}\n}\n}\n}\nint makeTree(int l, int r)\u0026nbsp;{\nif (l\u0026nbsp;\u0026gt; r)\nreturn 0;\nint x =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nint p = newNode(v0[x]);\ntree[p]. ls = makeTree(l, x - 1);\ntree[tree[p]. ls]. pt = p;\ntree[p]. rs = makeTree(x + 1, r);\ntree[tree[p]. rs]. pt = p;\nupdate(p);\nreturn p;\n}\nint kth(int p, int k)\u0026nbsp;{\nwhile (p)\nif (tree[tree[p]. ls]. sz + 1 == k)\nbreak;\nelse if (tree[tree[p]. ls]. sz \u0026gt;= k)\np = tree[p]. ls;\nelse\nk -= tree[tree[p]. ls]. sz + 1, p = tree[p]. rs;\nreturn p;\n}\nint query(int rt, int l, int r)\u0026nbsp;{\nint p = kth(rt, l), q = kth(rt, r + 2);\nsplay(p);\nsplay(q);\ncr = q;\nreturn tree[tree[p]. rs]. s;\n}\nvoid dispTree(int p, bool ed = 1)\u0026nbsp;{\nif (!p)\nreturn;\ndispTree(tree[p]. ls, 0);\nprintf(\u0026quot;%d \u0026quot;, tree[p]. vl);\ndispTree(tree[p]. rs, 0);\nif (ed)\nputchar(10);\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\nrt = 0;\ntn = 0;\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nreadInt(v0[i]);\nv0[0]\u0026nbsp;= 0;\nv0[n + 1]\u0026nbsp;= 0;\ncr = makeTree(0, n + 1);\nreadInt(m);\nwhile (m\u0026nbsp;--)\u0026nbsp;{\nchar opt;\nint p, v, l, r, rt = cr;\nreadOpt(opt);\n//dispTree(cr);\nif (opt\u0026nbsp;==\u0026nbsp;'I')\u0026nbsp;{\nreadInt(p);\nreadInt(v);\nint q = kth(rt, p), u = newNode(v);\nsplay(q);\ncr = q;\nif (tree[q]. rs)\ntree[tree[q]. rs]. pt = u;\ntree[u]. rs = tree[q]. rs;\nupdate(u);\ntree[q]. rs = u;\ntree[u]. pt = q;\nupdate(q);\nif (tree[u]. rs)\u0026nbsp;{\ncr = tree[u]. rs;\nsplay(cr);\n}\n++ n;\n}\nelse if (opt\u0026nbsp;==\u0026nbsp;'D')\u0026nbsp;{\nreadInt(p);\nint q = kth(rt, p + 1);\nsplay(q);\ncr = q;\nif (!tree[q]. rs)\ntree[tree[q]. ls]. pt = 0;\nelse {\nint x = kth(tree[q]. rs, 1);\ntree[tree[q]. rs]. pt = 0;\nsplay(x);\ncr = x;\ntree[x]. ls = tree[q]. ls;\nif (tree[q]. ls)\ntree[tree[q]. ls]. pt = x;\nupdate(x);\ncr = kth(x, tree[x]. sz \u0026gt;\u0026gt; 1);\nsplay(cr);\n}\n-- n;\n}\nelse if (opt\u0026nbsp;==\u0026nbsp;'R')\u0026nbsp;{\nreadInt(p);\nreadInt(v);\nint q = kth(rt, p + 1);\nsplay(q);\ncr = q;\ntree[q]. vl = v;\nupdate(q);\n}\nelse if (opt\u0026nbsp;==\u0026nbsp;'Q')\u0026nbsp;{\nreadInt(l);\nreadInt(r);\nprintf(\u0026quot;%d\\n\u0026quot;, query(rt, l, r));\n}\n}\n}\n","permalink":"/oi/lofterimport_141/","summary":"看上去挺水水水水水水水水的一道平衡树维护序列的数据结构题啊。\n先用split-merge tree写，tle。\n然后改用splay，tle。\n最后据说把splay的裸数组改到struct node里就能过。于是再写了一个程序来改代码。\n不\u0026nbsp;带\u0026nbsp;这\u0026nbsp;么\u0026nbsp;坑\u0026nbsp;的\u0026nbsp;！\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cstdlib\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n/*#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\nbool _nag_ = 0;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()))\\\nif (_d_\u0026nbsp;==\u0026nbsp;'-')\\\n_nag_ = 1;\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\nif (_nag_)\\\n_s_ =\u0026nbsp;- _s_;\\\n}*/\n#define readInt(_s_) scanf(\u0026quot;%d\u0026quot;,\u0026amp;_s_);\n#define readOpt(_s_)\u0026nbsp;{\\\ndo\\\n_s_ = getchar();\\\nwhile (_s_\u0026nbsp;!=\u0026nbsp;'I'\u0026nbsp;\u0026amp;\u0026amp; _s_ !=\u0026nbsp;'D'\u0026nbsp;\u0026amp;\u0026amp; _s_ !","title":"SPOJ4487 GSS6"},{"content":"上午要考试。\n下午把昨天的题补了吧。然后也去打打球啥的。\n晚上补一补文化课好了。好像已经欠了好多了。唉。不好好刷题就只有刷53，好好刷题也匆忘53。\n","permalink":"/oi/lofterimport_142/","summary":"上午要考试。\n下午把昨天的题补了吧。然后也去打打球啥的。\n晚上补一补文化课好了。好像已经欠了好多了。唉。不好好刷题就只有刷53，好好刷题也匆忘53。","title":"20141017 计划"},{"content":"晚上要上课，怕是没有时间写总结了。\n差不多荒废了一天。\n上午写了几道tyvj。\n下午写了半道数学题然后发现有好多特殊情况不想写了。写了半道gss6然后tle了然后就玩去了。\n毕竟我还是太Naive了。这样下去是不行的。\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n","permalink":"/diary/lofterimport_143/","summary":"晚上要上课，怕是没有时间写总结了。\n差不多荒废了一天。\n上午写了几道tyvj。\n下午写了半道数学题然后发现有好多特殊情况不想写了。写了半道gss6然后tle了然后就玩去了。\n毕竟我还是太Naive了。这样下去是不行的。\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;","title":"20141016 总结"},{"content":"早上来先修椅子，敲钉子*5min。yzy:修凳子哪家强？...\n昨天晚上tyvj终于-- rank了，开心。\n上午先补一补觉，然后去做模拟题好了。\n下午到bzoj上去逛逛，找点数据结构来做吧。\n晚上依稀记得要上课。好久没跑成步了怎么办啊。\n","permalink":"/oi/lofterimport_144/","summary":"早上来先修椅子，敲钉子*5min。yzy:修凳子哪家强？...\n昨天晚上tyvj终于-- rank了，开心。\n上午先补一补觉，然后去做模拟题好了。\n下午到bzoj上去逛逛，找点数据结构来做吧。\n晚上依稀记得要上课。好久没跑成步了怎么办啊。","title":"20141016 计划"},{"content":"依稀记得上午有个计划。\n上午就搞了一道字符串，然后搞乱七八糟的题去了。\n下午给高一小朋友出了一套题。怎么时间那么快？而且好多细节都不对，强迫症的我改了一遍又一遍啊。\n体育课和yzy陪一对高三的打了打羽毛球，感觉有妹子还是挺温馨的一件事情。\n吃饭之前下象棋，轻敌了，被yzy痛虐。\n晚上把回文正方形写了，最后还是用的hash，没有用manacher，因为觉得RMQ可能会MLE，不靠谱的东西不敢写，虽然hash更不靠谱的说。\nnoip又近了一天了。不好好刷题就只有刷5+3，这怎么能行呢？\n","permalink":"/diary/lofterimport_145/","summary":"依稀记得上午有个计划。\n上午就搞了一道字符串，然后搞乱七八糟的题去了。\n下午给高一小朋友出了一套题。怎么时间那么快？而且好多细节都不对，强迫症的我改了一遍又一遍啊。\n体育课和yzy陪一对高三的打了打羽毛球，感觉有妹子还是挺温馨的一件事情。\n吃饭之前下象棋，轻敌了，被yzy痛虐。\n晚上把回文正方形写了，最后还是用的hash，没有用manacher，因为觉得RMQ可能会MLE，不靠谱的东西不敢写，虽然hash更不靠谱的说。\nnoip又近了一天了。不好好刷题就只有刷5+3，这怎么能行呢？","title":"20141015 总结"},{"content":"OTL写manacher的mhy。\n我没有那么高端去研究st怎么搞，所以就用了一个二维hash。从四个角各来一遍真是爽翻了。需要注意的是hash的时候行之间和列之间的值要不同才能区别，不然有数据随便可以卡掉。\n代码么，巨丑无比。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define uint _uint_\ntypedef unsigned long long int uint;\nconst int maxn = 1009;\nconst uint bh = 1e9 + 93;\nconst uint bv = 1e9 + 7;\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nint n, m, a[maxn][maxn];\nuint h[4][maxn][maxn], ph[maxn * 2], pv[maxn * 2];\nvoid preHash()\u0026nbsp;{\nph[0]\u0026nbsp;= 1;\npv[0]\u0026nbsp;= 1;\nfor (int i = 1; i \u0026lt; maxn * 2;\u0026nbsp;++ i)\nph[i]\u0026nbsp;= ph[i - 1]\u0026nbsp;* bh, pv[i]\u0026nbsp;= pv[i - 1]\u0026nbsp;* bv;\nmemset(h, 0, sizeof(h));\nfor (int ti = 0; ti \u0026lt; 4;\u0026nbsp;++ ti)\u0026nbsp;{\nint x0, x1, xd;\nif (ti\u0026nbsp;\u0026amp; 2)\u0026nbsp;{\nx0 = n;\nx1 = 1;\nxd =\u0026nbsp;-1;\n}\nelse {\nx0 = 1;\nx1 = n;\nxd = 1;\n}\nint y0, y1, yd;\nif (ti\u0026nbsp;\u0026amp; 1)\u0026nbsp;{\ny0 = m;\ny1 = 1;\nyd =\u0026nbsp;-1;\n}\nelse {\ny0 = 1;\ny1 = m;\nyd = 1;\n}\nfor (int x = x0; x != x1 + xd; x += xd)\nfor (int y = y0; y != y1 + yd; y += yd)\nh[ti][x][y]\u0026nbsp;= h[ti][x - xd][y]\u0026nbsp;* bh + h[ti][x][y - yd]\u0026nbsp;* bv\\\n\u0026nbsp;\u0026nbsp;- h[ti][x - xd][y - yd]\u0026nbsp;* bv * bh +\u0026nbsp;(uint)a[x][y];\n}\n}\ninline int getRange(int d, int x0, int y0, int x1, int y1)\u0026nbsp;{\nreturn h[d][x1][y1]\u0026nbsp;- h[d][x0][y1]\u0026nbsp;* ph[abs(x1 - x0)]\u0026nbsp;- h[d][x1][y0]\u0026nbsp;* pv[abs(y1 - y0)]\\\n+ h[d][x0][y0]\u0026nbsp;* ph[abs(x1 - x0)]\u0026nbsp;* pv[abs(y1 - y0)];\n}\nint calc(int tx, int ty)\u0026nbsp;{\nint x0 =\u0026nbsp;(tx\u0026nbsp;\u0026gt;\u0026gt; 1), x1 = tx - x0;\nint y0 =\u0026nbsp;(ty\u0026nbsp;\u0026gt;\u0026gt; 1), y1 = ty - y0;\nif (x0\u0026nbsp;^ x1)\nif (a[x0][y0]\u0026nbsp;!= a[x0][y1]\u0026nbsp;|| a[x0][y0]\u0026nbsp;!= a[x1][y0]\u0026nbsp;|| a[x0][y0]\u0026nbsp;!= a[x1][y1])\nreturn 0;\nint l = 1, r = min(min(x0, n - x1 + 1), min(y0, m - y1 + 1));\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r + 1)\u0026nbsp;\u0026gt;\u0026gt; 1;\nint h0 = getRange(0, x0 - mid, y0 - mid, x0, y0);\nint h1 = getRange(1, x0 - mid, y1 + mid, x0, y1);\nint h2 = getRange(2, x1 + mid, y0 - mid, x1, y0);\nint h3 = getRange(3, x1 + mid, y1 + mid, x1, y1);\nif (h0\u0026nbsp;!= h1 || h1 != h2 || h2 != h3)\nr = mid - 1;\nelse\nl = mid;\n}\n//if (l\u0026nbsp;\u0026gt; 1 ||\u0026nbsp;(x0\u0026nbsp;!= x1 \u0026amp;\u0026amp; l))\n//printf(\u0026quot;%d %d\u0026nbsp;%d\\n\u0026quot;, tx, ty, l);\nreturn l;\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;in.txt\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\n#endif\nreadInt(n);\nreadInt(m);\nfor (int i = 1; i \u0026lt;= n;\u0026nbsp;++ i)\nfor (int j = 1; j \u0026lt;= m;\u0026nbsp;++ j)\nreadInt(a[i][j]);\npreHash();\nint ans = 0;\nfor (int i = 2; i \u0026lt;= n * 2;\u0026nbsp;++ i)\nfor (int j = 2; j \u0026lt;= m * 2;\u0026nbsp;++ j)\nif ((i\u0026nbsp;^ j ^ 1)\u0026nbsp;\u0026amp; 1)\nans += calc(i, j);\nprintf(\u0026quot;%d\\n\u0026quot;, ans);\n}\n","permalink":"/oi/lofterimport_146/","summary":"OTL写manacher的mhy。\n我没有那么高端去研究st怎么搞，所以就用了一个二维hash。从四个角各来一遍真是爽翻了。需要注意的是hash的时候行之间和列之间的值要不同才能区别，不然有数据随便可以卡掉。\n代码么，巨丑无比。\n#include \u0026lt;cstdio\u0026gt;\n#include \u0026lt;cctype\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\nusing namespace std;\n#define uint _uint_\ntypedef unsigned long long int uint;\nconst int maxn = 1009;\nconst uint bh = 1e9 + 93;\nconst uint bv = 1e9 + 7;\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nint n, m, a[maxn][maxn];\nuint h[4][maxn][maxn], ph[maxn * 2], pv[maxn * 2];","title":"BZOJ1414 对称的正方形"},{"content":"沦落到写tyvj的题解了。不过看在这题之前只有7人过的份上就写一下好了。\n式子是容斥，比较好想。answer = sigma((-1)^i * m^(n-i)\u0026nbsp;* C(m, i))\u0026nbsp;(0 \u0026lt;= i \u0026lt;= m)\nm^(n-i)这一块用快速幂就好了。\n然后对于前一题因为m很小所以用m^2把组合数弄出来就行了。但是这里m^2就T到明天去了。\n观察\nC(m, i)\u0026nbsp;= m!/(i!\u0026nbsp;*\u0026nbsp;(m-i)!)\u0026nbsp;\n=\u0026gt; C(m, i - 1)\u0026nbsp;= m!\u0026nbsp;/\u0026nbsp;((i-1)!\u0026nbsp;*\u0026nbsp;(m-i+1)!)\u0026nbsp;\n=\u0026gt; C(m, i)\u0026nbsp;= C(m, i - 1)\u0026nbsp;/ i *\u0026nbsp;(m\u0026nbsp;- i + 1)\n这样递推用逆元来做就是O(m * lgm)的时间了。\n然后这题就这样了。代码很短。\n#include \u0026lt;iostream\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\nusing namespace std;\n#define _l (long long int)\ntypedef long long qw;\nconst int maxm = 1000009;\nconst int mod = 1e9 + 7;\nint cm[maxm];\nint modPow(int a, qw x)\u0026nbsp;{\nint s = 1;\nfor (; x; x \u0026gt;\u0026gt;= 1, a = _l a * a % mod)\nif (x\u0026nbsp;\u0026amp; 1)\ns = _l s * a % mod;\nreturn s;\n}\nvoid preComb(int m)\u0026nbsp;{\nmemset(cm, 0, sizeof(cm));\ncm[0]\u0026nbsp;= 1;\nfor (int i = 1; i \u0026lt;= m;\u0026nbsp;++ i)\ncm[i]\u0026nbsp;= _l cm[i - 1]\u0026nbsp;* modPow(i, mod - 2)\u0026nbsp;% mod *\u0026nbsp;(m\u0026nbsp;- i + 1)\u0026nbsp;% mod;\n}\nint main()\u0026nbsp;{\nint m, s = 0;\nqw n;\ncin \u0026gt;\u0026gt; n \u0026gt;\u0026gt; m;\nn %= mod - 1;\npreComb(m);\nfor (int i = 0, k = 1; i \u0026lt;= m;\u0026nbsp;++ i, k =\u0026nbsp;-k)\ns =\u0026nbsp;(_l s + _l k * cm[i]\u0026nbsp;* modPow(m - i, n)\u0026nbsp;% mod + mod)\u0026nbsp;% mod;\ncout \u0026lt;\u0026lt; s \u0026lt;\u0026lt; endl;\n}\n","permalink":"/oi/lofterimport_147/","summary":"沦落到写tyvj的题解了。不过看在这题之前只有7人过的份上就写一下好了。\n式子是容斥，比较好想。answer = sigma((-1)^i * m^(n-i)\u0026nbsp;* C(m, i))\u0026nbsp;(0 \u0026lt;= i \u0026lt;= m)\nm^(n-i)这一块用快速幂就好了。\n然后对于前一题因为m很小所以用m^2把组合数弄出来就行了。但是这里m^2就T到明天去了。\n观察\nC(m, i)\u0026nbsp;= m!/(i!\u0026nbsp;*\u0026nbsp;(m-i)!)\u0026nbsp;\n=\u0026gt; C(m, i - 1)\u0026nbsp;= m!\u0026nbsp;/\u0026nbsp;((i-1)!\u0026nbsp;*\u0026nbsp;(m-i+1)!)\u0026nbsp;\n=\u0026gt; C(m, i)\u0026nbsp;= C(m, i - 1)\u0026nbsp;/ i *\u0026nbsp;(m\u0026nbsp;- i + 1)\n这样递推用逆元来做就是O(m * lgm)的时间了。\n然后这题就这样了。代码很短。\n#include \u0026lt;iostream\u0026gt;\n#include \u0026lt;memory.h\u0026gt;\nusing namespace std;\n#define _l (long long int)\ntypedef long long qw;\nconst int maxm = 1000009;\nconst int mod = 1e9 + 7;\nint cm[maxm];","title":"tyvj1996 工作分配2"},{"content":"昨天晚上好像考试了？\n好像noip只有20来天了。要抓紧了。\n上午先把昨天的题补了，然后找点模拟啊字符串啊啥的题来做。\n下午去搞bzoj上那道回文正方形。\n晚上还是学一下鸟语和文化课啥的。然后再玩一玩八中。还能跑步。哈哈\n","permalink":"/oi/lofterimport_148/","summary":"昨天晚上好像考试了？\n好像noip只有20来天了。要抓紧了。\n上午先把昨天的题补了，然后找点模拟啊字符串啊啥的题来做。\n下午去搞bzoj上那道回文正方形。\n晚上还是学一下鸟语和文化课啥的。然后再玩一玩八中。还能跑步。哈哈","title":"20141015 计划"},{"content":"上午好像写了计划。\n早上在写字符串的东西。好像好多题都可以hash水。不过还是练了一下kmp和manacher。感觉这两个玩意比较常考。\n中午去电脑城荡。幸好没有花钱。\n下午把noi那道题搞定了。好像也不是特别恶心的样子。半节课写＋一节课调。我果然太年轻。然后各种做韵律操以及打球。\n晚上考试。前两道题都有点水，第三题不会做。\n第一题无解竟然是输出impossible。坑爹的出题人啊。为啥第三题就是-1?果然我还是太naive了点。解法么记搜跑得飞快。\n第二题感觉想起来不难，写起来恶心暴了。然后各种优化代码大法还是\u0026nbsp;过了嘛。\n第三题想到了是贪心，不过没有想到正确的贪心方式，所以就只有乱骗了。没想到居然还骗到了最多的分。\n总之我依然是相当的年轻的。\n","permalink":"/diary/lofterimport_149/","summary":"上午好像写了计划。\n早上在写字符串的东西。好像好多题都可以hash水。不过还是练了一下kmp和manacher。感觉这两个玩意比较常考。\n中午去电脑城荡。幸好没有花钱。\n下午把noi那道题搞定了。好像也不是特别恶心的样子。半节课写＋一节课调。我果然太年轻。然后各种做韵律操以及打球。\n晚上考试。前两道题都有点水，第三题不会做。\n第一题无解竟然是输出impossible。坑爹的出题人啊。为啥第三题就是-1?果然我还是太naive了点。解法么记搜跑得飞快。\n第二题感觉想起来不难，写起来恶心暴了。然后各种优化代码大法还是\u0026nbsp;过了嘛。\n第三题想到了是贪心，不过没有想到正确的贪心方式，所以就只有乱骗了。没想到居然还骗到了最多的分。\n总之我依然是相当的年轻的。","title":"20141014 总结"},{"content":"考场上只想到暴力。\n如果只是一条链的话怎么乱搞一搞？\n如果没有深度限制的话简单的斜率优化+链剖就行了。\n有深度限制就把hull扔到线段树里用可持久化栈来维护一下。DFS的时候塞进线段树里，然后完了再扔出来。总的复杂度O(n*log^2(n))，\n代码也不怎么复杂。\n#include \u0026lt;cstdio\u0026gt;\n#include\u0026nbsp;\u0026lt;cctype\u0026gt;\n#include\u0026nbsp;\u0026lt;memory.h\u0026gt;\n#include\u0026nbsp;\u0026lt;vector\u0026gt;\n#include\u0026nbsp;\u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t;\nedge* next;\n};\ntypedef long long qw;\ntypedef long double exf;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\n#define _l (qw)\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nstruct oper {\nint p, v, t;\noper(int p0 = 0, int v0 = 0, int t0 = 0)\u0026nbsp;{\np = p0, v = v0, t = t0;\n}\n};\nstruct phull {\nint\u0026nbsp;*s, t;\nvector \u0026lt;oper\u0026gt; r;\n};\nstruct seg {\nint l, r;\nphull d;\nseg *ls,\u0026nbsp;*rs;\n};\nconst int maxn = 200009;\nconst qw inf = 0x3f3f3f3f3f3f3f3fLL;\nconst exf eps = 1e-8;\nqw d[maxn], k[maxn], b[maxn], dl[maxn], f[maxn];\nint n, fa[maxn], stc[maxn];\nedge *head[maxn],\u0026nbsp;*ep;\nseg\u0026nbsp;*rt,\u0026nbsp;*sp;\ninline exf getK(int a, int b)\u0026nbsp;{\nreturn ((exf)f[b]\u0026nbsp;- f[a])\u0026nbsp;/\u0026nbsp;((exf)d[b]\u0026nbsp;- d[a]);\n}\ninline void addEdge(int u, int v)\u0026nbsp;{\nep-\u0026gt; t = v;\nep-\u0026gt; next = head[u];\nhead[u]\u0026nbsp;= ep ++;\n}\n#define mid(p)\u0026nbsp;((p-\u0026gt;l+p-\u0026gt;r)\u0026gt;\u0026gt;1)\nvoid phIns(phull\u0026amp; h, int v0)\u0026nbsp;{\nif (!h. t)\u0026nbsp;{\nh. r. push_back(oper(1, 0, 0));\nh. s[h. t = 1]\u0026nbsp;= v0;\n}\nelse if (h. t == 1)\u0026nbsp;{\nh. r. push_back(oper(2, 0, 1));\nh. s[h. t = 2]\u0026nbsp;= v0;\n}\nelse {\nint l = 2, r = h. t;\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r + 1)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (getK(h. s[mid - 1], h. s[mid])\u0026nbsp;\u0026gt; getK(h. s[mid - 1], v0)\u0026nbsp;+ eps)\nr = mid - 1;\nelse\nl = mid;\n}\nif (l\u0026nbsp;\u0026gt; 2 || getK(h. s[1], h. s[2])\u0026nbsp;\u0026lt;= getK(h. s[1], v0))\n++ l;\nh. r. push_back(oper(l, h. s[l], h. t));\nh. s[h. t = l]\u0026nbsp;= v0;\n}\n}\nvoid phCancel(phull\u0026amp; h)\u0026nbsp;{\nif (h. r. empty())\nreturn;\noper o =\u0026nbsp;*h. r. rbegin();\nh. r. pop_back();\nh. s[o. p]\u0026nbsp;= o. v;\nh. t = o. t;\n}\nqw phQry(phull\u0026amp; h, int i)\u0026nbsp;{\nint l = 1, r = h. t - 1;\nif (!h. t)\nreturn inf;\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (getK(h. s[mid], h. s[mid + 1])\u0026nbsp;+ eps \u0026lt; k[i])\nl = mid + 1;\nelse\nr = mid;\n}\nif (l\u0026nbsp;== h. t - 1 \u0026amp;\u0026amp; getK(h. s[l], h. s[l + 1])\u0026nbsp;+ eps \u0026lt; k[i])\n++ l;\nreturn f[h. s[l]]\u0026nbsp;+\u0026nbsp;(d[i]\u0026nbsp;- d[h. s[l]])\u0026nbsp;* k[i]\u0026nbsp;+ b[i];\n}\nseg *sgtBuild(int l, int r)\u0026nbsp;{\nseg *p\u0026nbsp;= sp ++;\np-\u0026gt; d. s = new int[r - l + 3];\np-\u0026gt; d. t = 0;\np-\u0026gt; l = l;\np-\u0026gt; r = r;\nif (l\u0026nbsp;+ 1 \u0026lt; r)\u0026nbsp;{\np-\u0026gt; ls = sgtBuild(l, mid(p));\np-\u0026gt; rs = sgtBuild(mid(p), r);\n}\nreturn p;\n}\nvoid sgtChg(seg* p, int p0, int v0)\u0026nbsp;{\nif (v0\u0026nbsp;==\u0026nbsp;-1)\nphCancel(p-\u0026gt; d);\nelse\nphIns(p-\u0026gt; d, v0);\nif (p-\u0026gt; l + 1 \u0026lt; p-\u0026gt; r)\u0026nbsp;{\nif (p0\u0026nbsp;\u0026lt; mid(p))\nsgtChg(p-\u0026gt; ls, p0, v0);\nelse\nsgtChg(p-\u0026gt; rs, p0, v0);\n}\n}\nqw sgtQry(seg* p, int l, int r, int v0)\u0026nbsp;{\nif (l\u0026nbsp;\u0026gt;= r)\nreturn inf;\nelse if (l\u0026nbsp;== p-\u0026gt; l \u0026amp;\u0026amp; r == p-\u0026gt; r)\nreturn phQry(p-\u0026gt; d, v0);\nelse if (r\u0026nbsp;\u0026lt;= mid(p))\nreturn sgtQry(p-\u0026gt; ls, l, r, v0);\nelse if (l\u0026nbsp;\u0026gt;= mid(p))\nreturn sgtQry(p-\u0026gt; rs, l, r, v0);\nelse\nreturn min(sgtQry(p-\u0026gt; ls, l, mid(p), v0), sgtQry(p-\u0026gt; rs, mid(p), r, v0));\n}\nqw getAns(int p, int d0)\u0026nbsp;{\nint l = 1, r = d0;\nwhile (l\u0026nbsp;\u0026lt; r)\u0026nbsp;{\nint mid =\u0026nbsp;(l\u0026nbsp;+ r)\u0026nbsp;\u0026gt;\u0026gt; 1;\nif (d[p]\u0026nbsp;- d[stc[mid]]\u0026nbsp;\u0026gt; dl[p])\nl = mid + 1;\nelse\nr = mid;\n}\nreturn sgtQry(rt, l, d0 + 1, p);\n}\nvoid dfs(int p, int d0)\u0026nbsp;{\nif (p\u0026nbsp;\u0026gt; 1)\nf[p]\u0026nbsp;= getAns(p, d0 - 1);\nsgtChg(rt, d0, p);\nstc[d0]\u0026nbsp;= p;\nfor (edge* e = head[p]; e; e = e-\u0026gt; next)\ndfs(e-\u0026gt; t, d0 + 1);\nsgtChg(rt, d0,\u0026nbsp;-1);\n}\nint main()\u0026nbsp;{\n#ifndef ONLINE_JUDGE\nfreopen(\u0026quot;ticket.in\u0026quot;,\u0026nbsp;\u0026quot;r\u0026quot;, stdin);\nfreopen(\u0026quot;ticket.out\u0026quot;,\u0026nbsp;\u0026quot;w\u0026quot;, stdout);\n#endif\nmemset(head, 0, sizeof(head));\nep = new edge[maxn];\nqw tmp;\nreadInt(n);\nreadInt(tmp);\nsp = new seg[maxn * 3];\nrt = sgtBuild(1, n + 1);\nd[1]\u0026nbsp;= 0;\nf[1]\u0026nbsp;= 0;\nfor (int i = 2; i \u0026lt;= n;\u0026nbsp;++ i)\u0026nbsp;{\nreadInt(fa[i]);\naddEdge(fa[i], i);\nreadInt(tmp);\nd[i]\u0026nbsp;= d[fa[i]]\u0026nbsp;+ tmp;\nreadInt(k[i]);\nreadInt(b[i]);\nreadInt(dl[i]);\n}\ndfs(1, 1);\nfor (int i = 2; i \u0026lt;= n;\u0026nbsp;++ i)\nprintf(lld \u0026quot;\\n\u0026quot;, f[i]);\n}\n","permalink":"/oi/lofterimport_150/","summary":"考场上只想到暴力。\n如果只是一条链的话怎么乱搞一搞？\n如果没有深度限制的话简单的斜率优化+链剖就行了。\n有深度限制就把hull扔到线段树里用可持久化栈来维护一下。DFS的时候塞进线段树里，然后完了再扔出来。总的复杂度O(n*log^2(n))，\n代码也不怎么复杂。\n#include \u0026lt;cstdio\u0026gt;\n#include\u0026nbsp;\u0026lt;cctype\u0026gt;\n#include\u0026nbsp;\u0026lt;memory.h\u0026gt;\n#include\u0026nbsp;\u0026lt;vector\u0026gt;\n#include\u0026nbsp;\u0026lt;algorithm\u0026gt;\nusing namespace std;\nstruct edge {\nint t;\nedge* next;\n};\ntypedef long long qw;\ntypedef long double exf;\n#ifdef WIN32\n#define lld \u0026quot;%I64d\u0026quot;\n#else\n#define lld \u0026quot;%lld\u0026quot;\n#endif\n#define _l (qw)\n#define readInt(_s_)\u0026nbsp;{\\\nint _d_;\\\n_s_ = 0;\\\nwhile (!isdigit(_d_\u0026nbsp;= getchar()));\\\nwhile ((_s_\u0026nbsp;= _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\\\n}\nstruct oper {\nint p, v, t;","title":"BZOJ3672 [NOI2014]购票"},{"content":"反正闲着时间比较多。每天写计划写总结好了。\n早上复习字符串。重点是kmp和马拉车。当然其它题看到也做一做。\n下午把NOI那题做了。数据结构+DP=ORZ\n晚上还是要跑步。然后顺便刷下bzoj吧。\n然后发现晚上要考试。又naive了啊。唉。\n","permalink":"/oi/lofterimport_151/","summary":"反正闲着时间比较多。每天写计划写总结好了。\n早上复习字符串。重点是kmp和马拉车。当然其它题看到也做一做。\n下午把NOI那题做了。数据结构+DP=ORZ\n晚上还是要跑步。然后顺便刷下bzoj吧。\n然后发现晚上要考试。又naive了啊。唉。","title":"20141014 计划"},{"content":"不知道这是啥，不过看上去很有趣的样子。\n页面好像比百度空间好看，虽然没有看到专门插入代码的东西，不过好像也不用在百度空间上粘代码的说。\n一级域名比较赞。\n决定以后就拿它写总结了。希望不会过两天就RE了吧。\n","permalink":"/oi/lofterimport_153/","summary":"不知道这是啥，不过看上去很有趣的样子。\n页面好像比百度空间好看，虽然没有看到专门插入代码的东西，不过好像也不用在百度空间上粘代码的说。\n一级域名比较赞。\n决定以后就拿它写总结了。希望不会过两天就RE了吧。","title":"#0"},{"content":"Hi, there.\n你为什么会看到这个页面？ 其实是 laekov 整了个不太成功的小活。 很久之前立过一个 flag 说某件事不达成不换头像，终于达成了。 想在 wechat 头像里放一个二维码导流到自己的网站上，然后发现 wechat 竟然拒绝头像里放二维码！ 所以大概需要亿些努力才能找到这个页面了。 你是如何做到的呢？方便的话在底下评论区留个言吧。\n你和 jiaao 聊过天吗？ 是 \u0026ndash;\u0026gt; 好久不见，我还活着，请问找我有啥事吗？ 不是 \u0026ndash;\u0026gt; 往下看 如果你只是想看看这是个啥人儿 请在这个网站随便逛\n关于如何和 jiaao 说话 这个微信号没有好友认证，有事请直接说，但是请记得报上您的名号。 朋友圈空空不是屏蔽，是不爱发。 关于如何提升 jiaao 回复微信消息的及时程度 写个邮件，抄送我老板 拉个微信群，把我老板也拉上 使用别的有已读功能的 im 软件找我（私聊获取联系方式） ","permalink":"/tool/wechat-redirected/","summary":"Hi, there.\n你为什么会看到这个页面？ 其实是 laekov 整了个不太成功的小活。 很久之前立过一个 flag 说某件事不达成不换头像，终于达成了。 想在 wechat 头像里放一个二维码导流到自己的网站上，然后发现 wechat 竟然拒绝头像里放二维码！ 所以大概需要亿些努力才能找到这个页面了。 你是如何做到的呢？方便的话在底下评论区留个言吧。\n你和 jiaao 聊过天吗？ 是 \u0026ndash;\u0026gt; 好久不见，我还活着，请问找我有啥事吗？ 不是 \u0026ndash;\u0026gt; 往下看 如果你只是想看看这是个啥人儿 请在这个网站随便逛\n关于如何和 jiaao 说话 这个微信号没有好友认证，有事请直接说，但是请记得报上您的名号。 朋友圈空空不是屏蔽，是不爱发。 关于如何提升 jiaao 回复微信消息的及时程度 写个邮件，抄送我老板 拉个微信群，把我老板也拉上 使用别的有已读功能的 im 软件找我（私聊获取联系方式） ","title":""},{"content":"Visitors may log down bugs they found here\nHistorical Comments zms_ at 2016-03-19T14:05:51 为什么手机上不了ovo\nlaekov at 2017-03-02T23:54:54 Github 登录功能已修复\nydc258ttbaby at 2022-10-11T19:39:34 再来试试能不能评论\n","permalink":"/post/bugreport/","summary":"Visitors may log down bugs they found here\nHistorical Comments zms_ at 2016-03-19T14:05:51 为什么手机上不了ovo\nlaekov at 2017-03-02T23:54:54 Github 登录功能已修复\nydc258ttbaby at 2022-10-11T19:39:34 再来试试能不能评论","title":"Bug report"},{"content":"这是laekov提供的资源页. laekov提供了一些常用的文件和一些奇怪的文件.\n出门讲课常用:\nmy vimrc\ngvim74\ndevcpp\nppt 资源:\n一个紫紫的 keynote 的模板 ","permalink":"/post/download/","summary":"这是laekov提供的资源页. laekov提供了一些常用的文件和一些奇怪的文件.\n出门讲课常用:\nmy vimrc\ngvim74\ndevcpp\nppt 资源:\n一个紫紫的 keynote 的模板 ","title":"Download"},{"content":"Visitors can say anything to the owner here\nHistorical Comments Unknown friend at 2015-04-01T00:08:45 写出了一个留言版一样的东西.不想再去写每个文章的评论列表了.那就将就用这个喽.我觉得还挺好的ovo \u0026mdash;- laekov\nUnknown friend at 2015-04-02T09:08:32 yjq naive \u0026mdash;- zhonghaoxi\nUnknown friend at 2015-04-02T09:09:45 yjq naive \u0026mdash;- hope1\nUnknown friend at 2015-04-02T09:09:45 yjq naive \u0026mdash;- hope1\nUnknown friend at 2015-04-02T13:03:20 yjq naive \u0026mdash;- mhy12345\nUnknown friend at 2015-04-02T13:05:14 hope1 naive \u0026mdash;- hope1\nUnknown friend at 2015-04-02T22:39:00 不要再刷naive了ovo \u0026mdash;- laekov\nUnknown friend at 2015-04-03T13:12:13 yjq要ak了 \u0026mdash;- tyh\nUnknown friend at 2015-04-05T19:04:33 orz laekov.千古神犇laekov，扑通扑通跪下来 \u0026mdash;- yjqqqaq\nUnknown friend at 2015-04-13T11:59:13 orz orz orz \u0026mdash;- ianaestheitc\nUnknown friend at 2015-04-13T11:59:13 orz orz orz \u0026mdash;- ianaestheitc\nUnknown friend at 2015-04-23T20:35:04 orz laekov \u0026mdash;- iwtwiioi\nUnknown friend at 2015-05-03T16:15:45 orzzzzzzzzzzzzzzzzzzzzzzzzz \u0026mdash;- iwtwiioi\nUnknown friend at 2015-05-10T23:55:11 laekov老司机带我飞！ \u0026mdash;- laekov粉丝团帮厨\nUnknown friend at 2015-05-11T18:30:13 laekov老司机带我飞！ \u0026mdash;- iwtwiioi\nUnknown friend at 2015-05-12T14:33:47 捂脸ing \u0026mdash;- vokael\nUnknown friend at 2015-05-13T12:46:33 laekov老司机带我飞！ \u0026mdash;- yjqqqaq\nUnknown friend at 2015-05-14T15:26:50 laekov老司机带我飞! \u0026mdash;- ZYF-ZYF\nUnknown friend at 2015-05-14T16:35:28 最近真是懒癌晚期啊\u0026hellip;好想把自己beng了啊\u0026hellip; \u0026mdash;- vokeal\nUnknown friend at 2015-05-18T11:45:47 mhy好厉害啊maya都把我的visit count刷暴啦跪烂啦 \u0026mdash;- vokeal\nUnknown friend at 2015-05-23T20:53:47 javascript写的时钟都是不准的!!!切记!!! \u0026mdash;- laekov\nUnknown friend at 2015-05-30T08:54:58 我是傻逼 \u0026mdash;- laekov\nUnknown friend at 2015-05-30T08:55:23 orz laekov \u0026mdash;- jason_yu\nUnknown friend at 2015-05-30T08:55:39 hahhahahahaahaha \u0026mdash;- yjqqqaq\nUnknown friend at 2015-05-31T21:04:45 世界在向我宣战么？ \u0026mdash;- laekov\nUnknown friend at 2015-06-01T12:56:51 What? what? \u0026mdash;- hahah\nUnknown friend at 2015-06-01T20:14:36 跪今年thu爷！ \u0026mdash;- iwtwiioi\nUnknown friend at 2015-06-01T20:14:36 跪今年thu爷！ \u0026mdash;- iwtwiioi\nUnknown friend at 2015-06-02T10:40:33 原来我写错了一个特别sb的地方自己还没发现ovooo \u0026mdash;- laekov\nUnknown friend at 2015-06-02T16:44:27 someone cares \u0026mdash;- guess?\nUnknown friend at 2015-06-02T22:38:19 原来我把数组开小了原来我把数组开小了原来我把数组开小了原来我把数组开小了重要的事要说100遍 \u0026mdash;- laekov\nUnknown friend at 2015-06-02T22:38:19 原来我把数组开小了原来我把数组开小了原来我把数组开小了原来我把数组开小了重要的事要说100遍 \u0026mdash;- laekov\nUnknown friend at 2015-06-03T22:36:39 跪学长 \u0026mdash;- zms_\nUnknown friend at 2015-06-06T10:00:01 明天就要高考了呢.时间真快.学长\u0026amp;\u0026amp;学姐们加油喽 \u0026mdash;- laekov\nUnknown friend at 2015-06-07T21:08:26 fst+正解没调出来TATTAT \u0026mdash;- laekov\nUnknown friend at 2015-06-08T18:59:56 我就高三了!? \\@_@/吓 \u0026mdash;- laekov\nUnknown friend at 2015-06-10T23:38:53 跪ak \u0026mdash;- iwtwiioi\nUnknown friend at 2015-06-11T11:41:40 新域名laekov.club.资不资瓷啊? \u0026mdash;- laekov\nUnknown friend at 2015-06-11T23:45:05 OTZ laekov \u0026mdash;- hoblovski\nUnknown friend at 2015-06-15T14:52:30 用404的方法去掉了czr最讨厌的php问号,mark \u0026mdash;- laekov\nUnknown friend at 2015-06-20T21:51:50 fst两题.好开心啊ovoovo \u0026mdash;- laekov\nUnknown friend at 2015-06-20T21:51:50 fst两题.好开心啊ovoovo \u0026mdash;- laekov\nUnknown friend at 2015-06-24T13:47:43 37.57.231.112, be careful with your ass. \u0026mdash;- laekov\nUnknown friend at 2015-06-25T21:41:00 Hot! \u0026mdash;- laekov\nUnknown friend at 2015-06-25T21:41:00 Hot! \u0026mdash;- laekov\nUnknown friend at 2015-06-27T19:14:39 同性婚姻合法了,虐狗的人更多了TT \u0026mdash;- laekov\nUnknown friend at 2015-07-03T13:05:55 bomb \u0026mdash;- laekov\nUnknown friend at 2015-07-03T13:05:55 bomb \u0026mdash;- laekov\nUnknown friend at 2015-07-04T13:45:36 一个多月才攒够,我没救了. \u0026mdash;- laekov\nUnknown friend at 2015-07-05T23:40:07 HOME! \u0026mdash;- laekov\nUnknown friend at 2015-07-05T23:40:07 HOME! \u0026mdash;- laekov\nUnknown friend at 2015-07-06T22:30:25 坐看leakov明天虐场 \u0026mdash;- zbonghaoxi\nUnknown friend at 2015-07-07T14:41:26 ovoovooovooovvoovovovovovovovovovovovovo \u0026mdash;- yjqqquq\nUnknown friend at 2015-07-07T21:01:31 Best wishes,NOI加油. \u0026mdash;- kiana\nUnknown friend at 2015-07-07T21:21:23 加油OVO \u0026mdash;- yyy\nUnknown friend at 2015-07-08T14:06:37 Round and round again, but not that me. What will it be? \u0026mdash;- laekov\nUnknown friend at 2015-07-17T06:23:34 加油喔 \u0026mdash;- zms\nUnknown friend at 2015-07-17T13:36:50 laekov以一定几率爆炸=\u0026gt;量子态的laekov \u0026mdash;- laekov\nUnknown friend at 2015-07-17T18:00:41 我已经跪了QwQ何姥爷加油 \u0026mdash;- ororzzz\nUnknown friend at 2015-07-22T23:36:43 never say never. \u0026mdash;- NIE\nUnknown friend at 2015-08-19T20:52:53 明天是七夕 \u0026mdash;- laekov\nUnknown friend at 2015-08-28T23:09:27 Last peaceful night. Wish nice dreams. \u0026mdash;- laekov\nUnknown friend at 2015-09-02T20:43:57 发广告的好烦啊 \u0026mdash;- laekov\nUnknown friend at 2015-09-03T12:43:57 看来ban ip是必要的啊\u0026hellip; \u0026mdash;- laekov\nUnknown friend at 2015-09-03T18:25:31 爹百年一遇地做饭给窝吃.吃完擦完桌子倒完垃圾,oh还有汤没端上来QwQ \u0026mdash;- laekov\nUnknown friend at 2015-09-04T11:24:37 何姥爷加油高考，成为文化爷！！ \u0026mdash;- yjqqqaq\nUnknown friend at 2015-09-17T18:17:18 哎 \u0026mdash;- laekov\nUnknown friend at 2015-09-20T03:16:41 加油加油加油！路还长，不用看一时的得失 \u0026mdash;- dd\nUnknown friend at 2015-09-20T03:16:41 加油加油加油！路还长，不用看一时的得失 \u0026mdash;- dd\nUnknown friend at 2015-10-02T15:28:09 什么鬼 \u0026mdash;- laekov\nUnknown friend at 2015-10-02T15:28:09 什么鬼 \u0026mdash;- laekov\nUnknown friend at 2015-10-02T17:47:33 啊喂楼下盗用窝名号的是谁? \u0026mdash;- laekov\nUnknown friend at 2015-10-24T19:30:46 -\u0026gt; -\u0026gt;又和毛子斗志半勇\u0026hellip; \u0026mdash;- laekov\nUnknown friend at 2015-11-09T21:13:28 这造数据的人真是误人子弟啊\u0026hellip; \u0026mdash;- laekov\nUnknown friend at 2015-11-11T22:57:50 gg \u0026mdash;- laekov\nUnknown friend at 2015-11-13T23:16:01 matlab /马特莱堡/ 23333 \u0026mdash;- laekov\nUnknown friend at 2015-11-14T19:24:30 md外面死了个人搭了个灵堂在那鬼哭\u0026hellip;还能不能愉快地做作业了 \u0026mdash;- laekov\nUnknown friend at 2015-11-24T22:45:32 专开一区记录脑洞ovo \u0026mdash;- laekov\nUnknown friend at 2015-11-29T16:47:00 steam上的东西贵死了(心痛状 \u0026mdash;- laekov\nUnknown friend at 2015-11-29T16:47:00 steam上的东西贵死了(心痛状 \u0026mdash;- laekov\nUnknown friend at 2015-12-06T11:26:47 自从有了flag原理，都不能好好说话了 \u0026mdash;- laekov\nUnknown friend at 2015-12-13T12:54:18 各种跪烂 \u0026mdash;- laekov\nUnknown friend at 2015-12-13T12:54:18 各种跪烂 \u0026mdash;- laekov\nUnknown friend at 2015-12-16T16:17:54 hlyhly?hlyhly! \u0026mdash;- laekov粉丝团帮厨\nUnknown friend at 2015-12-21T18:17:57 改架子啊改架子 \u0026mdash;- laekov\nUnknown friend at 2015-12-21T18:17:57 改架子啊改架子 \u0026mdash;- laekov\nUnknown friend at 2015-12-21T21:24:21 union us { double happiness; long long story; } \u0026mdash;- vokeal\nUnknown friend at 2015-12-25T16:41:36 颓颓颓 \u0026mdash;- vokeal\nUnknown friend at 2015-12-28T21:25:39 完辣,三角函数题算错了qwq \u0026mdash;- vokeal\nUnknown friend at 2016-01-02T20:50:07 qwq \u0026mdash;- laekov\nUnknown friend at 2016-01-03T17:49:29 稀撇。淦 \u0026mdash;- laekov\nUnknown friend at 2016-01-04T22:42:11 确实可以愉快地说话了 \u0026mdash;- laekov\nUnknown friend at 2016-01-06T13:34:04 脸丑没救QWQ \u0026mdash;- vokeal\nUnknown friend at 2016-01-07T11:38:25 it's time to orz HJA \u0026mdash;- 404\nUnknown friend at 2016-01-09T00:13:00 failed publickey over and over again\u0026hellip;郁闷ing \u0026mdash;- vokeal\nUnknown friend at 2016-01-09T00:18:48 打脸papapa \u0026mdash;- laekov\nUnknown friend at 2016-01-14T23:15:34 突然发现自己的姿势水平太低辣qwq \u0026mdash;- laekov\nUnknown friend at 2016-01-18T23:27:43 Orz \u0026mdash;- ommy\nUnknown friend at 2016-01-31T15:31:02 laekov十天不写日记了- - \u0026mdash;- refuse\nUnknown friend at 2016-02-12T12:27:01 发广告的沙茶给我去noi \u0026mdash;- laekov\nlaekov at 2016-02-20T12:24:00 嗯广告君呢?\njcpwfloi at 2016-02-20T16:19:52 hjahja?hjahja!\nlaekov at 2016-02-20T16:43:48 那啥, invite code私窝可得啊\nlaekov at 2016-02-20T23:54:40 这是来自github的laekov. (github登陆目前似乎不太稳定. 如果出现问题请吊打laekov)\nrubylan at 2016-02-22T22:27:53 前排给少女粉laekov点赞╰(´︶`)╯\nlaekov at 2016-03-19T20:02:02 @zms //似乎是因为改了某个地方忘改回去了ovo手机可以请求桌面版网页. 我等会来修qwq 其实是根本没有写手机版本ui. 已修复为直接重定向到pc版ui.\nlaekov at 2016-03-19T21:48:46 测试mathJax (\\frac{3^2}{a}) $$a_i=a_{i-1}+1$$\nArtemisLiu at 2016-04-27T22:46:19 成功注册ovo膜拜何姥爷orz\nlaekov at 2016-07-17T16:02:58 github登陆哪里不能评论了？\nlaekov at 2016-10-26T19:32:38 什么情况啊? 测试\njcpwfloi at 2016-11-01T15:42:43 yyyyyy\nlaekov at 2017-01-07T19:47:06 必需 ref 一下缓存么 QwQ 什么时候还是要加一个删除评论的接口才行\nlaekov at 2017-01-24T23:07:10 MathJax好鬼蓄啊QAQAQAQ\nmmmqaq at 2017-02-27T18:46:41 %%% hja\nmmmqaq at 2017-02-27T18:46:47 %%% hja _1\nmmmqaq at 2017-02-27T18:46:51 %%% hja _2\nmmmqaq at 2017-02-27T18:49:47 %%% hja _2\nmmmqaq at 2017-04-05T16:37:04 日常来玩\nmmmqaq at 2017-04-05T16:37:23 谁给点的差评啊=。=\nmywaythere at 2017-04-11T13:06:23 催更qwq\nrubylan at 2018-03-11T05:41:48 #偶然拜访何姥爷。（哇惊了= =时隔两年居然登录成功了……\nlyzy at 2018-05-18T18:22:03 ao学长加油！\nsaruka at 2018-12-27T10:59:03 突然发现很久很久没来看学长的博客了\njcpwfloi at 2019-03-05T03:33:09 何姥爷太强啦！！！\nComeOrDream at 2020-01-08T10:32:43 何姥爷追随者+=1\nlaekov at 2022-01-13T21:30:16 尘埃拉力日常：在同一棵树上撞了三四五六次\n","permalink":"/post/webboard/","summary":"Visitors can say anything to the owner here\nHistorical Comments Unknown friend at 2015-04-01T00:08:45 写出了一个留言版一样的东西.不想再去写每个文章的评论列表了.那就将就用这个喽.我觉得还挺好的ovo \u0026mdash;- laekov\nUnknown friend at 2015-04-02T09:08:32 yjq naive \u0026mdash;- zhonghaoxi\nUnknown friend at 2015-04-02T09:09:45 yjq naive \u0026mdash;- hope1\nUnknown friend at 2015-04-02T09:09:45 yjq naive \u0026mdash;- hope1\nUnknown friend at 2015-04-02T13:03:20 yjq naive \u0026mdash;- mhy12345\nUnknown friend at 2015-04-02T13:05:14 hope1 naive \u0026mdash;- hope1\nUnknown friend at 2015-04-02T22:39:00 不要再刷naive了ovo \u0026mdash;- laekov\nUnknown friend at 2015-04-03T13:12:13 yjq要ak了 \u0026mdash;- tyh","title":"Webboard"},{"content":"今天是 吃什么? ","permalink":"/tool/whattoeat/","summary":"今天是 吃什么? ","title":"What to eat"},{"content":"The human being of laekov is also active on this social media.\nHowever, no obvious connection is expected to be established online.\nIf you are interested in who it is, please reach out in person.\n","permalink":"/not-easily-available/","summary":"The human being of laekov is also active on this social media.\nHowever, no obvious connection is expected to be established online.\nIf you are interested in who it is, please reach out in person.","title":"Not a 404, but 404"}]