博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ2120】—数颜色(带修莫队)
阅读量:5281 次
发布时间:2019-06-14

本文共 1443 字,大约阅读时间需要 4 分钟。

带修莫队版题

记录多记一维是第几次修改,记录一下修改之前是什么颜色就可以了

块大小不能开n\sqrt nn,那样复杂度没有变化

大概n23n^{\frac 2 3}n32或者n34n^{\frac 3 4}n43的时候最优

#include
using namespace std;#define ll long long#define pb push_backinline int read(){
char ch=getchar(); int res=0,f=1; while(!isdigit(ch)){
if(ch=='-')f=-f;ch=getchar();} while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=getchar(); return res*f;}const int N=10005,M=1000005;int blo,plc[N],col[N],n,m;struct ask{
int l,r,t,idx; friend inline bool operator <(const ask &a,const ask &b){
if(plc[a.l]!=plc[b.l])return plc[a.l]
=l&&p<=r)del(p); fr=col[p]; col[p]=to; if(p>=l&&p<=r)add(p);}inline void out(int i){
int p=q[i].x,to=q[i].y,fr=q[i].z; if(p>=l&&p<=r)del(p); col[p]=fr; if(p>=l&&p<=r)add(p);}inline void solve(){
l=1,r=0,t=0; for(int i=1;i<=qt;i++){
while(r
p[i].r)del(r--); while(l
p[i].l)add(--l); while(t
p[i].t)out(t--); ans[p[i].idx]=now; }}int main(){
n=read(),m=read(); for(int i=1;i<=n;i++)col[i]=read(); blo=sqrt(sqrt(n)),blo=blo*blo*blo; for(int i=1;i<=n;i++)plc[i]=(i-1)/blo+1; char op[3]; for(int i=1;i<=m;i++){
scanf("%s",op); int x=read(),y=read(); if(op[0]=='Q')p[++qt]=(ask){
x,y,tim,qt}; else q[++tim]=(upd){
x,y,0}; } sort(p+1,p+qt+1); solve(); for(int i=1;i<=qt;i++)cout<
<<'\n';}

转载于:https://www.cnblogs.com/stargazer-cyk/p/11145587.html

你可能感兴趣的文章
游标使用
查看>>
LLBL Gen Pro 设计器使用指南
查看>>
SetCapture() & ReleaseCapture() 捕获窗口外的【松开左键事件】: WM_LBUTTONUP
查看>>
Android 设置界面的圆角选项
查看>>
百度地图api服务端根据经纬度得到地址
查看>>
根据xml生成相应的对象类
查看>>
Android StageFrightMediaScanner源码解析
查看>>
springBoot 项目 jar/war打包 并运行
查看>>
HDU 1501 Zipper
查看>>
打包java程序生成exe
查看>>
八叉树
查看>>
poj 1129 搜索
查看>>
Git 远程仓库
查看>>
HttpClient的巨坑
查看>>
关于静态文本框透明度的问题
查看>>
海量数据、高并发的优化方案
查看>>
javascript的发展及个人笔记
查看>>
全选,反全选,反选,获取选中的值,根据子选择控制全选按钮
查看>>
梦断代码读后感01
查看>>
[CF#250 Div.2 D]The Child and Zoo(并查集)
查看>>