一开始想用线段树维护, 然后发现太多细节了,QAQ.

我们 可以发现一个数可以被取到最大值, 那么直接把他删到0不会影响结果.

因为 两边的位置都不能能取到最大值并影响当前位置.

所以我们只需要知道有多少个位置取到最大值即可.

O(mnlog⁡n)O(mn\log n)O(mnlogn) 的做法是 直接排序, 然后把两边覆盖…

对于一段单调序列, 显然取第一大, 第三大, …

所以我们可以用树状数组维护奇偶的前缀和.

然后修改一个位置最多对旁边两条链有影响, 我们只需要暴力把影响减去, 后面加回来即可.

对于链的存储, 我们用setsetset 存极值点即可.

感谢扶咕咕的博客!!!

int n, a[N];
ll ans;struct BIT {ll c[N];void add(int x, int v) { for( ; x <= n; x += x & -x) c[x] += v; }ll ask(int x) { ll y = 0; while(x) y += c[x], x &= x - 1; return y;}ll ask(int l, int r) { return ask(r) - ask(l - 1);}
} c[2];
set<int> s;
#define ev(x) (!((x) & 1))void check(int x) {if((a[x] > a[x - 1]) == (a[x] >= a[x + 1])) s.insert(x);else s.erase(x);
}void calc(IT l, IT r, int v) {//重算l~r之间的答案 while(l != r) {auto t = r; t--;if(a[*t] < a[*r]) ans += v * c[*r & 1].ask(*t + 1, *r);else {ans += v * c[*t & 1].ask(*t + 1, *r - 1);auto p = r; p++;if(p == s.end()) p--;if(ev(*r - *t) && ev(*r - *p)) ans += v * a[*r];}r = t;}int x = *l;if(a[x] >= a[x + 1]) return ;if(s.begin() != l) l--;++r; if(ev(x - *l) && ev(x - *r)) ans += v * a[x];
}void upd(int x)  {int y; qr(y);IT v = s.lower_bound(x), l = v, r = v; l--; r++;if(l != s.begin()) l--;if(r != s.end()) r++;if(r == s.end()) r--;calc(l, r, -1);c[x & 1].add(x, y - a[x]); a[x] = y;check(x); if(x > 1) check(x - 1); if(x < n) check(x + 1);calc(l, r, 1);
}void solve() {qr(n); s.insert(0); s.insert(n + 1);FOR(i, n) upd(i);int x, m; qr(m); while(m--) qr(x), upd(x), pr2(ans);
}

Luogu P5069 [Ynoi2015] 纵使日薄西山相关推荐

  1. 洛谷P5069 [Ynoi2015]纵使日薄西山(树状数组,set)

    洛谷题目传送门 一血祭 向dllxl致敬! 算是YNOI中比较清新的吧,毕竟代码只有1.25k. 首先我们对着题意模拟,寻找一些思路. 每次选了一个最大的数后,它和它周围两个数都要减一.这样无论如何, ...

  2. 【树状数组】【P5069】[Ynoi2015]纵使日薄西山

    Description 给定一个长度为 \(n\) 的非负整数序列 \(\{a_n\}\),\(q\) 次操作,每次要么单点修改序列某个值,要么查询整个序列需要操作多少次才能变成全 \(0\). 一次 ...

  3. [Ynoi2015]纵使日薄西山

    题目大意: 给定一个序列,每次单点修改,然后进行询问. 定义一次操作为,选择一个位置$x$,将这个位置的数和左边.右边两个位置的数(不存在则忽略)各减去1,然后和0取max. 对序列中最大的位置进行一 ...

  4. 【题解】Luogu P5071 [Ynoi2015]此时此刻的光辉

    众所周知lxl是个毒瘤,Ynoi道道都是神仙题,题面好评 原题传送门 一看这题没有修改操作就知道这是莫队题(我也只会莫队) 我博客里对莫队的简单介绍 一个数N可以分解成\(p_1^{c_1}p_2^{ ...

  5. (Ynoi2015) 纵使日薄西山 题解

    一道耗费大量精力的数据结构题目 题目链接 原题目 题目分析 大家应该都能意识到,每一次都去找下标最小的最大值是非常浪费时间的.而对于一个位置而言,只要被操作一次就等于这个位置要被操作a[i]次,因为两 ...

  6. [总结]2019年10月 OI学习/刷题记录

    10月份记录! 2019/10/1 UOJ #74. [UR #6]破解密码 Hash+分类讨论 UOJ #75. [UR #6]智商锁 Matrix-Tree定理+随机化 UOJ #76. [UR ...

  7. 2018十二月刷题列表

    Preface \(2018\)年的尾巴,不禁感慨自己这一年的蜕变只能用蜕变来形容了. 而且老叶说我们今年没的参加清北冬令营可以参加CCF在广州二中举办的冬令营,只要联赛\(390+\)就应该可以报. ...

  8. [总结]2019年9月 OI学习/刷题记录

    从现在开始记录一下每天的学习情况.主力LOJ? 2019/9/5 LibreOJ #2543. 「JXOI2018」排序问题 答案显然是\(\frac{(n+m)!}{Cnt_1!Cnt_2!\cdo ...

  9. luogu P1549 棋盘问题(2) 题解

    luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...

最新文章

  1. Python基础第六天——函数的使用、函数的参数、函数的返回值、函数的嵌套、命名空间、作用域、函数对象...
  2. YbtOJ#20065-[NOIP2020模拟赛B组Day4]模拟比赛【dp】
  3. 烂代码解决方案:Java设计模式的魅力
  4. python写入指定行_python文件操作如何写在指定的行
  5. 数据结构专题(一):1.1顺序表初始化
  6. 大数据Hadoop集群中常用的任务调度框架
  7. 第五周作业:瀑布模型
  8. 个人简历html模板
  9. 【C语言】—— 通讯录
  10. 海外服务器IP为什么被封以及解决方案
  11. ResNet网络结构解析--Pytorch
  12. 微信小程序运营之如何获取流量
  13. 引爆点 mobi_开源中的3个新兴引爆点
  14. 抖音超级恶心的滑稽HTML源码
  15. 安装好vmware后界面默认英语如何修改成中文或者其他语言
  16. 解决IE浏览器无法打开TOMCAT http://locahost:8080
  17. 基于UWB与航迹推算的智能仓储机器人
  18. nginx中配置不输入端口(指定地址)访问项目的方法
  19. 谈下最近做的一个手机app,学习到的东西挺多的哦
  20. Navicat迁移表数据 一

热门文章

  1. 光彩夺目的30款太阳光线照射Ps笔刷
  2. xsl是什么文件 html 样式表单,XSL 指扩展样式表语言
  3. 程序员的内斗: 测试和开发干仗, 已经到用鼠标线勒脖子的程度
  4. apscheduler调度器异常错误:skipped: maximum number of running instances reached (1)
  5. 利用Python做简单的数据可视化2【二手房数据】
  6. ZO-signSGD
  7. python 学习笔记1
  8. Go1.20 arena新特性示例详解
  9. 【python】利用两层神经网络(网络必须用类)来训练mnist数据(要求准确率90%以上)
  10. Swift 类型的检査与转换(is,as,AnyObject,Any)