莫队裸题还不带修改

#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. 模态框的理解 ,jQ: loading,进度条, 省级联动 表单验证 插件

    模态框: 打开一个弹框 不关闭它就不能做框外的操作 必须关闭或弹出另外的弹框 加载延迟loading + 进度条只要有请求 就处理一下监控ajax 全局事件jquery: $('#box').ajax ...

  2. $'\r': command not found 或者 syntax error: unexpected end of file 或者 syntax error near unexpected token `$'\r''

    执行shell脚本如果报如下错误: syntax error near unexpected token `$'\r'' syntax error: unexpected end of file $' ...

  3. jsp之获传统方式取后台数据

    1.建立模型对象: package com.java.model; public class Student { private String name; private int age; publi ...

  4. 51nod 1191 消灭兔子

    题目来源: 2013腾讯马拉松赛第三场 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有N只兔子,每只有一个血量B[i],需要用箭杀死免子.有M种不同类型的箭可以 ...

  5. python爬虫之路——初识基本页面构造原理

    通过chrome浏览器的使用简单介绍网页构成 360浏览器使用右键审查元素,Chrome浏览器使用右键检查,都可查看网页代码. 网页代码有两部分:HTML文件和CSS样式.其中有<script& ...

  6. EF6.0注意事项

    EF6 1.必须要添加Entitiframework 2.必须要添加必须要添加Entitiframework.Sqlserver 3.单元测试一定要有配置文件里面一定要有连接字符串和初始化配置文件节点 ...

  7. Problem O: 国家排序

    Problem O: 国家排序 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 405  Solved: 253[Submit][Status][Web ...

  8. cityspace

    类别的网址:https://blog.csdn.net/u010069760/article/details/77847595 r,g,b:  250 170 160 parking   244 35 ...

  9. DROP GROUP - 删除一个用户组

    SYNOPSIS DROP GROUP name DESCRIPTION 描述 DROP GROUP 从数据库中删除指定的组.组中的用户不被删除. 组中的用户不被删除. PARAMETERS 参数 n ...

  10. ovs的学习

    本来编辑好了的, 结果忘了保存, 坑爹,直接把人家的网址贴上来吧 http://blog.chinaunix.net/uid-20737871-id-4333314.html 昨天遇到一个问题(虚拟机 ...