Nice boat

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

Total Submission(s): 335    Accepted Submission(s): 159

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
 
Author
WJMZBMR
 
Source
 
Recommend
 


代码例如以下:
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>
#include <string>
#include <iostream>
#include <set>
using namespace std;
const int MAX= 1e5+10;
const int inf = 0x3f3f3f3f;
const int MOD = 1e9+10;
const double eps= 1e-8;
typedef long long LL ;
typedef vector<int> vec;
typedef vector<vec> mat; LL gcd(LL a,LL b) {
return b==0?a:gcd(b,a%b);
} LL ans[MAX<<2],col[MAX<<2],a[MAX]; inline void push_up(int o) {
if(col[o<<1]==col[o<<1|1]) col[o]=col[o<<1];
}
inline void push_down(int o) {
if( col[o]!=-1) {
col[o<<1]=col[o<<1|1]=col[o];
col[o]=-1;
}
return ;
}
void build(int L,int R,int o) {
col[o]=-1;
if(L==R) {
col[o]=a[L];
return ;
}
int mid=(L+R)>>1;
build(L,mid,o<<1);
build(mid+1,R,o<<1|1);
push_up(o);
} void modify1(int L,int R,int o,int ls,int rs,LL x) {
if(ls<=L&&rs>=R) {
col[o]=x;
return ;
}
push_down(o);
int mid=(L+R)>>1;
if(ls<=mid) modify1(L,mid,o<<1,ls,rs,x);
if(rs>mid) modify1(mid+1,R,o<<1|1,ls,rs,x);
push_up(o);
}
void modify2(int L,int R,int o,int ls,int rs,LL x) {
if(ls<=L&&rs>=R&&col[o]!=-1) {
if(col[o]>x) {
col[o]=gcd(col[o],x);
}
return ;
}
push_down(o);
int mid=(L+R)>>1;
if(ls<=mid) modify2(L,mid,o<<1,ls,rs,x);
if(rs>mid) modify2(mid+1,R,o<<1|1,ls,rs,x);
push_up(o);
}
LL Query(int L,int R,int o,int k) {
if(L==R) {
return col[o];
}
push_down(o);
int mid=(L+R)>>1;
if(k<=mid) return Query(L,mid,o<<1,k);
else return Query(mid+1,R,o<<1|1,k);
}
int main() {
//freopen("in.txt","r",stdin);
int cas,n,op,ls,rs,m;
LL x;
scanf("%d",&cas);
while(cas--) {
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%I64d",&a[i]);
build(1,n,1);
scanf("%d",&m);
for(int i=0;i<m;i++) {
scanf("%d %d %d %I64d",&op,&ls,&rs,&x);
if(op==1) {
modify1(1,n,1,ls,rs,x);
}
else modify2(1,n,1,ls,rs,x);
} for(int i=1;i<=n;i++) {
// if(i==1) printf("%I64d",Query(1,n,1,i));
printf("%I64d ",Query(1,n,1,i));
}
printf("\n");
//printf(" ");
}
return 0;
}

线段树lazy标记??Hdu4902的更多相关文章

  1. poj3468 线段树+lazy标记

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 92921   ...

  2. POJ3237 Tree(树剖+线段树+lazy标记)

    You are given a tree with N nodes. The tree’s nodes are numbered 1 through N and its edges are numbe ...

  3. 线段树+lazy标记 2019年8月10日计蒜客联盟周赛 C.小A的题

    题目链接:https://nanti.jisuanke.com/t/40852 题意:给定一个01串s,进行m次操作,|s|<=1e6,m<=5e5 操作有两种 l r 0,区间[l,r] ...

  4. HDU_1698 Just a Hook(线段树+lazy标记)

    pid=1698">题目请点我 题解: 接触到的第一到区间更新,须要用到lazy标记.典型的区间着色问题. lazy标记详情请參考博客:http://ju.outofmemory.cn ...

  5. POJ 3225 线段树+lazy标记

    lazy写崩了--. 查了好久 /* U-> [l,r]–>1 I-> [1,l-1] [r+1,+无穷] –>0 D-> [l,r]–>0 C-> [1,l ...

  6. 线段树+Lazy标记(我的模版)

    #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ...

  7. C++-POJ2777-Count Color[线段树][lazy标记][区间修改]

     分析:https://www.bilibili.com/read/cv4777102 #include <cstdio> #include <algorithm> using ...

  8. hdu-3397 Sequence operation 线段树多种标记

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3397 题目大意: 0 a b表示a-b区间置为0 1 a b表示a-b区间置为1 2 a b表示a- ...

  9. HDU 3468:A Simple Problem with Integers(线段树+延迟标记)

    A Simple Problem with Integers Case Time Limit: 2000MS Description You have N integers, A1, A2, ... ...

随机推荐

  1. Odoo8.0安装wkhtmltopdf报表运行环境

    #下载   #注意根据操作系统选择相应版本   (旧地址)wget http://sourceforge.net/projects/wkhtmltopdf/files/0.12.1/wkhtmltox ...

  2. 【DB2】查询上月末、上年末、上年同期等信息

    此处以20180612为例子 想得到上年末.上年同期.上月末这些时间点,只需要记住函数ADD_MONTHS.LAST_DAY.ADD_YEARS这些函数即可. 上年末 SELECT SUBSTR(TO ...

  3. Oracle怎么导出存储过程

    Oracle怎么导出存储过程 http://www.myexception.cn/database/1564245.html 导出: 1, 2,点击输出文件,选择要导出文件,选择要导出的目录以及设置导 ...

  4. java基础讲解07-----数组

    1.什么是数组 2.怎么使用数组 package test; public class ShuZu {            public static void main(String[] args ...

  5. js中加入数据缓存

    因为我们的系统设计 所有的数据查询全部是采用参数化json 后台解析后进行数据返回 由于使用统一的数据查询入口 所有可以很方便的为数据设置缓存 var ModelDataCache = new Arr ...

  6. STL容器分析--map

    映射和多重映射基于某一类型Key的键集的存在,提供对T类型的数据进行快速和高效的检索.

  7. redis安装和配置(一)

    Redis 的官方下载站是http://redis.io/download 怎么安装 Redis 数据库呢?下面将介绍Linux 版本的安装方法 步骤一: 下载Redis 下载安装包:wget htt ...

  8. linux 批量替换内容

    sed -i "s/被替换的内容/替换的内容/g" `grep "被替换的内容" -rl 目录` -r = 搜索下级目录

  9. poj Ping pong LA 4329 (树状数组统计数目)

    Ping pong Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2302   Accepted: 879 Descript ...

  10. [转]RPC、CORBA、WebService之区别

    RPC是由Sun发明的远程过程调用协议,是第一种真正的分布式应用模型.Windows上使用的R PC是DCERPC的扩展.严格地说,RPC是一种逻辑上的协议,它可以使用Socket.Named Pip ...