Uva-11525-Permutation
2013-04-24 20:37
288 查看
其中Si的含义应该为最后结果中,第i个数的逆序数个数,所以用线段树就可以直接得出。
线段树中所存的信息为L,R区间中存在合法的数的个数,在查询过程中不断的更新,最终便能够找到我们所需要的值。
代码:
线段树中所存的信息为L,R区间中存在合法的数的个数,在查询过程中不断的更新,最终便能够找到我们所需要的值。
代码:
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int maxn=10e4+10; int n,t[maxn*3]; void Built(int L,int R,int index) { t[index]=R-L+1; if(L==R) return; int mid=(L+R)>>1; Built(L,mid,index<<1); Built(mid+1,R,index<<1|1); } int Search(int num,int L,int R,int index) { t[index]--; if(L==R) return L; int mid=(L+R)>>1; if(num<=t[index<<1]) return Search(num,L,mid,index<<1); return Search(num-t[index<<1],mid+1,R,index<<1|1); } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&n); Built(1,n,1); for(int i=0;i<n;i++) { int ita; scanf("%d",&ita); printf("%d%c",Search(ita+1,1,n,1),i==n-1?'\n':' '); } } return 0; }
相关文章推荐
- UVa 11525 - Permutation (线段树 树状数组 康托展开式)
- uva 11525 Permutation
- UVA 11525 Permutation(树状数组)
- UVA 11525 Permutation(线段树第K大数字问题)
- UVaLive 11525 Permutation (线段树)
- UVA 11525 Permutation(树状数组)
- UVA 11525 Permutation
- UVA 11525 - Permutation(树状数组)
- UVa 11525 Permutation(二分+树状数组)
- 全排列 UVA 11525 Permutation
- UVa 11525 Permutation (线段树)
- UVA 11525 Permutation (树状数组+YY)
- uva 11525 Permutation
- UVA - 11525 Permutation
- 【UVA】11525-Permutation(线段树水题)
- Uva 11525 Permutation
- UVA 11525 Permutation(树状数组)
- uva 11525 - Permutation(线段树)
- uva GeneratingFastSortedPermutation 10098
- UVA 11922 Permutation Transformer(Splay【伸展树】的一些操作)