2021CCPC东北四省赛 D. Lowbit 势能线段树
传送门
分析
分析一下x+lowbit(x)x + lowbit(x)x+lowbit(x)这个操作
如果多次操作之后,那么xxx中只会有最高位存在一,这个时候再执行一次操作就会使整个数字乘二
所以,我们可以在线段树上给每个区间打上标记,标记这个区间是否可以直接乘二进行修改即可
代码
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define debug(x) cout<<#x<<":"<<x<<endl;
#define dl(x) printf("%lld\n",x);
#define di(x) printf("%d\n",x);
#define _CRT_SECURE_NO_WARNINGS
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
typedef vector<int> VI;
const int INF = 0x3f3f3f3f;
const int N = 2e5 + 10;
const ll mod = 998244353;
const double eps = 1e-9;
const double PI = acos(-1);
template<typename T>inline void read(T &a) {char c = getchar(); T x = 0, f = 1; while (!isdigit(c)) {if (c == '-')f = -1; c = getchar();}while (isdigit(c)) {x = (x << 1) + (x << 3) + c - '0'; c = getchar();} a = f * x;
}
int gcd(int a, int b) {return (b > 0) ? gcd(b, a % b) : a;}
int n,a[N],m;struct Node{int l,r;ll sum,add;bool flag;
}tr[N * 4];ll lowbit(ll x){return x & -x;
}ll ksm(ll x,ll y,ll z = mod){ll ans=1,base=x;while(y){if(y&1)ans*=base,ans%=z;base*=base;base%=z;y>>=1;}return ans;
}void push(int u){tr[u].sum = (tr[u << 1].sum + tr[u << 1 | 1].sum) % mod;tr[u].flag = tr[u << 1].flag && tr[u << 1 | 1].flag;
}void down(int u){if(tr[u].add){ll &k = tr[u].add;ll p = ksm(2,k);tr[u << 1].sum = tr[u << 1].sum * p % mod;tr[u << 1 | 1].sum = tr[u << 1 | 1].sum * p % mod;tr[u << 1].add += k;tr[u << 1 | 1].add += k;k = 0;}
}void build(int u,int l,int r){tr[u] = {l,r,0,0,0};if(l == r){tr[u].sum = a[l];if(tr[u].sum == lowbit(tr[u].sum)) tr[u].flag = 1;return;}int mid = (l + r) >> 1;build(u << 1,l,mid),build(u << 1 | 1,mid + 1,r);push(u);
}void modify(int u,int l,int r){if(tr[u].l >= l && tr[u].r <= r && tr[u].flag){tr[u].sum = tr[u].sum * 2 % mod;tr[u].add++;return;}if(tr[u].l == tr[u].r){tr[u].sum += lowbit(tr[u].sum);if(tr[u].sum == lowbit(tr[u].sum)) tr[u].flag = 1;return;}down(u);int mid = (tr[u].l + tr[u].r) >> 1;if(l <= mid) modify(u << 1,l,r);if(r > mid) modify(u << 1 | 1,l,r);push(u);
}ll query(int u,int l,int r){if(tr[u].l >= l && tr[u].r <= r) return tr[u].sum;down(u);ll ans = 0;int mid = (tr[u].l + tr[u].r) >> 1;if(l <= mid) ans = query(u << 1,l,r);if(r > mid) ans = (ans + query(u << 1 | 1,l,r)) % mod;return ans;
}int main() {int T;read(T);while(T--){read(n);for(int i = 1;i <= n;i++) read(a[i]),a[i] %= mod;build(1,1,n);read(m);while(m--){int op,l,r;read(op),read(l),read(r);if(op == 1) modify(1,l,r);else {dl(query(1,l,r));}}}return 0;
}
2021CCPC东北四省赛 D. Lowbit 势能线段树相关推荐
- 势能线段树(吉司机线段树)专题
势能线段树(吉司机线段树)专题 势能线段树在近期训练时遇到了好几次,但是由于本人太懒一直没补完,结果ICPC网络赛还真就出了一道势能线段树Orz--结果当然是没做出来--痛定思痛,这回把之前欠的一块儿 ...
- 2018东北四省赛 Store The Matrix (矩阵)
2018东北四省赛 Store The Matrix (矩阵) 题目描述 Given a matrix M with r rows and c columns. It is obviously tha ...
- 势能线段树/吉司机线段树-我没有脑子
势能线段树/吉司机线段树 BZOJ3211 花神游历各国 BZOJ5312 冒险 BZOJ4355 Play with sequence BZOJ4695 最假女选手 \(A_i = max(A_i, ...
- CF765F Souvenirs(势能线段树)
CF765F Souvenirs problem solution code problem 题目链接 solution 这个势能线段树简直是太巧妙了!!!( ఠൠఠ )ノ 将询问按右端点升序离线下来 ...
- 势能线段树(均摊分析)
势能线段树 线段树能够通过打懒标记实现区间修改的条件有两个: 能够快速处理懒标记对区间询问结果的影响 能够快速实现懒标记的合并 但有的区间修改不满足上面两个条件(如区间整除/开方/取模等). 但某些修 ...
- 【题型总结】势能线段树
吉老师势能线段树论文 ABC256Ex - I like Query Problem 题目链接 1 L R x:对 i = L , L + 1 , ⋯ , R i=L,L+1,\cdots,R i=L ...
- 东北四省赛H-Skyscraper-线段树的区间合并优化
题目描述: At the main street of Byteland, there will be built n skyscrapers, standing sequentially one n ...
- 2019 ICPC银川区域赛 G - Pot!!(线段树维护动态RMQ)
传送门 题目大意 若ppp为质数,定义potp(n)pot_p(n)potp(n)为nnn分解质因数ppp的指数.给定一个初始全为111的序列aaa,有两种操作: MULTIPLY l r:将区间[ ...
- 【YBT2023寒假Day4 C】樱桃莓莓(交互)(四毛子分块)(线段树)
樱桃莓莓 题目链接:YBT2023寒假Day4 C 题目大意 有一个黑盒操作满足交换律和结合律,有 n 个数,q 次询问,每次选 m 个下标,你要计算所有不包含那 m 个下标的数进行黑盒操作之后的结果 ...
最新文章
- 平面广告设计和Web设计的差别
- 如果我是小白, 学Python要准备什么呢?
- PCL-1.8.1从源码搭建开发环境三(QHULL库的编译)
- GridBagLayout布局管理器应用详解
- oracle pl sql 抛出例外
- android8.0学习(1)---Android Treble 概述
- day12 生成器和各种推导式
- Javascript面向对象全面剖析 —创建对象
- 微信小程序毕业设计(一)
- 陶哲轩实分析 3.1节 习题试解
- 嘻哈说:设计模式之工厂方法模式
- 小白学 Python 爬虫(26):为啥上海二手房你都买不起
- 日历查询系统c语言1,C语言 日历查询系统 成品
- 祝贺 Influx Technology 成为北航 AERO 大学生方程式赛车队一级赞助商
- 音视频技术开发周刊 | 229
- Samsung MDM partners
- div的display属性和visibility属性
- glidedsky挑战-图片式反爬(雪碧图)
- linux时间同步命令shell,LINUX时间同步脚本或命令
- Py-Tetrazine-Py-Amide-Butyric acid相关介绍,1233234-76-8
热门文章
- vegan 包进行Adonis 分析
- [学习] 08 提高背书速度新玩法
- 路漫漫其修远兮,吾将上下而求索(2019培训总结)
- DRV8711的通用步进电机驱动器和直流电机驱动器
- 九种卫星地图的快速比较和选择方法
- STM32串口通信配置(USART1+USART2+USART3+UART4)
- 普林斯顿大学计算机专业,普林斯顿大学计算机专业就业前景怎么样?
- [构造]Array 2022牛客多校第6场 A
- 使用计算机报点系统时填记,铁路 车务 运转系统 自动闭塞《接发列车作业标准》...
- freeSwitch DISA实现