离线不同数

 1 int s[N],a[N];//离线瞎搞
 2 int n,q,ans[M];
 3 int nxt[N];
 4 map<int,int >mp;
 5 struct Question{
 6     int l,r,id;
 7     bool operator<(const Question q)const{
 8         return l<q.l;
 9     }
10 }Q[M];
11 void add(int x,int val){
12     for(int i=x;i<=n;i+=lowbit(i)) s[i]+=val;
13 }
14 int query(int x){
15     int ret=0;
16     for(int i=x;i>0;i-=lowbit(i))
17         ret+=s[i];
18     return ret;
19 }
20 int main(){
21     while(scanf("%d",&n)!=EOF){
22         mp.clear();
23         for(int i=1;i<=n;i++){
24             scanf("%d",&a[i]);
25             if(mp.find(a[i])==mp.end()){
26                 mp[a[i]]=i;
27                 add(i,1);
28             }
29         }
30         mp.clear();
31         for(int i=n;i;i--){
32             if(mp.find(a[i])==mp.end())
33                 nxt[i]=n+1;
34             else
35                 nxt[i]=mp[a[i]];
36             mp[a[i]]=i;
37         }
38         scanf("%d",&q);
39         for(int i=0;i<q;i++){
40             scanf("%d%d",&Q[i].l,&Q[i].r);
41             Q[i].id=i;
42         }
43         sort(Q,Q+q);
44         int t=1;
45         for(int i=0;i<q;i++){
46             while(t<=n&&t<Q[i].l)
47                 add(nxt[t++],1);
48             ans[Q[i].id]=query(Q[i].r)-query(Q[i].l-1);
49         }
50         for(int i=0;i<q;i++)
51             printf("%d\n",ans[i]);
52     }
53     return 0;
54 }
时间: 2024-10-06 06:24:15

离线不同数的相关文章

调度、模型、同步与任务——阿里云大数据数仓建设性能优化方案

摘要:对于阿里云大数据数仓建设性能优化而言,主要可以从调度优化.模型优化.同步优化以及任务优化这四个方面着手.其实,对于性能优化而言,最终还是会归结到"资源"之上,所以资源是否足够,分配是否合理也是我们在进行性能优化时必须考虑的关键所在. 本文将主要围绕以下四个方面进行介绍:调度优化.模型优化.同步优化以及任务优化.对于调度优化而言,将分享任务调度如何进行优化,以及如何看到调度的瓶颈点,以及在初步进行建设和使用数据仓库的任务之后,对于任务如何进行调整来满足业务的时间要求.对于模型优化而

DeviceDelegateHelper.m

// //  DeviceDelegateHelper.m //  ECSDKDemo_OC // //  Created by jiazy on 14/12/5. //  Copyright (c) 2014年 ronglian. All rights reserved. // #import "DeviceDelegateHelper.h" #import "EmojiConvertor.h" #define LOG_OPEN 0 @interface Devi

php 环信 接口的例子

<?php class Hxcall{ private $app_key = 'yunjiankang#medical'; private $client_id = 'YXA6ARjBgDnxEeabYgu2ntsuFw'; private $client_secret = 'YXA6bW6DcFhnjwgAobVekEXRWqvWTb4'; private $url = "https://a1.easemob.com/yunjiankang/medical"; /* * 获取A

iOS 即时通讯容联云SDK的集成

  1.初始化及登陆 在程序入口初始化SDK并设置代理 - 代理类设置最好放在didFinishLaunchingWithOptions中,代码示例如下: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { #warning 设置代理 [ECDevice sharedInstance].delegate = [DeviceDel

hdu 5057 Argestes and Sequence (数状数组+离线处理)

题意: 给N个数.a[1]....a[N]. M种操作: S X Y:令a[X]=Y Q L R D P:查询a[L]...a[R]中满足第D位上数字为P的数的个数 数据范围: 1<=T<= 501<=N, M<=1000000<=a[i]<=$2^{31}$ - 11<=X<=N0<=Y<=$2^{31}$ - 11<=L<=R<=N1<=D<=100<=P<=9 思路: 直接开tree[maxn][1

UPC 2224 Boring Counting (离线线段树,统计区间[l,r]之间大小在[A,B]中的数的个数)

题目链接:http://acm.upc.edu.cn/problem.php?id=2224 题意:给出n个数pi,和m个查询,每个查询给出l,r,a,b,让你求在区间l~r之间的pi的个数(A<=pi<=B,l<=i<=r). 参考链接:http://www.cnblogs.com/zj62/p/3558967.html #include <iostream> #include <cstdio> #include <cstring> #incl

hdu-3333 Turing Tree 离线区间+树状数组(区间不同数的和)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3333 题目大意: 给出一数组,以及m个查询区间,每次查询该区间不同数字的和.相同数字只加一次. 解题思路: 离线区间,按照区间右端点进行排序. 这样可以从左到右扫一遍,用尺取法一个一个将数字放入树状数组中. 如果这个数字已经在树状数组里面,记录之前的下标,再从树状数组中删去之前下标的这个数字,在当前下标添加该数字.这样可以保证每一步操作,都会使得树状数组中没有重复元素.这样可以直接用树状数组求不同

离线数仓和实时数仓架构与设计

原文地址:https://www.cnblogs.com/dajiangtai/p/11718779.html

SPOJ--K-query (线段树离线) 离线操作解决一下问题

K-query Given a sequence of n numbers a1, a2, ..., an and a number of k- queries. A k-query is a triple (i, j, k) (1 ≤ i ≤ j ≤ n). For each k-query (i, j, k), you have to return the number of elements greater than k in the subsequence ai, ai+1, ...,