树上逆序对
题号:NC52938
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

在可能性的系统树上,一共有 n 个事件,正如它们的名字一般,它们形成了一棵树的关系。

现在我们默认1号事件是所有事件的根节点。 不同的事件会产生不同的可能性,为了区分,每一个事件有一个关键值 a_i ,并且保证各不相同。

您拥有 "Rewrite" 的能力,在这棵可能性的系统树上,您可以对任意一个事件进行改写,让它的关键值变成 -a_i 。为了创造新的可能性,你需要让这棵树的树上逆序对数为 k .

来自篝火的指引:树上逆序对的定义:若有一对节点(x,y),满足x是y的祖先,且x点权值大于y点的权值,则(x,y)为一个树上逆序对。

由于需要尽可能多的探索生命的可能,您会进行q次询问。

输入描述:

输入的第一行包含一个整数n,表示事件数。

第二行n个正整数,表示每个节点初始的关键值,每个关键值都各不相同。

接下来n-1行,每行两个数x,y表示x,y之间有树边相连。

下面一行q表示询问个数。

接下来q行,每行一个数k表示询问树上逆序对数能否为k。

100%的数据,满足1≤x,y≤n,n,q≤100000,k≤30000,a_i≤100000000

输出描述:

对于每次询问,若可以为k输出“Orz”,若不可以输出“QAQ”。
示例1

输入

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

输出

复制
Orz
Orz