题目链接

题意 : 给你n个初值,然后进行两种操作,第一种操作是将(L,R)这一区间上所有的数变成x,第二种操作是将(L,R)这一区间上所有大于x的数a[i]变成gcd(x,a[i])。输出最后n个数。

思路 : 暴力线段树,将区间进行更新,可以用延迟标记,也可以不用。p数组代表当前节点这一段上的值是不是相同,不全相同就是-1.

 //
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std ; #define LL long long
LL a ,lz[*],p[*]; void pushup(int rt)
{
if(p[rt << ] == p[rt << | ])
p[rt] = p[rt << ] ;
else p[rt] = - ;
} void pushdown(int rt)
{
if(lz[rt] != -)
{
lz[rt << ] = lz[rt << | ] = lz[rt] ;
p[rt << ] = p[rt << | ] = lz[rt] ;
lz[rt] = - ;
}
}
void build(int l,int r,int rt)
{
lz[rt] = - ;
if(l == r)
{
scanf("%I64d",&a) ;
p[rt] = a;
return ;
}
int mid = (l + r) >> ;
build(l,mid,rt << ) ;
build(mid+,r,rt << | ) ;
pushup(rt) ;
} void update(int L,int R,int l,int r,int rt,LL sc,int flag)
{
if(flag > )
{
if(l >= L && r <= R)
{
p[rt] = lz[rt] = sc ;
return ;
}
}
else
{
if(p[rt] != - && (l >= L && r <= R))
{
if(p[rt] > sc)
{
lz[rt] = p[rt] = __gcd(p[rt],sc) ;
}
return ;
}
}
pushdown(rt) ;
int mid = (l+r) >> ;
if(mid >= L)
update(L,R,l,mid,rt << ,sc,flag) ;
if(R > mid)
update(L,R,mid+,r,rt << | ,sc,flag) ;
pushup(rt) ;
} void output(int l ,int r,int rt)
{
if(l == r)
{
printf("%I64d ",p[rt]) ;
return ;
}
pushdown(rt) ;
int mid = (l + r) >> ;
output(l,mid,rt << ) ;
output(mid+,r,rt << | ) ;
}
int main()
{
int T ,n,Q ;
cin >> T ;
while(T--)
{
scanf("%d",&n) ;
build(,n,) ;
scanf("%d",&Q) ;
int t,l,r;
LL x ;
while(Q--)
{
scanf("%d %d %d %I64d",&t,&l,&r,&x) ;
if(t == )
update(l,r,,n,,x,) ;
else
update(l,r,,n,,x,-) ;
}
output(,n,) ;
puts("") ;
}
return ;
}

2014多校第四场1006 || HDU 4902 Nice boat (线段树 区间更新)的更多相关文章

  1. HDU 4902 Nice boat --线段树(区间更新)

    题意:给一个数字序列,第一类操作是将[l,r]内的数全赋为x ,第二类操作是将[l,r]中大于x的数赋为该数与x的gcd,若干操作后输出整个序列. 解法: 本题线段树要维护的最重要的东西就是一个区间内 ...

  2. HDU 3577 Fast Arrangement (线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3577 题意不好理解,给你数字k表示这里车最多同时坐k个人,然后有q个询问,每个询问是每个人的上车和下车 ...

  3. hdu 1698+poj 3468 (线段树 区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=1698 这个题意翻译起来有点猥琐啊,还是和谐一点吧 和涂颜色差不多,区间初始都为1,然后操作都是将x到y改为z,注 ...

  4. 2014多校第四场1005 || HDU 4901 The Romantic Hero (DP)

    题目链接 题意 :给你一个数列,让你从中挑选一些数组成集合S,挑另外一些数组成集合T,要求是S中的每一个数在原序列中的下标要小于T中每一个数在原序列中下标.S中所有数按位异或后的值要与T中所有的数按位 ...

  5. hdu 4902 Nice boat 线段树

    题目链接 给n个数, 两种操作, 第一种是将区间内的数变成x, 第二种是将区间内大于x的数变为gcd(x, a[i]). 开三个数组, 一个记录区间最大值, 这样可以判断是否更新这一区间, 一个laz ...

  6. HDU 4902 Nice boat 线段树+离线

    据说暴力也过了.还傻逼地写了这么长. . . #include <stdio.h> #include <string.h> #include <math.h> #i ...

  7. hdu 3397 Sequence operation 线段树 区间更新 区间合并

    题意: 5种操作,所有数字都为0或1 0 a b:将[a,b]置0 1 a b:将[a,b]置1 2 a b:[a,b]中的0和1互换 3 a b:查询[a,b]中的1的数量 4 a b:查询[a,b ...

  8. HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...

  9. 牛客多校第三场 G Removing Stones(分治+线段树)

    牛客多校第三场 G Removing Stones(分治+线段树) 题意: 给你n个数,问你有多少个长度不小于2的连续子序列,使得其中最大元素不大于所有元素和的一半 题解: 分治+线段树 线段树维护最 ...

随机推荐

  1. ORACLE 单实例完全卸载数据库

    1.用oracle用户登录如果要再次安装, 最好先做一些备份工作.包括用户的登录脚本,数据库自动启动关闭的脚本,和Listener自动启动的脚本.要是有可能连创建数据库的脚本也保存下来 2.使用SQL ...

  2. expdp与impdp

    参考http://blog.csdn.net/hello985/article/details/13295305 (一)        导出scott用户下的emp表到xx用户下 1.1      创 ...

  3. VHDL----基础知识1

    摘要: 打算分几篇,来理清VHDL的基础知识 ----------------------------------------------------------------------------- ...

  4. Python实现kNN(k邻近算法)

    Python实现kNN(k邻近算法) 运行环境 Pyhton3 numpy科学计算模块 计算过程 st=>start: 开始 op1=>operation: 读入数据 op2=>op ...

  5. Java BigDecimal大数字操作

    在java中提供了大数字的操作类,即java.math.BinInteger类和java.math.BigDecimal类.这两个类用于高精度计算,其中BigInteger类是针对大整数的处理类,而B ...

  6. Careercup - Google面试题 - 6253551042953216

    2014-05-06 01:49 题目链接 原题: Modify the following code to add a row number for each line is printed pub ...

  7. Android 动态Tab分页效果实现

    当前项目使用的是TabHost+Activity进行分页,目前要做个报表功能,需要在一个Tab页内进行Activity的切换.比方说我有4个Tab页分别为Tab1,Tab2,Tab3,Tab4,现在的 ...

  8. 简述负载均衡&CDN技术

    曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维护?”,下面的回答多种多样,但总结起来就是:一个高性能的web系统需要从无数个角度去考虑他,大到服务器的布局,小到软件中某个文 ...

  9. BZOJ3438 小M的作物

    AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=3438 这题觉得和上题有点类似吧. 如果没有联合在一起的收成,可以比较好做[我们将属于A的表 ...

  10. 【BZOJ】【1053】【HAOI2007】反素数ant

    搜索 经典搜索题目(其实是蒟蒻只会搜……vfleaking好像有更优秀的做法?) 枚举质数的幂,其实深度没多大……因为$2^32$就超过N了……而且质数不能取的太大,所以不会爆…… /******** ...