【bzoj2120】[国家集训队]数颜色[莫队]
时间:2019-09-06
本文章向大家介绍【bzoj2120】[国家集训队]数颜色[莫队],主要包括【bzoj2120】[国家集训队]数颜色[莫队]使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
[国家集训队]数颜色
我TM!!!!又因为数组开小了调了两个小时!!!!!!
带修莫队 只是在普通莫队上加了一个时间 然后就和普通莫队操作差不多
bzoj上直接块大小为\(\sqrt{n}\)就能过 洛谷上加了这个块的的大小只能过6个点 ==吸氧过了
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define Abs(x) ((x)<0?-(x):(x))
#define ls (o<<1)
#define rs (o<<1|1)
const int N=150000+5,M=1e6+5,inf=0x3f3f3f3f;
int n,m,block,a[N],b[N],cnt[M],ans[N];
template <class t>void rd(t &x){
x=0;int w=0;char ch=0;
while(!isdigit(ch)) w|=ch=='-',ch=getchar();
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
x=w?-x:x;
}
int cq=0,cm=0;
struct quer{int l,r,tim,id;}q[N];
struct mdf{int pos,co,pre;}md[N];
bool cmp(quer A,quer B){
// return A.bl==B.bl?(A.r==B.r?A.tim<B.tim:A.r<B.r):A.bl<B.bl;
if(A.l/block!=B.l/block)return A.l/block<B.l/block;
if(A.r/block!=B.r/block)return A.r/block<B.r/block;
return A.tim<B.tim;
}
int main(){
// freopen("in.txt","r",stdin);
rd(n),rd(m),block=sqrt(n);
for(int i=1;i<=n;++i) rd(a[i]),b[i]=a[i];
for(int i=1;i<=m;++i){
char opt[2];int x,y;
scanf("%s",opt);rd(x),rd(y);
if(opt[0]=='Q') q[++cq]=(quer){x,y,cm,cq};
else md[++cm]=(mdf){x,y,b[x]},b[x]=y;
}
block=ceil(exp((log(n)+log(cq))/3));//分块大小
sort(q+1,q+cq+1,cmp);
for(int i=1;i<=n;++i) b[i]=a[i];
int l=1,r=0,tim=0,nw=0;
for(int i=1,ql,qr,qt;i<=cq;++i){
ql=q[i].l,qr=q[i].r,qt=q[i].tim;
while(l<ql) nw-=!(--cnt[a[l++]]);
while(l>ql) nw+=!cnt[a[--l]]++;
while(r<qr) nw+=!cnt[a[++r]]++;
while(r>qr) nw-=!(--cnt[a[r--]]);
while(tim<qt){
if(ql<=md[++tim].pos&&md[tim].pos<=qr) nw-=!(--cnt[a[md[tim].pos]])-!cnt[md[tim].co]++;
swap(a[md[tim].pos],md[tim].co);
}
while(tim>qt){
if(ql<=md[tim].pos&&md[tim].pos<=qr)
nw-=!(--cnt[a[md[tim].pos]])-!cnt[md[tim].co]++;
swap(a[md[tim].pos],md[tim].co),--tim;
}
ans[q[i].id]=nw;
}
for(int i=1;i<=cq;++i) printf("%d\n",ans[i]);
return 0;
}
原文地址:https://www.cnblogs.com/lxyyyy/p/11463383.html
- “正在注册字体”问题解决
- linux下安装php的swoole扩展模块(安装后php加载不出来?)
- linux下查询域名或IP注册信息的操作记录(whois)
- 域名资讯:多枚区块链域名结拍,区块链概念火热
- 一批好米交易:qrf.com15.4万元结拍
- mysql主从同步(2)-问题梳理
- 老丁独家!前方高能,与“程序崩溃”的第一次邂逅!
- 微信可接收火车购票、退票及改签等通知啦!别忘了,春运火车票下周开售!
- 如何用SPSS分析问卷?用SPSS分析调查问卷数据的方法
- 【5】基于Log4Net的日志系统
- VMware vSphere虚拟化-VMware ESXi 5.5组件安装过程记录
- 淘宝iOS端圣诞节雪花实现分析
- 【6】页面数据和控件的自动交换机制
- silverlight版的图片轮换广告
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一起来学演化计算-matlab优化函数fminunc
- 一起来学matlab-matlab学习笔记10 10_1一般运算符
- 每日手撕一道算法题-20. 有效的括号
- 一起来学matlab-数组取值 MATLAB中的字符串符号
- 递归解决遍历问题
- PHP中的include和require
- 一起来学matlab-matlab学习笔记10 10_2一般操作符和数据显示格式
- 一起来学matlab-matlab学习笔记10 10_3关系运算符和逻辑运算符
- 一篇文章学懂Shell脚本,最简明的教程在这里
- 一起来学matlab-matlab学习笔记10 10_5 通用字符串操作和比较函数
- 一个案例彻底弄懂如何正确使用 mysql inndb 联合索引
- 一起来学matlab-matlab学习笔记11 11_2 高维数组处理和运算 squeeze, ind2sub, sub2ind
- matlab结构体 rmfield,arrayfun,structfun,struct2cell,cell2struct
- PHP函数参数传递方法的具体改进技巧
- matlab学习笔记11_3 高维数组处理 filp, shiftdim, size, permute, ipermute