luogu1972 [SDOI2009]HH的项链
莫队裸题还不带修改
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int n, m, qcnt, ans, col[1000005], bse, blc[50005], a[50005], qwq[200005];
struct Query{
int xxx, yyy, idx;
}q[200005];
bool cmp(Query u, Query v){
if(blc[u.xxx]==blc[v.xxx]) return u.yyy<v.yyy;
else return blc[u.xxx]<blc[v.xxx];
}
void del(int x){
if(--col[x]==0) ans--;
}
void add(int x){
if(++col[x]==1) ans++;
}
void md(){
int l=1, r=0;
for(int i=1; i<=m; i++){
while(l<q[i].xxx) del(a[l++]);
while(l>q[i].xxx) add(a[--l]);
while(r<q[i].yyy) add(a[++r]);
while(r>q[i].yyy) del(a[r--]);
qwq[q[i].idx] = ans;
}
}
int main(){
cin>>n;
bse = sqrt(n);
for(int i=1; i<=n; i++){
scanf("%d", &a[i]);
blc[i] = (i - 1) / bse + 1;
}
cin>>m;
for(int i=1; i<=m; i++){
scanf("%d %d", &q[i].xxx, &q[i].yyy);
q[i].idx = i;
}
sort(q+1, q+1+m, cmp);
md();
for(int i=1; i<=m; i++)
printf("%d\n", qwq[i]);
return 0;
}
也可以考虑维护一个pre,代表每个颜色的前面的出现的位置,然后树状数组
#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
int pre[1000005], n, m, cnt, lst=1, c[50005];
struct Point{
int pr, co;
}pnt[50005];
struct Ques{
int ll, rr, lask, rask;
}qu[200005];
struct Asks{
int lc, li, ans, id;
}ak[400005];
bool cmp1(Asks x, Asks y){
return x.lc<y.lc;
}
bool cmp2(Asks x, Asks y){
return x.id<y.id;
}
int lowbit(int x){
return x & -x;
}
void add(int pos){
if(!pos){
c[pos]++;
return ;
}
while(pos<=n){
c[pos]++;
pos += lowbit(pos);
}
}
int query(int pos){
int re=0;
while(pos){
re += c[pos];
pos -= lowbit(pos);
}
return re+c[0];
}
int main(){
cin>>n;
for(int i=1; i<=n; i++){
scanf("%d", &pnt[i].co);
pnt[i].pr = pre[pnt[i].co];
pre[pnt[i].co] = i;
}
cin>>m;
for(int i=1; i<=m; i++){
scanf("%d %d", &qu[i].ll, &qu[i].rr);
ak[++cnt] = (Asks){qu[i].ll-1, qu[i].ll-1, 0, cnt};
ak[++cnt] = (Asks){qu[i].rr, qu[i].ll-1, 0, cnt};
qu[i].lask = cnt - 1;
qu[i].rask = cnt;
}
sort(ak+1, ak+1+cnt, cmp1);
for(int i=1; i<=cnt; i++){
while(lst<=ak[i].lc){
add(pnt[lst].pr);
lst++;
}
ak[i].ans = query(ak[i].li);
}
sort(ak+1, ak+1+cnt, cmp2);
for(int i=1; i<=m; i++)
printf("%d\n", ak[qu[i].rask].ans-ak[qu[i].lask].ans);
return 0;
}
luogu1972 [SDOI2009]HH的项链的更多相关文章
- BZOJ 1878: [SDOI2009]HH的项链
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3548 Solved: 1757[Submit][Statu ...
- 【BZOJ1878】[SDOI2009]HH的项链 离线BIT
1878: [SDOI2009]HH的项链 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义 ...
- BZOJ 1878: [SDOI2009]HH的项链 离线树状数组
1878: [SDOI2009]HH的项链 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- Bzoj 1878: [SDOI2009]HH的项链 莫队
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2717 Solved: 1363[Submit][Statu ...
- BZOJ 1878: [SDOI2009]HH的项链( BIT )
离线处理 , 记下询问的左右端点并排序 , 然后可以利用树状数组 , 保证查询区间时每种颜色只计算一次 ------------------------------------------------ ...
- 洛谷 P1972 [SDOI2009]HH的项链【莫队算法学习】
P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...
- BZOJ_1878_[SDOI2009]HH的项链_莫队
BZOJ_1878_[SDOI2009]HH的项链_莫队 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考 ...
- bzoj千题计划181:bzoj1878: [SDOI2009]HH的项链
http://www.lydsy.com/JudgeOnline/problem.php?id=1878 之前用莫队做的,现在用树状数组 把每种数的第一个出现位置在树状数组中+1 nxt[i] 记录i ...
- 洛谷P1972 [SDOI2009]HH的项链 题解
[SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...
随机推荐
- 微信开发 config:invalid url domain
当遇到config:invalid url domain 有2种可能 1.没有配置url. 2.url配置错误.配置url如http://write.blog.csdn.NET/,就要这样配置writ ...
- Android中的GreenDao框架修改数据库的存储路径
目前android中比较热门的数据库框架有greenDAO.OrmLite.AndrORM,其中我比较喜欢用GreenDao,其运行效率最高,内存消耗最少,性能最佳.具体怎么使用GreenDao,网上 ...
- [opencv bug] orb flannBaseMatcher Exception
when i use flannBaseMathcer to match 2 sets of orb descriptor, it occured an exception : unsigned lo ...
- uvm_reg_backdoor——寄存器模型(十)
寄存器有前门和后门两种访问方式,这儿只看后门访问方式 //----------------------------------------------------------------------- ...
- IM云服务领域,融云因何得以登上浪潮之巅?
每一次技术驱动下的商业变革都是以浪潮的形式到来,每一次的涨潮都会带着赶上浪潮的企业登上新的巅峰.随着移动互联网的融合发展,短短几年期间,IM通讯云服务从早期的虚无飘渺到如今已经成为现代企业的标配,引发 ...
- 使用Process组件访问本地进程
实现效果; 知识运用: Process组件的StartInfo属性 //获取或设置要传递给Process的Start方法的属性 public ProcessStartInfo StartInfo {g ...
- 2018.5.14 PHP基础学习
1.使用PHP输出HTML 使用PHP输出一个表格,并且通过style标签改变字体 <!--思考与练习--> <style type="text/css"> ...
- JavaScript 获取对象中第一个属性
使用 Object.keys(object) 可以取出属性名为数组,但会打乱顺序 严格意义上对象中是只有映射关系而没有顺序的,但是在存储结构里是有顺序的,如果想获取存储结构里的第一个属性可以使用for ...
- 生成gt数据出问题
使用cout打印uchar类型数据时,打印出来是其相应的ascii码
- Unity调用Windows窗口句柄,选择文件和目录
T:2019-6-25 10:06:59 C:Scatt Kang using System; using System.Collections; using System.Collections.G ...