Problem Nice boat(HDU 4902)

题目大意 

  维护一个序列,两种操作。

  第一种操作,将一段区间[l,r]赋值为x。

  第二种操作,将一段区间[l,r]中大于等于x的数与x求gcd。

  询问所有操作结束后的序列。

解题分析

  用线段树开一个标记same,表示这段区间中的数是否相同,若相同则为该数,否则为-1。

  对于第二种操作,对于覆盖区间内的same不为-1的子区间暴力修改。

  虽然时限有15s,但貌似跑得挺快的,只用了1s,不知是数据水还是什么缘故。

参考程序

 #include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std; #define N 100008
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int same[N*];
int n; int gcd(int x,int y){
return y ? gcd(y,x % y): x;
} void pushup(int rt){
if (same[rt<<]==same[rt<<|]) same[rt]=same[rt<<];
else same[rt]=-;
} void pushdown(int rt){
if (~same[rt]){
same[rt<<]=same[rt<<|]=same[rt];
same[rt]=-;
}
} void build(int l,int r,int rt){
same[rt]=-;
if (l==r){
scanf("%d",&same[rt]);
return;
}
int m=(l+r) / ;
build(lson);
build(rson);
pushup(rt);
} void update_1(int L,int R,int val,int l,int r,int rt){
if (L<=l && r<=R){
same[rt]=val;
return;
}
pushdown(rt);
int m=(l+r) /;
if (L<=m) update_1(L,R,val,lson);
if (m< R) update_1(L,R,val,rson);
pushup(rt);
} void update_2(int L,int R,int val,int l,int r,int rt){
if (L<=l && r<=R){
if (~same[rt]){
if (same[rt]>=val) same[rt]=gcd(same[rt],val);
return;
}
}
pushdown(rt);
int m=(l+r) /;
if (L<=m) update_2(L,R,val,lson);
if (m< R) update_2(L,R,val,rson);
pushup(rt);
} void query(int l,int r,int rt){
if (l==r){
printf("%d ",same[rt]);
return;
}
pushdown(rt);
int m=(l+r) / ;
query(lson);
query(rson);
} int main(){
int T;
scanf("%d",&T);
while (T--){
scanf("%d",&n);
build(,n,);
int type,a,b,val,q;
scanf("%d",&q);
while (q--){
scanf("%d %d %d %d",&type,&a,&b,&val);
if (type==) update_1(a,b,val,,n,);
if (type==) update_2(a,b,val,,n,);
}
query(,n,);
printf("%\n");
}
}

HDU 4902 (线段树)的更多相关文章

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

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

  2. hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)

    Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  3. hdu 3974 线段树 将树弄到区间上

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. hdu 3436 线段树 一顿操作

    Queue-jumpers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  5. hdu 3397 线段树双标记

    Sequence operation Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  6. hdu 4578 线段树(标记处理)

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others) ...

  7. hdu 4533 线段树(问题转化+)

    威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  8. hdu 2871 线段树(各种操作)

    Memory Control Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  9. hdu 4052 线段树扫描线、奇特处理

    Adding New Machine Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

随机推荐

  1. 关于html中table表格tr,td的高度和宽度

    关于html中table表格tr,td的高度和宽度 关于html中table表格tr,td的高度和宽度 做网页的时候经常会遇到各种各样的问题,经常遇到的一个就是会碰到表格宽度对不齐的问题.首先,来分析 ...

  2. linux如何修改主机名

    一:#hostname hn1 二:修改/etc/sysconfig/network中的 HOSTNAME=hn1三:修改/etc/hosts文件  127.0.0.1 hn1

  3. Objective-C:模拟按钮点击事件理解代理模式

    OC中的协议(Protocol)和和.NET中的接口(Interface)类似,简单来讲,就是一系列方法的列表,其中声明的方法可以被任何类实现.不同的是,在.NET中,如果某个类实现了一个接口,就必须 ...

  4. oracle用户

    如果要了解oracle中用户信息,可以查询数据字典dba_users.在sql*plus中,使用system用户登录,查询语句如下: select username,account_status fr ...

  5. Metro UI(Win 8风格)页面设计小记

    一.Metro风格菜单——简单 HTML <div class="pagina "> <div class="linha"> <d ...

  6. weblogic部署ssh2应用出现异常

    一般在domains\your_Domain\bin\startWebLogic.cmd 中找到set CLASSPATH=%CLASSPATH%;%MEDREC_WEBLOGIC_CLASSPATH ...

  7. 铁人系列(2)LA2218

    思路:对于每个人  都会有n-1个半片面  加上x>0,y>0,1-x-y>0(这里的1抽象为总长) 代码是粘贴的  原来写的不见了  orz............ // LA22 ...

  8. (转)onTouchEvent方法的使用

      (转)onTouchEvent方法的使用 手机屏幕事件的处理方法onTouchEvent.该方法在View类中的定义,并且所有的View子类全部重写了该方法,应用程序可以通过该方法处理手机屏幕的触 ...

  9. Div层的展开与收缩的代码

    <html> <head> <title>div展开收缩代码</title> <style> * { margin:0; padding:0 ...

  10. POJ 1202 Family 概率,DP,高精 难度:2

    http://poj.org/problem?id=1202 难度集中在输出格式上,因为输出格式所以是高精度 递推式: 血缘肯定只有从双亲传到儿子的,所以,设f,m为双亲,son为儿子,p[i][j] ...