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. Java之基础(1) - 编程中“为了性能”尽量要做到的一些地方

    最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Ja ...

  2. C8051F340之USB简介

    背景 需求为实现一个键盘产品,于是将C8051F340作为主控制器.本篇记录C8051F340的USB控制器相关知识点,阅读本篇文章需要读者具有最基本的USB相关知识. 正文 C8051F340结构 ...

  3. ubuntu14.04使用root用户登录桌面,ubuntu14.04root 转

    ubuntu安装好之后,默认是不能用root用户登录桌面的,只能使用普通用户或者访客登录.怎样开启root用户登录桌面呢? 先用普通用户登录,然后切换到root用户,然后执行如下命令: vi /usr ...

  4. 基于mybatis-generator代码生成工具改(链式方法实体版)

    概述 一直以来使用原生mybatis-generator的我发现有一个地方很不方便,即它生成的实体类的set方法返回值是void,而目前比较流行的则是链式set的写法,即set方法返回值不再是void ...

  5. tableView 获取网络图片,并且设置为圆角(优化,fps)

    代码地址如下:http://www.demodashi.com/demo/11088.html 一.准备工作 例子比较精简,没有什么特殊要求,具备Xocde8.0左右版本的就好 二.程序实现 1.相关 ...

  6. AsyncTask的原理和缺点

    番外tips: 特别喜欢一句话.假设你想了解一个人.那你从他出生開始了解吧.相同的道理,想要了解AsyncTask,就从它的源代码開始吧. 进入主题前,在说一下,开发中已经非常少使用AsyncTask ...

  7. 冻结 锁定 固定 行 列 表头 抬头 html table jquery 全兼容常见浏览器

    转:http://www.cnblogs.com/sorex/archive/2011/06/30/2093499.html <!DOCTYPE html PUBLIC "-//W3C ...

  8. POJ 1258:Agri-Net(最小生成树&amp;&amp;prim)

    Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38918   Accepted: 15751 Descri ...

  9. javascript断点设置和调试

    JS调试必备的5个debug技巧http://www.jb51.net/article/47812.htm Chrome 中的 JavaScript 断点设置和调试技巧http://www.xuebu ...

  10. 一图总结C++中关于指针的那些事

    指向对象的指针.指向数据成员的指针,指向成员函数的指针: 数组即指针,数组的指针,指针数组: 指向函数的指针,指向类的成员函数的指针,指针作为函数參数,指针函数: 指针的指针,指向数组的指针:常指针. ...