一开始想用线段树维护, 然后发现太多细节了,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. maven整合jar包下载地址
  2. 第十二周项目一-实现复数类中的运算符重载(1)
  3. Android各大热补丁方案分析和比较
  4. 计算机配置文章,看电脑配置的“两个”小妙招!
  5. java内部类的特点
  6. MySQL运算符ppt_mysql运算符
  7. 2013 Multi-University Training Contest 4
  8. 完整教程--idea使用git进行项目管理
  9. 超全的软件测试工具大全
  10. 软考网规论文-论企业内部网的安全策略
  11. MySQL复制应用中继日志解析
  12. 转载 关于git的常用命令总结
  13. 《多媒体技术与应用》练习题
  14. 基于 element ui 之 ui-tooltip 组件
  15. Processing创意编程(进阶篇)
  16. K - Tourists' Tour(图染色)
  17. Python-温度转换
  18. flutter 刷脸_传说哥教你如何假装架构师
  19. NMAKE参考之二——运行NMAKE
  20. VCS+Verdi 安装过程遇到的问题-CentOS7

热门文章

  1. bootstrap之data-toggle,data-dismiss,data-target用法
  2. UCK将私钥硬件化 是数字资产安全储存的又一次革新
  3. HTML、HTML5、XHTML、XML、XSL、DTD、XML Schema 简单介绍
  4. 爱情小筑 v3.1 build 2002.07.26 免费下载
  5. Java基础01 Java的安装和配置
  6. 吴恩达深度学习coursework1
  7. Apsara Stack 技术百科 | 数字化业务系统安全工程
  8. CCTech:测试同学如何参与codereview?
  9. HS光流法及其代码示例
  10. 图文讲解如何在outlook里设置绑定QQ企业邮箱教程