D. Restore Permutation(树状数组 + 二分)

news2025/1/24 5:27:14

Problem - D - Codeforces

一个由整数p1,p2,...,pn组成的数组,如果它包含1到n中的每一个数字恰好一次,则称为一个排列组合。例如,下面的数组就是排列组合: [3,1,2], [1], [1,2,3,4,5] 和 [4,3,1,2]. 下列数组不是排列组合: [2],[1,1],[2,3,4].

有一个长度为n的隐藏的互换。

对于每个索引i,你会得到si,它等于所有pj的总和,使得j<i和pj<pi。换句话说,si是第i个元素之前小于第i个元素的元素之和。

你的任务是恢复这个排列组合。

输入
第一行包含一个整数n(1≤n≤2⋅105)--排列组合的大小。

第二行包含n个整数s1,s2,...,sn(0≤si≤n(n-1)2)。

保证数组s对应于长度为n的有效排列组合。

输出
打印n个整数p1,p2,...,pn--恢复后的排列组合的元素。我们可以证明,答案总是唯一的。

例子
输入复制
3
0 0 0
outputCopy
3 2 1
输入复制
2
0 1
输出拷贝
1 2
输入复制
5
0 1 1 1 10
输出拷贝
1 4 3 2 5
注意
在第一个例子中,对于每一个i,都没有满足两个条件的索引j,因此si总是0。

在第二个例子中,对于i=2,刚好j=1满足条件,所以s2=p1。

在第三个例子中,对于i=2,3,4只有j=1满足条件,所以s2=s3=s4=1。对于i=5,所有j=1,2,3,4都有可能,所以s5=p1+p2+p3+p4=10。

题解:
利用数组数组维护前缀和,每个位置记录该点的值,从最后面开始二分(这样后面的不会前面影响,到找前面时也不会被后面影响),如果没有找到,找到后再从删除这个值,继续往下找,

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
#define int long long
typedef pair<int,int> PII;
int n;
int a[200050];
int tre[200050];
int lowbit(int x)
{
	return x & -x;
}
void add(int s,int w)
{
	for(int i = s;i <= n;i += lowbit(i))
	tre[i] += w;
}
int sum(int s)
{
	int ss = 0;
	for(int i = s;i;i -= lowbit(i))
	{
		ss += tre[i];
	}
	return ss;
}
int ans[200050];
void solve()
{
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		cin >> a[i];
		add(i,i);
	}
	for(int i = n;i >= 1;i--)
	{
		int l = 1,r = n;
		while(l <= r)
		{
			int mid = (l + r)/2;
			if(sum(mid) <= a[i])
			{
				l = mid + 1;
			}
			else
			{
				r = mid - 1;
			}
		} 
		add(l,-(l));
		ans[i] = l;
	}
	for(int i = 1;i <= n;i++)
	cout << ans[i] <<" ";
}


signed main()
{
//	ios::sync_with_stdio(0);
//	cin.tie(0);cout.tie(0);
	int t = 1;
//	cin >> t;
	while(t--)
	{
		solve(); 
	}
}

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

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

相关文章

「线性DP」合唱队形

合唱队形 https://ac.nowcoder.com/acm/contest/24213/1011 题目描述 合唱队形是指这样的一种队形&#xff1a;设K位同学从左到右依次编号为1&#xff0c;2…&#xff0c;K&#xff0c;他们的身高分别为T1&#xff0c;T2&#xff0c;…&#xff0c;TK&#xff0c; 则他们的身高…

搭建静态网页

day3作业 请给openlab搭建web网站​ 网站需求&#xff1a;​ 1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!!​ 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于[www.openlab.com…

第三章(4):自然语言处理入门

第三章&#xff08;4&#xff09;&#xff1a;自然语言处理入门 在本节中&#xff0c;我们将在简单文本数据上&#xff08;例如一个句子上&#xff09;&#xff0c;执行一系列基本操作&#xff0c;来帮助你熟悉NLP的工作原理&#xff0c;其中一些技术在第三章&#xff08;2&…

DDoS攻击手段发生重大转变 网络空间面临未知威胁

2023年第一季度&#xff0c;DDoS攻击手段出现重大转变。攻击开始攻陷破坏的虚拟专用服务器(VPS)&#xff0c;而非传统的受感染物联网设备。这标志着DDoS攻击力度出现质的飞跃&#xff0c;网络空间安全迎来新的挑战。 网络空间测绘技术可以探测、采集、分析和处理网络空间数据&…

JeTSON Xavier NX TX2_NX 暗转yolov5 v6.2使用Tensorrt加速实现USB摄像头和CSI摄像头的目标识别及采坑记录

本文是参考各位博客朋友的笔记做了实操整理勿喷。 硬件设备nvidia JETSON NX TX2_NX 软件版本BSP3273(Jetpack4.6.3)再次分享一下刷机指导 Jetson Linux R32.7.3 NVIDIA Jetson Linux 驱动程序包是 Jetson™ 的主板支持包。它包括Linux内核&#xff0c;UEFI引导加载程序&am…

「SAP ABAP」OPEN SQL(十)【SQL性能优化(一)】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…

mybatis-plus mpw 基于nacos-配置中心失效问题解决。

先谈谈个人理解&#xff1a; 配置中心下的配置加密做不做其实意义不大。 1、首先nacos console 内网化&#xff0c;受到攻击概率很低 2、加密后&#xff0c;各namespace 下的配置信息查看不友好。增加开发成本 3、对称加密既然组员都有密码了&#xff0c;还谈何来的秘密。 4、有…

【嵌入式环境下linux内核及驱动学习笔记-(4-字符驱动实例)】

目录 1、完整的字符设备驱动的模板2、相关函数2.1 container_of()2.2 kmalloc2.3 copy_to_user()2.4 copy_from_user()2.5 系统调用open()2.6 系统调用read2.7 系统调用write2.8 系统调用close 3、实例&#xff1a;多个同类字符设备的驱动3.1 驱动代码3.2 测试 1、完整的字符设…

【C语言】初阶指针(指针及其类型以及野指针)

简单不先于复杂&#xff0c;而是在复杂之后。 目录 1. 指针是什么&#xff1f; 2. 指针和指针类型 2.1 指针-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 1. 指针是什么&#xff1f; 指针理解的两个要点&#xff1a; 1. 指针是内存中最小…

HCLE--虚拟机安装ntp等相关服务出现报错解决和通过SSH实现免密登录

.1 在服务端主机上安装ntp服务&#xff1a; yum install ntp 1.2 修改/etc/ntp.conf文件&#xff0c;将默认的ntp服务器地址替换为可用的ntp服务器地址。例如&#xff1a; server ntp1.aliyun.com iburst server ntp2.aliyun.com iburst server ntp3.aliyun.com iburst 1…

JSP-JDBC-设计一个简单的网上名片管理系统

需求&#xff1a; 1&#xff0e;设计一个简单的网上名片管理系统&#xff0c;实现名片的增、删、改、查等操作。该名片管理系统包括如下功能&#xff1a; &#xff08;1&#xff09;用户登录与注册 用户登录&#xff1a;在登录时&#xff0c;如果用户名和密码正确&#xff0…

举一反三学python(11)—excel实例

一、乘法表写入EXCEL 想必大家对九九乘法表的代码记忆尤新&#xff1a;for i in range(1,10): # 9行 for j in range(1,i1): # 列数是动态变化的&#xff0c;是1-9列 print(f{j}x{i}{j*i},end\t) # 格式化输出并按制表位…

8脚语音芯片有什么特点?

一、8脚语音芯片指的是什么&#xff1f; 8脚语音芯片&#xff0c;顾名思义就是拥有8个脚的一颗芯片&#xff0c;8脚其实是指8引脚&#xff0c;而引脚又被叫做管脚。引脚就是指从集成电路&#xff08;芯片&#xff09;内部电路引出与外围电路的接线&#xff0c;引脚构成了这块芯…

如何使用YOLOv5的pycocotools进行coco指标评估

使用YOLOv5进行coco指标评估 1. 安装pycocotools2.重新排序并命名3. 将txt标签转换为json格式格式2. 生成json3. 测试是否正确4. 运行val.py完整版本&#xff08;一次运行所有&#xff09; 1. 安装pycocotools pip install pycocotools -i https:pypi.douban.com/simple2.重新…

HTML5 <meter> 标签、HTML5 <mark> 标签

HTML5 <meter> 标签 实例 使用 meter 元素展示给定的数据范围&#xff1a; <meter value"2" min"0" max"10">2 out of 10</meter><br> <meter value"0.6">60%</meter>尝试一下 浏览器支持 Fir…

【Python知识】2个特别好用的python模块(请收藏!)

文章目录 前言一、介绍二、FuzzyWuzzy库介绍2.1 fuzz模块2.2 简单匹配&#xff08;Ratio&#xff09;2.3 非完全匹配&#xff08;Partial Ratio&#xff09;2.3 忽略顺序匹配&#xff08;Token Sort Ratio&#xff09;2.4 去重子集匹配&#xff08;Token Set Ratio&#xff09;…

matlab数据归一化与反归一化处理

假如数据实际取值范围为 X i ∈ [ − π π ] , i 1 , 2 , 3 X_i \in [-\pi \ \ \pi], i1,2,3 Xi​∈[−π π],i1,2,3&#xff0c;变量服从正态分布 示例如下&#xff1a; %% 数据归一化处理及其概率密度函数 clear clc Mu [0 0 0]; % 均值 Sigma [1 1 1]; % 标准差 C…

EA使用教程

文章目录 创建新工程属性设置导出图片到剪切板时序图中取消消息后面自动生成的括号在文本框中回车取消流程图的背景渐变导出更清晰图片 创建新工程 1. 点击 FILE -> New Project 开始创建新工程 2. 为新工程命名 3. 选择模型 以下为常用设计模型&#xff1a; Business …

Java并发工具合集JUC大爆发

1. CountDownLatch CountDownLatch是一个同步计数器&#xff0c;初始化的时候 传入需要计数的线程等待数&#xff0c;可以是需要等待执行完成的线程数&#xff0c;或者大于 &#xff0c;一般称为发令枪。\ ​ countdownlatch 是一个同步类工具&#xff0c;不涉及锁定&#xff0…

我实现了一个乞丐版的评论功能

文章目录 设计评论功能0 设计初衷1 前端组建设计**设计原则****设计代码**组件核心代码**调用组建并给出mock数据****效果** 2 后端数据库设计3 后端接口设计4 前后端联调5 后端评论保存接口设计6 前端评论填写流程设计7 联调8 验证码美化 设计评论功能 0 设计初衷 经过长达八…