bzoj 1483】的更多相关文章

[BZOJ 1483] [HNOI2009] 梦幻布丁 (线段树合并) 题面 N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. \(n,m\leq 1 \times 10^5\),颜色编号 \(\leq 1 \times 10^6\) 分析 先考虑询问,我们可以对每种颜色分别求出这种颜色的连续段有多少个.可以用权值线段树实现.第c棵权值线段树维护颜色c的位置出现情况,如果第i个位置颜色…
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1483 分析: 先将不同的颜色的出现位置从小到大用几条链表串起来,然后统计一下答案 对于每次修改,修改一下答案即可,修改之后需要将两个颜色的链表合并就行了,但感觉似乎会TLE? 以下摘录与Hzwer的blog: 1:将两个队列合并,有若干队列,总长度为n,直接合并,最坏O(N),   2:启发式合并呢?   每次我们把短的合并到长的上面去,O(短的长度)   咋看之下没有多大区别,  …
1483: [HNOI2009]梦幻布丁 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1818  Solved: 761[Submit][Status][Discuss] Description N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. Input 第 一行给出N,M表示布丁的个数和好友的操作次数. 第二行N个数A1,A2...…
Description \(N\)个布丁摆成一行,进行\(M\)次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为\(1,2,2,1\)的四个布丁一共有\(3\)段颜色. Input 第一行给出\(N,M\)表示布丁的个数和好友的操作次数. 第二行\(N\)个数\(A_{1},A_{2},...,A_{n}\)表示第\(i\)个布丁的颜色从第三行起有\(M\)行,对于每个操作,若第一个数字是\(1\)表示要对颜色进行改变,其后的两个整数\(X,Y\)…
把相同颜色的串成一个链表, 然后每次A操作就启发式合并, 然后计算对答案的影响. ------------------------------------------------------------------------ #include<cstdio> #include<algorithm> #include<cstring>   using namespace std;   const int maxn = 1000009;   int N, M, ans,…
1483: [HNOI2009]梦幻布丁 题意:一个带颜色序列,一种颜色合并到另一种,询问有多少颜色段 一种颜色开一个链表,每次遍历小的合并到大的里,顺带维护答案 等等,合并方向有规定? 令col[x]代表给颜色x分配的编号,直接交换编号 WA了三次我还有救吗 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; t…
1483: [HNOI2009]梦幻布丁 Time Limit: 10 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. Input 第一行给出N,M表示布丁的个数和好友的操作次数. 第二行N个数A1,A2...An表示第i个布丁的颜色从第三行起有M行,对于每个操…
首先我们可以比较容易的在n的时间内算出来开始的答案,我们维护一些链表,分别表示不同的颜色,那么我们在计算答案的时候,只需要扫一遍所有的链表,判断链表相邻两项是否在序列中相邻,不相邻的话肯定在这其中的一个唯一有一个断的点,也就是分成了两个不同的颜色段,直接累加答案就好了. 然后我们对于每个询问,将颜色x换成颜色y,那么我们找到这两种颜色的链表,将小的链表连接到大的链表之后,同时统计由于合并两个链表而对答案造成的影响.这样直接合并是不行的,因为我们由于链表的长度而改变了合并的顺序,所以我们可以记录一…
1483: [HNOI2009]梦幻布丁 Description N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. Input 第一行给出N,M表示布丁的个数和好友的操作次数. 第二行N个数A1,A2...An表示第i个布丁的颜色从第三行起有M行,对于每个操作,若第一个数字是1表示要对颜色进行改变,其后的两个整数X,Y表示将所有颜色为X的变为Y,X可能等于Y. 若第一个数字为2表示要进…
http://www.lydsy.com/JudgeOnline/problem.php?id=1483 题意:中文. 思路:对于每一种颜色,用一个链表串起来,一开始保存一个答案,后面颜色替换的时候再更新答案. 那颜色应该如何替换呢:启发式合并 证明还没太懂... 又是一种新的暴力方法.我的理解大概就是对于两种相同的数据结构,如果有合并操作,那么将规模小的合并到规模大的上面,这样可以在O(nlogn)的时间复杂度下完成. 合并的时候将规模小的暴力更新,然后将小表接到大表上. 记得如果小的颜色链表…