P7726-天体探测仪(Astral Detector)【构造】

正题

题目链接:https://www.luogu.com.cn/problem/P7726


题目大意

一个长度为nnn的排列,给出nnn个可重集SiS_iSi表示所有长度为iii的区间的最小值构成的集合。

求构造这个排列。

1≤n≤8001\leq n\leq 8001n800


解题思路

对于一个数字,如果在SiS_iSi中的出现次数小于iii时,证明包含它的区间中拥有不是它为最小值的情况。
所以每个数字我们找到出现次数小于iii的第一个SiS_iSi,那么它离它左右两边比他小的数字的距离就是i−1i-1i1

然后考虑再求出另一边的距离,当某个时候SiS_iSi中不包含数字xxx时,那么证明xxx距离两边的距离和小于iii,找到一个位置就可以算出另一边的距离。

然后直接从小到大找满足条件的位置插入即可。

时间复杂度O(n2)O(n^2)O(n2)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
const int N=810;
int n,c[N],L[N],R[N],ans[N];
set<int> s;
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){int x;memset(c,0,sizeof(c));for(int j=1;j<=n-i+1;j++){scanf("%d",&x);c[x]++;}for(int j=1;j<=n;j++){if(!L[j]&&c[j]!=i)L[j]=i-1;if(!R[j]&&!c[j])R[j]=i-L[j];}}R[1]=n-L[1]+1;s.insert(0);s.insert(n+1);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(ans[j])continue;int l=(*s.lower_bound(j))-j;int r=j-*(--s.upper_bound(j));if(l>r)swap(l,r);if(l==L[i]&&r==R[i]){ans[j]=i;s.insert(j);break;}}}for(int i=1;i<=n;i++)printf("%d ",ans[i]);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客题霸 [ 大数乘法] C++题解/答案

牛客题霸 [ 大数乘法] C题解/答案 题目描述 以字符串的形式读入两个数字&#xff0c;编写一个函数计算它们的乘积&#xff0c;以字符串形式返回。 &#xff08;字符串长度不大于10000&#xff0c;保证字符串仅由’0’~9’这10种字符组成&#xff09; 题解&#xff1a; 高精…

2021牛客暑期多校训练营5 D-Double Strings(dp+组合数)

D-Double Strings fi,jf_{i,j}fi,j​表示a中前i个字符&#xff0c;b中前j个字符相同子序列的数量&#xff0c;容斥转移 fi,jfi−1,jfi,j−1−fi−1,j−1{(1fi−1,j−1)[aiaj]}f_{i,j}f_{i-1,j}f_{i,j-1}-f_{i-1,j-1}\{(1f_{i-1,j-1})[a_ia_j]\}fi,j​fi−1,j​fi,j−1​−fi−1…

模板:强连通分量

总结 缩点是强连通分量的精髓 它能将任意图转化为一个有向无环图 然后就常常伴随有拓扑排序和dp传值 代码较长&#xff0c;重在理解awa 代码 &#xff08;本题dp是求经过点权之和最大的可重复路径的权值&#xff09; #include<bits/stdc.h> using namespace std; con…

[翻译] 使用 Visual Studio 2019 来提高每个开发人员的工作效率

原文: Making every developer more productive with Visual Studio 2019今天&#xff0c;在 Microsoft Connect(); 2018 的主题演讲中&#xff0c;Scott Guthrie 宣布推出 Visual Studio 2019 Preview 1。这是 Visual Studio 下一个主要版本的首次预览。在本预览版中&#xff…

P1791-[国家集训队]人员雇佣【最大权闭合图】

正题 题目链接:https://www.luogu.com.cn/problem/P1791 题目大意 有nnn个人&#xff0c;雇佣第iii个需要AiA_iAi​的费用&#xff0c;对于Ei,jE_{i,j}Ei,j​表示如果iii选了的话&#xff0c;选择jjj会获得Ei,jE_{i,j}Ei,j​的费用&#xff0c;不选jjj会花费Ei,jE_{i,j}Ei,j​…

牛客题霸 [ 寻找峰值] C++题解/答案

牛客题霸 [ 寻找峰值] C题解/答案 题目描述 山峰元素是指其值大于或等于左右相邻值的元素。给定一个输入数组nums&#xff0c;任意两个相邻元素值不相等&#xff0c;数组可能包含多个山峰。找到索引最大的那个山峰元素并返回其索引。 假设 nums[-1] nums[n] -∞。 题解&a…

2021牛客暑期多校训练营5 E-Eert Esiwtib(树形dp+位运算)

E-Eert Esiwtib 位运算考虑贡献时分0/1按位模拟考虑 fu,0/1/2f_{u,0/1/2}fu,0/1/2​表示子树u中点&#xff08;包括u&#xff09;到u所有路径的或/与/异或值。 转移的时候我们要考虑两个东西&#xff0c;一个是位运算对于路径值的影响&#xff0c;另一个是位运算对于所有路径…

大赛:2021省选 总结

文章目录概要想清楚再敲代码&#xff01;&#xff01;&#xff01;仔细审题&#xff01;&#xff01;&#xff01;Day1T1 卡牌游戏T2 矩阵游戏T3 图函数day 2T1 宝石T2 滚榜T3 支配概要 想清楚再敲代码&#xff01;&#xff01;&#xff01; 仔细审题&#xff01;&#xff01…

CometOJ-[Contest #10]鱼跃龙门【exgcd】

正题 题目链接:https://cometoj.com/problem/1479 题目大意 给出nnn求一个最小的x(x>0)x(x>0)x(x>0)满足 (∑i1xi)≡0(modn)\left(\sum_{i1}^xi\right)\equiv 0(\mod n)(i1∑x​i)≡0(modn) 1≤n≤1012,1≤T≤1001\leq n\leq 10^{12},1\leq T\leq 1001≤n≤1012,1≤…

牛客题霸 [ 最小的K个数] C++题解/答案

牛客题霸 [ 最小的K个数] C题解/答案 题目描述 输入n个整数&#xff0c;找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字&#xff0c;则最小的4个数字是1,2,3,4。 题解&#xff1a; 如果有n<k的就输出空vector 然后对input进行排序&#xff0c;取前k个值 代码&…

codeforces1559 D2. Mocha and Diana (Hard Version)(并查集+启发式合并+随机化)

D2. Mocha and Diana (Hard Version) RunningBeef题解 首先将图1的点与1号点所在的连通块相连&#xff0c;图2类似。 然后就是在图1和图2中选择没有和1号点在同一个连通块的点&#xff0c;能连边就连。 #include<bits/stdc.h> using namespace std; using lllong long…

ybtoj祭坛

文章目录冲啊&#xff01;&#xff08;100题祭&#xff09;125题祭140题祭首次登顶&唯一AC150题祭160题祭170题祭冲啊&#xff01;&#xff08;100题祭&#xff09; 2021.4.11 刚好100道 其实是前几天到的&#xff08;忘了是哪一道了。。。&#xff09; 今天写省选题解开了…

牛客题霸 [ 判断一棵二叉树是否为搜索二叉树和完全二叉树] C++题解/答案

牛客题霸 [ 判断一棵二叉树是否为搜索二叉树和完全二叉树] C题解/答案 题解&#xff1a; 搜索二叉树满足以下性质&#xff1a; 1.非空左子树的所以键值小于其根节点的键值 2.非空右子树的所有键值大于其根节点的键值 3.左&#xff0c;右子树都是二叉搜索树 完全二叉树&#x…

CF573D-Bear and Cavalry【动态dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF573D 题目大意 给出nnn个人nnn匹马&#xff0c;每个人/马有能力值wiw_iwi​/hih_ihi​。 第iii个人开始对应第iii匹马&#xff0c;每个人不能选择对应的马&#xff0c;给每个人分配一个马后求最大的∑wihj\sum w_i\times …

C++ __gnu_pbds(hash,可并堆,平衡树)

pb_ds 是GNU-C自带的一个C的扩展库&#xff0c;其中实现了很多数据结构&#xff0c;比STL里面的功能更强大 #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> // 用tree #include<ext/pb_ds/hash_policy.hpp> // 用hash #…

理解至上:二叉堆与优先队列详细用法

文章目录二叉堆概述插入代码访问代码完整代码优先队列&#xff1a;priority_queue基本用法小根堆的声明&#xff1a;结构体注意Thanks for reading&#xff01;二叉堆 概述 为什么不用pq呢 算比较简单的数据结构了 它可以用log的时间复杂度插入元素和访问&#xff08;取出&am…

AT5661-[AGC040C]Neither AB nor BA【模型转换】

正题 题目链接:https://www.luogu.com.cn/problem/AT5661 题目大意 一个包含A,B,CA,B,CA,B,C的序列&#xff0c;每次可以选择相邻的两个除了ABABAB和BABABA的删去。 求有多少个长度为NNN的序列可以删完。 1≤N≤1071\leq N\leq 10^71≤N≤107 解题思路 因为每次是删除一个奇…

牛客题霸 [矩阵的最小路径和] C++题解/答案

牛客题霸 [矩阵的最小路径和] C题解/答案、 题目描述 给定一个 n * m 的矩阵 a&#xff0c;从左上角开始每次只能向右或者向下走&#xff0c;最后到达右下角的位置&#xff0c;路径上所有的数字累加起来就是路径和&#xff0c;输出所有的路径中最小的路径和。 题解&#xff…

2021牛客暑期多校训练营7 B-xay loves monotonicity(线段树+不降子序列)

P4198 楼房重建 线段树维护以某点为开头的最长不下降子序列 使用下面calc函数能够计算线段树u维护的区间中&#xff0c;以x为开头最长不下降子序列的个数。 calc需要维护区间最值。 template<typename T> int calc(int u,T x) {if(tree[u].ltree[u].r) return tree[u]…

不止代码:最长上升序列

文章目录题目描述样例解析仔细审题&#xff01;&#xff01;&#xff01;&#xff01;代码题目描述 给定一个序列 求出它的单调上升序列长度并输出这个序列 样例 in: 13 7 9 16 38 24 37 18 44 19 21 22 63 15 out&#xff1a; max8 7 9 16 18 19 21 22 63解析 这题我一开始…