数据太弱,直接让我小暴力一下就过了,一开始没注意到时间是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. BZOJ 4302 Buildings 解题报告

    这个题好像很有趣的样子. 题目分析: 房间都是 $1\times k$ 的,也就是一条一条的.这个好像比较显然的样子. 一个房间如果要覆盖某个格子$u$,那么这个房间的面积至少为 $dis(u, Bo ...

  2. 2013 Asia Chengdu Regional Contest

    hdu 4786 Fibonacci Tree http://acm.hdu.edu.cn/showproblem.php?pid=4786 copyright@ts 算法源于ts,用最小生成树可以求 ...

  3. ios开发之多线程资源争夺

    上一篇介绍了常用的多线程技术,目前开发中比较常用的是GCD,其它的熟悉即可.多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用率来提高系统的整体性能,但是会出现多个线程对同一资源 ...

  4. jquery-validation 学习总结

    一.用前必备 项目主页:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ API: http://jquery.bassis ...

  5. 前端学习笔记汇总(之merge方法)

    学习笔记 关于Jquery的merge方法 话不多说,先上图 使用jquery时,其智能提示如上,大概意思就是合并first和second两个数组,得到的结果是first+(second去重后的结果) ...

  6. NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC)

    NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC) ARGUS 1月13日 发布 推荐 0 推荐 收藏 2 收藏,1.1k 浏览 文章整理中...... 实现思路 当服务器接收 ...

  7. django在nginx uwsgi和tornado异步方案在项目中的体验

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://rfyiamcool.blog.51cto.com/1030776/1397495 ...

  8. hdu 2112 HDU Today (最短路,字符处理)

    题目 题目很简单,只是多了对地名转化为数字的处理,好吧,这我也是参考网上的处理办法,不过大多数的人采用map来处理 注意初始化注意范围,不然会wa!!!(这是我当时wa的原因org) 大家容易忽视的地 ...

  9. SPOJ CNTPRIME 13015 Counting Primes (水题,区间更新,求区间的素数个数)

    题目连接:http://www.spoj.com/problems/CNTPRIME/ #include <iostream> #include <stdio.h> #incl ...

  10. POJ 1417 True Liars(种类并查集+dp背包问题)

    题目大意: 一共有p1+p2个人,分成两组,一组p1,一组p2.给出N个条件,格式如下: x y yes表示x和y分到同一组,即同是好人或者同是坏人. x y no表示x和y分到不同组,一个为好人,一 ...