[hdu4747]Mex
2024-08-31 02:09:17
首先计算出以1为左端点的所有区间的mex,考虑删除左端点仍然维护这个序列:设当前删除点下一次出现在y,y~n的mex不变,从左端点到y的点中大于删除值的点要变成删除值,因为这个是不断递增的,所以是一段区间,可以用线段树来维护。
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200005
4 #define L (k<<1)
5 #define R (L+1)
6 #define mid (l+r>>1)
7 int n,a[N],fi[N],nex[N],laz[N<<2],ma[N<<2],vis[N];
8 long long ans,f[N<<2];
9 void update(int k,int l,int r,int x){
10 laz[k]=ma[k]=x;
11 f[k]=x*(r-l+1);
12 }
13 void down(int k,int l,int r){
14 if (laz[k]==-1)return;
15 update(L,l,mid,laz[k]);
16 update(R,mid+1,r,laz[k]);
17 laz[k]=-1;
18 }
19 void up(int k){
20 f[k]=f[L]+f[R];
21 ma[k]=max(ma[L],ma[R]);
22 }
23 void update(int k,int l,int r,int x,int y,int z){
24 if ((l>y)||(x>r))return;
25 if ((x<=l)&&(r<=y)){
26 update(k,l,r,z);
27 return;
28 }
29 down(k,l,r);
30 update(L,l,mid,x,y,z);
31 update(R,mid+1,r,x,y,z);
32 up(k);
33 }
34 int query(int k,int l,int r,int x){
35 if (l==r)return l+(ma[k]<x);
36 down(k,l,r);
37 if (ma[L]>x)return query(L,l,mid,x);
38 return query(R,mid+1,r,x);
39 }
40 int main(){
41 while (scanf("%d",&n)!=EOF){
42 if (!n)return 0;
43 ans=0;
44 for(int i=1;i<=n;i++){
45 scanf("%d",&a[i]);
46 if (a[i]>n)a[i]=n;
47 }
48 memset(vis,0,sizeof(vis));
49 for(int i=0;i<=n;i++)fi[i]=n+1;
50 memset(laz,-1,sizeof(laz));
51 for(int i=n;i;i--){
52 nex[i]=fi[a[i]];
53 fi[a[i]]=i;
54 }
55 for(int i=1,j=0;i<=n;i++){
56 vis[a[i]]=1;
57 while (vis[j])j++;
58 update(1,1,n,i,i,j);
59 }
60 for(int i=1;i<n;i++){
61 ans+=f[1]+i-1;
62 update(1,1,n,i,i,-1);
63 update(1,1,n,query(1,1,n,a[i]),nex[i]-1,a[i]);
64 }
65 printf("%lld\n",ans+(a[n]==0));
66 }
67 }
最新文章
- Total Commander解压位置
- PHP命名空间的作用、为什么使用命名空间?
- Java自动装箱拆箱
- NOIP2009 最优贸易
- VS2010 error C2664: &ldquo;CWnd::MessageBoxW&rdquo;: 不能将参数 1 从&ldquo;const char [3]&rdquo;转换为&ldquo;LPCTSTR&rdquo;
- Feel Good
- iOS网络编程笔记——Socket编程
- 敏捷开发冲刺--day3
- Linux配置成网关
- Python——Flask框架——Web表单
- twitter typeahead控件使用经历
- linux后台执行./run.py提示python syntax error near unexpected token `(&#39;
- python的类和对象——类的静态字段番外篇
- python3练习-发送IP地址到邮箱
- Verilog中的$display和$write任务
- git回滚远程仓库
- 【洛谷P4054】计数问题
- select 禁止 选择
- html打造动画【系列3】- 小猫笑脸动画
- jQuery中的ajax用法案例
热门文章
- 【日志技术专题】「logback入门到精通」彻彻底底带你学会logback框架的使用和原理(入门介绍篇)
- 高效动画实现原理-Jetpack Compose 初探索
- 初学python-day3 元组
- 打造专属测试平台4-使用Docker部署Django项目
- Flink sql 之 join 与 StreamPhysicalJoinRule (源码解析)
- 21.10.18 test
- Java并发:AbstractQueuedSynchronizer(AQS)
- Linux文件IO操作
- hdu 2199 Can you solve this equation?(二分法求多项式解)
- Connected to an idle instance.