1010. Lehmer Code (35)

来源:互联网 发布:金和网络做什么的 编辑:程序博客网 时间:2024/06/06 03:14

感想:今天很开心,学到了树状数组,维护和求和都是O(NlogN)哦!

参见:http://blog.csdn.net/int64ago/article/details/7429868


附上代码:

#include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<stack>#include<map>#include<vector>#include<deque>#include<cmath>using namespace std;int c[100002];struct number{int node;int num;};bool com1(number &a,number &b){return a.num<b.num;}void insert(int i){while(i<100002){c[i]++;i+=i&-i;}}int read(int i){int sum=0;while(i){sum+=c[i];i-=i&-i;}return sum-1;}int main(){int N,i;cin>>N;number *a=new number[N];int *b=new int[N];for(i=0;i<N;i++){cin>>a[i].num;a[i].node=i;}sort(a,a+N,com1);for(i=0;i<N;i++){b[a[i].node]=i+2;}for(i=0;i<N;i++){insert(b[N-1-i]);b[N-i-1]=read(b[N-i-1]);}cout<<b[0];for(i=1;i<N;i++)cout<<" "<<b[i];}


0 0
原创粉丝点击