2024.10.4 2018-2019 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2018)
Solved:7/11
Penalty:914
Rank:1/74
Rank(vp):63/1k+
Dirt:22%
G
答案是4*纯色块数+5。
考虑怎么维护这个纯色块数。
这道题的修改保证了一个块纯色当且仅当其行列都纯色。
因此对行列分别维护一棵线段树,维护每一层分别有多少个纯色节点,按层乘起来相加就行。
K
1 操作的增加量是单点修改矩阵求和,2 操作的增加量是矩阵修改单点求和。
经典三维偏序。因为空间限制只有 256M 所以不能开线段树套线段树(能开也不写这玩意
在这存一个写的比较清楚的cdq分治的板子。
struct que{ int x,y,id,typ; bool left; bool operator<(const que& q)const{ return x<q.x||x==q.x&&id<q.id; } }q[N*4],tq[N*4]; ll ans[N]; int c[N*4]; void upd(int x,int y){ for(;x<=tot;x+=x&-x)c[x]+=y; } int qry(int x){ int res=0; for(;x;x-=x&-x)res+=c[x]; return res; } void solve1(int l,int r){ if(l==r)return; int mid=(l+r)>>1; for(int i=l;i<=mid;++i)tq[i]=q[i],tq[i].left=1; for(int i=mid+1;i<=r;++i)tq[i]=q[i],tq[i].left=0; sort(tq+l,tq+r+1); for(int i=l;i<=r;++i){ if(tq[i].left&&!tq[i].typ)upd(tq[i].y,1); if(!tq[i].left&&tq[i].typ)ans[tq[i].id]+=qry(tq[i].y)*tq[i].typ; } for(int i=l;i<=r;++i){ if(tq[i].left&&!tq[i].typ)upd(tq[i].y,-1); } solve1(l,mid); solve1(mid+1,r); } void solve2(int l,int r){ if(l==r)return; int mid=(l+r)>>1; for(int i=l;i<=mid;++i)tq[i]=q[i],tq[i].left=1; for(int i=mid+1;i<=r;++i)tq[i]=q[i],tq[i].left=0; sort(tq+l,tq+r+1, [](que a,que b){return a.x>b.x||a.x==b.x&&a.id<b.id;} ); for(int i=l;i<=r;++i){ if(tq[i].left&&tq[i].typ)upd(tq[i].y,tq[i].typ); if(!tq[i].left&&!tq[i].typ)ans[tq[i].id]+=qry(tot)-qry(tq[i].y-1); } for(int i=l;i<=r;++i){ if(tq[i].left&&tq[i].typ)upd(tq[i].y,-tq[i].typ); } solve2(l,mid); solve2(mid+1,r); }
我愿意追随你的轨迹,不远万里,不问归期
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现