シーケンステーブルの要素の位置交換(改良版)


シーケンステーブル適用4-2:要素位置交換の逆置きアルゴリズム(データ改良)
Time Limit: 80 ms Memory Limit: 600 KiB
Submit Statistic
Problem Description
長さlen(1<=len<=100000)の順序表で、データ要素のタイプは整数型で、この表を半分に分け、前半にm個の要素があり、後半にlen-m個の要素(1<=m<=len)があり、時間複雑度O(N)、空間複雑度O(1)の計算法を設計し、元の順序表を変更し、順序表の元の前のm個の要素を表の後段に置く.後len-m個の要素をテーブルの前段に配置します.注意:交換操作は複数回行われ、交換のたびに前回の交換が完了した順序テーブルで行われます.
Input
1行目に整数len(1<=len<=1000000)を入力し、シーケンステーブル要素の総数を表す.
2行目はlen個の整数を入力し、表に順次格納されるデータ要素とする.
3行目は整数t(1<=t<=30)を入力し、その後t回の交換を完了し、毎回前回の交換完了後のシーケンステーブルに基づいて新しい交換を実現することを示す.
その後t行は、各行に整数m(1<=m<=len)を入力し、今回の交換が以上の交換が完了した後の順序テーブルを表すことに基づいて、前m個の要素と後len-m個の要素の交換を実現する.
Output
合計t行を出力し,各行は今回の交換が完了した後の順序表のすべての要素を順次出力する.
Sample Input
10 1 2 3 4 5 6 7 8 9 -1 3 2 3 5
Sample Output
3 4 5 6 7 8 9 -1 1 2 6 7 8 9 -1 1 2 3 4 5 1 2 3 4 5 6 7 8 9 -1
#include 
#include 
#include 
#define  max 1000010

typedef int element;
using namespace std;
typedef struct
{
    element *elem;
    int length;
    int listsize;


}sq;
void  initlist (sq &L )
{
    L.elem=(element*)malloc(max *sizeof(element));//  max     
    L.length=0;
    L.listsize=max;

}
void cr(sq &L,int n)
{
    int i;
    for(i=0;i