CF1158C
题意:有排列p, 令\(nxt_i\)为\(p_i\)右侧第一个大于\(p_i\)的数的位置,若不存在则\(nxt_i=n+1\)
现在整个p和nxt的一部分丢失了,请根据剩余的nxt,构造出一个符合情况的p,输出任意一解。
使有解的充要条件是对于每一个i不存在\(j\in(i,nex_i)\)满足\(nex_j>nex_i\)
也就是说对于每个\(i\)向\(nxt_i\)连一条边,然后没有两条边相交
对于点\(i\)向\(nex_i\)和满足\(j<i \ \wedge nex_j>nex_i\)的最小的j连边
这样的话就是一个拓扑图
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#define M 2100001
#define N 500010
using namespace std;
int n,m,k,a[N],d[M],s[N],ver[N],t[N],T,B;
queue<int> q;
void ins(int now,int l,int r,int k,int x)
{
if(l==r)
{
d[now]=k;
return;
}
int mid=(l+r)>>1;
if(x<=mid) ins(now*2,l,mid,k,x);
else ins(now*2+1,mid+1,r,k,x);
d[now]=1;
}
int ask(int now,int l,int r,int L)
{
if(l==r) return d[now];
int mid=(l+r)>>1, k=0;
if(L<=mid && d[now*2]) k=ask(now*2,l,mid,L);
if(!k)return ask(now*2+1,mid+1,r,L);
return k;
}
void rb(int now,int l,int r)
{
if(!d[now]) return ;
d[now]=0;
if(l==r) return ;
int mid=(l+r)>>1;
rb(now*2,l,mid);
rb(now*2+1,mid+1,r);
}
int main()
{
scanf("%d",&T);
for(T;T;T--)
{
B=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]==-1) a[i]=i+1;
}
for(int i=1;i<=n;i++)
{
k=ask(1,1,n+1,i+1);
if(k && a[k]<a[i])
{
B=1;
break;
}
ins(1,1,n+1,i,a[i]);
s[a[i]]++;
if(!k) continue;
ver[i]=k; s[k]++;
}
if(!B)
{
for(int i=1;i<=n;i++) if(!s[i]) q.push(i);
k=0;
while(q.size())
{
int x=q.front(); q.pop();
s[ver[x]]--; s[a[x]]--;
if(!s[ver[x]]) q.push(ver[x]);
if(!s[a[x]]) q.push(a[x]);
t[x]=++k;
}
if(k!=n+1) B=1;
}
if(B) printf("-1");
else for(int i=1;i<=n;i++) printf("%d ",t[i]);
printf("\n");
for(int i=1;i<=n+1;i++) t[i]=s[i]=ver[i]=a[i]=0;
rb(1,1,n+1);
}
}
CF1158C的更多相关文章
- 在$CF$水题の记录
CF1158C CF1163E update after CF1173 很好,我!expert!掉rating了!! 成为pupil指日可待== 下次要记得合理安排时间== ps.一道题都没写的\(a ...
随机推荐
- 爬虫-ajax请求遇到Unicode编码问题
2018-08--4爬取金色财经网页 网址:https://www.jinse.com/search/EOS 第一步:我观察了网页:发现了网页是一个发送ajax请求的网页,发现如下: 然后 我就先爬取 ...
- 创建网关项目(Spring Cloud Gateway)
创建网关项目 加入网关后微服务的架构图 创建项目 POM文件 <properties> <java.version>1.8</java.version> <s ...
- 推荐系统之隐语义模型LFM
LFM(latent factor model)隐语义模型,这也是在推荐系统中应用相当普遍的一种模型.那这种模型跟ItemCF或UserCF的不同在于: 对于UserCF,我们可以先计算和目标用户兴趣 ...
- Compile Linux Kernel on Ubuntu 12.04 LTS (Detailed)
This tutorial will outline the process to compile your own kernel for Ubuntu. It will demonstrate bo ...
- java虚拟机规范(se8)——class文件格式(四)
4.7 属性 属性用于class文件格式中的ClassFile,field_info,method_info和Code_attribute结构. 所有的属性都是下面的格式: attribute_inf ...
- docker 安装nexus
1.查找镜像 docker search nexus 2.拉取镜像 docker pull sonatype/nexus3 3.启动容器 docker run -d -p 8081:8081 -p 8 ...
- poj 2104 无修改主席树
题目大意: 求序列的区间第k大 基本思路: 因为我根本就没有思路,知道这是主席树,我就去学了下,在b站上看了uestc的教学视频,然后看了一篇博客,博客http://www.cnblogs.com/E ...
- C++ 浅析调试,内存重叠查看
这里举个例子查看内存, 环境为:vs 2017 测试为strcpy[因为测试老api,需要在 预处理中 添加 _CRT_SECURE_NO_WARNINGS ] 测试问题:内存溢出 源码: #incl ...
- jquery submit事件
jquery submit 事件 $('#form').submit(function(){ if(true){ //do return true; }else{ //do return false; ...
- Java 的内置对象
1.Request对象 该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息. 当Request对象获取客户提交的汉字字符时,会出现乱码问题 ...