一开始想用线段树维护, 然后发现太多细节了,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. AI时代,中国技术创新如何弯道超车?
  2. Python开发基础总结之XML+time+OO
  3. 2.选择元素 - 自定义过滤器《jquery实战》
  4. python多线程坑_python多线程的坑
  5. Description Resource Path Location Type Path must include project and resource name: /
  6. Linux系统安全及应用(账号控制、su、sudo、开关机安全控制、终端登录安全控制等)
  7. 带有AngularJS资源的Spring Rest Controller
  8. appium java 点击事件_java – 无法使用Appium在Android中的权限对话框中单击“允许”按钮...
  9. 新娘JAVA_Java之趣味编程结婚问题
  10. 一加、OPPO官宣合并,“父子团圆”能否拯救一加?
  11. 7内置数据结构_dict
  12. 三层vxlan原理_【老衲推荐】VXLAN技术在园区网的应用探讨
  13. Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(3):寻找正确的代码版本
  14. dell 服务器启用虚拟化,打开DELL R410服务器BIOS虚拟化步骤(图文教程)
  15. python怎么激活_Python窗口激活
  16. Cake slicing
  17. 中国科学院大学2019年数学分析考研试题
  18. 5G已开始商用 目前提供5G商用服务的国家有哪些?
  19. locust安装成功为什么运行脚本后打不开页面或运行脚本会报错
  20. 手写数字识别(识别纸上手写的数字)

热门文章

  1. 关于mac电脑如何导入ps笔刷您知道多少?
  2. java使用字符流读取文件
  3. 2个25Ge网口做bond(mode4)后,iperf2压测不到50Gb
  4. 护眼灯作用大不大?Led护眼灯的好处都有什么
  5. 矩阵求逆操作的复杂度分析(逆矩阵的复杂度分析)
  6. 【GeoFans】GNSS相关产品团队
  7. SE14调整表时提示转换出错,导致数据被清空,怎么恢复
  8. fortran与java的区别_fortran与c或java比较
  9. 用计算机求函数总分 平均分,老师如何在Excel学生成绩表中一键生成总分和各科平均分...
  10. java 中静态内部类与普通内部类的区别