序列3

【题目描述】
你有一个序列,一开始它是空的,现在有三种操作:

  1. 将一个数a加入序列,放在第k个位置,其余的数依次后移
  2. 将第k个位置上的数删除,后面的数向前移
  3. 查询第k个位置上的数,如果不存在第k个位置,输出Wrong Places
    注意:当没有元素时,插入默认在第一个位置,一共有n个操作
    【输入格式】
    第一行 n
    剩下的n行:
    1.有一个1和两个数a,k,表示操作1
    2.有一个2和k,表示操作2
    3.有一个3和k,表示操作3
    【输出格式】
    对于每个操作3,输出一行表示答案
    【输入样例】
    7
    1 10 1
    1 3 1
    3 1
    2 1
    3 1
    2 1
    3 1
    【输出样例】
    3
    10
    Wrong Places
    【数据范围】
    0%的数据 n<=0
    50%的数据 n<=100
    100%的数据n<=10000
#include<bits/stdc++.h>
using namespace std;
int a[10000001];
int main(){
	freopen("last.in", "r", stdin);
	freopen("last.out", "w", stdout);
	int n, l = 0;
	cin >> n;
	memset(a, -1, sizeof(a));
	for(int i = 1; i <= n; i++){
		int x;
		scanf("%d", &x);
		if(x == 1){
			int b, c;
			scanf("%d%d", &b, &c);
			if(l == 0){
				l++;
				a[l] = b;
			}else{
				if(c > l){
					l = c;
					a[l] = b;
				}
				else{
					if(a[l] == -1)a[l] = b;
					else{
						l++;
						for(int j = l; j >= c+1; j--)a[j] = a[j-1];
						a[c] = b;
					}
				}
			}
		}
		else if(x == 2){
			l--;
			if(l == 0)memset(a, -1, sizeof(a));
			int b;
			scanf("%d", &b);
			for(int j = b; j <= l; j++)a[j] = a[j+1];
		}
		else{
			int b;
			scanf("%d", &b);
			if(a[b] == -1)printf("Wrong Places\n");
			else printf("%d\n", a[b]);
		}
	}
	return 0;
}
posted @ 2020-07-28 16:48  牛大了的牛大  阅读(324)  评论(0编辑  收藏  举报