传送门


题目大意

若ppp为质数,定义potp(n)pot_p(n)potp​(n)为nnn分解质因数ppp的指数。给定一个初始全为111的序列aaa,有两种操作:

  • MULTIPLY l r:将区间[l,r][l,r][l,r]都乘上x(2≤x≤10)x~(2\leq x \leq 10)x (2≤x≤10)
  • MAX l r:求出区间[l,r][l,r][l,r]的maxl≤i≤r{maxp∣ai{potp(ai)}}max_{l \leq i \leq r}\{max_{p | a_i}\{ pot_p(a_i)\}\}maxl≤i≤r​{maxp∣ai​​{potp​(ai​)}}

解题思路

因为(2≤x≤10)(2\leq x \leq 10)(2≤x≤10),因此我们只需要考虑2,3,5,72,3,5,72,3,5,7这四个质数,然后区间乘法变成了区间加法,维护四颗线段树即可。

//
// Created by Happig on 2021/1/24.
//
#include <bits/stdc++.h>
#include <unordered_map>using namespace std;
#define ENDL "\n"
#define lowbit(x) (x & (-x))
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
const double eps = 1e-8;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
const double dinf = 1e300;
const ll INF = 1e18;
const int Mod = 1e9 + 7;
const int maxn = 1e5 + 10;int mp[10];
int tree[4][maxn << 2], lz[4][maxn << 2];
int cur, n;void pushdown(int i) {if (lz[cur][i]) {int k = i << 1;tree[cur][k] += lz[cur][i], tree[cur][k | 1] += lz[cur][i];lz[cur][k] += lz[cur][i], lz[cur][k | 1] += lz[cur][i], lz[cur][i] = 0;}
}void add(int i, int l, int r, int x, int y, int val) {if (l == x && r == y) {tree[cur][i] += val;lz[cur][i] += val;return;}pushdown(i);int mid = (l + r) >> 1, k = i << 1;if (x > mid) add(k | 1, mid + 1, r, x, y, val);else if (y <= mid) add(k, l, mid, x, y, val);else add(k, l, mid, x, mid, val), add(k | 1, mid + 1, r, mid + 1, y, val);tree[cur][i] = max(tree[cur][k], tree[cur][k | 1]);
}int query(int i, int l, int r, int x, int y) {if (l == x && r == y) return tree[cur][i];pushdown(i);int mid = (l + r) >> 1, k = i << 1;if (x > mid) return query(k | 1, mid + 1, r, x, y);else if (y <= mid) return query(k, l, mid, x, y);else return max(query(k, l, mid, x, mid), query(k | 1, mid + 1, r, mid + 1, y));
}void init() {mp[2] = 0, mp[3] = 1;mp[5] = 2, mp[7] = 3;
}void solve(int l, int r, int x) {if (x == 2 || x == 3 || x == 5 || x == 7) {cur = mp[x];add(1, 1, n, l, r, 1);} else if (x == 4) {cur = mp[2];add(1, 1, n, l, r, 2);} else if (x == 6) {cur = mp[2];add(1, 1, n, l, r, 1);cur = mp[3];add(1, 1, n, l, r, 1);} else if (x == 8) {cur = mp[2];add(1, 1, n, l, r, 3);} else if (x == 9) {cur = mp[3];add(1, 1, n, l, r, 2);} else if (x == 10) {cur = mp[2];add(1, 1, n, l, r, 1);cur = mp[5];add(1, 1, n, l, r, 1);}
}int main() {//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);int m, l, r, x;string s;cin >> n >> m;init();while (m--) {cin >> s;if (s[1] == 'U') {cin >> l >> r >> x;solve(l, r, x);} else {cin >> l >> r;int ans = 0;for (int i = 0; i < 4; i++) {cur = i;ans = max(ans, query(1, 1, n, l, r));}cout << "ANSWER " << ans << ENDL;}}return 0;
}

2019 ICPC银川区域赛 G - Pot!!(线段树维护动态RMQ)相关推荐

  1. 2019 ICPC亚洲区域赛银川赛区题解

    E题题解 题意 给定一个 nnn 个节点的有根树,每个节点有一个权值 AiA_iAi​.定义一个集合的价值为:Value(S)=∑x∈S∑y∈S(Ax⊕Ay)2Value(S)=\sum_{x\in ...

  2. 中石油训练赛 - Check List(线段树维护偏序问题)

    题目大意:给出 n 个点,需要计算出满足下列条件的三元对 ( i , j , k ) 的数量: x[ i ] < x[ j ] < x[ k ] y[ k ] > y[ i ] &g ...

  3. 2019年ICPC银川区域赛 Easy Problem(简单莫比乌斯函数 + 欧拉降幂)

    Easy Problem ∑a1=1m∑a2=1m∑a3=1m⋯∑an−1m∑anm[gcd(a1,a2,a3,-,an−1,an)==d](a1,a2,a3,-,an−1,an)k=dkd∑a1=1 ...

  4. 线段树维护区间最大值+第 45 届(ICPC)亚洲区域赛(昆明)L题Simone and Graph Coloring

    题意: 给你n个数的序列,当满足i<ji<ji<j andandand ai>aja_i>a_jai​>aj​时,这两个点之间有一条边,现在对点染色,要求每个点相邻 ...

  5. 2017 ICPC西安区域赛 A - XOR ,线段树合并线性基

    题目链接:A - XOR 题意;给个数组,每次询问一个区间你可以挑任意个数的数字异或和 然后在或上k的最大值 题解:线性基不知道的先看这个,一个线性基可以log的求最大值把对应去区间的线性基求出来然后 ...

  6. 2020年 ICPC 亚洲区域赛(上海)G-Fibonacci

    ICPC 亚洲区域赛(上海) G-Fibonacci 题目 斐波那契数列为1,1,2,3,5,8,13,21,- 可以看到,这个数列有以下特点: 奇,奇,偶,奇,奇,偶- 当 xxx 与 yyy 相乘 ...

  7. icpc西部区域赛_ICPC西部区域赛捷报传来!

    ICPC西部区域赛(新疆赛区)圆满结束软件学子斩获佳绩 2020年10月31日,由新疆大学信息科学与工程学院(网络空间安全学院)承办的ICPC国际大学生程序设计竞赛2020年西部区域赛(新疆赛区)圆满 ...

  8. 2019 ICPC 南昌网络赛 H. The Nth Item

    2019 ICPC 南昌网络赛 H. The Nth Item 题目大意:已知一个数列F(n): F(0)=0,F(1)=1 F(n)=3∗F(n−1)+2∗F(n−2),(n≥2) ​ 给你一个操作 ...

  9. 2019 ICPC 徐州网络赛 J.Random Access Iterator

    2019 ICPC 徐州网络赛 J.Random Access Iterator 题目大意:给你n个点和n-1条边(树形结构),保证1为根节点,通过以下方式dfs遍历: 询问dfs到最深节点的概率(有 ...

最新文章

  1. html canvas text 居中,HTML5 Canvas Text文本居中实例
  2. android控件的对齐方式(转)
  3. 江西理工大学c语言程序设计竞赛怎么备考,2015年江西理工大学C语言程序设计竞赛(高级组)...
  4. ionic@2.0 beta版本安装指南
  5. LIBGDX游戏引擎平台介绍与搭建
  6. abap oo 语法
  7. ACM/ICPC 集:
  8. sparksql优化_Spark SQL amp; Streaming
  9. CALayer学习--contentsCenter属性
  10. 从入门到入土:基于C语言实现并发Web服务器|父进程子进程|代码展示
  11. Arcgis栅格时序地图制作---时间轴动态展示多期影像
  12. 超级课程表显示服务器出错,不得不说,超级课程表正在流失大学生用户——一位超级课程表粉丝的自白...
  13. python计算无穷级数求和常用公式_级数求和常用方法-级数求和法
  14. 配置计算机系统doc,计算机的基本配置.doc
  15. 哪些人需要发表期刊论文
  16. “要么增长要么死”,狼性文化正在毁掉什么?
  17. 手机网上订货下单软件|移讯云订货通企业订货管理系统介绍
  18. 【一句日历】2019年3月
  19. 工资计算器读写数据文件
  20. 和菜头:在碎片化的轰炸中喘息

热门文章

  1. intel,ARM,问华为海思麒麟是自主的吗
  2. 离线对活动目录数据库进行碎片整理
  3. Cocos2DX之CCParallaxNode
  4. 关于mysql的热重启的命令
  5. 计算机在电气工程中的应用,计算机在电气工程自动化控制中的应用(原稿)
  6. python第五周项目答案_工作页python流程控制(第五周 ).doc_学小易找答案
  7. 2020年Android面试题三部曲——Java部分
  8. Cocos Creator之微信小游戏的游戏圈
  9. 爱淘php,PHP文件操作实现代码
  10. 读取json格式的图片、文字并保存成图片