多校训练hdu --Nice boat(线段树,都是泪)
Nice boat
Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 47 Accepted Submission(s): 10
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.
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++)
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
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
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(线段树,都是泪)的更多相关文章
- 2016暑假多校联合---Rikka with Sequence (线段树)
2016暑假多校联合---Rikka with Sequence (线段树) Problem Description As we know, Rikka is poor at math. Yuta i ...
- hdu 4031 attack 线段树区间更新
Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)Total Subm ...
- hdu 4288 离线线段树+间隔求和
Coder Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- hdu 3016 dp+线段树
Man Down Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- 2018多校第十场 HDU 6430 (线段树合并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6430 题意:一棵树上每个节点权值为v[i],每个节点的heard值是:以它为LCA的两个节点的GCD的 ...
- HDU 4902 Nice boat --线段树(区间更新)
题意:给一个数字序列,第一类操作是将[l,r]内的数全赋为x ,第二类操作是将[l,r]中大于x的数赋为该数与x的gcd,若干操作后输出整个序列. 解法: 本题线段树要维护的最重要的东西就是一个区间内 ...
- HDU 5877 dfs+ 线段树(或+树状树组)
1.HDU 5877 Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...
- HDU 3308 LCIS (线段树区间合并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 题目很好懂,就是单点更新,然后求区间的最长上升子序列. 线段树区间合并问题,注意合并的条件是a[ ...
- HDU 2795 Billboard (线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题目大意:有一块h*w的矩形广告板,要往上面贴广告; 然后给n个1*wi的广告,要求把广告贴 ...
随机推荐
- mybatis-5 手写代理
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Select { public St ...
- merge dict key
#!/usr/local/python # -*- coding:utf-8 -*-user_dict = {'python': 23, 'Python': 51, '机器':10, 'PYTHON' ...
- python interview questions
referce:python interview questions top 50 refercence:python interview questions top 15 summary Q: wh ...
- C# string补位
参考:https://www.cnblogs.com/zhangqs008/archive/2012/02/01/2341078.html //1.1.左补位 "; , 'A'); //1. ...
- github 新建一个仓库后
每次都记不住命令,记一下,防止找不到 echo "# learn18" >> README.md git init git add README.md git comm ...
- nginx+tomcat实现简单的负载均衡
host1:10.0.0.10(部署nginx和tomcat) host2:10.0.0.11(部署tomcat) 平台环境(2主机一样) [root@smp ~]# uname -r3.10.0-8 ...
- js实现复制粘贴功能
在项目中使用到复制粘贴功能,虽然网上有很多大牛封装了很多的插件,但是还是想不去使用插件,就像自己来实现这个功能. 另一篇是禁止复制粘贴 前端er怎样操作剪切复制以及禁止复制+破解等 初步想法: 1. ...
- H5在ios弹窗状态下调起输入法后关闭输入法页面元素错位解决办法
最近开发移动端,有个需求:点击退款弹出文本框和发送短信按钮,输入手机号码和验证码确定退款. 发现安卓手机没毛病,但是在ios手机上点击文本框调起输入法,此时点击完成或者关闭输入法就无法正常操作了,肉眼 ...
- idea 中使用 出现 svn: E155036
在idea中使用svn checkout时 svn出现如上错误. 原因本地的工作副本太旧.command line进入本地工作副本的根目录,执行svn upgrade后 重启idea就可以了.
- luogu2485 [SDOI2011]计算器 poj3243 Clever Y BSGS算法
BSGS 算法,即 Baby Step,Giant Step 算法.拔山盖世算法. 计算 \(a^x \equiv b \pmod p\). \(p\)为质数时 特判掉 \(a,p\) 不互质的情况. ...