CSES - Siirtojärjestäminen Listassa on lukujen $1,2,\dots,n$ permutaatio, missä $n$ on parillinen. Tehtäväsi on selvittää, voiko listan järjestää seuraavan operaation avulla: valitaan kokonaisluku $i$ väliltä $1 \dots n/2$ ja vaihdetaan keskenään listan $i$ ensimmäistä ja $i$ viimeistä lukua järjestys säilyttäen.

Esimerkiksi kun $n=4$, listan $[3,1,4,2]$ voi järjestää seuraavasti:

$[3,1,4,2] \rightarrow [4,2,3,1] \rightarrow [1,2,3,4]$

Tässä tapauksessa ensimmäisessä operaatiossa $i=2$ ja toisessa operaatiossa $i=1$. Sen sijaan listaa $[3,1,2,4]$ ei ole mahdollista järjestää mitenkään operaation avulla.

Voit olettaa, että $n$ on välillä $2 \dots 10^5$. Tavoitteena on, että algoritmin aikavaativuus on $O(n)$ tai $O(n \log n)$.

Python

Toteuta tiedostoon movesort.py funktio check, joka tarkastaa, voiko listan järjestää.
def check(t):
    # TODO

if __name__ == "__main__":
    print(check([3,1,4,2])) # True
    print(check([3,1,2,4])) # False
    print(check([1,2])) # True
    print(check([4,5,6,1,2,3])) # True
    print(check([4,5,6,3,2,1])) # False
Java

Toteuta tiedostoon MoveSort.java metodi check, joka tarkastaa, voiko listan järjestää.
public class MoveSort {
    public boolean check(int[] t) {
        // TODO
    }

    public static void main(String[] args) {
        MoveSort m = new MoveSort();
        System.out.println(m.check(new int[] {3,1,4,2})); // true
        System.out.println(m.check(new int[] {3,1,2,4})); // false
        System.out.println(m.check(new int[] {1,2})); // true
        System.out.println(m.check(new int[] {4,5,6,1,2,3})); // true
        System.out.println(m.check(new int[] {4,5,6,3,2,1})); // false
    }
}