#P4847. 银河英雄传说V2
银河英雄传说V2
题目背景
小H昨天看到了luogu P1196这一题,触发了他内心中对英雄的感慨/雾。可是无奈他不会这一题,只好去请教小W。在讲完那一题之后,小W灵机一动——不如改一下这道题吧。
于是,一个很水的签到题出现了。
题目描述
某dalao:把题目说简单一点,方便让我一分钟A掉!
于是小W只好把题意简化一下:
给定n个长度为1的序列,第i个序列中有一个元素,值为ai,接下来有三种操作:
M x y
,表示把x所在的序列放到y所在的序列之后。如果x,y已经在同一个序列,则不进行操作。D x
,表示把x所在的序列中从x处断开,也就是把x及x之后的元素单独取出来作为一个序列。Q x y
,表示查询x到y之间(包括x和y)所有元素的值之和。如果x和y不在同一个序列之中,输出-1.
输入格式
第一行为两个数n,m,分别代表元素个数和操作次数。第二行有n个数,为ai。 接下来m行,每行包括三种情况:M x y,D x或Q x y,与题目描述对应。
输出格式
对于每一个Q x y,输出一个数,表示所有元素的值之和。
提示
(出题人非常良心地给了一个大一点的样例!)
样例1解释:
首先有5个序列(一个横排为一个序列),排列如下:
第一个操作将1放到4的后面,变成
第二个操作将3放到2后面,变成
然后查询第5个元素到第2个元素之间的和,由于不存在,输出-1;
将3所在的序列加到4所在的序列后面,变成
接下来变成了5,4,1,2,3,也就是所有元素都在1个序列了,因此接下来的两个合 并操作没有用了,然后把1之后的数字删除,变成:
查询2到2,输出2的值,也就是55352;
查询2到1,输出2+1的值,也就是113122.
为了避免某些乱搞(可能避免不了),前5个点按照传统方式计分,每个测试点10分;后五个点为subtask,必须全部通过才能得分,否则不得分。
对于所有数据,1<=x,y<=n,1<=ai<=10^9