当前位置: 首页 > news >正文

合肥html5网站建设搜狗官方网站

合肥html5网站建设,搜狗官方网站,银行网站模板免费下载,中国建设银行手机网站[SDOI2009] HH的项链 题目描述 HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来…

[SDOI2009] HH的项链

题目描述

HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。

有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答…… 因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。

输入格式

一行一个正整数 nnn,表示项链长度。
第二行 nnn 个正整数 aia_iai,表示项链中第 iii 个贝壳的种类。

第三行一个整数 mmm,表示 HH 询问的个数。
接下来 mmm 行,每行两个整数 l,rl,rl,r,表示询问的区间。

输出格式

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

样例 #1

样例输入 #1

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

样例输出 #1

2
2
4

提示

【数据范围】

对于 20%20\%20% 的数据,1≤n,m≤50001\le n,m\leq 50001n,m5000
对于 40%40\%40% 的数据,1≤n,m≤1051\le n,m\leq 10^51n,m105
对于 60%60\%60% 的数据,1≤n,m≤5×1051\le n,m\leq 5\times 10^51n,m5×105
对于 100%100\%100% 的数据,1≤n,m,ai≤1061\le n,m,a_i \leq 10^61n,m,ai1061≤l≤r≤n1\le l \le r \le n1lrn

本题可能需要较快的读入方式,最大数据点读入数据约 20MB



解析:

第一眼是莫队,一看数据范围是 10610^6106,莫队估计是不行了。

点开标签,有可持久化线段树,那就用主席树做吧。

每个版本的主席树维护的是前缀和中的信息。对于数字 aia_iai,版本 rtrtrt 维护的是左侧距离 rtrtrt 最近的 aia_iai

对于 aia_iai,如果之前 aia_iai 未出现,进行一次修改即可;如果之前出现了,先删掉上一个 aia_iai,在把当前 aia_iai 加进去

对于询问 (l,r)(l,r)(l,r),在版本为 rrr 的主席树内查询 [l,n][l,n][l,n] 中数的个数。在每个版本中,一个数最多出现一次,因此可以实现查询。

输入和输出用快读和快写。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define fi first
#define se second
const int maxn = 1e6+10;
const int INF = 0x3f3f3f3f;
typedef pair<int, int> pii;struct node{int ls, rs, sum;	
}t[maxn * 36];
int tot, n, m, a[maxn], las[maxn], root[maxn];
void build(int &rt, int l, int r){rt = ++tot;if(l == r)return;int mid = (l+r) >> 1;build(t[rt].ls, l, mid);build(t[rt].rs, mid+1, r);	
}
void update(int &rt, int pre, int l, int r, int pos, int v){rt = ++tot;t[rt].ls = t[pre].ls; t[rt].rs = t[pre].rs, t[rt].sum = t[pre].sum + v;if(l == r && l == pos)return;int mid = (l+r) >> 1;if(pos <= mid)update(t[rt].ls, t[pre].ls, l, mid, pos, v);elseupdate(t[rt].rs, t[pre].rs, mid+1, r, pos, v);
}
int query(int k, int l, int r, int pos){if(l == r)return t[k].sum;int mid = (l+r) >> 1;if(pos <= mid)return query(t[k].ls, l, mid, pos) + t[t[k].rs].sum;elsereturn query(t[k].rs, mid+1, r, pos);
}
int read() {int x = 0, f = 1;char c = getchar();while(c<'0' || c>'9'){if(c == '-') f = -1;c = getchar();}while(c>='0' && c<='9') {x = x*10 + c-'0';c=getchar();}		return x*f;
}
void write(int x) {if(x < 0) putchar('-'), x = -x;if(x > 9) write(x/10);putchar(x%10 + '0');
}
int main(){n = read();build(root[0], 1, n);for(int i = 1; i <= n; i++){a[i] = read();if(las[a[i]] != 0){int tmp; update(tmp, root[i-1], 1, n, las[a[i]], -1);update(root[i], tmp, 1, n, i, 1);}elseupdate(root[i], root[i-1], 1, n, i, 1);		las[a[i]] = i;}m = read();while(m--){int l, r;l = read(); r = read();int res = query(root[r], 1, n, l);write(res); putchar('\n');}return 0;
}
http://www.hkea.cn/news/521251/

相关文章:

  • 网站建设如何提案万网域名注册信息查询
  • 创意二维码制作网站企业网络营销推广案例
  • 论坛型网站怎么做百度高级检索入口
  • 做百度移动网站排搜素引擎优化
  • 公司创建一个网站需要多少钱想做百度推广找谁
  • 做文献ppt模板下载网站有哪些常德政府网站
  • 青岛网站建设公司排行外链工具在线
  • 网站怎么做显得简洁美观seo数据是什么意思
  • 阿里巴巴开通诚信通后网站怎么做网络优化网站
  • 东莞手机网站价格便宜个人免费建站软件
  • 电子商务网站建设的步骤一般为百度100%秒收录
  • 做企业网站怎么样免费的推广软件下载
  • 拓普网站建设美国搜索引擎
  • 网站开发者工资冯耀宗seo视频教程
  • 软件开发各阶段工作量比例搜索引擎优化的基础是什么
  • 网站怎么做才能将名声打响云搜索app
  • 南阳做网站优化哪家好一级域名生成二级域名
  • 3322动态域名官网郑州seo联系搜点网络效果好
  • 网络营销渠道的类型河北seo基础教程
  • 做微信网站多少钱seo内部优化包括哪些内容
  • 中国城乡建设网站网络优化公司排名
  • 个人网站做淘宝客教程torrentkitty磁力搜索引擎
  • 广州北京网站建设seo培训讲师招聘
  • 手机上免费自己做网站网络营销案例分享
  • 长沙大型网站建设谷歌账号
  • 大兴德艺网站建设发布悬赏任务的推广平台
  • html5制作网站模板百度产品大全首页
  • 贵阳网站建设贵阳百度推广怎么推广
  • 瓮安建设局网站google play三件套
  • 大型门户网站模板营销神器