Codeforces Round #285 (Div. 2) D. Misha and Permutations Summation 康托展开 + 线段树

传送门

文章目录

  • 题意:
  • 思路:

题意:

在这里插入图片描述

思路:

首先肯定不能模n!n!n!,所以考虑先将a,ba,ba,b做一个逆康托展开,得到a′,b′a',b'a,b数组,以及a′+b′=suma'+b'=suma+b=sum数组,让后我们可以通过这个数组每个位置乘上权(n−i)!(n-i)!(ni)!得到他的字典序排名,也就是需要模n!n!n!的数,考虑从低位向前递推,也就是sum[i−1]+=sum[i]mod(n−i+1),sum[i]=sum[i]mod(n−i+1)sum[i-1]+=sum[i]\bmod (n-i+1),sum[i]=sum[i]\bmod (n-i+1)sum[i1]+=sum[i]mod(ni+1),sum[i]=sum[i]mod(ni+1)即可,最后再将其逆回来即可。

// Problem: D. Misha and Permutations Summation
// Contest: Codeforces - Codeforces Round #285 (Div. 2)
// URL: https://codeforces.com/problemset/problem/501/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<random>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
int a[N],b[N];
LL fun[N];
struct Node {int l,r;int cnt;
}tr[N<<2];void pushup(int u) {tr[u].cnt=tr[L].cnt+tr[R].cnt;
}void build(int u,int l,int r) {tr[u]={l,r};if(l==r) {tr[u].cnt=1;return;}build(L,l,Mid); build(R,Mid+1,r);pushup(u);
}void change(int u,int pos) {if(tr[u].l==tr[u].r) {tr[u].cnt=0;return;}if(pos<=Mid) change(L,pos);else change(R,pos);pushup(u);
}int query1(int u,int l,int r) {if(tr[u].l>=l&&tr[u].r<=r) return tr[u].cnt;int ans=0;if(l<=Mid) ans+=query1(L,l,r);if(r>Mid) ans+=query1(R,l,r);return ans; 
}int query2(int u,int cnt) {if(tr[u].l==tr[u].r) return tr[u].l;if(tr[L].cnt>cnt) return query2(L,cnt);else return query2(R,cnt-tr[L].cnt);
}int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);	scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]),a[i]++;for(int i=1;i<=n;i++) scanf("%d",&b[i]),b[i]++;build(1,1,n);for(int i=1;i<=n;i++) {int cnt=query1(1,1,a[i]-1);change(1,a[i]);a[i]=cnt;}build(1,1,n);for(int i=1;i<=n;i++) {int cnt=query1(1,1,b[i]-1);change(1,b[i]);b[i]=cnt;}for(int i=n;i>=1;i--) {a[i]+=b[i];int t=a[i]/(n-i+1);a[i-1]+=t;a[i]%=(n-i+1);}build(1,1,n);for(int i=1;i<=n;i++) {int pos=query2(1,a[i]);change(1,pos);printf("%d%c",pos-1,i==n? '\n':' ');}	return 0;
}
/**/

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

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

相关文章

「PowerBI」使用TabularEditor进行PowerBIDeskTop模型开发最佳实践

前面系列文章介绍的场景&#xff0c;设定的工具使用对象是Sqlserver和Azure 的SSAS数据模型开发&#xff0c;其实TabularEditor亦可以有限度地使用在PowerBIDeskTop的模型开发上&#xff0c;本文简单介绍下其最佳的使用场景。PowerBIDeskTop模型不同于Sqlserver的SSAS模型虽然大…

E:Three Blocks Palindrome(hard and easy)(树状数组 ? 前缀和?)

Three Blocks Palindrome (hard version) 思路 考虑到每个数字的范围是12001 ~ 2001 200&#xff0c;于是我们可以通过枚举两侧的元素来寻找最优答案。 我们有一个贪心策略&#xff0c;两侧都以我们枚举的元素作为结尾点&#xff0c;假如我们当前枚举的数字是1&#xff0c;于…

树莓派 + Windows IoT Core 搭建环境监控系统

前言&#xff1a;Windows IoT 是微软为嵌入式开发板设计的一种物联网操作系统&#xff0c;运行Windows UWP&#xff08;C# 开发&#xff09;&#xff0c;可以设计出丰富的交互界面&#xff0c;驱动GPIO&#xff0c;连接一些传感器做有意思的事&#xff0c;本文详细介绍如何使用…

CF1547F Array Stabilization (GCD version) st表 + 尺取/二分

传送门 题意&#xff1a; 思路&#xff1a; 容易发现&#xff0c;我们将所有aaa都除上所有aaa的gcdgcdgcd&#xff0c;实际上就是让你求一个最小的lenlenlen&#xff0c;对于所有iii&#xff0c;gcd(ai,ai1,...,ailen−1)1gcd(a_i,a_{i1},...,a_{ilen-1})1gcd(ai​,ai1​,...…

Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况&#xff1a; ac/ba c / bac/b这个时候两个的单价是相同的&#xff0c;如果b1b 1b1&#xff0c;也就是aca cac&#xff0c;无论买多少数量的东西&#xff0c;这两个的价格都是一样的&…

HttpClientFactory 使用说明 及 对 HttpClient 的回顾和对比

在 C# 中&#xff0c;平时我们在使用 HttpClient 的时候&#xff0c;会将 HttpClient 包裹在 using 内部进行声明和初始化&#xff0c;如&#xff1a;using(var httpClient new HttpClient()){ }至于为什么&#xff1f;无外乎是&#xff1a;项目代码中就是这样写的&#xf…

记录用友T+接口对接的心酸历程

前言&#xff1a;公司的业务主要是对接财务系统做单据传输或者凭证处理的&#xff0c;难免少不了和各大财务软件做数据对接&#xff0c;其中当然是必须通过接口来传递数据了。于是乎&#xff0c;用友T的版本来了&#xff0c;对接的工作自然是我来做&#xff0c;可没想到就是这样…

集群故障处理之处理思路以及听诊三板斧(三十四)

前言 本篇主要分享一些处理故障和问题绝招&#xff0c;比如听诊三板斧&#xff1a;1&#xff09;查看日志2&#xff09;查看资源详情和事件3&#xff09;查看资源配置&#xff08;YAML&#xff09;如果还是不太好分析&#xff0c;那就祭出神器——kubectl-debug。最后&…

selenium搜狗搜图简单操作(爬取任意关键字的图片)

Picture preview Steps 这里以搜狗搜图作为一个简单的例子&#xff1a; 第一步就是获取我们的需求了&#xff0c;输入需要下载的图片名字以及需要下载的图片数量。 接下来我们需要在搜狗搜图中输入用户的需求&#xff0c;透过xpathxpathxpath锁定搜索框&#xff0c;然后输入…

Microsoft REST API指南

经过3个月的碎片时间的翻译和校验&#xff0c;由长沙.NET技术社区翻译的英文原文文档《Microsoft REST API指南 》已经翻译完成&#xff0c;现刊载前十一章如下&#xff0c;欢迎大家点击“查看原文”按钮&#xff0c;查看指南的完整内容。PS&#xff1a;内容很长&#xff0c;全…

如何优雅地替换一个实现

前两天&#xff0c;我所在的项目有一个小的技术改动&#xff0c;打算把访问Redis的密码从数据库挪到配置文件里。以前的代码类似下面这样&#xff1a;用户第一次调用GetDatabase时&#xff0c;根据传入的数据库连接字符串访问数据库&#xff0c;从某个表里取出带密码的Redis连接…

莫队——三种题型

普通莫队 P3901 数列找不同 Thinking 一定是用可以用莫队来写题&#xff0c;这点是不用质疑的&#xff0c;所以那就简单了&#xff0c;只需要判断每次询问的区间是否满足r−l1numr - l 1 numr−l1num就行了。 Coding1Coding_1Coding1​ 莫队写法 #include <bits/stdc…

P5357 【模板】AC自动机(二次加强版) fail树

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 这个只能搞failfailfail树了&#xff0c;让后跑一遍即可。 重复的字符串记一个&#xff0c;让后其他的都跟他一个答案即可。 // Problem: P3796 【模板】AC自动机&#xff08;加强版&…

10分钟了解一致性hash算法

应用场景当我们的数据表超过500万条或更多时&#xff0c;我们就会考虑到采用分库分表&#xff1b;当我们的系统使用了一台缓存服务器还是不能满足的时候&#xff0c;我们会使用多台缓存服务器&#xff0c;那我们如何去访问背后的库表或缓存服务器呢&#xff0c;我们肯定不会使用…

创业周年记:召唤神龙一周年小记

2018年8月8日&#xff0c;我决定离开腾讯的光环&#xff0c;辞职开始创业。《回顾4180天在腾讯使用C#的历程&#xff0c;开启新的征途》记录了我所说的拥有七龙珠&#xff0c;去召唤神龙&#xff0c;今天正好历时一年时间&#xff0c;非常有必要来回顾过去一年的创业历程。迎接…

「数据ETL」从数据民工到数据白领蜕变之旅(三)-除了Excel催化剂之外PowerQuery新物种同样值得期待...

在自助式BI时代以前&#xff0c;Excel级别的数据ETL工作&#xff0c;非常低效&#xff0c;动不动就要启用VBA来完成一些常见的需求&#xff0c;自带的原生功能&#xff0c;未能满足大量的繁琐数据ETL刚需功能。在Excel2010后&#xff0c;PowerQuery以插件的形式横空出现&#x…

Docker系列之烹饪披萨(二)

上一篇我们讲解了虚拟机和容器的区别&#xff0c;本节我们来讲讲Docker中关于Dockerfile、镜像、容器等基本概念。Docker是一个在容器内开发、部署、运行应用程序的平台&#xff0c;Docker本质上是容器化的代名词&#xff0c;容器对于提高软件开发和数据科学的安全性&#xff0…

史上最能“拜客户教”的公司,是如何做到持续交付的?(第2趴)|DevOps案例研究...

内容来源&#xff1a;DevOps案例深度研究 –Amazon持续交付之道战队&#xff08;本文只展示部分PPT及研究成果&#xff0c;更多细节请关注案例分享会&#xff0c;及本公众号。&#xff09;本案例内容贡献者&#xff1a;单冰 (Topic Leader)、 赵栋、梁兴龙、李杰、毛艳清、牛恒…

ASP.NET Core on K8S深入学习(3)Deployment

上一篇《部署过程解析与安装Dashboard》中我们了解K8S的部署过程&#xff0c;这一篇我们来了解一下K8S为我们提供的几种应用运行方式&#xff1a;Deployment、DaemonSet与Job&#xff0c;它们是Kubernetes最重要的核心功能提供者。考虑到篇幅和更新速度&#xff0c;我将其分为两…

8月语言排行:C#继续呈现增长态势

TIOBE 编程语言排行榜 8 月更新已公布&#xff0c;排名前十的分别是&#xff1a;Java, C, Python, C, C#, Visual Basic .NET, JavaScript, PHP, Objective-C 和 SQL。和上个月唯一的不同之处在于 Objective-C 和 SQL 的排名发生了交换。事实上&#xff0c;上周 Dice Insights …