关闭

[BZOJ3038]上帝造题的七分钟2

标签: 线段树
258人阅读 评论(0) 收藏 举报
分类:

题意


给定一个数列,有两种操作,询问一段区间[l,r]内的和或者对于i[l,r]xi=xi


因为xi1012,所以对每个数最多开大约6~7次根就能变成1,所以可以对已经全变成1的区间打标记,还没有全部变成1的区间暴力。

#include <cstdio>
#include <cmath>
#define N 100010

typedef long long ll;

int n,m,op,l,r;
ll A[N];

struct t{
    int l,r;
    ll sum;
}T[N<<2];

inline void reaD(int &x){
    char Ch=getchar();x=0;
    for(;Ch>'9'||Ch<'0';Ch=getchar());
    for(;Ch>='0'&&Ch<='9';x=x*10+Ch-'0',Ch=getchar());
}

inline void reaD(ll &x){
    char Ch=getchar();x=0;
    for(;Ch>'9'||Ch<'0';Ch=getchar());
    for(;Ch>='0'&&Ch<='9';x=x*10+Ch-'0',Ch=getchar());
}

void build(int g,int l,int r){
    T[g].l=l;T[g].r=r;
    if(l==r){T[g].sum=A[l];return;}
    int mid=l+r>>1;
    build(g<<1,l,mid);build(g<<1|1,mid+1,r);
    T[g].sum=T[g<<1].sum+T[g<<1|1].sum;
}

ll query(int g,int l,int r){
    if(T[g].sum==T[g].r-T[g].l+1) return r-l+1;
    if(T[g].l==l&&T[g].r==r) return T[g].sum;
    int mid=T[g].l+T[g].r>>1;
    if(r<=mid) return query(g<<1,l,r);
    if(l>mid) return query(g<<1|1,l,r);
    return query(g<<1,l,mid)+query(g<<1|1,mid+1,r);
}

void update(int g,int l,int r){
    if(T[g].sum==T[g].r-T[g].l+1) return;
    if(T[g].l==T[g].r){T[g].sum=(int)sqrt(T[g].sum);return;}
    int mid=T[g].l+T[g].r>>1;
    if(r<=mid) update(g<<1,l,r); else
    if(l>mid) update(g<<1|1,l,r); else
    update(g<<1,l,mid),update(g<<1|1,mid+1,r);
    T[g].sum=T[g<<1].sum+T[g<<1|1].sum;
}

int w[20],wt;

void Pt(ll x){
    if(!x){putchar(48);putchar('\n');return;}
    while(x) w[++wt]=x%10,x/=10;
    for(;wt;wt--)putchar(w[wt]+48);putchar('\n');
}

inline void swap(int &x,int &y){int z=x;x=y;y=z;}

int main(){
    reaD(n);
    for(int i=1;i<=n;i++) reaD(A[i]);
    build(1,1,n);
    reaD(m);
    for(int i=1;i<=m;i++){
        reaD(op);reaD(l);reaD(r);
        if(l>r) swap(l,r);
        if(op) Pt(query(1,l,r));
        else update(1,l,r);
    }
    return 0;
}
0
0
查看评论

BZOJ 3038 上帝造题的七分钟2 树状数组+并查集

题目大意:给定一个序列,提供下列操作: 1.将[l.r]区间内每个数a[i]变为sqrt(a[i]) 2.查询[l,r]区间的和 同BZOJ3211 花神游历各国 链接:http://blog.csdn.net/popoqqq/article/details/39961591...
  • PoPoQQQ
  • PoPoQQQ
  • 2014-10-10 17:52
  • 1480

【树状数组】[CQBZOJ2719]上帝造题的七分钟I

二维树状数组区间修改、查询裸题。#include<cstdio> #define MAXN 2048 int n,m,c[MAXN+10][MAXN+10],ci[MAXN+10][MAXN+10],cj[MAXN+10][MAXN+10],cij[MAXN+10][MAXN+10]; ...
  • outer_form
  • outer_form
  • 2015-09-24 13:28
  • 1055

Tyvj P1941 「Poetize4」上帝造题的七分钟2

树状数组+并查集
  • SenyeLicone
  • SenyeLicone
  • 2016-10-05 21:17
  • 332

BZOJ 3132: 上帝造题的七分钟【树状数组(二维区间加,区间查询

二维的区间加区间查询,稍微推一下式子就好…… 反正就长那样 我当时肯定没睡醒……喵的……推得都是些什么鬼啊QAQ struct似乎是会跑得快一点……?反正我这个写法慢的一比…… #include #define MAXN 2100 using namespace std; int n,m; stru...
  • Flaze_
  • Flaze_
  • 2016-09-21 15:12
  • 384

TYVJ 1941 BZOJ3038 上帝造题的七分钟2 并查集+树状数组

背景 XLk觉得《上帝造题的七分钟》不太过瘾,于是有了第二部。 描述“第一分钟,X说,要有数列,于是便给定了一个正整数数列。 第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作。 第三分钟,k说,要能查询,于是便有了求一段数的和的操作。 第四分钟,彩虹喵说,要是n...
  • qq_31785871
  • qq_31785871
  • 2016-07-08 10:51
  • 244

【BZOJ3132】上帝造题的七分钟

Description“第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵。第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作。第三分钟,k说,要能查询,于是便有了求给定矩形区域内的全部数字和的操作。第四分钟...
  • CreationAugust
  • CreationAugust
  • 2016-02-27 08:20
  • 762

[bzoj3038]上帝造题的七分钟2

题目描述XLk觉得《上帝造题的七分钟》不太过瘾,于是有了第二部。 “第一分钟,X说,要有数列,于是便给定了一个正整数数列。 第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作。 第三分钟,k说,要能查询,于是便有了求一段数的和的操作。 第四分钟,彩虹喵说,要是noi...
  • WerKeyTom_FTD
  • WerKeyTom_FTD
  • 2017-01-19 22:43
  • 212

bzoj3038: 上帝造题的七分钟2

题面在这里 题意: 给一个序列,两种操作: 1. 区间开平方(下取整) 2. 区间求和 做法: 有一个性质就是,一个数不停开平方最多开log次就会变成1. 所以我们可以对区间保存一个tag表示这个区间有没有不是0或1的数,如果区间全是0或1就不用往下更新。 然后大概就可以lo...
  • bestFy
  • bestFy
  • 2018-01-05 16:15
  • 52

【bzoj3038】 上帝造题的七分钟2

#include #include #include using namespace std; long long n,m,a[100001]; struct data{ int l,r;long long sum; bool flag; }tr[400001]; long long...
  • ndsffx501ccy
  • ndsffx501ccy
  • 2014-03-15 16:18
  • 567

【bzoj3038】上帝造题的七分钟2

*题目描述: XLk觉得《上帝造题的七分钟》不太过瘾,于是有了第二部。 “第一分钟,X说,要有数列,于是便给定了一个正整数数列。 第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作。 第三分钟,k说,要能查询,于是便有了求一段数的和的操作。 第四分钟,彩虹喵说,要...
  • qq_33442848
  • qq_33442848
  • 2016-06-17 15:02
  • 185
    个人资料
    • 访问:89858次
    • 积分:4640
    • 等级:
    • 排名:第7493名
    • 原创:378篇
    • 转载:0篇
    • 译文:0篇
    • 评论:16条
    文章分类