P4891 序列
P4891 序列
题目描述
给定两个长度为 n 的序列 A 和 B,定义序列 \(C_i=\max\limits_{j=1}^i A_j\)
定义当前的价值是 $\prod\limits_{i=1}^n \min(B_i,C_i) $。
现在有 q 次操作,每次操作将会修改序列 A 或者 B 中的一个位置,将会把数字变大。现在请求出每次修改之后的价值。
这题复杂度不准确
错误日志: while 用脱了。。, 以后用 while 判断当前一个就好
Solution
暴力修改
设修改区间为 \([l, r]\) , 每次修改乘以 \(a_{i}\), 除以 \(b_{i}\), 我们可以在 \(O(n)\) 的时间内处理出
\]
上一次答案乘上这个就是这一次的答案
然后要求分母的逆元, \(10^{9} + 7\) 为质数, 用费马小定理
然后这样大概估一下复杂度上限是 \(O(n * (n + \log n))\)
所以数据貌似略水啊。。
当模拟练手了
Code
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
#define LL long long
#define REP(i, x, y) for(LL i = (x);i <= (y);i++)
using namespace std;
LL RD(){
LL out = 0,flag = 1;char c = getchar();
while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
return flag * out;
}
const LL maxn = 2000019, M = 1e9 + 7;
LL num, na;
LL b[maxn], c[maxn];
LL ans = 1;
LL get_inv(LL a){
LL p = M - 2, ans = 1;
while(p){
if(p & 1)ans = ans * a % M;
a = a * a % M;
p >>= 1;
}
return ans % M;
}
void init(){
num = RD(), na = RD();
REP(i, 1, num)c[i] = max(c[i - 1], RD());
REP(i, 1, num)b[i] = RD();
REP(i, 1, num)ans = ans * min(c[i], b[i]) % M;
}
void solve(){
while(na--){
LL cmd = RD(), x = RD(), y = RD();
LL frac = 1, son = 1;
if(cmd == 0){
while(c[x] < y){//把c[x]改为y
if(c[x] < b[x]){
frac = frac * c[x] % M;
son = son * min(y, b[x]) % M;
}
//else c'> c > b
c[x] = y;
x++;
if(x > num)break;
}
}
else{
if(b[x] < c[x]){//b[x] --> y
frac = frac * b[x] % M;
son = son * min(c[x], y) % M;
}
//else b'> b > c
b[x] = y;
}
ans = ((ans * son) % M + M) % M;
ans = ((ans * get_inv(frac)) % M + M) % M;
printf("%lld\n", ans % M);
}
}
int main(){
init();
solve();
return 0;
}
P4891 序列的更多相关文章
- 洛谷P4891 序列 || 膜法阵,魔法阵
https://www.luogu.org/problemnew/show/P4891 一道几乎一样的题http://210.33.19.103/contest/1130/problem/3 题面ht ...
- 洛谷P4891 序列(势能线段树)
洛谷题目传送门 闲话 考场上一眼看出这是个毒瘤线段树准备杠题,发现实在太难调了,被各路神犇虐哭qwq 考后看到各种优雅的暴力AC......宝宝心里苦qwq 思路分析 题面里面是一堆乱七八糟的限制和性 ...
- 洛谷P4891 序列
传送门 这题纯暴力竟然能过…… //minamoto #include<cstdio> #include<iostream> #define mul(a,b) (1ll*a*b ...
- 有趣的线段树模板合集(线段树,最短/长路,单调栈,线段树合并,线段树分裂,树上差分,Tarjan-LCA,势能线段树,李超线段树)
线段树分裂 以某个键值为中点将线段树分裂成左右两部分,应该类似Treap的分裂吧(我菜不会Treap).一般应用于区间排序. 方法很简单,就是把分裂之后的两棵树的重复的\(\log\)个节点新建出来, ...
- 【夯实PHP基础】UML序列图总结
原文地址 序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色 ...
- Windows10-UWP中设备序列显示不同XAML的三种方式[3]
阅读目录: 概述 DeviceFamily-Type文件夹 DeviceFamily-Type扩展 InitializeComponent重载 结论 概述 Windows10-UWP(Universa ...
- 软件工程里的UML序列图的概念和总结
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 软件工程的一般开发过程:愿景分析.业务建模,需求分析,健壮性设计,关键设计,最终设计,实现…… 时序图也叫序列图(交互图),属于软件 ...
- python序列,字典备忘
初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...
- BZOJ 1251: 序列终结者 [splay]
1251: 序列终结者 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3778 Solved: 1583[Submit][Status][Discu ...
随机推荐
- github 心得体会
https://github.com/xu123/text 学习了很多知识感觉很有趣 git config :配置git git add:更新working directory中的文件至stagin ...
- 小学生四则运算APP核心代码公布
Mainactivity类: package com.example.XXSCYS; import java.io.ByteArrayOutputStream; import java.io.File ...
- 正则表达式(java)
概念: 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念. 正则表通常被用来检索.替换那些符合某个模式( ...
- Linux安装的分区问题
对于一般的外部SATA存储设备,在ubuntu中会显示在/etc/sd*中,例如: SATA1插槽上的文件名:/dev/sda SATA5插槽上的文件名:/dev/sdb USB磁盘:/dev/sdc ...
- [转帖] infiniband的协议速度
- python学习笔记三——控制语句
2.5 运算符与表达式 2.5.1 算术运算符和算术表达式 算术运算符包括四则运算符.求模运算符和求幂运算符. 算术运算符 加减乘除:+ - * / 表达式:x+y x-y x*y x/y ...
- 微软开放 6 万项 Linux 专利,有哪些是我们该注意的?
导读 上周,微软宣布正式加入 Open Invention Network (“OIN”) 社区,开放其 6 万多项 Linux 专利.消息一出,许多人疑惑微软为什么要这么做?作为普通开发者,是否能使 ...
- shell特殊变量的使用
$0 当前脚本名$# 传递给脚本的参数个数$1 第一个参数,依次类推$*,$@ 所有参数 $? 上一条命令的执行返回结果$$ 当前shell进程ID $PPID 父进程ID 下面的shell ...
- CenOS_6.6_简单搭建vsFTP
0. 关闭selinux 永久性关闭(这样需要重启服务器后生效) sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config ...
- BZOJ1497[NOI2006]最大获利——最大权闭合子图
题目描述 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成 ...