BZOJ5319/LOJ2551「JSOI2018」列队】的更多相关文章

问题描述 作为一名大学生,九条可怜在去年参加了她人生中的最后一次军训. 军训中的一个重要项目是练习列队,为了训练学生,教官给每一个学生分配了一个休息位置.每次训练开始前,所有学生都在各自的休息位置休息,但是当教官发出集合命令后,被点到的学生必须要到指定位置集合. 为了简化问题,我们把休息位置和集合位置抽象成一根数轴.一共有 \(n\) 个学生,第 \(i\) 个学生的休息位置是 \(a_i\).每一次命令,教官会指定一个区间 \([l,r]\) 和集合点 \(K\) ,所有编号在 \([l,r]…
题目:https://loj.ac/problem/2551 答案是排序后依次走到 K ~ K+r-l . 想维护一个区间排序后的结果,使得可以在上面二分.求和:二分可以知道贡献是正还是负. 于是想用树套树维护一段区间的元素减去从0开始的等差数列的值.为了二分,维护 fr , sc 表示权值区间里第一个/最后一个权值. 时间空间都是 nlog2n 的,空间连 70 分的范围都开不下.而且对拍1000以内的数据还有错误,交上去 TLE 得只能得 70 分. #include<cstdio> #i…
题解 老年选手一道裸的主席树都要看好久才看出来 首先熟练的把这个区间建成\(n\)个主席树 然后对于一个询问,我们相当于在主席树上二分一个mid,使得\(mid - K + 1\)正好和\([l,r]\)区间中坐标在\([1,mid]\)的人数一样就好 (居然代码只有2.2K,似乎比平均码长低啊,开心) 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #…
「JSOI2018」战争 解题思路 我们需要每次求给一个凸包加上一个向量后是否与另外一个凸包相交,也就是说是否存在 \[ b\in B,(b+w)\in A \] 这里 \(A, B\) 表示凸包内部的点集,可以转化一步变成 \[ a\in A,b \in B,b+w=a \\ w =a -b \] 那相当于对 \(A,(-B)\) 作闵可夫斯基和,判断 \(w\) 是否在新的凸包内部,把新的凸包划分成三角区域,让 \(w\) 和原点做一条向量,二分一下在哪个区域然后判断一下在区域内部还是外部就…
https://www.lydsy.com/JudgeOnline/problem.php?id=5319 https://www.luogu.org/problemnew/show/P4559 https://loj.ac/problem/2551 题面见上. 40pts: 不难想到询问应当在主席树上做. [l,r]为我们询问的这些人所在位置的坐标区间,[l1,r1]为这些人最终要去这个区间里站着. 我们维护主席树节点代表的区间的人数,则设当前节点左子树人数为ls,则可以递归处理[l,mid]…
题目:https://loj.ac/problem/2550 只会写20分的搜索…… #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; int n,m,ans; bool b[N][N],vis[N][N]; void dfs(int x,int y,bool fx,int lj) { ; ; if(vis[x][y]) { &&y==) { ; ;…
题目:https://loj.ac/problem/2548 如果知道正多边形的顶点,就是二分答案.二分图匹配.于是写了个暴力枚举多边形顶点的,还很愚蠢地把第一个顶点枚举到 2*pi ,其实只要 \( \frac{2*pi}{n} \) 就行了. 总之能得10分. #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define db double using nam…
题目:https://loj.ac/problem/2547 一条树边 cr->v 会被计算 ( n-siz[v] ) * siz[v] 次.一条环边会被计算几次呢?于是去写了斯坦纳树. #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define ll long long using namespace std; int rdn() { ;;char ch…
好像也没那么难写 LOJ #2547 Luogu P4517 题意 在一棵点仙人掌中等概率选择一个点集 求选出点集的斯坦纳树大小的期望 定义点仙人掌为不存在一个点在多个简单环中的连通图 斯坦纳树为在原图中连通给定点集的一棵生成树 点数不超过$ 200$ $ Solution$ 直接计算不太方便 我们转而考虑每条边的贡献 如果这条边不在环上则一定是割边 若这条边两边都有点被选择就会被计算贡献 如果这条边在环上比较复杂 对于一个环,我们选择的边的数量一定是环大小-最长没选中点的路径的长度 定义选中某…
题目:https://loj.ac/problem/2546 dp[ i ][ j ][ 0/1 ][ 0/1 ] 表示 i 子树,用 j 个点,是否用 i , i 是否被覆盖. 注意 s1<=s0 ,别弄出负角标. 用 if 判断一下,如果有值再转移,会快非常多. 复杂度是 O(n*k) 的.证明:https://www.cnblogs.com/cjyyb/p/10416839.html 先约定如果一个小于 k 的子树和一个大于 k 的子树合并,在小于 k 的子树那里看复杂度. 1.两个小于…
传送门 唉突然回忆起去年去noipnoipnoip提高组试水然后省二滚粗的悲惨经历... 往事不堪回首. 所以说考场上真的有debuffdebuffdebuff啊!!!虽然当时我也不会权值线段树 这道题直接上权值线段树维护nnn行和第mmm列就行了. 原因? 这是因为每次修改只会影响到某一行和最后一列. 但直接跑是会炸空间的. 因此我们动态开点来操作一波就行了. 对于被删除的点我们存到vectorvectorvector里面就行. 代码: #include<bits/stdc++.h> usi…
题解 我不会打表找规律啊QAQ 规律就是 对于\(n = m\)我们每一条左下到右上的对角线上的点的走法都是一样的且每n步一个轮重复 对于\(n != m\)我们找到最大公约数\(d\),在每个\(d * d\)的方格里满足左上到右下的对角线点的走法一样且d轮一个重复 然后枚举\(dx\),\(dy = d - dx\),我们要满足\(gcd(n,dx) == 1\)且\(gcd(m,dy) == 1\)这时是一个合法路径 显然有一些点是必须要经过的,我们把这些点遍历一遍,同时算出\(fir[i…
题解 仔细分析了一下,如果写个凸包+每次暴力半平面交可以得到70分,正解有点懵啊 然后用到了一个非常结论,但是大概出题人觉得江苏神仙一个个都可以手证的结论吧.. Minkowski sum 两个凸包分别为\(A,B\),向量为\(\vec{v}\) \(B + \vec{v} = A\) 那么可以得到\(\vec{v} = A - B\) 也就是第一个凸包,和第二个凸包取反,这些向量的集合两两组合能达到向量的组合 求法就是,我们找到两个凸包右下角的点,取这些凸包上的边的向量,转一圈即可,具体可以…
题解 卡常卡不动,我自闭了,特判交上去过了 事实上90pts= = 我们考虑二分长度,每个点能覆盖圆的是一段圆弧 然后问能不能匹配出一个正多边形来 考虑抖动多边形,多边形的一个端点一定和圆弧重合 如果暴力枚举重合的点的话,是\(O(n^4 log V)\) 但是因为是正多边形,每个端点都等价,我们就把旋转角度控制在\(\frac{2\pi}{N}\)以内 然后就考虑加入一条边,我们要增广 删掉一条边,如果这条边没有流的话,就直接把容量改成0 如果有流的话,只涉及到三条边的流量,都修改就好 然后再…
题解 如果只是一棵树的话,那么就枚举每条边,分成两部分大小为\(a\)和\(b\) 那么这条边被统计的方案数是\((2^a - 1)(2^b - 1)\) 如果是一个环的话,我们枚举环上至少有\(N - i\)条边的方案数\(T(N - i)\) \(\sum_{i = 1}^{N - 1}T(N - i)\) 先枚举一个\(i\) 就是枚举\([1,n]\)中最靠左的\(l\)和最靠右的\(r\)的方案数\(g[l][r]\),且间隔不超过\(i\) 用前缀和优化更新 代码 #include…
题解 dp[i][j][0/1][0/1]表示以\(i\)为根的子树,用了\(j\)个,i点选了或者没选,i点被覆盖或没被覆盖 转移比较显然,但是复杂度感觉不太对? 其实转移到100个的时候就使第二维满了,之后每多两个点一定会多一个守卫,这个时候会使第二维某些位置开始空了,最后转移其实只有后几维有效 具体优化的方法就是我枚举每个儿子的j的时候,只有j所在的位置有值我们才枚举父亲背包大小来更新 代码 #include <bits/stdc++.h> #define fi first #defin…
LINK 思路 神仙线段树 你考虑怎么样才能快速维护出答案 首先看看一条链怎么做? 首先很显然的思路是维护每个节点的是否出过队 然后对于重新入队的点 直接在后面暴力vector存一下就可以了 最核心的思路就是假设你已经知道了当前位置的点是什么编号,最后通过计算/查询来得出答案 然后不是链的情况其实就动态开点就可以了 因为有用的状态很少 然后就直接进行查询就可以了 //Author: dream_maker #include<bits/stdc++.h> using namespace std;…
问题描述 LG4516 LOJ2546 题解 好一个毒瘤题. hkk:JSOI的签到题 设\(opt[i][j][0/1][0/1]\)代表结点\(i\)的子树,放置\(j\)个,\(i\)放不放,\(i\)是否覆盖的方案数. DP方程太长,无力打出(真·原因:我要睡觉!). \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; template <typename Tp> void read(Tp &…
传送门 Luogu 解题思路 一眼平衡树,应该没问题吧? 但我们一定要反应过来,单点的维护是非常之困难的,因为这是一个网格图而不仅仅是一条序列. 我们要考虑把修改操作全都放在序列上进行. 其实题面里是给了提示的,找一找在哪里. 于是我们可以考虑维护一些区间: 对于每一行,将前 \(m-1\) 个数的区间作为一个节点:将最后一列的 \(n\) 个数的的区间作为一个节点. 但是我们会遇到这样一个问题:当前的区间需要被切开,也就是要把一个节点分裂成两个节点. 其实这个和普通的序列操作是没什么区别的,具…
在本题当中为了方便,我们将坐标范围改至 \((0 \sim n - 1, 0 \sim m - 1)\),行走即可视作任意一维在模意义下 \(+1\). 同时,注意到一个位置只能经过一次,则可以令 \(a_{x, y}\) 为 \((x, y)\) 这个位置往外走是向下还是向,方便考察. 首先考虑这个问题的方案数,此类网格图行走的问题一般需要考察对角线的特殊性质. 观察 1:\(\forall (x, y)\),若 \(a_{(x - 1) \bmod n, y} \ne a_{x, (y -…
BZOJ5319: [Jsoi2018]军训列队 https://lydsy.com/JudgeOnline/problem.php?id=5319 分析: 易知把所有人按原本的顺序放到\([K,K+len-1]\)这些位置上是最优的. 我们只需要求一个\(mid\), 满足从\(mid\)以后的人都是向左移动. 这个可以用二分+主席树在\(O(nlog^2)\)的时间内解决, 然后过不去. 变成直接在主席树上二分就好了,需要一点小技巧. 即二分走的区间不一定包含答案点,但可能是答案点减\(1​…
题目大意:给定一个 $n times m$ 的方阵,初始时第 $i$ 行第 $j$ 列的人的编号为 $(i-1) times m + j$,$q$ 次给出 $x,y$,让第 $x$ 行 $y$ 列的人出队,然后其他人先向左看齐,后向前看齐,再把出队的人放在第 $n$ 行 $m$ 列,请你输出每次出队的人的编号.$n,m,q leq 3 times 10^5$ 对于 $n,m leq 50000, q leq 500$ 的数据,可以离散化,但是不能用 map,因为 map 的所有操作都是带 log…
「SCOI2014」方伯伯的 OJ 和列队有点像,平衡树点分裂维护即可 但是需要额外用个set之类的对编号查找点的位置 插入完了后记得splay,删除时注意特判好多东西 Code: #include <cstdio> #include <cctype> #include <set> const int N=2e5+10; template <class T> void inline read(T &x) { x=0;char c=getchar();…
「NOI2017」蚯蚓排队 题目描述 蚯蚓幼儿园有$n$只蚯蚓.幼儿园园长神刀手为了管理方便,时常让这些蚯蚓们列队表演. 所有蚯蚓用从$1$到$n$的连续正整数编号.每只蚯蚓的长度可以用一个正整数表示,根据入园要求,所有蚯蚓的长度都不超过$6$.神刀手希望这些蚯蚓排成若干个队伍,初始时,每只蚯蚓各自排成一个仅有一只蚯蚓的队伍,该蚯蚓既在队首,也在队尾. 神刀手将会依次进行$m$次操作,每个操作都是以下三种操作中的一种: 给出$i$和$j$,令$i$号蚯蚓与$j$号蚯蚓所在的两个队伍合并为一个队伍…
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUnit 5 系列:条件测试 我的 Github:http://github.com/linesh-simplicity 上一节我们了解了 JUnit 新的扩展模型,了解了它是如何支持我们向引擎定制一些行为的.然后我还预告会为大家讲解条件测试,这一节主题就是它了. 条件测试,指的是允许我们自定义灵活的标准…
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Linesh 的博客:「译」JUnit 5 系列:扩展模型(Extension Model) 我的 Github:http://github.com/linesh-simplicity 概述 环境搭建 基础入门 架构体系 扩展模型(Extension Model) 条件断言 注入 动态测试 ... (如果…
工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPerson(name, age, job) { var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function() { alert(this.age); }; return o; } var perso…
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(template)来达成泛型,通常借由类型(class)的解构函数来达成自动释放指针所指向的存储器或对象. 简单的来讲,智能指针是一种看上去类似指针的数据类型,只不过它更加智能,懂的完成内存泄露,垃圾回收等一系列看上去很智能的工作.如你所看到的那样,借助 C++ RAII(Resource acquisi…
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSONP. 现在你想要获取其他网站上的 JavaScript 脚本,你非常高兴的使用 XMLHttpRequest 对象来获取.但是浏览器一点儿也不配合你,无情的弹出了下面的错误信息: XMLHttpRequest cannot load http://x.com/main.dat. No 'Access…
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉:既可让人明白「为何如此设计」,即「知其然更知其所以然」:也能剥离一些琐碎的细节,让更多没那么多时间与精力.或者背景知识不足的朋友,对核心方法和思路,多一点理解,即,给人提供一种「纲举目张提纲挈领抽丝剥茧」的可能性. 机缘巧合,俺今天就决定抛砖引玉,写一篇不那么好的工程文档.也期望对本文话题感兴趣的朋…