ds 2.2 逆序数


 

 
/***************
Problem from :ds
Problem describe :
   数组模拟链表 
   
   假设  a[] = 1 2 3 4 5
   输入   4 2 2  1 0
   输出 
	4 ->  链表的第五个元素  5 (删除掉5   此时链表  1 - 2 - 3 - 4)
	2 ->  链表的第三个元素  3 (删除掉3   此时链表  1 - 2 - 4) 
	2 ->  链表的第三个元素  4 (删除掉4   此时链表  1 - 2 )
	1 ->  链表的第二个元素  2 (删除掉2   此时链表  1 )
	0 ->  链表的第一个元素  1 (删除掉1   此时链表  null )
	
data:2016.12.1
****************/

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<map>
#include<stack>
#include<queue>
#include<ctime>
#include<cstring>
#include<vector>
#include<string>
#define ll __int64
#define inf 0x3f3f3f3f3f
using namespace std;

int num[505][2];
void init(int n)
{
	num[0][1]=1;//作为表头 
	for(int i=1; i<=n; i++) num[i][0]=i, num[i][1]=i+1;  //num[i][0]记录i   num[i][1]记录连接的下一个数 
	num[n][1]=0;
	return ;
}

int main()
{
//  freopen("in.txt","r",stdin);
//  freopen("out.txt","w",stdout);
	int i, x, n;
	while(~scanf("%d", &n))
	{
		init(n);
		for(i=0; i<n; i++)
		{
			scanf("%d", &x);
			if(i) printf(" ");
			int k=num[0][1], pre=0;//pre记录前一个结点  用于删除操作 
			while(x--)
			{
				pre=k;
				k = num[k][1];
			}
			printf("%d", num[k][0]);
			num[pre][1] = num[k][1];  //  1 - 2 - 3  比如删除2  则 num[1][1] = num[2][1] = 3  =>  1 - 3 
		}
		printf("\n");
	}
	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值