题目链接:D. Misha and Permutations Summation
题意:两个全排列,算出这两个全排列分别是第几个全排列,然后这两个数字相加,取模(n!),然后再输出一个全排列表示第几个全排列,第几个是从0开始编号的。
大概在暑假的时候洛谷上看到一个变进制数的概念,就是将一个全排列转化为一个变进制数:yummy的博客
然后将两个变进制数相加,如果最高位还会产生进位说明相加超过了(n!),就相当于取模了。
然后再将变进制数转化为全排列。
看看lt的:ltnb
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+7;
int sum[maxn];
int n;
void add(int x,int y){
for(;x<=n;x+=x&-x) sum[x]+=y; }
int ask(int x){
if(x==0) return 0; int res=0; for(;x;x-=x&-x) res+=sum[x]; return res; }
int A[maxn],B[maxn];
int p[maxn];
int res