据说暴力也过了。还傻逼地写了这么长。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
using namespace std;
#define ll long long
#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define Val(x) tree[x].val
#define Lazy(x) tree[x].lazy
#define Num(x) tree[x].num
const ll oo = (ll)(-1e15);
inline ll Mid(ll x, ll y){return (x+y)>>1;}
inline ll gcd(ll x, ll y){
if(x>y)swap(x,y);
while(x){
y%=x;
swap(x,y);
}
return y;
}
#define N 100500
struct qqq{
ll op, l, r, val;
}Q[N];
ll n, a[N];
struct node{
ll l, r;
ll lazy, num;
}tree[N<<2];
void push_down(ll id){
if(tree[id].l == tree[id].r) return;
if(Num(id)>0){
Num(L(id)) = Num(R(id)) = Num(id);
}
if(Lazy(id) == oo) return;
Lazy(L(id)) = Lazy(R(id)) = Lazy(id);
Lazy(id) = oo;
}
void push_up(ll id){
if(Num(L(id)) != Num(R(id)))
{
Num(id) = -1;
}
else if(Num(L(id)) == Num(R(id)))Num(id) = Num(L(id));
}
void build(ll l, ll r, ll id){
tree[id].l = l, tree[id].r = r;
Lazy(id) = oo;
Num(id) = 0;
if(l == r)
{
Lazy(id) = a[l];
return;
}
ll mid = Mid(l, r);
build(l, mid, L(id));
build(mid+1, r, R(id));
}
void updata1(ll l, ll r, ll val, ll num, ll id){
push_down(id);
if(Num(id) > num)return ;
if(l == tree[id].l && tree[id].r == r && Num(id) == 0)
{
Lazy(id) = val;
Num(id) = num;
return;
}
ll mid = Mid(tree[id].l, tree[id].r);
if(mid < l)
updata1(l, r, val, num, R(id));
else if(r <= mid)
updata1(l, r, val, num, L(id));
else {
updata1(l, mid, val, num, L(id));
updata1(mid+1, r, val, num, R(id));
}
push_up(id);
}
void updata2(ll l, ll r, ll val, ll num, ll id){
push_down(id);
if(Num(id) > num)return ;
if(l == tree[id].l && tree[id].r == r && Num(id)!=-1)
{
if(Lazy(id)!=oo)
{
if(Lazy(id) > val)
Lazy(id) = gcd(Lazy(id), val);
return ;
}
}
ll mid = Mid(tree[id].l, tree[id].r);
if(mid < l)
updata2(l, r, val, num, R(id));
else if(r <= mid)
updata2(l, r, val, num, L(id));
else {
updata2(l, mid, val, num, L(id));
updata2(mid+1, r, val, num, R(id));
}
if(Lazy(L(id)) == Lazy(R(id)))
Lazy(id) = Lazy(L(id));
else Lazy(id) = oo;
}
void query(ll id){
push_down(id);
if(tree[id].l == tree[id].r)
{
printf("%I64d ", Lazy(id));
return ;
}
ll mid = Mid(tree[id].l, tree[id].r);
query(L(id));
query(R(id));
}
int main(){
ll i, l, r, T, que, op, val; cin>>T;
while(T--){
cin>>n;
for(i = 1; i <= n; i++)scanf("%I64d",&a[i]);
build(1, n, 1);
cin>>que;
for(i = 1; i <= que; i++)scanf("%I64d %I64d %I64d %I64d", &Q[i].op, &Q[i].l, &Q[i].r, &Q[i].val);
for(i = que; i; i--)
if(Q[i].op == 1)
{
updata1(Q[i].l, Q[i].r, Q[i].val, i, 1);
}
for(i = 1; i <= que; i++)
if(Q[i].op == 2 && Q[i].op)
{
updata2(Q[i].l, Q[i].r, Q[i].val, i, 1);
}
query(1);
puts("");
}
return 0;
}

HDU 4902 Nice boat 线段树+离线的更多相关文章

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

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

  2. hdu 4902 Nice boat 线段树

    题目链接 给n个数, 两种操作, 第一种是将区间内的数变成x, 第二种是将区间内大于x的数变为gcd(x, a[i]). 开三个数组, 一个记录区间最大值, 这样可以判断是否更新这一区间, 一个laz ...

  3. HDU 3333 Turing Tree 线段树+离线处理

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3333 Turing Tree Time Limit: 6000/3000 MS (Java/Othe ...

  4. HDU 4288 Coder 【线段树+离线处理+离散化】

    题意略. 离线处理,离散化.然后就是简单的线段树了.需要根据mod 5的值来维护.具体看代码了. /* 线段树+离散化+离线处理 */ #include <cstdio> #include ...

  5. hdu 5700区间交(线段树)

    区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  6. 线段树+离线 hdu5654 xiaoxin and his watermelon candy

    传送门:点击打开链接 题意:一个三元组假设满足j=i+1,k=j+1,ai<=aj<=ak,那么就好的.如今告诉你序列.然后Q次询问.每次询问一个区间[l,r],问区间里有多少个三元组满足 ...

  7. Snacks HDU 5692 dfs序列+线段树

    Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...

  8. 牛客练习赛53 E-老瞎眼pk小鲜肉(思维+线段树+离线)

    前言 听说是线段树离线查询?? 做题做着做着慢慢对离线操作有点感觉了,不过也还没参透,等再做些题目再来讨论离线.在线操作. 这题赛后看代码发现有人用的树状数组,$tql$.当然能用树状数组写的线段树也 ...

  9. HDU 4902 Nice boat (线段树)

    Nice boat 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4902 Description There is an old country a ...

随机推荐

  1. laravel富文本编辑和图片上传

    ---恢复内容开始--- 首先先找到一个适合的编辑器是胜利的一步,选择wangEditor这个编辑器 地址:http://www.wangeditor.com/ 然后选择下载,我是通过网上学习的,所以 ...

  2. python爬虫入门一:爬虫基本原理

    1. 什么是爬虫 爬虫就是请求网站并提取数据的自动化程序 2. 爬虫的基本流程 1)发送请求 通过HTTP库向目标站点发送请求,即发送一个Request. 请求可以包含额外的headers等信息,等待 ...

  3. PAT Basic 1059

    1059 C语言竞赛 C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛.既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽: 0.冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……). ...

  4. AWK原理及命令和文件输入

    一.awk简介  1.awk是3个姓氏的首字母,代表该语言的3个作者,awk的版本有很多,包括:旧版awk,新版awk(nawk),GNU awk(gawk)等.    awk程序有awk命令,括在引 ...

  5. Result实现类

    package org.apache.struts2.dispatcher; import com.opensymphony.xwork2.ActionInvocation; import com.o ...

  6. 【Kubernetes】Deployment控制器模型

    在Kubernetes中,Deployment是最基本的控制器对象 apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploym ...

  7. 九度oj 题目1031:xxx定律 题目1033:继续xxx定律

    题目描述:     对于一个数n,如果是偶数,就把n砍掉一半:如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数变为1为止.    请计算需要经过几步才能将n变到1,具体可见样例. 输入:     ...

  8. RAISERROR 的用法(转)

    raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql server 2005的帮助 ]   其语法如下: RAISERROR ( { msg_id | msg ...

  9. Python升级版本2.6到2.7

    CentOS 6 系统默认 Python 版本是:2.6.6 平时在使用中遇到很多的库要求是 2.7.x 版本的库,比如使用 ConfigParser 库,在 2.6 版本库就不支持没有 value ...

  10. JSF框架整理

    JSP体系结构: JSF主要优势之一就是它既是Java web 应用程序的用户界面标准又是严格遵循 模型-视图-控制器(MVC)设计模式的框架. 用户界面代码(视图)和应用程序数据和逻辑(模型)的清晰 ...