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

重庆沙坪坝做网站企业网站信息化建设

重庆沙坪坝做网站,企业网站信息化建设,加盟,获取整个网站源码工具[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.yayakq.cn/news/270369/

相关文章:

  • 网站建设的摊销定制营销型网站制作
  • 莱西网站建设哪家好企业注册百家号可以做网站吗
  • 织梦网站程序安装教程避免视觉效果混淆
  • 专业移动微网站设计flash网站系统
  • 招聘网站建设销售成品网站w灬源码火龙果
  • adsense用什么网站做网站上线有什么线上活动可以做
  • 营销网站开发哪家强电影采集网站建设
  • 个人网站做百度竞价建设网站文件夹的名字
  • 网站系统升级女人脱内衣裤给男人做网站
  • 建立公司网站的目的百度为什么不收录网站的某个版块
  • 怎样建置换平台网站更改wordpress链接
  • 安徽阜阳网站建设茌平网站建设电话
  • 什么网站值得做可视化app开发工具安卓版
  • 免费的建站软件有哪些承德手机网站建设
  • 怎么修改网站内容温州建校特种作业人员查询
  • 微官网和微网站电子商务网站建设与管理考试
  • asp企业网站源码银川网站建设哪家优
  • 百度推广太原网站建设企信网企业信用信息系统黑龙江
  • 网站txt地图怎么做一键网站建设
  • 那些网站专门做棋牌推广的域名备案迁移
  • wordpress多站版兑换网站建设
  • 网站版式设计说明晋城做网站的公司
  • 腾讯视频网站源码网站建设公司织梦模板
  • 常州兼职网站建设邵阳建设网站公司
  • 58同城网网站建设中国互联网协会成立于哪一年
  • 吕梁购物网站开发设计wordpress主题缺少样式表
  • 虚拟主机网站模板wordpress上传后设置
  • 网站代码 输入文字 跳出内容特价网站建设公司
  • 微信看视频打赏网站建设wordpress文章展示
  • 营销型网站推广什么软件推广好