HDU4902 线段树
来源:互联网 发布:山东二建继续教育网络 编辑:程序博客网 时间:2024/06/05 00:22
n个数,m个操作,
1 L R X :区间[L,R]的数同时置为X;
2 L R X :区间[L,R]大于X的数y,置为gcd(X,y)
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);int[] val ;void build(int l , int r, int t){val[t] = -1 ;if(l == r){val[t] = in.nextInt() ;return ; }int m = (l + r) >> 1 ;build(l, m, t<<1) ;build(m+1, r, t<<1|1) ;up(t) ;}void up(int t){if(val[t<<1] == val[t<<1|1]){val[t] = val[t<<1] ;}else{val[t] = -1 ;}}void down(int t){if(val[t] != -1){val[t<<1] = val[t<<1|1] = val[t] ;val[t] = -1 ;} }int gcd(int x , int y){return y == 0 ? x : gcd(y , x % y) ;}void update(int type , int L , int R , int x , int l , int r , int t){if(type == 1){if(L <= l && r <= R){val[t] = x ;return ;}}else{if(L <= l && r <= R && val[t] != -1){if(val[t] > x){val[t] = gcd(val[t] , x) ;}return ; }}down(t) ;int m = (l + r) >> 1 ;if(L <= m){update(type, L, R, x, l, m, t<<1) ;}if(R > m){update(type, L, R, x, m+1, r, t<<1|1) ;}up(t) ;}void query(int l , int r , int t){if(l == r){out.print(val[t] + " ") ;return ;}down(t) ;int m = (l + r) >> 1 ;query(l, m, t<<1);query(m+1, r, t<<1|1) ;}void solve() {int t = in.nextInt() ;while(t-- > 0){int n = in.nextInt() ;val = new int[n<<2] ;build(1, n, 1) ;int m = in.nextInt() ;while(m-- > 0){update(in.nextInt() , in.nextInt() , in.nextInt() , in.nextInt() , 1 , n , 1) ; }query(1 , n , 1) ;out.println() ;} out.flush();}}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
- hdu4902 线段树
- HDU4902 线段树
- 线段树lazy标记??Hdu4902
- hdu4902 线段树区间更新
- HDU4902(线段树)练习题
- HDU4902:Nice boat(线段树lazy)
- HDU4902-Nice boat(线段树)
- 入门题 _14多校—线段树 HDU4902 Nice boat
- 线段树特殊懒惰标记hdu3954(hdu4902)
- HDU4902巧妙分析避开线段树的使用
- hdu4902
- HDU4902 Nice Boat(14多校联合4-1006)线段树区间更新
- HDU4902 Nice boat
- 线段树?线段树!
- 线段树?线段树!
- 线段_线段树
- 线段_线段树
- 线段树
- LevelDB:一个快速轻量级的key-value存储库(译)
- EventBus使用详解(一)——初步使用EventBus
- C# DataTable 用法
- 高性能队列Disruptor的使用
- 反汇编下的字符运算
- HDU4902 线段树
- 【动态规划11】vijos1243生产产品(dp+单调队列)
- c语言,通过代码对指针的理解
- 设计模式之责任链模式
- 练习93
- MediaPlayer.java官方文档,非常详细
- eclipse中的clean和build功能的作用是什么
- MyEclipse/Eclipse导入项目无jar包sun.misc.BASE64Encoder 解决办法
- UVa11549