POJ2777线段树
来源:互联网 发布:怎么清楚手机应用数据 编辑:程序博客网 时间:2024/05/27 09:48
C A B C:区间【A,B】内涂上颜色C。
P A B:查询区间【A,B】内颜色种类数。
import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.StringTokenizer;public class Main {public static void main(String[] args) {new Task().solve() ;}}class Task{InputReader in = new InputReader(System.in) ;PrintWriter out = new PrintWriter(System.out) ;void solve(){int L = in.nextInt() ;in.nextInt() ;int O = in.nextInt() ;add = new int[L<<2] ;sum = new int[L<<2] ;build(1 , L , 1) ;while(O-- > 0){char type = in.next().charAt(0) ;int l = in.nextInt() ;int r = in.nextInt() ;if(l > r){int oo = l ;l = r ;r= oo ;}if('C' == type) update(l , r , in.nextInt() , 1 , L , 1) ;else out.println(Integer.bitCount(query(l , r , 1 , L , 1))) ;} out.flush() ; }int[] add , sum ;void up(int t){sum[t] = sum[t<<1] | sum[t<<1|1] ;}void down(int t){if(add[t] > 0){add[t<<1] = add[t<<1|1] = sum[t<<1] = sum[t<<1|1] = add[t] ;add[t] = 0 ;}}void build(int l , int r , int t){add[t] = 0 ;sum[t] = 1 ;if(l == r) return ;int mid = (l + r) >> 1 ;build(l , mid , t<<1) ;build(mid+1 , r , t<<1|1) ;up(t) ;}void update(int L , int R , int c , int l , int r , int t){if(L <= l && r <= R){add[t] = sum[t] = 1 << (c-1) ;return ;}down(t) ;int mid = (l + r) >> 1 ;if(L <= mid) update(L , R , c , l , mid , t<<1) ;if(R > mid) update(L , R , c , mid+1 , r , t<<1|1) ;up(t) ; }int query(int L , int R , int l , int r , int t){if(L <= l && r <= R) return sum[t] ;down(t) ; int ret = 0 ;int mid = (l + r) >> 1 ;if(L <= mid) ret |= query(L , R , l , mid , t<<1) ;if(R > mid) ret |= query(L , R , mid+1 , r , t<<1|1) ;return ret ; }}class InputReader { public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream) { reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = new StringTokenizer(""); } private void eat(String s) { tokenizer = new StringTokenizer(s); } public String nextLine() { try { return reader.readLine(); } catch (Exception e) { return null; } } public boolean hasNext() { while (!tokenizer.hasMoreTokens()) { String s = nextLine(); if (s == null) return false; eat(s); } return true; } public String next() { hasNext(); return tokenizer.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } public long nextLong() { return Long.parseLong(next()); } public double nextDouble() { return Double.parseDouble(next()); } public BigInteger nextBigInteger() { return new BigInteger(next()); } }
0 0
- 线段树模板 poj2777
- POJ2777---线段树
- 线段树-POJ2777
- POJ2777(线段树)
- poj2777线段树
- poj2777 线段树
- poj2777(线段树)
- POJ2777线段树....
- POJ2777线段树
- poj2777(线段树)
- POJ2777【线段树】
- POJ2777 Count Color 线段树
- 线段树典型例题--poj2777
- 【poj2777】【线段树】Count Color
- poj2777线段树+lazy思想
- poj2777(延迟更新+线段树)
- 线段树区间更新poj2777
- 线段树 POJ2777 && 一些体会
- 进阶篇:3.8)热锻件设计指南
- vue项目中使用jQuery
- 【b804】双栈排序
- Java--Mac下JDK的安装路径
- C++工程师面试宝典系列之MFC开发
- POJ2777线段树
- 架构设计:系统间通信(18)——服务治理与Dubbo 下篇(继续分析)
- 微信小程序之相册选择,拍照
- SpringMVC提交参数绑定list时,默认配置如果list大小超过256,就会报错
- Android下打印调试堆栈方法
- Android技术之APP彻底退出
- Bootloader学习一
- 73. Set Matrix Zeroes
- Android-Touch-GestureDetector