uva 11525排列(树状数组 + 二分)
来源:互联网 发布:淘宝店铺装修的流程 编辑:程序博客网 时间:2024/05/19 05:33
现在给定k和n,要你按字典序输出 第n种排列的数列而且题目给的 n是 n=S1(k-1)!+S2(k-2)!+...+Sk-1*1!+Sk*0!(0=<Si<=k-i),
我们可以知道si表示i后面有多少个比a[i]小的数,这样一来首先想到的就是set,但是set不能顺序访问,所以可以用树状数组,初始时置1,消除后置0,然后二分来求和为si + 1的位置
代码如下:
#include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<iostream> #include<algorithm> #include<vector> #include<map> #include<queue> #include<stack> #include<string>#include<map> #include<set>using namespace std; #define LL long long const int maxn = 50005;const int INF = 1000000000;//freopen("input.txt", "r", stdin);int c[2 * maxn], s[maxn], ans[maxn], k;int lowbit(int x) {return x&(-x);}int sum(int x) {int ret = 0;while(x > 0) {ret += c[x];x -= lowbit(x);}return ret;}void add(int x) {while(x <= k) {c[x] += 1; x += lowbit(x);}}void subtract(int x) {while(x <= k) {c[x] -= 1; x += lowbit(x);}}int main() {int t; scanf("%d", &t);while(t--) {memset(c, 0, sizeof(c));cin >> k;for(int i = 1; i <= k; i++) add(i);for(int i = 1; i <= k; i++) {int tmp; cin >> tmp;int le = 1, ri = k;while(le < ri) {int mi = (le + ri) >> 1;int tsum = sum(mi);if(sum(mi) >= tmp + 1) ri = mi;else le = mi + 1;}ans[i] = ri;subtract(ans[i]);}printf("%d", ans[1]);for(int i = 2; i <= k; i++) printf(" %d", ans[i]);printf("\n");}return 0;}
0 0
- uva 11525排列(树状数组 + 二分)
- UVa 11525 Permutation(二分+树状数组)
- UVA 11525 - Permutation(二分+树状数组)
- UVa 11610 Reverse Prime(树状数组+二分)
- UVA 501 - Black Box(二分 + 树状数组 + 离散化)
- 1017(二分+树状数组)
- UVA 11525 - Permutation(树状数组)
- UVA 11525 Permutation(树状数组)
- UVA 11525 Permutation(树状数组)
- UVA 12086 (树状数组)
- UVA 1513(树状数组)
- UVA 11610 Reverse Prime(数论+树状数组+二分)
- HDU 4339 Query(树状数组+二分)
- codeforces 191 E (树状数组+二分)
- hdu(4339)树状数组+二分查找
- Lost Cows(树状数组+二分)
- hdu 2852(树状数组+二分)
- POJ-2892(树状数组 + 二分)
- UML简单介绍(五)——用例图的使用案例与分析
- poj 3070 Fibonacci(标准Fibonacci序列 入门 水)
- IO异常应该如何处理实例
- 疯狂Java学习笔记(44)----------探索equals()和hashCode()方法
- MySQL批量更新死锁案例分析
- uva 11525排列(树状数组 + 二分)
- Android 绘制2D图形
- 第三章 29题
- MVC 列表多条件动态查询分页
- 使用缓冲输入输出字节流拷贝图片
- PHPCMS v9 安全防范教程
- Swift学习之路一,常量&变量
- [转载] c++中UTF-8到ANSI的转换
- 标准Fibonacci序列(简单介绍)