BZOJ 1878: [SDOI2009]HH的项链

1878: [SDOI2009]HH的项链

Time Limit: 4 Sec  Memory Limit: 64 MB
Submit: 3548  Solved: 1757
[Submit][Status][Discuss]

Description

HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH不断地收集新的贝壳,因此, 他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同 的贝壳?这个问题很难回答。。。因为项链实在是太长了。于是,他只好求助睿智的你,来解 决这个问题。

Input

第一行:一个整数N,表示项链的长度。 第二行:N个整数,表示依次表示项链中贝壳的编号(编号为0到1000000之间的整数)。 第三行:一个整数M,表示HH询问的个数。 接下来M行:每行两个整数,L和R(1 ≤ L ≤ R ≤ N),表示询问的区间。

Output

M行,每行一个整数,依次表示询问对应的答案。

Sample Input

6
1 2 3 4 3 5
3
1 2
3 5
2 6

Sample Output

2
2
4

HINT


对于20%的数据,N ≤ 100,M ≤ 1000;
对于40%的数据,N ≤ 3000,M ≤ 200000;
对于100%的数据,N ≤ 50000,M ≤ 200000。

Source

Day2

[Submit][Status][Discuss]

 

OTZ NEIGHTHORN

树状数组O(NlogN) 或 莫队算法O(N^1.5)

  1 #include <bits/stdc++.h>
  2 
  3 /* SCANNER */
  4 
  5 #define siz 1024
  6 
  7 inline int get_c(void)
  8 {
  9     static char buf[siz];
 10     static char *head = buf + siz;
 11     static char *tail = buf + siz;
 12     
 13     if (head == tail)
 14         fread(head = buf, 1, siz, stdin);
 15         
 16     return *head++;
 17 }
 18 
 19 inline int get_i(void)
 20 {
 21     register int ret = 0;
 22     register int neg = false;
 23     register int bit = get_c();
 24     
 25     for (; bit < 48; bit = get_c())
 26         if (bit == '-')neg ^= true;
 27         
 28     for (; bit > 47; bit = get_c())
 29         ret = ret * 10 + bit - 48;
 30         
 31     return neg ? -ret : ret;
 32 }
 33 
 34 #define N 50005
 35 #define M 200005
 36 #define V 1000005
 37 
 38 int n, m;
 39 int num[N];
 40 
 41 /* PREWORK */
 42 
 43 int nxt[N];
 44 int lst[V];
 45 int fst[V];
 46 
 47 /* QUERY */
 48 
 49 int lt[M];
 50 int rt[M];
 51 int ans[M];
 52 int ord[M];
 53 
 54 inline bool cmp(int a, int b)
 55 {
 56     return lt[a] < lt[b];
 57 }
 58 
 59 /* B I T */
 60 
 61 int tree[N];
 62 
 63 inline void add(int p, int k)
 64 {
 65     for (; p <= n; p += p&-p)
 66         tree[p] += k;
 67 }
 68 
 69 inline int ask(int p)
 70 {
 71     int ret = 0;
 72     for (; p >= 1; p -= p&-p)
 73         ret += tree[p];
 74     return ret;
 75 }
 76 
 77 /* MAIN */
 78 
 79 signed main(void)
 80 {
 81     n = get_i();
 82     
 83     for (int i = 1; i <= n; ++i)
 84         num[i] = get_i();
 85         
 86     for (int i = 0; i < V; ++i)
 87         lst[i] = n + 1;
 88         
 89     for (int i = n; i >= 1; --i)
 90         nxt[i] = lst[num[i]], lst[num[i]] = i;
 91         
 92     for (int i = 1; i <= n; ++i)
 93         if (!fst[num[i]])
 94         {
 95             add(i, 1);
 96             fst[num[i]] = 1;
 97         }
 98         
 99     m = get_i();
100     
101     for (int i = 1; i <= m; ++i)
102     {
103         ord[i] = i;
104         lt[i] = get_i();
105         rt[i] = get_i();
106     }
107     
108     std::sort(ord + 1, ord + 1 + m, cmp);
109     
110     int left = 1;
111     
112     for (int i = 1; i <= m; ++i)
113     {
114         while (left < lt[ord[i]])
115         {
116             add(left, -1);
117             add(nxt[left], 1);
118             ++left;
119         }
120         
121         ans[ord[i]] = ask(rt[ord[i]]);
122     }
123     
124     for (int i = 1; i <= m; ++i)
125         printf("%d\n", ans[i]);
126 }

 

@Author: YouSiki

转载于:https://www.cnblogs.com/yousiki/p/6203159.html

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

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

相关文章

分布式 知乎 github_如何使用GitHub本机功能来帮助管理中型分布式团队

分布式 知乎 githubby Alex Ewerlf由AlexEwerlf 如何使用GitHub本机功能来帮助管理中型分布式团队 (How to use GitHub native features to help manage a mid-size distributed team) My team created a wiki page in our private Github repo about how we work on a common…

开始时间小于 结束时间 js_DNF分享红包开始及结束时间 红包有什么奖励相关介绍...

[闽南网]DNF分享红包分享快乐时间从2019年的1月3日开始到1月21日前结束&#xff0c;活动期间玩家每天登录游戏可以得到一个新年红包&#xff0c;使用后可以为同一个频道的玩家送去祝福&#xff0c;根据送出红包的数量得到不同的奖励。(dnf幸运饺子铺活动)(DNF95版新副本攻略)本…

文件的相关操作

将输出的内容直接输出到文件中去 &#xff1a;freopen( “1.txt” , "w" , stdout &#xff09;转载于:https://www.cnblogs.com/ccut-ry/p/7456190.html

leetcode1504. 统计全 1 子矩形(动态规划)

给你一个只包含 0 和 1 的 rows * columns 矩阵 mat &#xff0c;请你返回有多少个 子矩形 的元素全部都是 1 。 示例 1&#xff1a; 输入&#xff1a;mat [[1,0,1], [1,1,0], [1,1,0]] 输出&#xff1a;13 解释&#xff1a; 有 6 个 1x1 的矩形。 有 2 个 1x2 的矩形。 有 3…

学plc好还是python好_PLC是学西门子的好还是学三菱的?

有人回复的很经典&#xff1a;“小孩子才会选择&#xff0c;大人肯定是都要。”如果你是学生&#xff0c;或者正准备踏入这个行业&#xff0c;建议你先学西门子的博途&#xff0c;毕竟这个在国内用的人多些。但是&#xff0c;你要时刻记得&#xff0c;你的目标是星辰大海~~~不要…

wps如何自己制作流程图_怎么制作流程图,wps自动生成流程图方法

在职场中我们要会熟练使用各种办公软件&#xff0c;才能提高我们的工作效率&#xff0c;下面我为大家分享三种制作流程图的方法&#xff0c;非常简单哦&#xff01;一&#xff0c;在Word中制作流程图1&#xff0c;首先点击“插入”再点击“形状”,点击新建绘图画布&#xff0c;…

doom 源码_Cartpole和Doom的策略梯度简介

doom 源码by Thomas Simonini通过托马斯西蒙尼(Thomas Simonini) Cartpole和Doom的策略梯度简介 (An introduction to Policy Gradients with Cartpole and Doom) This article is part of Deep Reinforcement Learning Course with Tensorflow ?️. Check the syllabus here…

SQL 邮件配置篇

在我们运维工作中&#xff0c;经常要对备份&#xff0c;ETL等作业进行监控&#xff0c;这时我们需要用到SQL SERVER自带的邮件服务器&#xff0c;其原理&#xff0c;我在这么里不多说&#xff0c;直接来实战&#xff0c;下面是我对服务器配置源码&#xff0c;分享给大家&#x…

选定用户与用户组启动流程(学习笔记)

public class RepostoryServiceTest {private static final Logger LOGGER LoggerFactory.getLogger(RepostoryServiceTest.class);Rulepublic ActivitiRule activitiRule new ActivitiRule();Testpublic void testRepository(){//repositoryService最重要的功能就是对流程定…

python关于包的题怎么做_Python自定义包引入

python中的Module是比较重要的概念。常见的情况是&#xff0c;事先写好一个.py文 件&#xff0c;在另一个文件中需要import时&#xff0c;将事先写好的.py文件拷贝 到当前目录&#xff0c;或者是在中增加事先写好的.py文件所在的目录&#xff0c;然后import。这样的做法&#x…

汽车之家的安全框架,是如何从0到1搭建的?

“别人家的安全”是安全威胁情报&#xff08;微信ID&#xff1a;Threatbook&#xff09;近期推出的一档专栏。 合规、管理、构建、应急……安全问题千千万&#xff0c;层出不穷。我们没办法给出这些问题的标准答案&#xff0c;但我们可以用Case Study的形式&#xff0c;让你看看…

leetcode264. 丑数 II

编写一个程序&#xff0c;找出第 n 个丑数。 丑数就是质因数只包含 2, 3, 5 的正整数。 示例: 输入: n 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。 说明: 1 是丑数。 n 不超过1690。 解题思路 直接用treeset去重和排序 代码 class Solution …

vr多人_如何构建多人VR网络应用

vr多人by Srushtika Neelakantam通过Srushtika Neelakantam 如何构建多人VR网络应用 (How to build a multiplayer VR web app) In this article, we’ll learn about three great frameworks/libraries that allow any web developer to build a VR app that works on any de…

量子测量 -- 确定性的死神

一、测量 -- 确定性的死神 前文已反复提及在量子世界中测量这一过程会产生很多奇异的、反直觉的现象。在第一篇文章中我举的例子是&#xff1a;用同样的配方&#xff0c;同样的火候&#xff0c;同样的厨具&#xff08;所有你能想到的变量均相同&#xff09;煎鸡蛋&#xff0c;结…

python增删改查csv文件_Python--作业2--对员工信息文件,实现增删改查操作

#!/usr/bin/env python#-*- coding:utf-8 -*-#Author:Huanglinshengimportos#查询方式一&#xff1a;select * from data_staff.txt where age > 22#查询方式二&#xff1a;select * from data_staff.txt where dept "IT"#查询方式三&#xff1a;select * from d…

ios注销所有通知_您一直想了解的有关iOS中通知的所有信息

ios注销所有通知by Payal Gupta通过Payal Gupta 您一直想了解的有关iOS中通知的所有信息 (Everything you’ve always wanted to know about notifications in iOS) 漂亮的小警报..&#xff1f; (Pretty Little Alerts..?) Notifications are a way to inform users when new…

vue-x

https://my.oschina.net/wangnian/blog/2055631转载于:https://www.cnblogs.com/ylblogs/p/10694849.html

leetcode97. 交错字符串(动态规划)

给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。 示例 1: 输入: s1 “aabcc”, s2 “dbbca”, s3 “aadbbcbcac” 输出: true 解题思路 数组含义&#xff1a;dp[i][j]s1的前i个和s2的前j个能否组成字符串s3的前ij长度的子串 状态转移&#xff1a; d…

【LeetCode】19. Remove Nth Node From End of List

Given a linked list, remove the nth node from the end of list and return its head. For example, Given linked list: 1->2->3->4->5, and n 2.After removing the second node from the end, the linked list becomes 1->2->3->5.题意&#xff1a;…

《网络空间欺骗:构筑欺骗防御的科学基石》一1.1 主动网络空间防御中网络空间抵赖与欺骗的视图...

1.1 主动网络空间防御中网络空间抵赖与欺骗的视图 本文讲的是网络空间欺骗&#xff1a;构筑欺骗防御的科学基石一1.1 主动网络空间防御中网络空间抵赖与欺骗的视图,将抵赖与欺骗纳入标准操作规程&#xff08;SOP&#xff09;&#xff1a;随着攻击技术的不断演进&#xff0c;网…