BZOJ3038 && BZOJ3211 上帝造题的七分钟2 && 花神游历各国 (线段树 + 开方标记)

来源:互联网 发布:java用户输入数组 编辑:程序博客网 时间:2024/04/26 05:27

传送门
这道题看一眼就知道是线段树的题目,但是一看,题目要求区间开方,我就又傻了。想了一会,发现就算是109在开方5次之后就变成1了,所以就算是我们单个开方,时间复杂度也就是O(NlogN)。但是为了避免重复开方,我们要给线段树的每一个节点做一个标记,表示下面的区间是否全部为10。那样我们就可以避免重复开方了。

代码:

#include <cstdio>#include <cmath>#define LL long longinline void swap(int &a, int &b) {int c = a; a = b; b = c;}#define MAXN 100005inline void GET(LL &n){    n = 0; char c;    do c = getchar(); while(c > '9' || c < '0');    while(c <= '9' && c >= '0') {n = n * 10 + c - '0'; c = getchar();}}inline void GET(int &n){    n = 0; char c;    do c = getchar(); while(c > '9' || c < '0');    while(c <= '9' && c >= '0') {n = n * 10 + c - '0'; c = getchar();}}struct node{    LL sum;    bool lazy;    node(){lazy = 0;}}t[MAXN<<1];inline int idx(int l, int r) {return (l + r) | (l != r);}void pushup(int l, int r){    int mid = (l + r) >> 1;    t[idx(l, r)].sum = t[idx(l, mid)].sum + t[idx(mid+1, r)].sum;    t[idx(l, r)].lazy = t[idx(l, mid)].lazy && t[idx(mid+1, r)].lazy;}void build(int l, int r){    int i = idx(l, r);    if(l == r)    {        GET(t[i].sum);        return;    }    int mid = (l + r) >> 1;    build(l, mid); build(mid+1, r);    t[idx(l, r)].sum = t[idx(l, mid)].sum + t[idx(mid+1, r)].sum;}int op, L, R, n, m;void Ins(int l, int r){    int i = idx(l, r);    if(l > R || r < L) return;    if(t[i].lazy) return;    if(l == r)    {        t[i].sum = sqrt(t[i].sum);        if(t[i].sum == 1 || t[i].sum == 0) t[i].lazy = 1;        return;    }    int mid = (l + r) >> 1;    Ins(l, mid);    Ins(mid+1, r);    pushup(l, r);}LL Sum(int l, int r){    if(l > R || r < L) return 0;    if(l >= L && r <= R) return t[idx(l, r)].sum;    int mid = (l+r)>>1;    return Sum(l, mid) + Sum(mid+1, r);}int main(){    GET(n);    build(1, n);    GET(m);    while(m --)    {        GET(op);GET(L);GET(R);        if(op == 2)            Ins(1, n);        else if(op == 1)            printf("%lld\n", Sum(1, n));    }    return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 盆栽百合花开完之后怎么办 土养百合花谢了怎么办 多肉叶子不饱满怎么办 冬天富贵竹叶子发黄怎么办水养 富贵竹叶子发黄怎么办水养 水养富贵竹有虫怎么办 水养的富贵竹叶子发黄怎么办 百合花水里的盐放多了怎么办 芦荟叶子发黄干瘪了怎么办 水插百合不开花怎么办 干百合冷水泡了怎么办 牡丹籽油过期了怎么办 ps画布建小了怎么办 腰突然疼的受不了了怎么办 微信里面打不开表格怎么办? 浏览器未正常加载相关控件怎么办 猫的眼睛发炎了怎么办 橡胶手机壳松了怎么办 橡胶手机壳小了怎么办 苹果手机下载不了软件了怎么办 苹果手机浏览器下载不了软件怎么办 小狗吃了硬的棉花怎么办 小狗吃了隔尿垫里的棉花怎么办 眼睫毛掉进眼睛里怎么办 爱掉头发怎么办吃什么 头皮屑多头发干燥脱发怎么办 剪了头发后悔了怎么办 2岁宝宝发际线高怎么办 脱发怎么办吃什么能长发 后面头发睡平了怎么办 鸟羽毛长得不好怎么办 吃激素药头发掉怎么办 吃了药头发掉怎么办 头皮痒头发掉的厉害怎么办 西昌学院被记过了怎么办? 初三了数学太差怎么办 板绘线条不流畅怎么办 嘴被风吹歪了怎么办 被风吹的嘴歪了怎么办 怀孕一个多月见红了怎么办 b本扣了6分怎么办