博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ1878: [SDOI2009]HH的项链
阅读量:5156 次
发布时间:2019-06-13

本文共 746 字,大约阅读时间需要 2 分钟。

【传送门:】


简要题意:

  给出一个长度为n的数列,给出m个询问,每个询问输入l,r,输出数列中l到r的不同的数的个数


题解:

  看这数据范围就不能用在线来做,那就只能离线了

  很显然就是树状数组

  首先将询问按照l从小到大的排序排一遍

  设一个数组next,next[i]表示下一个与第i个数相同的数的位置

  我们从左到右扫一遍数列,如果扫到x这个位置,将x这个位置--,就next[x]这个位置++,然后就通过求前缀和的方法来得出每个询问的答案就可以了


参考代码:

#include
#include
#include
#include
#include
using namespace std;int k[51000];struct question{ int l,r,d,id;}q[210000];bool cmp(question n1,question n2){
return n1.l
=1;i--) { next[i]=c[k[i]]; c[k[i]]=i; } memset(a,0,sizeof(a)); for(int i=1;i<=1000000;i++) if(c[i]!=0) change(c[i],1); int l=1; for(int i=1;i<=m;i++) { while(l

 

转载于:https://www.cnblogs.com/Never-mind/p/8135305.html

你可能感兴趣的文章
maven 下载源码
查看>>
第二阶段冲刺-06
查看>>
Hadoop笔记——技术点汇总
查看>>
Android开发2:事件处理及实现简单的对话框(Toast,AlertDialog,Snackbar,TextInputLayout的使用)...
查看>>
mysql安装 demo [linux centos7] [5.7.26]
查看>>
ubuntu 16.04 搭建无线共享热点(PC 无线直连Android移动终端 调试,监控屏幕)
查看>>
Java EE 架构设计——基于okhttp3 的网络框架设计
查看>>
东软软件动态生成对数据表更新操作的方法
查看>>
Add Digits
查看>>
第二章 Mablab语言基础
查看>>
【Luogu】P1607庙会班车Fair Shuttle(线段树+贪心)
查看>>
crash reporting system for Windows applications
查看>>
系统启动正常,进入桌面时黑屏,可以看到鼠标
查看>>
随意谈谈tcp
查看>>
进制转换
查看>>
Linux 下五个顶级的开源命令行 Shell
查看>>
Linux平台中使用PHP让word转pdf
查看>>
03循环结构
查看>>
docker数据卷的使用 -v --volumes--from
查看>>
电磁兼容培训文稿
查看>>