[SPOJ DQUERY] D-query(树状数组,离线)

题目链接:https://vjudge.net/problem/SPOJ-DQUERY

题意:给定数列,q次询问,问区间内不同数字的个数。

可以用主席树,但是还有更好写的办法。

离线存下所有的询问,按照询问右端点从小到大排序。

用树状数组标记“某个值在区间[1,r]中出现的最后的位置”。这样可以将r从左向右平移,每一个r更新所有右边界为r的查询。

因为某值出现总是尽可能向后,所以这样可以保证可以被查到。

用一个map来记录某个值出现的位置,然后移动的时候更新树状数组就行了。整体复杂度就是O(n*logn+Q)的。

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 typedef struct Event {
 5     int l, r, id;
 6 }Event;
 7 const int maxn = 200100;
 8 int n, q, a[maxn];
 9 int bit[maxn];
10 vector<Event> event;
11 int ret[maxn];
12 unordered_map<int, int> vis;
13 
14 bool cmp(Event a, Event b) { return a.r < b.r; }
15 int lowbit(int x) { return x & (-x); }
16 void add(int i, int v) { for(; i <= n; i+=lowbit(i)) bit[i] += v; }
17 int sum(int i) { int ret = 0; for(; i > 0; i-=lowbit(i)) ret += bit[i]; return ret; }
18 
19 int main() {
20     // freopen("in", "r", stdin);
21     int l, r;
22     while(~scanf("%d",&n)) {
23         for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
24         event.clear(); vis.clear();
25         memset(bit, 0, sizeof(bit));
26         scanf("%d", &q);
27         for(int i = 1; i <= q; i++) {
28             scanf("%d%d",&l,&r);
29             event.push_back(Event{l,r,i});
30         }
31         sort(event.begin(), event.end(), cmp);
32         r = 0;
33         for(int i = 1; i <= n; i++) {
34             if(vis.find(a[i]) == vis.end()) {
35                 vis[a[i]] = i;
36                 add(i, 1);
37             }
38             else {
39                 add(vis[a[i]], -1);
40                 vis[a[i]] = i;
41                 add(i, 1);
42             }
43             while(event[r].r == i) {
44                 ret[event[r].id] = sum(event[r].r) - sum(event[r].l-1);
45                 r++;
46             }
47         }
48         for(int i = 1; i <= q; i++) printf("%d\n", ret[i]);
49     }
50     return 0;
51 }

 

转载于:https://www.cnblogs.com/kirai/p/6835080.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

加点自已内容的新内核下L7-FILTER的应用实例!

加点自已内容的新内核下L7-FILTER的应用实例! 转载自&#xff1a;如下BLOG [url]http://pc100.blogbus.com/index.html[/url]本人实验的环境&#xff1a;RED HAT LINUX AS4 &#xff08;KERNEL 2.6.9&#xff09;1.下载linux-2.6.13.tar.bz2iptables-1.3.3.tar.bz2patch-o-mati…

html分享插件,10个jQuery插件分享

10个jQuery插件分享Sponsor发觉现在国外的前端人员很有创意&#xff0c;每个精品jQuery插件大部分来自国外&#xff0c;所以我很欣赏他们。今天为大家带来一些有意思的jQuery插件&#xff0c;这些jQuery有图片类插件、Tool Tips类插件、文字、绘图、排版等&#xff0c;我想这些…

OCR识别算法深入分析手机端车牌识别

一、手机端车牌识别OCR识别流程 车牌识别是基于OCR识别的一用应用。手机端车牌识别过程包括图像采集、图像预处理、车牌定位、字符分割、字符识别、输出结果等一系列算法运算&#xff0c;其流程如下图所示&#xff1a; 其中图像采集是通过视频流识别&#xff0c;对视频进行解帧…

org.springframework.beans.factory.BeanDefinitionStoreExcept

今天写了一个spring的测试demo 新建一个UserWzy类 新建一个spring的配置文件放在src目录下 新建一个测试类 运行报错如下 解决办法&#xff1a; 把配置文件放在resources目录下 再次启动 可以看到了输出了对象的地址

QTP脚本示例

例如&#xff0c;以下语句指示 QuickTest 选中 Itinerary 网页上的所有复选框&#xff1a; Set MyDescription Description.Create() MyDescription("html tag").Value "INPUT" MyDescription("type").Value "checkbox" Set Checkb…

国开计算机应用基础中考答案,国开计算机应用基础模块4PowerPoint2010电子演示文稿系统答案...

"在PoewrPoint中&#xff0c;“视图”这个名词表示( )。: 一张正在修改的幻灯片; 一种图形; 显示幻灯片的方式; 编辑演示文稿的方式""在下列PowerPoint的各种视图中&#xff0c;可编辑、修改幻灯片内容的视图是( )。: 普通视图; 幻灯片浏览视图; 都可以; …

第一阶段冲刺(第七天)

昨天&#xff1a;学习了listview的用法&#xff0c;对以后从数据库中提取数据生成相应的按钮打下了基础 今天&#xff1a;进行了报表界面的设计 问题&#xff1a;如何生成报表还不是很清楚&#xff0c;需要进一步学习&#xff01;转载于:https://www.cnblogs.com/lhj1017/p/684…

手动加载spring, ApplicationContext怎么销毁

手动加载spring&#xff0c; ApplicationContext怎么销毁 AbstractApplicationContext context new ClassPathXmlApplicationContext("bean6.xml");Orders orders context.getBean("factoryBean", Orders.class);System.out.println("第四部 获取创…

後は勉強をもっともっと頑張りましょう、自分の人生は自分で切り開くしかありません...

後は勉強をもっともっと頑張りましょう、自分の人生は自分で切り開くしかありません

如果用户的计算机在查询本地Net,网络操作系统管理2448-2

一、填空题(每小题2分&#xff0c;共20分).用户在网络中工作时所使用的身份标志称为.网络操作系统是操作系统和_ 的集合&#xff0c;其主要功能是控制和管理网络的运行、实现网络通信、为网络用户提供网络资源共享和各种网络服务。3.通过设置打印机的&#xff0c;可以让重要的文…

iOS开发 - App程序启动原理

Info.plist和pch文件的作用 建立一个project后&#xff0c;会在Supporting files目录下看到一个“project名-Info.plist”的文件&#xff0c;该文件对project做一些执行期的配置。很重要&#xff0c;不能删除 在旧版本号Xcode创建的project中。这个配置文件的名字就叫“Info.pl…

SpringFramework5.0 @Indexed注解 简单解析

使用场景 在应用中有大量使用ComponentScan扫描的package包含的类越多的时候&#xff0c;Spring模式注解解析耗时就越长。 使用方法 在项目中使用的时候需要导入一个spring-context-indexer jar <dependency><groupId>org.springframework</groupId><…

SQL2000里的数据类型

(1)char、varchar、text和nchar、nvarchar、ntext char和varchar的长度都在1到8000之间&#xff0c;它们的区别在于char是定长字符数据&#xff0c;而varchar是变长字符数据。所谓定长就是长度固定的&#xff0c;当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面…

word html 预览 打印出来,word预览时文字在表格中,打印出来却没有.doc

word预览时文字在表格中,打印出来却没有篇一&#xff1a;打印WORD文档时,打印预览只显示部分文字是怎么回事&#xff1f;Word 20071. 单击“Office 按钮”&#xff0c;然后单击“Word 选项”。2. 打开“显示”菜单&#xff0c;单击以选中“打印选项”下的“打印背景色和图像”复…

MaC 修改MySQL密码

1.苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务&#xff08;点击stop mysql server&#xff09; 2.进入终端输入&#xff1a;cd /usr/local/mysql/bin/ 回车后 登录管理员权限 sudo su 回车后输入以下命令来禁止mysql验证功能 ./mysqld_safe --skip-g…

正则学习:组的定义及引用方式

一个正则表达式匹配结果可以分成多个部分&#xff0c;这就是组(Group).把一次Match结果用(?<name>)的方式分成组,例子:publicstaticvoidMain() {  string s "2005-2-21";  Regex reg new Regex("(?<y>…

hdu 3549 Flow Problem(最大流模板题)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid3549 Problem DescriptionNetwork flow is a well-known difficult problem for ACMers. Given a graph, your task is to find out the maximum flow for the weighted directed graph.InputThe first line of…

html两个盒子怎么左右对其,关于html:在同一行上左右对齐两个内联块

如何对齐两个内联块&#xff0c;以便一个在左边&#xff0c;另一个在同一行&#xff1f; 为什么这么难&#xff1f; 是否有类似LaTeX的 hfill这样的东西可以占用它们之间的空间来实现这一目标&#xff1f;我不想使用浮点数&#xff0c;因为有了内联块&#xff0c;我可以将基线对…

奉献给你:《Visual C# 2005程序开发与界面设计秘诀》

对于《Visual C# 2005程序开发与界面设计秘诀》&#xff0c;我们将其定位为一本Visual C# 2005的进阶技术研讨书&#xff0c;针对的是曾使用过Visual C# 2002或者已经对新版本的Visual C# 2005有些了解的读者。在这本书里面&#xff0c;使用了将近130个小节以及范例&#xff0c…