BZOJ-2743 LUOGU:https://www.luogu.org/problemnew/show/P4113 题意: 给一个n长度的序列,m次询问区间,问区间中出现两次及以上的数字的个数.n,m,c为2e6. 思路: 一开始用莫队写,但是tle了,莫队的复杂度是n的1.5次这道题n是2e6,复杂度逼近1e9.所以要用更加巧妙的方法,利用前缀和和树状数组维护即可.这道题不是简单的维护前缀和.因为题意说区间中要满足这个种类的物品大于两个的时候,才能加一.所以这一次离开区间的物品,影响的是最…
BZOJ_2743_[HEOI2012]采花_离线+树状数组 Description 萧芸斓是Z国的公主,平时的一大爱好是采花.今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花 .花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采花.公主每次 采花后会统计采到的花的颜色数,颜色数越多她会越高兴!同时,她有一癖好,她不允许最后自己采到的花中,某 一颜色的花只有一朵.为此,公主每采一朵花,要么此前已采到此颜色的花,要么有相当正确的直觉告诉她,她必 能…
如果能够把所有区间内第二次出现某颜色的位置标记出来,树状数组查询一下就可以了. 考虑离线.按左端点从小到大排序,不断移动左端点并更新第二次出现的位置. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() { ,…
题目 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采花.公主每次采花后会统计采到的花的颜色数,颜色数越多她会越高兴!同时,她有一癖好,她不允许最后自己采到的花中,某一颜色的花只有一朵.为此,公主每采一朵花,要么此前已采到此颜色的花,要么有相当正确的直觉告诉她,她必能再次采到此颜色的花.由于时间关系,公主只能走过花园连续的一段进行采花,便让女仆福涵洁安…
2743: [HEOI2012]采花 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2743 Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采花.公主每次采花后会统计采到的花的颜色数,颜色数越多她会越高兴!同时,她有一癖好,她不允许最后自己采到的花中,某一颜色的花只有…
题意: 查询区间中出现次数$>2$的颜色个数 一眼主席树,区间中$l \le last[i] \le r$的个数减去$l \le last[last[i]] \le r$的个数,搞两颗主席树来做 然后就T了 因为bzoj上数据是1e6.... 还是离线树状数组吧.... #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespac…
2743: [HEOI2012]采花 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 2056  Solved: 1059[Submit][Status][Discuss] Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采花.公主每次采花后会统计采到的花的颜色数,颜色数越多她会越高…
处理出每个数下一个出现的位置, 然后按左端点排序回答询问.处理当前数去除的影响 -------------------------------------------------------------------- #include<bits/stdc++.h>   using namespace std;   #define lowbit(x) ((x) & -(x))   const int maxn = 1000009;   int N;   struct BIT { int…
离线,按照l排序 注意到在区间里出现两次的颜色才有贡献,所以记录一个ne[i]表示i后第一个和i同色的花,维护一个l,每次处理询问的时候l单调右移,树状数组维护,在ne[ne[i]]位置++,在ne[i]位置--(因为这里已经++过了),这样区间查询的时候如果右端点超过ne[ne[i]]就能对答案有贡献 注意在开始的时候给有ne的第一次出现的颜色的位置++ #include<iostream> #include<cstdio> #include<algorithm> u…
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2743 题解: 树状数组,离线 求区间里面有多少种出现次数大于等于 2 的颜色. 类似某一个题,问的是区间里面有多少种不同的颜色(即出现次数大于等于 1 ). 把询问离线,并按右端点 r 从小到大排序.并维护出 last[i] 表示与 i 位置颜色相同的上一个位置.然后从左到右枚举右端点 i,在树状数组中把 last[last[i]] 位置(如果不为 0 的话)的值 -1,把 last[i]…