JZOJ 4603 颜料大乱斗【NOIP2016提高A组模拟7.15】
2016-07-15 19:28
351 查看
颜色大乱斗
题目描述
输入格式
输出格式
样例输入
2 2 4C 1 1 2
P 1 2
C 2 2 2
P 1 2
样例输出
21
数据范围
题解
这一题,题目要求维护加询问区间,那我们种30棵线段树维护一段区间中每种颜色的种类数即可。记得在打线段树时加上懒惰迁移。
统计答案和更新区间以及懒惰标记下传时,只需用c的时间去做就可以了,反正时间复杂度不会太大。
Code(Pascal)
const kt=1; var ch:char; tj:array[0..100] of longint; n,c,m,i,j,k,l,o,p,ans,x,y,t,u:longint; la:array[0..300000] of longint; tr:array[0..300000,0..30] of longint; procedure jl(o,l,r:longint); var mid:longint; begin tr[o,kt]:=r-l+1; if l=r then exit; mid:=(l+r) div 2; jl(o*2,l,mid); jl(o*2+1,mid+1,r); end; procedure draw(o,l,r,ll,rr,cqy:longint); var ls,rs,i,mid:longint; begin mid:=(l+r) div 2; ls:=O*2; rs:=ls+1; if (l=ll) and (r=rr) then begin la[o]:=cqy; for i:=kt to c do tr[o,i]:=0; tr[o,cqy]:=r-l+1; exit; end; if la[o]>0 then begin for i:=kt to c do begin tr[ls,i]:=0; tr[rs,i]:=0; end; tr[ls,la[o]]:=mid-l+1; tr[rs,la[o]]:=r-mid; la[ls]:=la[o]; la[rs]:=la[o]; la[o]:=0; end; if rr<=mid then draw(ls,l,mid,ll,rr,cqy) else if ll>mid then draw(rs,mid+1,r,ll,rr,cqy) else begin draw(ls,l,mid,ll,mid,cqy); draw(rs,mid+1,r,mid+1,rr,cqy); end; for i:=kt to c do tr[o,i]:=tr[ls,i]+tr[rs,i]; end; procedure cx(o,l,r,ll,rr:longint); var ls,rs,mid,i:longint; begin if (l=ll) and (r=rr) then begin for i:=kt to c do tj[i]:=tj[i]+tr[o,i]; exit; end; mid:=(l+r) div 2; ls:=o*2; rs:=ls+1; if la[o]>0 then begin for i:=kt to c do begin tr[ls,i]:=0; tr[rs,i]:=0; end; tr[ls,la[o]]:=mid-l+1; tr[rs,la[o]]:=r-mid; la[ls]:=la[o]; la[rs]:=la[o]; la[o]:=0; end; if rr<=mid then cx(ls,l,mid,ll,rr) else if ll>mid then cx(rs,mid+1,r,ll,rr) else begin cx(ls,l,mid,ll,mid); cx(rs,mid+1,r,mid+1,rr); end; for i:=kt to c do tr[o,i]:=tr[ls,i]+tr[rs,i]; end; begin readln(n,c,m); jl(1,1,n); for i:=1 to m do begin read(ch); if ch='C' then begin readln(x,y,t); if x>y then begin u:=x; x:=y; y:=u; end; draw(1,1,n,x,y,t); end else begin readln(x,y); if x>y then begin u:=x; x:=y; y:=u; end; for l:=kt to c do tj[l]:=0; cx(1,1,n,x,y); ans:=0; for l:=kt to c do if tj[l]>0 then inc(ans); writeln(ans); end; end; end.
相关文章推荐
- 程序开发圣经
- vijos1782——借教室(noip2012)
- 开发板的烧录
- 视频 -> 帧 浅析
- mongodb 分片集群中加入新的config servers
- Android AlarmManager的一些问题
- 黑苹果实战安装经历
- 基本数据类型总结
- hdu5655-BestCoder Round #78 (div.2)
- 线程与进程的区别
- c#——Winform PropertyGrid使用
- 依赖倒置原则详解--七大面向对象设计原则(3)
- 安卓手机测试常见BUG
- [Leetcode]303. Range Sum Query - Immutable
- 【poj2741】 Colored Cubes
- 【NOIP模拟】修路
- POJ 1062 昂贵的聘礼
- 【POJ3277】City Horizon,线段树
- JZOJ1732. 消息传播
- 《编程之法》1.3字符串的全排列,组合,重复排列,八皇后问题