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 不 ...
随机推荐
- NIO基础之Buffer
java.io 核心概念是流,即面向流的编程,在java中一个流只能是输入流或者输出流,不能同时具有两个概念. java.nio核心是 selector.Channel.Buffer ,是面向缓冲区( ...
- ribbon重试机制
我们使用Spring Cloud Ribbon实现客户端负载均衡的时候,通常都会利用@LoadBalanced来让RestTemplate具备客户端负载功能,从而实现面向服务名的接口访问. 下面的例子 ...
- 《移动Web前端高效开发实战》笔记1——静态布局在移动端上的自适应
1.整体缩放 整体缩放可以用在营销活动页,营销活动可能因为设计美观需求必须使用背景图片而非背景色,因此需要考虑背景图适应屏幕大小.开发者可以用320像素的宽度作为基础宽度(高度可以固定),然后通过计算 ...
- ios 12 xcode10 新升级的编译报错libstdc++.6.0.9 Multiple commands produce
问题一 编译报错 Showing Recent Messages :-1: Multiple commands produce '/Users/duning/Library/Developer/Xco ...
- java uuid第一次性能
在java中产生uuid的方式是使用java.util.UUID. UUID.randomUUID().toString(); 我在测试redis性能时,使用uuid产生测试数据,发现多线程测试red ...
- APP自动化测试
CTS工具,主要是基于Androidinstrumentation和JUnit测试原理推单元测试用例: Monkey用来对UI进行压力测试,伪随机的模拟用户的按键输入,触摸屏输入,手势输入等: ASE ...
- GetOpenFileName 选择文件夹的解决方法
某些环境下(如WIN PE)windows自带的选择文件夹api不能使用或者体验不佳.现在利用GetOpenFileName的回掉参数实现了选择文件夹选择功能. #include <Window ...
- HDU 5451 Best Solver(fibonacci)
感谢这道题让我复习了一遍线代,还学习了一些奇奇怪怪的数论. 令 二项展开以后根号部分抵消了 显然有 所以要求的答案是 如果n比较小的话,可以直接对二项式快速幂,但是这题n很大 这个问题和矩阵的特征值以 ...
- CDOJ 485 UESTC 485 Game (八数码变形,映射,逆cantor展开)
题意:八数码,但是转移的方式是转动,一共十二种,有多组询问,初态唯一,终态不唯一. 题解:初态唯一,那么可以预处理出012345678的所有转移情况,然后将初态对012345678做一个映射,再枚举一 ...
- x86,x64,i386,i686
x64其实就是64位, x86其实就是32位. 1. i386 适用于intel和AMD所有32位的cpu.以及via采用X86架构的32的cpu. intel平台包括8086,80286,80386 ...