Description

Input

Output

Data Constraint

Solution

  • 吉如一论文里的线段树算法……

  • 对于一个区间,记录三个值:最大值 mx1mx1,最大值的个数 cntcnt,严格次大值 mx2mx2。

  • 那么在一个区间内要修改为 xx ,

  • 如果有 x≥mx1x\ge mx1 ,就不用修改,直接退出。

  • 如果有 mx2≤x<mx1mx2\le x ,则区间和 sum−=(mx1−x)∗cntsum-=(mx1-x)*cnt ,再 mx1=xmx1=x 即可。

  • 如果 x<mx2x ,则直接递归左右子树。

  • 记得下传标记,要随时维护严格次大值。

  • 时间复杂度通过势能分析可得为 O(N log N)O(N\ log\ N) 。

Code

#include<cstdio>
#include<cctype>
using namespace std;
typedef long long LL;
const int N=5e5+5;
struct data
{int mx1,cnt,mx2;LL sum;
}f[N<<2];
LL last;
int qx,qy,qz;
int a[N];
template<typename T>inline T read()
{T X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X;
}
inline int max(int x,int y)
{return x>y?x:y;
}
inline void update(int v)
{int ls=v<<1,rs=ls|1;if(f[ls].mx1>f[rs].mx1){f[v].mx1=f[ls].mx1;f[v].cnt=f[ls].cnt;f[v].mx2=max(f[ls].mx2,f[rs].mx1);}elseif(f[ls].mx1<f[rs].mx1){f[v].mx1=f[rs].mx1;f[v].cnt=f[rs].cnt;f[v].mx2=max(f[rs].mx2,f[ls].mx1);}else{f[v].mx1=f[ls].mx1;f[v].cnt=f[ls].cnt+f[rs].cnt;f[v].mx2=max(f[ls].mx2,f[rs].mx2);}f[v].sum=f[ls].sum+f[rs].sum;
}
inline void modify(int v,int x)
{if(x>=f[v].mx1) return;f[v].sum-=(LL)(f[v].mx1-x)*f[v].cnt;f[v].mx1=x;
}
inline void down(int v)
{modify(v<<1,f[v].mx1);modify(v<<1|1,f[v].mx1);
}
void make(int v,int l,int r)
{if(l==r){f[v].sum=f[v].mx1=a[l];f[v].cnt=1,f[v].mx2=-1;return;}int mid=l+r>>1;make(v<<1,l,mid);make(v<<1|1,mid+1,r);update(v);
}
void change(int v,int l,int r)
{if(qz>=f[v].mx1) return;if(qx<=l && r<=qy && qz>f[v].mx2){modify(v,qz);return;}down(v);int mid=l+r>>1;if(qx<=mid) change(v<<1,l,mid);if(qy>mid) change(v<<1|1,mid+1,r);update(v);
}
LL find(int v,int l,int r)
{if(qx<=l && r<=qy) return f[v].sum;int mid=l+r>>1;down(v);LL s=0;if(qx<=mid) s+=find(v<<1,l,mid);if(qy>mid) s+=find(v<<1|1,mid+1,r);update(v);return s;
}
int main()
{int n=read<int>(),m=read<int>();for(int i=1;i<=n;i++) a[i]=read<int>();make(1,1,n);while(m--){int op=read<int>();qx=read<LL>()^last;qy=read<LL>()^last;if(op==1){int x=qy;qy=qx;int num=find(1,1,n);qz=max(num-x,0);change(1,1,n);}elseif(op==2){qz=read<LL>()^last;change(1,1,n);}else printf("%lld\n",last=find(1,1,n));}return 0;
}

JZOJ 5618. 【NOI2018模拟3.31】华胥梦天相关推荐

  1. JZOJ 5616. 【NOI2018模拟3.31】沧海尘记

    Description Input Output Data Constraint Solution 观察题目,就可以得出有变换: Ai=∑j=1nAj∗Pi,j A_i=\sum_{j=1}^{n}{ ...

  2. JZOJ 5623. 【NOI2018模拟4.2】program

    Description Input Output Sample Input 10 5 8>6<2<>54< 4 7 1 10 4 4 2 9 8 10 Sample Ou ...

  3. JZOJ 5603. 【NOI2018模拟3.27】Xjz

    Description 给定字符串 S 和 T. 串A和串B匹配的定义改为:存在一个字符的映射,使得A应用这个映射之后等于B,且这个映射必须为一个排列. A=121, B=313,当映射为{1-> ...

  4. JZOJ 5643. 【NOI2018模拟4.10】最小代价

    Description 给定一张n个点m条边的无向图,点编号1到n,每个点x有两个权值ax和bx.给定k,选出图中一个大小为k的点集S,使得S中任意两个点之间存在仅经过这个点集中的点的路径.S也存在两 ...

  5. JZOJ 5640. 【NOI2018模拟4.9】劈配

    Description Input Output 输出到文件 mentor.out 中. 按顺序输出每组数据的答案.对于每组数据,输出 2 行: • 第 1 行输出 n 个用空格隔开的正整数,其中第 ...

  6. JZOJ 5639. 【NOI2018模拟4.8】秘密袭击

    Description Input Output Sample Input [样例1 输入] 5 3 3 2 1 1 2 3 1 2 2 3 1 4 1 5 [样例2 输入] 10 2 3 2 1 1 ...

  7. JZOJ 5638. 【NOI2018模拟4.8】IIIDX

    Description Input Output Sample Input 4 2.0 114 514 1919 810 Sample Output 114 810 514 1919 Data Con ...

  8. JZOJ 5637. 【NOI2018模拟4.8】一双木棋

    Description 菲菲和牛牛在一块n 行m 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结 束.落子的规则是:一个格子可 ...

  9. JZOJ 5629. 【NOI2018模拟4.4】Map

    Description Rin是个特别好动的少女. 一天Rin来到了一个遥远的都市.这个都市有N个建筑,编号从1到N,其中市中心编号为1,这个都市有M条双向通行的街道,每条街道连接着两个不同的建筑,其 ...

最新文章

  1. Windows Performance Toolkit
  2. C语言杂谈:指针与数组 (上) (转)
  3. 计算机小组作品,计算机兴趣小组小作品汇总.doc
  4. Python Django 设置和获取Cookie代码示例
  5. HAProxy介绍及配置文件详解
  6. UDP协议下的DatagramSocket和DatagramPacket
  7. 天池 在线编程 三等分(模拟)
  8. DTCC 2020 | 阿里云梁高中:DAS之基于Workload的全局自动优化实践
  9. C++高级编程篇-如何编写高效的C++篇
  10. 数据挖掘肿瘤预测_喜欢临床预测模型|SEER数据挖掘的期刊有哪些
  11. 关于零基础学习web前端开发,有些过来经验分享
  12. SSH应用之BBS之路-2、Hibernate配置
  13. matlab fft 功率谱,matlab实现功率谱估计,关于FFT点数选取到底什么标准?
  14. 质数(素数) 与 加密(密码学上的应用)
  15. 一张图学会python高清图-一张图带你学会Python,学习Python的非常简单,附教程
  16. Struts2体系介绍
  17. 计算机课flash课件,flash动画制作获奖课件
  18. 有什么好用的IT资产管理软件
  19. 瞬变抑制二极管(TVS),如何选型?
  20. elementUI表格合并行数据

热门文章

  1. 机器学习导论(张志华):核定义(2)
  2. 现代谱估计:多窗口谱相关性
  3. mount and fstab的使用(整理)
  4. 【Python】matplotlib.pyplot 标题换行
  5. 专栏 | 基于 Jupyter 的特征工程手册:特征选择(五)
  6. adf检验代码 python_第22期:向量自回归(VAR)模型预测——Python实现
  7. infor wms 中英文对照_【融合·君豪】新君豪中英文学校第十周食谱
  8. [scala-spark]4. 函数式编程
  9. delphi中的bpl开发注意事项
  10. 23种设计模式C++源码与UML实现--外观模式