luogu1903 【模板】分块/带修改莫队(数颜色)
莫队算法模板
推荐阅读这篇博客
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int n, m, bse, blc[10005], a[10005], qCnt, cCnt, qwq[10005], ans=0;
int cnt[10005];
char ss[5];
struct Query{
int xxx, yyy, pre, idx;
}q[10005];
struct Change{
int pos, val;
}c[1005];
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 add(int val){
if(++cnt[val]==1) ans++;
}
void del(int val){
if(--cnt[val]==0) ans--;
}
void work(int now, int i){
if(c[now].pos>=q[i].xxx && c[now].pos<=q[i].yyy){
del(a[c[now].pos]);
add(c[now].val);
}
swap(c[now].val, a[c[now].pos]);
}
void md(){
int l=1, r=0, now=0;
for(int i=1; i<=qCnt; 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--]);
while(now<q[i].pre) work(++now, i);
while(now>q[i].pre) work(now--, i);
qwq[q[i].idx] = ans;
}
}
int main(){
cin>>n>>m;
bse = sqrt(n);
for(int i=1; i<=n; i++){
scanf("%d", &a[i]);
blc[i] = (i - 1) / bse + 1;
}
while(m--){
scanf("%s", ss);
if(ss[0]=='Q'){
qCnt++;
scanf("%d %d", &q[qCnt].xxx, &q[qCnt].yyy);
q[qCnt].pre = cCnt;
q[qCnt].idx = qCnt;
}
else{
cCnt++;
scanf("%d %d", &c[cCnt].pos, &c[cCnt].val);
}
}
sort(q+1, q+1+qCnt, cmp);
md();
for(int i=1; i<=qCnt; i++)
printf("%d\n", qwq[i]);
return 0;
}
luogu1903 【模板】分块/带修改莫队(数颜色)的更多相关文章
- AC日记——【模板】分块/带修改莫队(数颜色) 洛谷 P1903
[模板]分块/带修改莫队(数颜色) 思路: 带修改莫队: (伏地膜xxy): 代码: #include <bits/stdc++.h> using namespace std; #defi ...
- 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)
莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...
- 【BZOJ】4129: Haruna’s Breakfast 树分块+带修改莫队算法
[题意]给定n个节点的树,每个节点有一个数字ai,m次操作:修改一个节点的数字,或询问一条树链的数字集合的mex值.n,m<=5*10^4,0<=ai<=10^9. [算法]树分块+ ...
- 【BZOJ】3052: [wc2013]糖果公园 树分块+带修改莫队算法
[题目]#58. [WC2013]糖果公园 [题意]给定n个点的树,m种糖果,每个点有糖果ci.给定n个数wi和m个数vi,第i颗糖果第j次品尝的价值是v(i)*w(j).q次询问一条链上每个点价值的 ...
- P1903 【模板】分块/带修改莫队(数颜色)
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...
- 洛谷 P1903 【模板】分块/带修改莫队(数颜色)
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...
- 洛谷 P1903 BZOJ 2120 清橙 A1274【模板】分块/带修改莫队(数颜色)(周奕超)
试题来源 2011中国国家集训队命题答辩 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...
- 【BZOJ-2453&2120】维护队列&数颜色 分块 + 带修莫队算法
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 653 Solved: 283[Submit][Status][Discuss] ...
- BZOJ2120 数颜色(带修改莫队)
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
随机推荐
- css文字与文本相关样式
css文字属性定义文本的字体系列,大小,加粗,风格和变形 font-family 设置字体系列 font-size 设置字体的尺寸 font-style ...
- mysql 中unsigned
整型的每一种都分有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类 ...
- Spring 设计原则
Spring 框架有四大原则(Spring所有的功能和设计和实现都基于四大原则): 1. 使用POJO进行轻量级和最小侵入式开发. 2. 通过依赖注入和基本接口编程实现松耦合. 3. 通过AOP和基于 ...
- 记录:swift学习笔记1-2
swift还在不断的更新做细微的调整,都说早起的鸟儿有虫吃,那么我们早点出发吧,趁着国内绝大多数的coder们还没有开始大范围普遍应用. 网上有些大神说:swift很简单!我不同意这个观点,假如你用h ...
- iOS开发 - Protocol协议及委托代理(Delegate)
因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但具体怎 ...
- EasyUI:Easyui parser的用法
Easyui的渲染机制是个比较坑的事情,在项目开发中,遇到需要等其渲染完成后处理一些事情,比如为联动的下拉框选中默认值,为某些表单元素自动填充值等!这就需要用到Easyui parser解析器了.官方 ...
- Java 继承与重写
1.类的继承 1)继承 父类:所有子类所共有的属性和行为 子类:子类所特有的属性和行为 通过extends关键字来实现类的继承 子类(Sub class)可以继承父类(Super class)的成员变 ...
- Android(java)学习笔记138:三重for循环的优化(Java面试题)
1. 首先我们看一段代码: for(int i=0;i<1000;i++){ for(int j=0;j<100;j++){ for(int k=0;k<10;k++){ testF ...
- coreData-Fetching Managed Objects
https://developer.apple.com/library/content/documentation/DataManagement/Conceptual/CoreDataSnippets ...
- 剑指offer22 栈的压入、弹出序列
写的一个代码,虽然正确通过了,但我觉得会报vector越界的错误 class Solution { public: bool IsPopOrder(vector<int> pushV,ve ...