bzoj5102: [POI2018]Prawnicy】的更多相关文章

Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大. Input 第一行包含两个正整数n,k(1<=k<=n<=1000000),表示区间的数量. 接下来n行,每行两个正整数l,r(1<=l<r<=10^9),依次表示每个区间. Output 第一行输出一个整数,即最大长度. 第二行输出k个正整数,依次表示选择的是输入文件中的第几个区间. 若有多组最优解,输出任意一组. 按左端…
Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大. Input 第一行包含两个正整数n,k(1<=k<=n<=1000000),表示区间的数量. 接下来n行,每行两个正整数l,r(1<=l<r<=10^9),依次表示每个区间. Output 第一行输出一个整数,即最大长度. 第二行输出k个正整数,依次表示选择的是输入文件中的第几个区间. 若有多组最优解,输出任意一组. Sam…
$bzoj$跑的太慢了...... 我们考虑用线段树来解决这个问题 考虑扫描线 当扫到左端点$i$时,我们把线段$i$加入线段树 同时,对于每个左端点$i$,我们在线段树上二分出最远的$r$满足$r$被覆盖了$k$次以上 复杂度$O(n \log n)$ 然后$TLE$了,这一定不是我的锅... #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define r…
[BZOJ5102][POI2018]Prawnicy Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大. Input 第一行包含两个正整数n,k(1<=k<=n<=1000000),表示区间的数量. 接下来n行,每行两个正整数l,r(1<=l<r<=10^9),依次表示每个区间. Output 第一行输出一个整数,即最大长度. 第二行输出k个正整数,依次表示选择的是输入文件…
考虑最优解的集合中一定有一个$l$最大的,我们就去枚举左端点,把所有$l$小于等于它的全丢进堆里,取前$k$个即可. #include <bits/stdc++.h> using namespace std; #define N 1000010 #define fi first #define se second #define pii pair <int, int> int n, k; struct node { int l, r, id; void scan(int _id)…
题目大意: 有$n(n\le10^6)$个线段,每个线段覆盖的范围是$[l_i,r_i]$,要求从中选取$k(k\le10^6)$个线段使得这些线段覆盖范围的交集最大,求最大交集及任意一种方案. 思路: 对左端点排序,用堆维护右端点即可. #include<queue> #include<cstdio> #include<cctype> #include<algorithm> #include<sys/mman.h> #include<sy…
[BZOJ5099][POI2018]Pionek(极角排序+two pointers) 几个不会严谨证明的结论: 1.将所有向量按极角排序,则答案集合一定是连续的一段. 当答案方向确定时,则一个向量会被选入答案集合当且仅当向量在答案方向上的投影一定都是正的 所以,两个选中向量中间隔着一个向量,则必然可以将后面所有选中向量均前移一位并使答案不劣. 2.答案集合中不存在两个向量的极角差超过$\pi$. 显然需要保证的是,答案集合中任意两个向量投影不为负值,否则一定可以通过删去其中一个使答案更优.…
前言 为了不久之后的\(NOIP2018\),我们的停课从今天(\(Oct\ 24th\))起正式开始了. 本来说要下周开始的,没想到竟提早了几天,真是一个惊喜.毕竟明天有语文考试.后天有科学考试,逃过了一劫. 这篇博客记录的便是停课这段时间的经历. 当然,这篇博客中有许多空链接,请谅解. \(Oct\ 24th\) 上午 一场\(NOIP2018\)线下模拟赛,\(AC\)了\(T1\)和\(T3\),\(T2\)悲惨爆\(0\)... .. 下午 花了一个下午写一道\(KD-Tree\)板子…
Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大. Input 第一行包含两个正整数n,k(1<=k<=n<=1000000),表示区间的数量. 接下来n行,每行两个正整数l,r(1<=l<r<=10^9),依次表示每个区间. Output 第一行输出一个整数,即最大长度. 第二行输出k个正整数,依次表示选择的是输入文件中的第几个区间. 若有多组最优解,输出任意一组. Sam…
5100: [POI2018]Plan metra Time Limit: 40 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 189  Solved: 43[Submit][Status][Discuss] Description 有一棵n个点的无根树,每条边有一个正整数权值,表示长度,定义两点距离为在树上的最短路径的长度. 已知2到n-1每个点在树上与1和n的距离,请根据这些信息还原出这棵树.   Input 第一行包含一个正整数n(2…
[POI2018]Pionek 题目大意: 在无限大的二维平面的原点放置着一个棋子.你有\(n(n\le2\times10^5)\)条可用的移动指令,每条指令可以用一个二维整数向量表示.请你选取若干条指令,使得经过这些操作后,棋子离原点的距离最大. 思路: 将所有向量极角排序,然后你选取的向量一定是里面连续的一段,由于所有向量排成一个环,所以要复制一遍接在后面,最后用尺取法枚举左右端点即可. 时间复杂度\(\mathcal O(n\log n)\). 源代码: #include<cmath>…
http://www.lydsy.com/JudgeOnline/problem.php?id=5100 1.找到d1[i]+dn[i] 最小的点,作为1到n链上的点 2.令链长为D,若abs(d1[i]-dn[i])==D,则 i 与1或n 连边 3.对于链上除去1和n的点k,若 dn[i]-d1[i]==dn[k]-d1[k],则i与k连边 若1到n的链上没有点,即1与n直接相连,那么所有的d1[i]-dn[i] 相等 且 不为 0 特判n=2,输出1 2 任意长度[1,1e6] 无解的情况…
考虑固定右端点,使左端点最小.那么按右端点排序后查询前缀这些区间的左端点第k小即可.然而写了一个treap一个线段树都T飞了,感觉惨爆.事实上可以用堆求第k小,维护一个大根堆保证堆中元素不超过k个即可,瞬间就跑的飞快了. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm>…
[BZOJ5099][POI2018]Pionek Description 在无限大的二维平面的原点(0,0)放置着一个棋子.你有n条可用的移动指令,每条指令可以用一个二维整数向量表示.每条指令最多只能执行一次,但你可以随意更改它们的执行顺序.棋子可以重复经过同一个点,两条指令的方向向量也可能相同.你的目标是让棋子最终离原点的欧几里得距离最远,请问这个最远距离是多少? Input 第一行包含一个正整数n(n<=200000),表示指令条数. 接下来n行,每行两个整数x,y(|x|,|y|<=1…
[BZOJ5100][POI2018]Plan metra Description 有一棵n个点的无根树,每条边有一个正整数权值,表示长度,定义两点距离为在树上的最短路径的长度. 已知2到n-1每个点在树上与1和n的距离,请根据这些信息还原出这棵树. Input 第一行包含一个正整数n(2<=n<=500000),表示点数. 第二行包含n-2个正整数d(1,2),d(1,3),...,d(1,n-1),分别表示每个点到1的距离. 第三行包含n-2个正整数d(n,2),d(n,3),...,d(…
[BZOJ5101][POI2018]Powód Description 在地面上有一个水箱,它的俯视图被划分成了n行m列个方格,相邻两个方格之间有一堵厚度可以忽略不计的墙,水箱与外界之间有一堵高度无穷大的墙,因此水不可能漏到外面.已知水箱内每个格子的高度都是[0,H]之间的整数,请统计有多少可能的水位情况.因为答案可能很大,请对10^9+7取模输出.两个情况不同当且仅当存在至少一个方格的水位在两个情况中不同. Input 第一行包含三个正整数n,m,H(n*m<=500000,1<=H<…
[POI2018]Pionek Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 269  Solved: 80[Submit][Status][Discuss] Description 在无限大的二维平面的原点(0,0)放置着一个棋子.你有n条可用的移动指令,每条指令可以用一个二维整数向量表 示.每条指令最多只能执行一次,但你可以随意更改它们的执行顺序.棋子可以重复经过同一个点,两条指令的方 向向量也可能相同.你的目标是让棋子最终离原点的欧几里得距…
Powódź bzoj-5101 POI-2018 题目大意:在地面上有一个水箱,它的俯视图被划分成了$n$行$m$列个方格,相邻两个方格之间有一堵厚度可以忽略不计的墙,水箱与外界之间有一堵高度无穷大的墙,因此水不可能漏到外面.已知水箱内每个格子的高度都是$[0,H]$之间的整数,请统计有多少可能的水位情况.因为答案可能很大,请对$10^9+7$取模输出.两个情况不同当且仅当存在至少一个方格的水位在两个情况中不同. 注释:$1\le n\times m\le 10^5$,$1\le H\le 1…
题解: 还是比较简单的一道题 考虑现在有一个向量,当且仅当下一个向量与它夹角<90度这个向量的模长才会增加 接下来怎么做呢 如果我们去枚举初始向量,向量方向会随着新增向量而变化 随着不断顺时针的增加向量,另一个方向的向量有所减少 这启示了什么呢 其实可以我们确定最终向量位置,然后在它-90-90度范围内的向量就是可行的 这样我们用two-point-two就可以解决了 代码:…
从上到下枚举上下底边,那么涉及两行的添加和删除. 首先预处理出对于每一列,每个位置添加和删除时,是否会对往下$k$个里出现这个颜色造成影响. 然后对于每种颜色维护一个长度为$m$的bitset,表示哪些列出现过该颜色. 那么每次修改时,找到前驱和后继,对这一行答案的影响是一段区间加,差分前缀和即可. 时间复杂度$O(\frac{nm^2}{64})$. #include<cstdio> typedef unsigned int U; const int N=3010,M=100010,BUF=…
求出Kruskal重构树,那么重构树上每个点的取值范围是定的. 考虑树形DP,则对于一个点,要么所有点水位相同,要么还未发生合并. 故$dp[x]=up[x]-down[x]+1+dp[l[x]]\times dp[r[x]]$. 时间复杂度$O(nm\log(nm))$. #include<cstdio> #include<algorithm> const int N=1000010; int n,m,H,ce,i,j,x,y,tot,f[N],son[N][2],l[N],r[…
若$1$到$n$之间没有其它点,则$1$到$n$的距离为任意一点到它们距离的差值,按照距离关系判断每个点是挂在$1$上还是挂在$n$上即可. 否则$1$到$n$的距离只可能为任意一点到它们距离和的最小值,抽出$1$到$n$路径上所有点后,对于剩下的每个点判断它应该挂在那个点下面即可. 时间复杂度$O(n\log n)$. #include<cstdio> #include<cstdlib> #include<algorithm> using namespace std;…
Description 给定一个n行m列的矩阵,请对于每个长宽均为k的连续子正方形,统计里面出现过的数值的种类数. Input 第一行包含三个正整数n,m,k(n,m<=3000,k<=min(n,m)). 接下来n行,每行m个正整数a[i][j](1<=a[i][j]<=100000),表示矩阵中每个位置的数值. Output 输出一行两个整数M和S. 设f(i,j)表示以(i,j)为左上角的正方形内出现过的数值的种类数,则M表示f的最大值,S表示f的总和. 对每种颜色分别算贡献…
Description 在无限大的二维平面的原点(0,0)放置着一个棋子.你有n条可用的移动指令,每条指令可以用一个二维整数向量表 示.每条指令最多只能执行一次,但你可以随意更改它们的执行顺序.棋子可以重复经过同一个点,两条指令的方 向向量也可能相同.你的目标是让棋子最终离原点的欧几里得距离最远,请问这个最远距离是多少? Input 第一行包含一个正整数n(n<=200000),表示指令条数. 接下来n行,每行两个整数x,y(|x|,|y|<=10000),表示你可以从(a,b)移动到(a+x…
题目描述 在地面上有一个水箱,它的俯视图被划分成了n行m列个方格,相邻两个方格之间有一堵厚度可以忽略不计的墙,水 箱与外界之间有一堵高度无穷大的墙,因此水不可能漏到外面.已知水箱内每个格子的高度都是[0,H]之间的整数 ,请统计有多少可能的水位情况.因为答案可能很大,请对10^9+7取模输出.两个情况不同当且仅当存在至少一个 方格的水位在两个情况中不同. 输入 第一行包含三个正整数n,m,H(n*m<=500000,1<=H<=10^9). 接下来n行,每行m-1个整数a[i][j](1…
Description 在地面上有一个水箱,它的俯视图被划分成了n行m列个方格,相邻两个方格之间有一堵厚度可以忽略不计的墙,水 箱与外界之间有一堵高度无穷大的墙,因此水不可能漏到外面.已知水箱内每个格子的高度都是[0,H]之间的整数 ,请统计有多少可能的水位情况.因为答案可能很大,请对10^9+7取模输出.两个情况不同当且仅当存在至少一个 方格的水位在两个情况中不同. Input 第一行包含三个正整数n,m,H(n*m<=500000,1<=H<=10^9). 接下来n行,每行m-1个整…
题目描述 给你 $n$ 个平面向量,选出它们中的一部分,使得它们的和的长度最大.求这个最大长度的平方. 输入 第一行包含一个正整数n(n<=200000),表示指令条数. 接下来n行,每行两个整数x,y(|x|,|y|<=10000),表示你可以从(a,b)移动到(a+x,b+y). 输出 输出一行一个整数,即最大距离的平方. 样例输入 5 2 -2 -2 -2 0 2 3 1 -3 1 样例输出 26 题解 双指针法 一个结论:向量和的长度等于所有向量在其方向上投影的长度和. 因此想要向量和…
题面 网上好像都是堆的做法啊......我这个不算离散化是$O(n)$的说(虽然有一坨vector可能不开O2会爆炸) 题目即是让我们求是否存在一个最长的是不少于$k$个给出区间子集的区间,如果存在输出方案.我们发现当我们的左端点固定时,右端点越向右越可能不合法,但同时答案在不断扩大(好像不太严谨),这给了我们一个更新答案的条件:而当右端点固定左端点向右移动时,答案只会越来越合法同时越来越不优.这样我们就可以尺取做了,问题是如何统计当前区间是几个区间的子集呢? 事实上这不需要任何数据结构,我们将…
题目大意: 一棵$n(n\le5\times10^5)$个结点的树,每条边的边权均为正整数,告诉你$2\sim n-1$号结点到$1$号点和$n$号点的距离$d1[i]$和$d2[i]$.求是否存在这样的树,若存在,则构造出这样一棵树. 思路: 若对于所有的$1<i<n$,$|d1[i]-d2[i]|$都相等,则$1$与$n$直接相连,其余点与$1$和$n$中最近的点相连. 否则若存在这样的树,肯定能构造出一种方案,使得$d1[n]=\min\{d1[i]+d2[i]\}$.令$d=\min\…
$贪心$ $按左端点排序.$ $当我们钦定了最右的左端点,那么自然希望右端点尽量靠右$ $考虑之前的区间,那么我们相当于选之前的区间中第k大的右端点$ $堆维护一下就可以了,每次把新的元素放进堆,如果能更新就弹出旧的,否则弹出自己$ #include<cstdio> #include<cstring> #include<iostream> #include<queue> #include<vector> #include<algorithm…