Nice boat

Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)

Total Submission(s): 47 Accepted Submission(s): 10

Problem Description
There is an old country and the king fell in love with a devil. The devil always asks the king to do some crazy things. Although the king used to be wise and beloved by his people. Now he is just like a boy in love and can’t refuse any request from the devil. Also, this devil is looking like a very cute Loli. Let us continue our story, z*p(actually you) defeat the 'MengMengDa' party's leader, and the 'MengMengDa' party dissolved. z*p becomes the most famous guy among the princess's knight party. One day, the people in the party find that z*p has died. As what he has done in the past, people just say 'Oh, what a nice boat' and don't care about why he died. Since then, many people died but no one knows why and everyone is fine about that. Meanwhile, the devil sends her knight to challenge you with Algorithm contest. There is a hard data structure problem in the contest: There are n numbers a_1,a_2,...,a_n on a line, everytime you can change every number in a segment [l,r] into a number x(type 1), or change every number a_i in a segment [l,r] which is bigger than x to gcd(a_i,x) (type 2). You should output the final sequence.
Input
The first line contains an integer T, denoting the number of the test cases.
For each test case, the first line contains a integers n.
The next line contains n integers a_1,a_2,...,a_n separated by a single space.
The next line contains an integer Q, denoting the number of the operations.
The next Q line contains 4 integers t,l,r,x. t denotes the operation type. T<=2,n,Q<=100000
a_i,x >=0
a_i,x is in the range of int32(C++)
Output
For each test case, output a line with n integers separated by a single space representing the final sequence.
Please output a single more space after end of the sequence
Sample Input
1
10
16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709
10
1 3 6 74243042
2 4 8 16531729
1 3 4 1474833169
2 1 8 1131570933
2 7 9 1505795335
2 3 7 101929267
1 4 10 1624379149
2 2 8 2110010672
2 6 7 156091745
1 2 5 937186357
Sample Output
16807 937186357 937186357 937186357 937186357 1 1 1624379149 1624379149 1624379149

给出n个数。两种操作,1 a b x 将a到b的全部数改动为x, 2 a b x将在a到b范围内的全部大于x的数改动为与x的最大公约数

范围改动值不说。在[a,b]内的全部大于x的数 与x去最大公约数,逐步向下分区间,假设该区间都被改动了,而且改动的值大于x。将改动的值于x去最大公约数,否则,继续向下分区间。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int tree[2000000] , u[2000000] ;
int gcd(int a,int b)
{
return b == 0 ? a : gcd(b,a%b);
}
void init(int o,int x,int y)
{
if(x == y)
scanf("%I64d", &tree[o]);
else
{
int mid = (x + y) / 2 ;
init(o*2,x,mid);
init(o*2+1,mid+1,y);
}
}
void f(int o,int x,int y)
{
if( u[o] != -1 )
{
u[o*2] = u[o*2+1] = u[o] ;
u[o] = -1 ;
if(y = x + 1)
tree[o*2] = tree[o*2+1] = u[o] ;
}
}
void update1(int o,int x,int y,int l,int r,int k)
{
if( l <= x && y <= r )
u[o] = k ;
else
{
f(o,x,y) ;
int mid = (x + y) / 2 ;
if( l <= mid )
update1(o*2,x,mid,l,r,k);
if( mid+1 <= r )
update1(o*2+1,mid+1,y,l,r,k);
}
}
void update2(int o,int x,int y,int l,int r,int k)
{
if(x == y && u[o] == -1 )
{
if( tree[o] > k )
tree[o] = gcd(tree[o],k);
return ;
}
if( l <= x && y <= r && u[o] != -1 )
{
if( u[o] > k )
u[o] = gcd(u[o],k);
}
else
{
f(o,x,y) ;
int mid = (x + y) / 2 ;
if( l <= mid )
update2(o*2,x,mid,l,r,k);
if( mid+1 <= r )
update2(o*2+1,mid+1,y,l,r,k);
}
}
int sum(int o,int x,int y,int k)
{
int ans = 0 ;
if( x <= k && k <= y && u[o] != -1 )
return u[o] ;
if( x == y && x == k )
return tree[o] ;
else
{
int mid = (x + y) / 2 ;
if( k <= mid )
ans = sum(o*2,x,mid,k);
else
ans = sum(o*2+1,mid+1,y,k);
}
return ans ;
}
int main()
{
int T , n , m , t , l , r , x , i ;
scanf("%d", &T);
while(T--)
{
memset(tree,0,sizeof(tree));
memset(u,-1,sizeof(u));
scanf("%d", &n);
init(1,1,n);
scanf("%d", &m);
while(m--)
{
scanf("%d %d %d %d", &t, &l, &r, &x);
if(t == 1)
update1(1,1,n,l,r,x);
else
update2(1,1,n,l,r,x);
}
for(i = 1 ; i <= n ; i++)
{
int ans = sum(1,1,n,i);
printf("%d ", ans);
}
printf("\n");
}
return 0;
}

多校训练hdu --Nice boat(线段树,都是泪)的更多相关文章

  1. 2016暑假多校联合---Rikka with Sequence (线段树)

    2016暑假多校联合---Rikka with Sequence (线段树) Problem Description As we know, Rikka is poor at math. Yuta i ...

  2. hdu 4031 attack 线段树区间更新

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Subm ...

  3. hdu 4288 离线线段树+间隔求和

    Coder Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  4. hdu 3016 dp+线段树

    Man Down Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  5. 2018多校第十场 HDU 6430 (线段树合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6430 题意:一棵树上每个节点权值为v[i],每个节点的heard值是:以它为LCA的两个节点的GCD的 ...

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

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

  7. HDU 5877 dfs+ 线段树(或+树状树组)

    1.HDU 5877  Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...

  8. HDU 3308 LCIS (线段树区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 题目很好懂,就是单点更新,然后求区间的最长上升子序列. 线段树区间合并问题,注意合并的条件是a[ ...

  9. HDU 2795 Billboard (线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题目大意:有一块h*w的矩形广告板,要往上面贴广告;   然后给n个1*wi的广告,要求把广告贴 ...

随机推荐

  1. luogu P1042 乒乓球

    题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役.华华就是其中一位,他退役 ...

  2. [LUOGU] P2886 [USACO07NOV]牛继电器Cow Relays

    https://www.luogu.org/problemnew/show/P2886 给定无向连通图,求经过k条边,s到t的最短路 Floyd形式的矩阵乘法,同样满足结合律,所以可以进行快速幂. 离 ...

  3. XML 解析 & 特殊字符报错

    在xml文件中,有一些符号是具有特殊意义的,如果直接使用会导致xml解析报错,为了避免错误,我们需要将特殊的字符使用其对应的转义实体进行操作.这些字符如下 <  ==  < >  = ...

  4. Centos7中 mysql5.7 用户 创建 、授权、远程登录

    1.添加用户跟以往版本不同,MySQL5.7 mysql.user表没有password字段,这个字段改成了 authentication_string:这里我们使用命令进行创建用户:  CREATE ...

  5. python 装饰器(二): 加参数

    接上篇python 闭包&装饰器(一) 一.功能函数加参数:实现一个可以接收任意数据的加法器 源代码如下: def show_time(f): def inner(*x, **y): # 形参 ...

  6. ASP.NET Core on K8S学习初探(1)K8S单节点环境搭建

    当近期的一个App上线后,发现目前的docker实例(应用服务BFF+中台服务+工具服务)已经很多了,而我司目前没有专业的运维人员,发现运维的成本逐渐开始上来,所以容器编排也就需要提上议程.因此我决定 ...

  7. 【Codeforces 140A】New Year Table

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 算出来每个盘子要占用多少角度. 然后乘n看看是不是小于等于2π就好 (精度最好定在1e-7) [代码] #include <bits/s ...

  8. 一张图表,人人都能建立自己的AARRR运营模型

    每次跟同行聊运营,聊用户,聊产品,最后都会回到AARRR模型上来,这个用户全生命周期模型概括了互联网产品运营的5个关键环节. 获客是运营的基础,促进用户活跃才能让产品有生命力,提升留存减少流失让用户规 ...

  9. 关于构造函数什么值传递给他的实例,只有this和prototype

    var a= function (){var bb = 12; this.aa ="xxx"}; a.aa="www"; a.prototype.cc=&quo ...

  10. 大数据学习——hdfs客户端流式操作代码的实现

    package cn.itcast.bigdata.hdfs.diceng; import org.apache.hadoop.conf.Configuration; import org.apach ...