小柒的逆序对(一)
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小柒最近获得了一个长度为 n排列^\texttt{[1]}\{a_1,a_2,\dots,a_n\}。作为一个计算逆序对的高手,小柒立马计算了出来这个排列的的逆序对^\texttt{[2]}数量为 m。不过小柒还想知道,如果在计算逆序对前交换了 a_ia_j (1\leq i \leq j \leq n),那么这个排列的逆序对会变成奇数还是偶数?
\hspace{15pt}为了更加有趣,小柒一共会进行 q 次交换,每次交换后,你都需要回答当前排列的逆序对是奇数还是偶数。作为编程高手,请你编写一个程序解决这个问题。

\hspace{15pt}注:每次的交换是真的交换,也就是会对后面的答案产生影响。
\hspace{15pt}在序列中,若存在这样的两个下标 i,j 满足 i<j,且其对应的元素满足 a_i>a_j,则称 ij 构成一个逆序对^\texttt{[1]}
\hspace{15pt}长度为 n排列^\texttt{[2]}是由 1 \sim nn 个整数、按任意顺序组成的数组,其中每个整数恰好出现一次。例如,\{2,3,1,5,4\} 是一个长度为 5 的排列,而 \{1,2,2\}\{1,3,4\} 都不是排列,因为前者存在重复元素,后者包含了超出范围的数。

输入描述:

\hspace{15pt}第一行输入三个整数 n,m,q \left(1\leq n,q \leq 10^5;\ 0\leq m\leq \tfrac{n \times (n-1)}{2}\right) 代表这个排列的长度、逆序对的数量、询问次数。 
\hspace{15pt}第二行输入 n 个两两不同的整数 a_1,a_2,\dots,a_n \left(1\leq a_i\leq n\right) 代表给定的排列。
\hspace{15pt}此后 q 行,每行输入两个整数 i,j \left(1 \leq i,j \leq n\right) 代表要交换的元素的下标。

\hspace{15pt}保证所给出的排列的逆序对数量恰好为 m

输出描述:

\hspace{15pt}对于每一次交换,新起一行。如果当前排列的逆序对数量为奇数,输出 \rm odd,否则输出 \rm even
示例1

输入

复制
5 3 4
2 3 1 5 4
1 2
2 2
1 3
5 5

输出

复制
even
even
odd
odd

说明

\hspace{15pt}对于第一次询问,交换得到 \{{\color{orange}3},{\color{orange}2},1,5,4\},此时,满足条件的逆序对有四对:
\hspace{23pt}\bullet\,i=1j=2,满足 a_1>a_2
\hspace{23pt}\bullet\,i=1j=3,满足 a_1>a_3
\hspace{23pt}\bullet\,i=2j=3,满足 a_2>a_3
\hspace{23pt}\bullet\,i=4j=5,满足 a_4>a_5
\hspace{15pt}因此,输出 \rm even

\hspace{15pt}对于第二次询问,交换得到 \{3,{\color{orange}2},1,5,4\},此操作不改变逆序对的数量,依旧输出 \rm even