莫队裸题还不带修改

#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的项链的更多相关文章

  1. BZOJ 1878: [SDOI2009]HH的项链

    1878: [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3548  Solved: 1757[Submit][Statu ...

  2. 【BZOJ1878】[SDOI2009]HH的项链 离线BIT

    1878: [SDOI2009]HH的项链 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义 ...

  3. BZOJ 1878: [SDOI2009]HH的项链 离线树状数组

    1878: [SDOI2009]HH的项链 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  4. Bzoj 1878: [SDOI2009]HH的项链 莫队

    1878: [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2717  Solved: 1363[Submit][Statu ...

  5. BZOJ 1878: [SDOI2009]HH的项链( BIT )

    离线处理 , 记下询问的左右端点并排序 , 然后可以利用树状数组 , 保证查询区间时每种颜色只计算一次 ------------------------------------------------ ...

  6. 洛谷 P1972 [SDOI2009]HH的项链【莫队算法学习】

    P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...

  7. BZOJ_1878_[SDOI2009]HH的项链_莫队

    BZOJ_1878_[SDOI2009]HH的项链_莫队 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考 ...

  8. bzoj千题计划181:bzoj1878: [SDOI2009]HH的项链

    http://www.lydsy.com/JudgeOnline/problem.php?id=1878 之前用莫队做的,现在用树状数组 把每种数的第一个出现位置在树状数组中+1 nxt[i] 记录i ...

  9. 洛谷P1972 [SDOI2009]HH的项链 题解

    [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...

随机推荐

  1. JAVA基础之基本类型包装类、System类、Math类、Arrays类及大数据运算

    个人理解: 为了方便运算及调用一些方法,我们需要将基本类型的数值转换为对象:不过转换的时候需要特别注意好它们的类型到底是什么,需要调用方法的类名是哪个!特别注意是Byte常量池的相关问题(==):gc ...

  2. Swing编程概述

    Swing作为AWT组件的“强化版”,它的产生主要是为了克服AWT构建的GUI,无法在所有平台都通用的问题.允许编程人员跨平台时指定统一的GUI显示风格也是Swing的最大优势.Swing是AWT的补 ...

  3. css position 定位模式

     定位 定位模式: static relative absolute fixed 边偏移 :top bottom left right 一般的定位必须要有定位模式以及边偏移 static 静态定位 默 ...

  4. 洛谷P3959 宝藏(模拟退火乱搞)

    题意 题目链接 题面好长啊...自己看吧.. Sol 自己想了一个退火的思路,没想到第一次交85,多退了几次就A了哈哈哈 首先把没用的边去掉,然后剩下的边从小到大排序 这样我们就得到了一个选边的序列, ...

  5. Vue的computed和methods区别

    1,computed里面定义的方法是以属性的方式(当然也可以以函数调用的方式)出现在html里面,而methods里面定义的方法是以函数的方式: 2,computed依赖于data里面的数据,只有相关 ...

  6. MySQL查询优化方法总结

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...

  7. 【Python图像特征的音乐序列生成】GitHub已经有人将mingus改到了Python3版本

    https://github.com/bspaans/python-mingus/issues/45 注意此时的安装方法应该是: git clone https://github.com/edudob ...

  8. python基础教程总结2——字符串

    1.基本操作 序列操作:索引,分片,乘法,判断成员资格,长度,最值...... 注:字符串不可变,分片赋值不合法 2.字符串格式化 模板 格式化字符串时,Python使用一个字符串作为模板.模板中有格 ...

  9. 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧

    Jerry和SAP成都研究院一些新同事聊天时,谈到ABAP和SAP GUI这个话题.很多新同事在加入SAP成都之前,是做Java和C++开发的,习惯了Eclipse/IntelliJ IDEA/Vis ...

  10. cluvfy stage命令用法

    1.获取集群验证工具cluvfy的帮助信息 grid@rac1:/home/grid>cluvfy -help USAGE: cluvfy [ -help ] cluvfy stage { -l ...