A1342 | [COCI-2016_2017-contest2]#6 Zamjene
来源COCI
时间限制1s
内存限制128MB
通过 / 提交0/0
题目描述
Dominik has envisioned an array of positive integers p1 , …, pn . Let’s denote the sorted version of that array as q1 , …, qn .
Also, he envisioned a set of allowed substitutions. If a pair (X, Y) is a member of the set of allowed substitutions, Dominik can swap the numbers at positions X and Y in array p.
Marin is giving Dominik Q queries, and each of them is of one of the following types:
1. Swap numbers at positions A and B.
2. Add pair (A, B) to the set of allowed substitutions.
Marin can give pair (A, B) that is already in the set of allowed substitutions.
3. See if it’s possible to sort the array using only the allowed substitutions?
The substitutions can be used in an arbitrary order, and each substitution can be made an arbitrary number of times.
4. Let’s call a pair of positions (A, B) linked if the number from position A is possible to transfer to position B using only allowed subtitutions.
Let’s call the set of all positions linked to position A the cloud of A.
A cloud is good if it’s possible for each position j from the cloud to achieve pj = qj using a series of allowed substitutions.
You must answer how many pairs of different positions (A, B) exist such that it holds:
a. Positions A and B are not linked b. Cloud of A is not good and cloud of B is not good c. If we add pair (A, B) to the set of allowed substitutions, the cloud of A (created by linking the cloud of A and cloud of B) becomes good.
Please note: Pairs (A, B) and (B, A) are considered an identical pair.
Also, he envisioned a set of allowed substitutions. If a pair (X, Y) is a member of the set of allowed substitutions, Dominik can swap the numbers at positions X and Y in array p.
Marin is giving Dominik Q queries, and each of them is of one of the following types:
1. Swap numbers at positions A and B.
2. Add pair (A, B) to the set of allowed substitutions.
Marin can give pair (A, B) that is already in the set of allowed substitutions.
3. See if it’s possible to sort the array using only the allowed substitutions?
The substitutions can be used in an arbitrary order, and each substitution can be made an arbitrary number of times.
4. Let’s call a pair of positions (A, B) linked if the number from position A is possible to transfer to position B using only allowed subtitutions.
Let’s call the set of all positions linked to position A the cloud of A.
A cloud is good if it’s possible for each position j from the cloud to achieve pj = qj using a series of allowed substitutions.
You must answer how many pairs of different positions (A, B) exist such that it holds:
a. Positions A and B are not linked b. Cloud of A is not good and cloud of B is not good c. If we add pair (A, B) to the set of allowed substitutions, the cloud of A (created by linking the cloud of A and cloud of B) becomes good.
Please note: Pairs (A, B) and (B, A) are considered an identical pair.
输入格式
The first line of input contains integers N and Q (1 ≤ N, Q ≤ 1 000 000).
The second line of input contains N integers p1, …, pn (1 ≤ p1, …, pn ≤ 1 000 000).
Each of the following Q lines contains a query in the following format:
● The first number in the line is the type of query T from the set {1, 2, 3, 4}.
● If the type of query T is 1 or 2, two different integers A and B follow (1 ≤ A, B ≤ N)
that represent the substitution (A, B).
The second line of input contains N integers p1, …, pn (1 ≤ p1, …, pn ≤ 1 000 000).
Each of the following Q lines contains a query in the following format:
● The first number in the line is the type of query T from the set {1, 2, 3, 4}.
● If the type of query T is 1 or 2, two different integers A and B follow (1 ≤ A, B ≤ N)
that represent the substitution (A, B).
输出格式
For each query of type 3 or 4, output the answer in its separate line.
The answer to query of type 3 is “DA” (Croatian for yes) or “NE” (Croatian for no), without the quotation marks, and the answer to query of type 4 is a non-negative integer from the task.
The answer to query of type 3 is “DA” (Croatian for yes) or “NE” (Croatian for no), without the quotation marks, and the answer to query of type 4 is a non-negative integer from the task.
输入输出样例
输入 #1
3 5 1 3 2 4 3 2 2 3 4 3
输出 #1
1 NE 0 DA
输入 #2
5 5 4 2 1 4 4 3 4 1 1 3 3 4
输出 #2
NE 1 DA 0
输入 #3
4 10 2 1 4 3 3 4 1 1 2 3 4 2 2 3 2 1 2 4 2 3 4 3
输出 #3
NE 2 NE 1 3 DA
In test cases worth 50% of total points, it will hold N, Q ≤ 1 000.
Clarification of the first test case:
The answer to the first query is 1 because the pair of positions (2, 3) meets all given requirements.
The answer to the second query is NE (no) because it is impossible to transfer numbers 2 and 3 to the
corresponding positions, because the set of allowed substitutions is empty.
After the third query, we add pair (2, 3) to the set of allowed substitutions.
The answer to the fourth query is now 0 because 2 and 3 are already linked, and the answer to the fifth
query is DA (yes), because it is possible to sort the array by applying the allowed substitution (2, 3).
Clarification of the first test case:
The answer to the first query is 1 because the pair of positions (2, 3) meets all given requirements.
The answer to the second query is NE (no) because it is impossible to transfer numbers 2 and 3 to the
corresponding positions, because the set of allowed substitutions is empty.
After the third query, we add pair (2, 3) to the set of allowed substitutions.
The answer to the fourth query is now 0 because 2 and 3 are already linked, and the answer to the fifth
query is DA (yes), because it is possible to sort the array by applying the allowed substitution (2, 3).
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?
提交通过
评测结果:Accepted