中易网

逆序数还原c语言 输入数组 2 0 1 0 0 输出原序数 3 1 4 2 5

答案:4  悬赏:30  
解决时间 2021-02-04 02:38
逆序数还原c语言 输入数组 2 0 1 0 0 输出原序数 3 1 4 2 5
最佳答案
#include "stdafx.h"
#include 
#include 
#include 
#include 
#include

int c[1001],a[1200];
int n;
int low(int x)
{
return x&(-x);
}
int sum(int x)
{
int cnt=0;
while(x>0)
{
cnt+=c[x];
x-=low(x);
}
return cnt;
}
void add(int x,int num)
{
while(x<=n)
{
c[x]+=num;
x+=low(x);
}
}
int main()
{
int num;
while(scanf("%d",&n)!=EOF)
{
memset(c,0,sizeof(c));
for(int i=1;i<=n;i++)
add(i,1);
for(int i=1;i<=n;i++)
{
scanf("%d",&num);
num++;
for(int j=1;j<=n;j++)
if(sum(j)==num)
{
a[i]=j;
add(j,-1);
break;
}
}
for(int i=1;i<=n;i++)
{
if(i!=1)
printf(" ");
printf("%d",a[i]);
}
printf("\n");
}
return 0;
}
全部回答
我没懂什么意思,能具体一点吗?
本题的逆序数就是后面比它小的数 那么从前往后看 第一个的数的逆序数是a1 表示后面有a1个比其小 因为前面又没有数 所以它是第a1+1大的数,也就是a1+1 对于第二个数a2,表示第二个数是后面第a2+1小的 如果a2+1大于第一个数,要是后面有a2个比当前数小,那么就要是a2+2了 第三个第四个以此类推 对于数列数很小的时候,可以从左到右每次都选择没出现过的第ai+1大的数 #include  #include  #define MAXN 5000 int vis[MAXN]; int a[MAXN]; int res[MAXN]; int main(){ int n,i,j,k; printf("请输入数的个数n:"); scanf("%d",&n); printf("请输入n个数:\n"); for(i=0;i #define MAXN 100000 int a[MAXN]; int res[MAXN]; typedef struct{ int sum; int left,right; }Node;  Node tree[MAXN<<2];//开4倍空间 void build(int id,int left,int right){ tree[id].left=left; tree[id].right=right; if(left==right){ tree[id].sum=1; return; } int mid=(left+right)>>1; build(id<<1,left,mid); build(id<<1|1,mid+1,right); tree[id].sum=tree[id<<1].sum+tree[id<<1|1].sum; } void update(int id,int pos,int val){ int left=tree[id].left; int right=tree[id].right; if(left==right){ tree[id].sum=0; return; } int mid=(left+right)>>1; if(pos<=mid) update(id<<1,pos,val); else update(id<<1|1,pos,val); tree[id].sum=tree[id<<1].sum+tree[id<<1|1].sum; } int query(int id,int val){ int left=tree[id].left; int right=tree[id].right; if(left==right) return left; if(tree[id<<1].sum
  • 3楼网友:萌萌哒小可爱
  • 2021-02-03 17:59
main() {int a[5],i; for(i=0;i<5;i++) scanf("%d",&a[i]); for(i=4;i>=0;i--) printf("%d ",a[i]); getch(); }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯