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:Modular Stability(组合数)

Modular Stability 思路 (((xmoda1)moda2)……modak−1)modak(((xmodp1)modp2)……modpk−1)modpk(((x \mod a_1) \mod a_2) …… \mod a_{k - 1}) \mod a_{k} (((x \mod p_1) \mod p_2) …… \mod p_{k - 1}) \mod p_{k}(((xmoda1​)moda2​)……modak−1​)modak​(((xmodp…

E:K-periodic Garland(DP)

思路 每个点我们有两种决策&#xff0c;其值为0或1&#xff1a; 如果点我们放置0的话&#xff0c;我们有其前一位数字是零&#xff0c;或者其前一位数字是一。 如果这个点我们放置1的话&#xff0c;我们有其前面是按照每k个数字都出现一次1的排列&#xff0c;也有可能其前面…

Codeforces Round #740 (Div. 2) F. Top-Notch Insertions 线段树 / 平衡树 + 组合数学

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 考虑最终的序列是什么鸭子的&#xff0c;首先序列肯定单调不降&#xff0c;也就是a1≤a2≤a3≤...≤ana_1\le a_2\le a_3\le ...\le a_na1​≤a2​≤a3​≤...≤an​&#xff0c;显然不可…

沃尔玛招聘.NET软件工程师

做为码农, 你可能会知道BAT, 微软, google, oracle, facebook等公司, 然而你知道沃尔玛吗? 在最新公布的2019年世界500强里(http://www.fortunechina.com/fortune500/c/2019-07/22/content_339535.htm?沃尔玛领先阿里巴巴181名.百度不是世界500强沃尔玛领先T公司236名沃尔玛领…

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

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

Codeforces Round #731 (Div. 3) G. How Many Paths? dfs + 拓扑 + 思维

传送门 题意&#xff1a; 给你一张nnn个点mmm条边的图&#xff0c;让你对每个点确定一个编号&#xff0c;规则如下&#xff1a; (1)(1)(1) 对于不能到的点编号为000。 (2)(2)(2) 对于只有一条路径能到这个点的点编号为111。 (3)(3)(3) 对于有不止一条路径能到这个点的点编号为…

.NET Core 3.0深入源码理解HttpClientFactory之实战

写在前面前面两篇文章透过源码角度&#xff0c;理解了HttpClientFactory的内部实现&#xff0c;当我们在项目中使用时&#xff0c;总会涉及以下几个问题&#xff1a;HttpClient超时处理以及重试机制HttpClient熔断器模式的实现HttpClient日志记录与追踪链接下来我们将从使用角度…

F:Maximum White Subtree(树形dp)

Maximum White Subtree 思路 如果考虑其覆盖范围只会到其子树上&#xff0c;不会到其父节点上的话(假设的情况)&#xff0c;这道题就非常好写了&#xff0c;就是一个简单的自底向上传递的树形dpdpdp。所以我们还要考虑的就是连接其父节点&#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​,...…

Gauss高斯消元——模板

就是线性代数的初等行变化&#xff1a; 倍加。倍乘。交换行。 #include <bits/stdc.h> #define mp make_pair #define pb push_backusing namespace std;typedef long long ll; typedef pair<int, int> pii; typedef unsigned long long ull;const double pi ac…

.net持续集成测试篇之Nunit文件断言、字符串断言及集合断言

使用前面讲过的方法基本上能够完成工作中的大部分任务了,然而有些功能实现起来还是比较麻烦的,比如说字符串相等性比较不区分大小写,字符串是否匹配某一正则规则,集合中的每一个(某一个)元素是否符合特定规则等,Nunit提供了一些特定的方法用来实现一些用普通断言比较难以实现的…

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;这两个的价格都是一样的&…

Technocup 2020 - Elimination Round 2 E. Rock Is Push dp

传送门 文章目录题意&#xff1a;思路题意&#xff1a; 给你一个nmnmnm的方格&#xff0c;你初始在(1,1)(1,1)(1,1)点&#xff0c;有些位置有箱子&#xff0c;你可以走到某个位置向你的方向推动这个箱子&#xff0c;箱子不能出界&#xff0c;问你走到(n,m)(n,m)(n,m)有多少种方…

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

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

Codeforces Round #653 (Div. 3)(A, B, C, D, E1详解)

Codeforces Round #653 (Div. 3) Required Remainder Thinking(binary search) 既然是找最大值问题&#xff0c;我又懒得去推式子&#xff0c;于是我直接就上了一个二分&#xff0c;二分写法比结论稍微繁琐了一点吧&#xff0c;但是还是挺好想的。 根据题意&#xff0c;我们…

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

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

P6327 区间加区间sin和 线段树 + 数学

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个长度为nnn的序列aaa&#xff0c;有mmm次操作&#xff0c;每次操作分两种类型&#xff1a; (1)l,r,v(1)l,r,v(1)l,r,v&#xff0c;将al,al1,...,ara_l,a_{l1},...,a_ral​,al1​,...,ar​分别加上vvv…

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

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