数据太弱,直接让我小暴力一下就过了,一开始没注意到时间是15000MS,队友发现真是太给力了

#include <cstdio>
#include <cstring>
int n,q,a[],x[],p,l[],r[],t[];
int tree[];
void build(int l, int r, int rt)
{
tree[rt]=-;
if(l==r){
tree[rt]=;
return;
}
int m=(l+r)/;
build(l,m,rt*);
build(m+,r,rt*+);
}
void update(int x, int y, int z, int l, int r, int rt)
{
if(x<=l&&y>=r){
tree[rt]=z;
return;
}
if(tree[rt]!=-) {
tree[rt*]=tree[rt];
tree[rt*+]=tree[rt];
tree[rt]=-;
}
int m=(l+r)/;
if(x<=m) update(x,y,z,l,m,rt*);
if(y>m) update(x,y,z,m+,r,rt*+);
}
int query(int k, int l, int r, int rt)
{
if(tree[rt]!=-) return tree[rt];
int m=(l+r)/;
if(k<=m) return(query(k,l,m,rt*));
else return(query(k,m+,r,rt*+));
}
int main()
{
int cas;
scanf("%d",&cas);
while(cas--){
memset(tree,-,sizeof(tree));
scanf("%d",&n);
build(,n,);
for(int i=; i<=n; i++)
scanf("%d",&a[i]);
scanf("%d",&q);
for(int i=; i<=q; i++)
{
scanf("%d%d%d%d",&t[i],&l[i],&r[i],&x[i]);
if(t[i]==) update(l[i],r[i],i,,n,);
}
for(int i=; i<=n; i++){
p=query(i,,n,);
if(p) a[i]=x[p];
for(int j=p+; j<=q; j++)
if(t[j]==&&l[j]<=i&&r[j]>=i){
if(a[i]>x[j]){
int aa=a[i],bb=x[j],t=aa%bb;
while(t!=){
aa=bb;
bb=t;
t=aa%bb;
}
a[i]=bb;
}
}
}
for(int i=; i<=n; i++)
printf("%d ",a[i]);
printf("\n");
}
}

CLJ给出的正确题解:

  

既然gcd(a[i],x)<0.5a[i]

  那么最多每个数字修改不会超过32次,

应该便是储存区间最大值以及增加判断区间内数字是否一致的flag

  每次对于区间最大值>x的区间进行修改,最差情况无非是每个数字都不同,且数字都大于x,nlgn,而最多就修改32次,因此最差情况nlg^2n。

  虽然证明麻烦,但是凭借感觉还是能够明白的。

实现相对简单便不再累赘。

HDU 4902的更多相关文章

  1. HDU 4902 (线段树)

    Problem Nice boat(HDU 4902) 题目大意 维护一个序列,两种操作. 第一种操作,将一段区间[l,r]赋值为x. 第二种操作,将一段区间[l,r]中大于等于x的数与x求gcd. ...

  2. HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...

  3. HDU 4902 Nice boat (线段树)

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

  4. hdu 4902 线段树+逆向模拟

    http://acm.hdu.edu.cn/showproblem.php?pid=4902 出n个数,然后对这n个数进行两种操作: 如果是 1 l r x,则把 [l, r] 区间里面的每一个数都变 ...

  5. hdu 4902 Nice boat(线段树区间改动,输出终于序列)

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

  6. hdu 4902 Nice boat--2014 Multi-University Training Contest 4

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=4902 Nice boat Time Limit: 30000/15000 MS (Java/Othe ...

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

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

  8. 2014多校第四场1006 || HDU 4902 Nice boat (线段树 区间更新)

    题目链接 题意 : 给你n个初值,然后进行两种操作,第一种操作是将(L,R)这一区间上所有的数变成x,第二种操作是将(L,R)这一区间上所有大于x的数a[i]变成gcd(x,a[i]).输出最后n个数 ...

  9. hdu 4902 Nice boat 线段树

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

随机推荐

  1. 第一个Nodejs程序

    我的第一个Nodejs程序:Hello World var http = require("http"); http.createServer(function(request, ...

  2. ApplicationContext

    参考网址: http://baike.baidu.com/link?url=IPzNiVScxSd6ijhDeCKKEuywPqisDeTfyYSQIPRZqLxy6onkPddfzyvcWQC6_M ...

  3. 【BZOJ】【1934】【SHOI 2007】Vote 善意的投票

    网络流/最小割 简单题= =直接利用最小割的性质: 割掉这些边后,将所有点分成了两部分(两个连通块),我们可以假定与S相连的是投赞成票,与T相连的是投反对票. 那么如果一个小朋友原本意愿是睡觉,那么连 ...

  4. Java多线程——<五>后台线程(daemon)

    一.后台线程(守护线程) 学一个东西,最重要的一点就是,为什么要用它? 后台线程区别于普通线程,普通线程又可以称为用户线程,只完成用户自己想要完成的任务,不提供公共服务.而有时,我们希望编写一段程序, ...

  5. AnkhSVN 安装

    为 visual Studio 2013 添加 AnkhSVN 步骤 到 https://ankhsvn.open.collab.net/downloads 下载 2.6x或以上 安装 AnkhSvn ...

  6. LoadAssetAtPath 与 Load 的区别

    一.官方的文档 Resources.LoadAssetAtPath Returns a resource at an asset path (Editor Only). This function a ...

  7. Implicitly Typed Local Variables

    Implicitly Typed Local Variables It happens time and time again: I’ll be at a game jam, mentoring st ...

  8. Longest Repeated Sequence【微软编程一小时-题目2】

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 You are given a sequence of integers, A = a1, a2, ... an. A c ...

  9. 2013 Multi-University Training Contest 2 Balls Rearrangement

    先算出lcm(a,b),如果lcm>=n,则直接暴力解决:否则分段,求出0-lcm内的+0-n%lcm内的值. 再就是连续相同的一起计算!! #include<iostream> # ...

  10. mac 安装mysql 报错“ERROR 2002 (HY000): Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2)” 解决办法

    首先安装 homebrew 再 brew install mysql 之后连接 mysql 无论是登录还是修改初始密码都会报如下的错误 ERROR 2002 (HY000): Can not conn ...