bzoj2743 [HEOI2012]采花——树状数组+离线
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2743
和 HH的项链 那道题很像,也是类似的做法;
但不同的是这里的点只有有前驱时才起作用;
自己的思路还是不清晰,总想着遍历到的这个点如何如何...
其实跟这个点无关,只关注它的前驱,给前驱 +1,这个1就表示前驱和自己同时存在;
那么前驱的前驱 -1,因为它对现在的这个点已经没用了,而它曾经被 +1 过。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const maxn=1e6+;
int n,c,m,f[maxn],a[maxn],lst[maxn],prt[maxn];
struct Q{int l,r,w,bh;}q[maxn];
int rd()
{
int ret=;char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return ret;
}
bool cmp(Q x,Q y){return x.r<y.r;}
bool cmp2(Q x,Q y){return x.bh<y.bh;}
void add(int x,int k)
{
for(;x<=n;x+=(x&-x))f[x]+=k;
}
int query(int x)
{
int ret=;
for(;x;x-=(x&-x))ret+=f[x];
return ret;
}
int main()
{
n=rd(); c=rd(); m=rd();
for(int i=;i<=n;i++)a[i]=rd();
for(int i=;i<=m;i++)q[i].l=rd(),q[i].r=rd(),q[i].bh=i;
sort(q+,q+m+,cmp);
int tot=;
for(int i=;i<=n;i++)
{
if(!lst[a[i]]&&!prt[a[i]])lst[a[i]]=i;
else if(!prt[a[i]])
{
prt[a[i]]=lst[a[i]]; lst[a[i]]=i;
add(prt[a[i]],);
// add(i,1);
}
else
{
add(prt[a[i]],-);
prt[a[i]]=lst[a[i]]; lst[a[i]]=i;
add(prt[a[i]],);//
// add(i,1);
}
// printf("prt[%d]=%d lst[%d]=%d\n",a[i],prt[a[i]],a[i],lst[a[i]]);
// while(q[tot].r==i)q[tot].w=(query(i)-2*query(q[tot].l-1))/2,tot++;
while(q[tot].r==i)q[tot].w=query(i)-query(q[tot].l-),tot++;
}
sort(q+,q+m+,cmp2);
for(int i=;i<=m;i++)printf("%d\n",q[i].w);
return ;
}
bzoj2743 [HEOI2012]采花——树状数组+离线的更多相关文章
- [bzoj2743][HEOI2012]采花(树状数组+离线)
2743: [HEOI2012]采花 Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 1832 Solved: 954[Submit][Status] ...
- [BZOJ2743] [HEOI2012] 采花 (树状数组)
Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一 ...
- 【bzoj2743】[HEOI2012]采花 树状数组
题目描述 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公 ...
- [HEOI2012]采花 树状数组 BZOJ 2743
题目描述 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花. 花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于 ...
- BZOJ 2743: [HEOI2012]采花 [树状数组 | 主席树]
题意: 查询区间中出现次数$>2$的颜色个数 一眼主席树,区间中$l \le last[i] \le r$的个数减去$l \le last[last[i]] \le r$的个数,搞两颗主席树来做 ...
- 2016 Multi-University Training Contest 5 1012 World is Exploding 树状数组+离线化
http://acm.hdu.edu.cn/showproblem.php?pid=5792 1012 World is Exploding 题意:选四个数,满足a<b and A[a]< ...
- SPOJ DQUERY树状数组离线or主席树
D-query Time Limit: 227MS Memory Limit: 1572864KB 64bit IO Format: %lld & %llu Submit Status ...
- D-query SPOJ 树状数组+离线
D-query SPOJ 树状数组+离线/莫队算法 题意 有一串正数,求一定区间中有多少个不同的数 解题思路--树状数组 说明一下,树状数组开始全部是零. 首先,我们存下所有需要查询的区间,然后根据右 ...
- Necklace HDU - 3874 (线段树/树状数组 + 离线处理)
Necklace HDU - 3874 Mery has a beautiful necklace. The necklace is made up of N magic balls. Each b ...
随机推荐
- LeetCode:不同路径&不同路径II
不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 问 ...
- [luoguP2577] [ZJOI2005]午餐(DP)
传送门 显然吃饭时间越长的人排在前面越好,所以先排序. f[i][j]表示前i个人,A队的打饭时间为j的最优解,每个人只有两种选择,去A队或是去B队. #include <cstdio> ...
- [POJ2446] Chessboard(二分图最大匹配-匈牙利算法)
传送门 把所有非障碍的相邻格子彼此连一条边,然后求二分图最大匹配,看 tot * 2 + k 是否等于 n * m 即可. 但是连边不能重复,比如 a 格子 和 b 格子 相邻,不能 a 连 b ,b ...
- 【并查集】F.find the most comfortable road
https://www.bnuoj.com/v3/contest_show.php?cid=9146#problem/F [题意] 给定n个城市和m条带权边,q次查询,问某两个城市之间的所有路径中最大 ...
- hdu 2845
#include<stdio.h> #define N 200100 int f[N]; int a[N],n; int main() { int m,j,i,suma,sumb,sum ...
- Http、TCP/IP、Socket的区别
网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可 ...
- 深入理解计算机操作系统——第11章:全球IP英特网
全球IP英特网 (1)每台英特网主机都运行实现TCPIP协议的软件. (2)英特网的客户端和服务器混合使用套接字接口函数和Unix IO函数来进行通信. (3)套接字函数典型的是作为陷入内核的系统调用 ...
- 如何评价ionic和react native?
Q:对于开发hybird app首选哪个好?是ionic还是react native?如何评价ionic和react native? A: 我看好React系,React系以正确地姿势,专注地做了正确 ...
- 搭建Spring+mybatis报错
java.lang.ClassCastException: com.sun.proxy.$Proxy12 cannot be cast to com.bdqn.service.impl.UserSer ...
- 每日一个linux命令(1)
ls命令: 1. ls -l -R /home/文件夹 列出/home/文件夹下所有文件和目录的详细资料 2. ls -l t* ...