HDU 4902 NICE BOAT (线段树+懒标记)

将3DMax编辑的动画,导入给已经绑定蒙皮好的模型给Unity使用 现在程序猿想做独立游戏,即容易,也难。 说容易,引擎越来越傻瓜化。 说难,到哪去找靠谱的美术? 好在伟大的AssetStore(还有淘宝上)有大批不赖的资源可以用。 现成的模型,是好,但是,没有配套的动作,却是一件让人头疼的事情,即使用IK动画,也不能完美的弥补这一缺陷。 虽然Unity具备 retargeting 功能,但是,也不是万能的,很多情况下,非标准的骨骼会导致 阅读详情

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.

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

题意

1.把[L,R]区间的数字都变为x;
2.把[L,R]区间中比x大的数字变成和x的最大公约数

题目分析:
对于第一个操作,线段树节点中保存这段区间各个数字的值是否是一样的。对于第二个操作,需要保存区间的最大值。在更新的时候,第一张操作直接区间修改懒标记记录。对于第二个操作,如果区间的最大值小于x,直接返回,否则继续更新下去。

#include<iomanip>
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<ctime>
#include<cstdio>
#include<algorithm>
#include<cctype>
#define mid ((l+r)>>1)
#define lc  root<<1
#define rc  root<<1|1
#define N 100005
using namespace std;
int T,n,t,l,r,q,x,a[N];
//---------------------
struct node{
    int  lzx,val;
}tr[N<<2];
//---------------------
inline int Readint()
{
    int i=0,f=1;char ch;
    for(ch=getchar();(ch<'0'||ch>'9')&&ch!='-';ch=getchar());
    if(ch=='-') f=-1,ch=getchar();
    for(;ch>='0'&&ch<='9';ch=getchar()) i=(i<<1)+(i<<3)+ch-'0';
    return i*f;
}
//---------------------
inline void Push(int root)
{
    tr[root].val=max(tr[lc].val,tr[rc].val);
}
//---------------------
inline void build(int root,int l,int r)
{
    if(l==r){
        tr[root].val=a[l];
        tr[root].lzx=-1;
        return ;
    }   
    tr[root].lzx=-1;
    build(lc,l,mid);
    build(rc,mid+1,r);
    Push(root);
}
//--------------------
void lazy(int root)
{
    if(tr[root].lzx!=-1){
        tr[lc].lzx=tr[root].lzx,tr[rc].lzx=tr[root].lzx;
        tr[lc].val=tr[root].lzx,tr[rc].val=tr[root].lzx;
        tr[root].lzx=-1;
    }
}
//--------------------
inline int gcd(int a,int b)
{
    if(b==0) return a;
    return gcd(b,a%b);
}
//--------------------
inline void Update1(int root,int l,int r,int L,int R,int x)
{
    if(l==L && r==R){
        tr[root].lzx=x;
        tr[root].val=x;
        return ;
    }
    lazy(root);
    if(R<=mid) Update1(lc,l,mid,L,R,x);
    else if(L>mid) Update1(rc,mid+1,r,L,R,x);
    else Update1(lc,l,mid,L,mid,x),Update1(rc,mid+1,r,mid+1,R,x);
    Push(root);
}
//---------------------
inline void Update2(int root,int l,int r,int L,int R,int x)
{
    if(l==L && r==R){
        if(tr[root].val<=x) return ;
        if(tr[root].lzx!=-1){
            tr[root].lzx=gcd(x,tr[root].lzx);
            tr[root].val=tr[root].lzx;
            if(l==r) a[l]=tr[root].lzx;
            return ;
        }
        if(l==r){
            if(a[l]>x) a[l]=gcd(x,a[l]);
            return ;
        }
        lazy(root);
        Update2(lc,l,mid,L,mid,x);
        Update2(rc,mid+1,r,mid+1,R,x);
        Push(root);
        return;
    }
    lazy(root);
    if(R<=mid) Update2(lc,l,mid,L,R,x);
    else if(L>mid) Update2(rc,mid+1,r,L,R,x);
    else Update2(lc,l,mid,L,mid,x),Update2(rc,mid+1,r,mid+1,R,x);
    Push(root);
    return ;
}
//--------------------
inline void out(int root,int l,int r)
{
    if(tr[root].lzx!=-1){
        for(int i=l;i<=r;i++)
          cout<<tr[root].lzx<<" ";
          return ;
    }
    if(l==r){
        cout<<a[l]<<" ";
        return ;
    }
    lazy(root);
    out(lc,l,mid);
    out(rc,mid+1,r);
}
//--------------------
int main()
{
    //freopen("lx.in","r",stdin);

    T=Readint();
    while(T--){
        n=Readint();
        for(int i=1;i<=n;i++) a[i]=Readint();
        build(1,1,n);
        q=Readint();
        while(q--){
            t=Readint(),l=Readint(),r=Readint(),x=Readint();
            if(t==1) Update1(1,1,n,l,r,x);
            else Update2(1,1,n,l,r,x);
        }
        out(1,1,n);puts("");
    }
    return 0;
}
用 SAP Fiori Launchpad Content Manager 做目录传输:把 Catalog 变更稳稳送到目标系统 摘要:SAP Fiori项目中,目录传输是确保应用一致交付的关键环节。开发团队常遇到目录在不同系统/客户端间不一致的问题,核心在于理解Launchpad内容管理的两种作用域:系统级(/UI2/FLPCM_CONF)使用workbench请求跨系统传输,客户端级(/UI2/FLPCM_CUST)通过customizing请求按SCC4设置传输。混淆作用域会导致目录分叉,如系统级目录被客户端本地修改后形成独立副本。官方推荐使用Content Manager而非过时的Launchpad Designer,并强调手 阅读详情

相关推荐

【2021末九软工边缘人保研】川大-中科院网络中心-华师夏令营+哈工大本-中科院网络中心-西交-厦大-中山-武大-北航预推免

2021末九软工边缘人保研记录一、写在前面二、个人背景 一、写在前面 2020年计算机保研可谓是诸神黄昏,卷的头破血流(指我等菜鸡)。疫情的原因,今年的夏令营和预推免基本全部改为线上,机试取消,能不能拿到offer基本完全取决于背景以及面试表现(当然也有个别头铁非要机试,甚至笔试的学校)。大佬们offer收割不停,我等边缘人只能看着一封封拒信发呆。 这种情况下,只有985 Rank5%以及211 Rank2%之前的大佬能够较为轻松地拿到面试入场券。贴一个上交电院夏令营要求你们感受一下: 预推免相比起夏令营

weixin_43222706的博客 4235

[HDU4902]Nice boat(线段树)

传送门 题意: 给你n个数,Q次操作,操作分两类 第一类操作(type1):将区间内[l,r][l,r][l,r]的数改成xxx 第二类操作(type2):将区间[l,r][l,r][l,r]内a[i]&gt;xa[i]&gt;xa[i]>x的改成gcd(a[i],x)gcd(a[i],x)gcd(a[i],x) 你需要输出Q次操作后的序列 今天考试的第二题,还是比较良心的,结果...

私は Mocha!! 499

行政数据分析大屏实战:用Tableau从Excel到看板的完整搭建流程(含数据连接与字段计算避坑)

本文详细介绍了如何利用Tableau从Excel数据源搭建行政数据分析大屏的完整流程,涵盖数据准备、连接技巧、计算字段优化、看板设计及动态交互部署。通过五阶工作流,帮助用户高效处理多源异构数据,实现业务洞察与可视化呈现,提升行政数据分析效率。

weixin_29696711的博客 338

HDOJ 4903 The only survival

Discription: There is an old country and the king fell in love with a devil. The devil always ask the king to do some crazy things. Although the king used to be wise and beloved by his people. Now he...

weixin_30797027的博客 174

保姆级教程:在DolphinScheduler 3.x中配置Apache SeaTunnel任务(Flink/Spark双引擎)

本文提供了一份详细的教程,指导如何在DolphinScheduler 3.x中配置Apache SeaTunnel任务,支持Flink和Spark双引擎。从环境准备、脚本选择到配置文件编写和任务调度优化,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效集成SeaTunnel到海豚调度系统中。

weixin_42524945的博客 194

高精度地图数据的结构

本文是个人在学习高精度地图数据结构的心得,主要是描述高精度地图的几层数据结构以及元数据信息。

qq_40664711的博客 5575

2021-05-15 Nice boat 线段树对区间进行修改和访问(懒操作)

Nice boat 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

m0_51530106的博客 488

非技术面试题精选大全

回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。企业喜欢有礼貌的求职者。

吃面爱放香菜的博客 435

HDU - 4902 Nice boat线段树

题目描述 对一段序列有两种操作 将区间全部赋成一个值 将区间中大于k的值变成该值与k的gcd 思路 显然这是线段树 我们维护一个懒标用来标记该区段是否被赋值,然后正常写线段树就好 可以维护一个max来剪枝(不写会出现奇怪的段错误,不明原因) #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define lson x

wwwttlll的博客 433

【智能流体力学】使用ANSYS Fluent + SpaceClaim + SCDM制作流体力学前处理的几何模型

生成来源.scdoc文件来自前处理工具生成的模型数据,或在 FLUENT 中创建和保存的模型。生成方式: 通过前处理工具导出网格数据,或在 FLUENT 中设置并保存模型。作用: 用于储存模型的结构信息和设置,确保在 FLUENT 中的正确导入和使用。.x_t文件是 Parasolid 文件格式的扩展名,用于存储三维模型数据。在 ANSYS Fluent 中,这种格式通常用于在前处理工具之间交换几何数据。要创建.x_t。

源代码杀手的博客 3265

工业级Modbus ASCII实时监控系统(WinForms完整实现)

本文介绍了一个基于WinForms的工业级Modbus ASCII实时监控系统实现方案。该系统采用经典工控界面布局,包含串口配置、数据采集控制和实时数据显示三大区域。核心功能包括:串口通信参数设置、Modbus从站地址配置、寄存器数据采集、实时数据表格展示和趋势图绘制。系统通过ModbusAsciiClient类实现通信核心,采用定时器轮询机制采集数据,支持最多100个数据点的历史趋势显示。界面设计注重用户体验,配置区位于左侧,主显示区在右侧,底部为状态和日志区,符合工业控制系统的操作习惯。代码示例展示了窗

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 278

HDU 4902 Nice boat (线段树)

Nice boat 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4902 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...

dituonian8372的博客 197

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

HDU 4902 Nice boat 线段树 区间更新

HDU 4902 Nice boat 题意: 一个序列, 两种操作.  1. 把一个区间全部更改为x 2. 把一个区间比x大的数全部修改为gcd(ai,x) 思路: lazy tag pushDown的原则是把该节点所有tag都推到子节点 所以分情况讨论一下即可  最后到叶节点直接更新数列 #include #define lson num<<1 #define

Code of Duty 585

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【HDU No. 4902】 数据结构难题 Nice boat

【HDU No. 4902】 数据结构难题 Nice boat

代码改变世界 557

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

Nice boat 大意:给你一个区间,每次可以进行两种操作,1:把区间中的数全都变成x  2:把区间中大于x的数变成gcd(a[i], x),最后输出序列。 思路:线段树成段更行,用num数组的叶子存储数据,节点当作lazy来使用。 #include const int maxn = 100005; int num[maxn<<2]; int gc

GLSilence的专栏 824

hdu 4902 Nice boat (线段树)

/* 题意: 给你n个数 q个询问: q==1时 l到r区间的数更新为x q==2时 l到r区间的数更新为gcd(a[i],x) 输出变化之后的n个数 */ //模拟 # include # include # include # include using namespace std; # define N 100005 int a[N],e[N]; int b[N],c[N]

苍竹林 443

Nice boat HDU - 4902(线段树+区间更新&&延迟标记+思维)

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...

starlet_kiss的博客 330

hdu 4902 Nice boat(线段树区间更新lazytag·单点更新)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4902 Nice boat Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1925    Accepted Submiss

theArcticOcean 815

HDU - 4902 Nice boat 线段树维护最大最小值

题意:1操作让区间l~r的值为x 2操作让区间大于x的值为gcd(x,ai) 我们维护区间最大值最小值 当最大值等于最小值时 区间的数都相同 这样可以减少2操作的时间 另外 对于mx[id]<=x的区间我们不必要在更新 也可以剪掉 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 1e5+10; int a[N],ans[N];.

weixin_43824564的博客 350

HDU - 4902 Nice boat(线段树)

题目链接:点击查看 题目大意:给出 n 个数字组成的数列 a ,需要进行 m 次操作,每次操作分为以下两种: 1 l r val:将区间 [ l , r] 内的 a[ i ] 都赋值为val 2 l r val:将区间 [ l , r ] 内大于 val 的 a[ i ] 都赋值为 gcd( a[ i ] , val ) 最后输出整个序列 题目分析:因为题目很良心的给了 15 秒,所以可以直接上手写,写一点暴力剪枝就好了,具体剪枝方法如下: 每个节点维护一个 mmax 最大值,在执行操作 2 ..

Falcon的博客 524

【HDU】4902 Nice boat 线段树

传送门:【HDU】4902 Nice boat

poursoul 1063

HDU 4902 Nice boat(线段树)

多校中的线段树,看题解出题人的意思这道题目应该不简单。但是好像数据比较弱啊。竟然可以水过去啊、、、 用一个标记,标记当前这一段是否被更新过,如果更新过就为1,否则为0。 一定要注意最后一个空格输出。 Nice boat Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Ot

I am a slow walker, but I never walk backwards! 1286

多校第4场 HDU 4902 Nice boat 线段树

思路:这题比赛的时候宝哥说的思路我觉得对的,就是当是2操作的时候,先把数放到数组里,最后查询输出的时候再统一计算,不过那时敲得烂死了,debug了两天,靠…… 上午写的vector在pushDown的时候又忘了clear了,然后MLE了一早上,尼玛,还以为用的数组太大超了,然后又改成结构体,还是MLE,最后把别人的代码交上去发现没MLE,疯了一中午,最后无聊的时候才发现这个错误,尼玛……发现自己

liwei的专栏 900

HDU - 4902 - Nice boat ( 线段树 )

题目链接:点击进入 题目 题意 n个数,q次操作: 1 l r x 将 [ l , r ] 内的数都变为 x 2 l r x 把 [ l , r ] 内比 x 大的数都变为 gcd ( a [ i ] , x ) 思路 第一个操作是一个典型的区间修改问题,第二个操作,其实也可以看作一个区间修改的问题,看第一个操作,我们可以知道,经过第一个操作过后,一整个区间都会变为同一个数,所以,我们对于每个区间可以维护一个 lazy 标记,看区间内的数是不是同一个数,用 data 记录这个数,同时我们可以维护一个 m

Cosmic_Tree的博客 568

hdu4902Nice boat(线段树区间更新)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 题目大意:给你一串序列an,有两种操作,操作1:将区间l-r内的所有值替换成x,操作2:将区间l-r内大于x的数替换成x和a[i]的最大公约数; 思路:本题需要用lazy标记剪枝,操作一需要将区间内的所有值都替换,这是很简单的区间修改,用lazy标记存一下需要替换的值,另外本题需要用节点来表示...

qq_46536902的博客 90

hdu 4902 Nice boat 线段树

题目链接 给n个数, 两种操作, 第一种是将区间内的数变成x, 第二种是将区间内大于x的数变为gcd(x, a[i])。 开三个数组, 一个记录区间最大值, 这样可以判断是否更新这一区间, 一个lazy标记, 还有一个num数组记录这一区间的数是否相同, 如果不同则为-1。然后暴力更新就可以 1 #include<bits/stdc++.h> 2 using nam...

weixin_30693683的博客 141
上一篇: Alice 与 Bob 的游戏 (概率DP)
下一篇: NOIP2017 赛前模拟(2017.10.6)
Amessal
博客等级 码龄10年 9粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值