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. ICP备案的一些tips~

    1)一个单位是一个备案主体,只能有一个主体备案号: 2)一个企业下面可以有多个网站,依次在备案号后加-1 -2,以此类推,也叫网站备案号,每个网站只能有一个网站备案号.(所谓网站,不是指域名,也不是i ...

  2. C# 使用TASK处理多任务同时处理

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. NoSQL(三)

    redis集群介绍 1.官方叫cluster,redis3.0才直接的一个架构,如果数据量很大,单台机器已经无法满足存储,查询的瓶颈,所以我们需要多台机器构成一个大集群,用来解决存储空间,查询速度,负 ...

  4. 《MVC +EasyUI 》——表单的提交

        之前用AJax给Controller传递參数,然后再调用服务端的方法对数据库进行更改,今天碰到一个新的方法,就是表单的提交.这样能够省去AJax穿參.当表单提交后.我们能够获取表单上控件中的值 ...

  5. 标志位 last break

    last-完成rewrite指令的处理,之后搜索对应的URI和location; break-完成rewrite指令的外理 [root@web01 app]# cat /app/server/ngin ...

  6. mysql之mysql、mysql-devel、mysql-server

    一.引言 一直都没搞明白这三者之间的关系,于是决心查资料把这个问题搞明白,遂记录以便查阅.学习 二.关系 mysql-devel 开发用到的库以及包含文件mysql mysql 客户端mysql-se ...

  7. 解决eclipse无法打开:Failed to load the JNI shared library

    64位系统安装了64位的eclipse,但是jdk是32位的 总之就是eclipse跟jdk搭配不上,所以解决的时候注意这一点

  8. poj1182食物链--并查集

    动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种.有人用两种说 ...

  9. glob/globfree--找出匹配模式的路径名

    语法 #include <glob.h> int glob(const char *pattern, int flags, int (*errfunc) (const char *epat ...

  10. IO模型(阻塞、非阻塞、多路复用与异步)

    IO模型 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同环境下给出的答案也是不一的.所以先限定一下上下文是非常有必要的. 本文讨论的背景是Linux环境下的network I ...