题目传送门

题意:训练指南P248

分析:逆向考虑,比如一个全排列:7345261,它也可以表示成题目中的形式,第一个数字7是由6 * (7 - 1)得到的,第二个数字3有2 * (7 - 2)得到,所以只要树状数组单点修改二分(找最远的因为有些位置是0)查询当前第s[i] + 1的数字(在BIT中指前p项和为s[i] + 1)。

#include <bits/stdc++.h>
using namespace std; const int N = 1e5 + 5;
int s[N];
struct BIT {
int c[N], sz;
void init(int num) {
memset (c, 0, sizeof (c));
sz = num;
}
void updata(int i, int x) {
while (i <= sz) {
c[i] += x; i += i & -i;
}
}
int query(int i) {
int ret = 0;
while (i > 0) {
ret += c[i]; i -= i & -i;
}
return ret;
}
int bsearch(int l, int r, int kth) {
while (l < r) {
int mid = l + r >> 1;
if (query (mid) < kth) l = mid + 1;
else r = mid;
}
return r;
}
}bit; int main(void) {
int T; scanf ("%d", &T);
while (T--) {
int k; scanf ("%d", &k);
bit.init (k);
for (int i=1; i<=k; ++i) {
scanf ("%d", &s[i]);
bit.updata (i, 1);
}
for (int i=1; i<=k; ++i) {
int p = bit.bsearch (1, k, s[i] + 1);
if (i > 1) printf (" ");
printf ("%d", p);
bit.updata (p, -1);
}
puts ("");
} return 0;
}

  

全排列 UVA 11525 Permutation的更多相关文章

  1. UVA 11525 Permutation(树状数组)

    题目意思是说  给你一个数k  然后有k个si   问你1--k 的第n个全排列是多少   注意是 1 2 3...k的全排列 不是si的 N=   由观察得知(k-i)!就是k-i个数字的全排列种数 ...

  2. UVA 11525 Permutation (树状数组+YY)

    题意:给你k个数Si,然后给你一个等式   H= ∑  Si ∗ (K − i)!  (i=(1->k)且0 ≤ Si ≤ K − i). 叫你求出第H个全排列 其实这是一个康托展开:X=a[n ...

  3. UVA 11525 Permutation ——(线段树,脑筋急转弯)

    只要注意到对于譬如:S1*(k-1)! 因为后面k-1个数字的全排列个数刚好是(k-1)!,那么第一个数字就是没有取过的数字的第(S1+1)个即可.取走这个数字以后这个数字就不能再用了,依次类推即可得 ...

  4. Permutation UVA - 11525(值域树状数组,树状数组区间第k大(离线),log方,log)(值域线段树第k大)

    Permutation UVA - 11525 看康托展开 题目给出的式子(n=s[1]*(k-1)!+s[2]*(k-2)!+...+s[k]*0!)非常像逆康托展开(将n个数的所有排列按字典序排序 ...

  5. uva 11525(线段树)

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. 全排列 递归方法(permutation原理

    https://blog.csdn.net/axiqia/article/details/50967863  原博客 (一)递归的全排列算法 (A.B.C.D)的全排列为 1.A后面跟(B.C.D)的 ...

  7. [Swift]LeetCode267.回文全排列 II $ Palindrome Permutation II

    Given a string s, return all the palindromic permutations (without duplicates) of it. Return an empt ...

  8. UVA 11922 Permutation Transformer(平衡二叉树)

    Description Write a program to transform the permutation 1, 2, 3,..., n according to m instructions. ...

  9. uva 11922 Permutation Transforme/splay tree

    原题链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18902 伸展树的区间翻转剪切... 如下: #include< ...

随机推荐

  1. yii 自定义组件的调用

    1,main.php 里面导入 'import' => array(            'application.components.*'        ), 2,application/ ...

  2. Oracle数据库对象题库

    一.    填空题 在用 create 语句创建基本表时,最初只是一个空的框架,用户可以使用insert命令把数据插入表中. 在基本表不需要时,可以使用 drop table 语句撤消.在一个基本表撤 ...

  3. 129. Sum Root to Leaf Numbers

    题目: Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a nu ...

  4. September 9th 2016 Week 37th Friday

    Within you, I lose myself. 有了你,我迷失了自我. I never had such feeling, maybe just because I never invested ...

  5. postgresql导入及导出

    导入命令 psql -d GAME -U postgres -f /root/plubic.sql 出现如下错误: psql: FATAL:  Peer authentication failed f ...

  6. Ionic环境搭建

    stepts npm install -g ionic@beta Make sure you have NodeJS installed. Download the installer here or ...

  7. Q3 2016 State of the Internet – Security Report

    https://content.akamai.com/PG7476-Q3-2016-SOTI-Security-Report.html?utm_source=GoogleSearch&gcli ...

  8. <转>删除文件夹下所有的.svn文件

    当使用了svn版本控制系统后每个目录下都会有一个.svn目录存在,开发完当交付产品或者上传到服务器时一般要把这些目录删除,这里总结了一下在linux和win下的办法. 一.在linux下 删除这些目录 ...

  9. ASP.NET多线程下使用HttpContext.Current为null解决方案 2015-01-22 15:23 349人阅读 评论(0) 收藏

    问题一:多线程下获取文件绝对路径 当我们使用HttpContext.Current.Server.MapPath(strPath)获取绝对路径时HttpContext.Current为null,解决办 ...

  10. .NET Nancy 详解(二) 简易路由实现

    继续上面的简易版本,有意思的点剩下便是路由实现了. 路由注册 首先,来看一下基本的路由注册过程. public FakeNancyModuleWithoutBasePath() { Delete[&q ...