题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4747

思路:

比赛打得太菜了,不想写。。。。线段树莽一下

实现代码:

#include<iostream>
#include<cstdio>
#include<map>
#include<cmath>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define mid ll m = (l + r) >> 1
#define ll long long
const ll M = 3e5+;
ll sum[M<<],maxx[M<<],lazy[M<<],a[M],mex[M],n,Next[M];
map<ll,ll>mp;
void pushup(ll rt){
sum[rt] = sum[rt<<] + sum[rt<<|];
maxx[rt] = max(maxx[rt<<] , maxx[rt<<|]);
} void pushdown(ll rt,ll m){
if(lazy[rt]!=-){
lazy[rt<<] = lazy[rt];
lazy[rt<<|] = lazy[rt];
sum[rt<<] = lazy[rt]*(m-(m>>));
sum[rt<<|] = lazy[rt]*(m>>);
maxx[rt<<] = lazy[rt];
maxx[rt<<|] = lazy[rt];
lazy[rt] = -;
}
} void build(ll l,ll r,ll rt){
sum[rt] =; maxx[rt] = ;
lazy[rt] = -;
if(l == r){
sum[rt] = mex[l];
maxx[rt] = mex[l];
return ;
}
mid;
build(lson); build(rson);
pushup(rt);
} /*void ct(ll l,ll r,ll rt){
if(l == r){
cout << maxx[rt]<<" ";
return ;
}
mid;
ct(lson);
ct(rson);
}*/ void update(ll L,ll R,ll c,ll l,ll r,ll rt){
if(L <= l&&R >= r){
lazy[rt] = c;
maxx[rt] = c;
sum[rt] = c*(r-l+);
return ;
}
pushdown(rt,r-l+);
mid;
//cout<<l<<" "<<r<<" "<<sum[1]<<endl;
if(L <= m) update(L,R,c,lson);
if(R > m) update(L,R,c,rson);
pushup(rt);
} ll query(ll p,ll l,ll r,ll rt){
if(l == r) return l;
pushdown(rt,r-l+);
mid;
//cout<<maxx[rt<<1]<<" "<<p<<endl;
if(maxx[rt<<] > p) return query(p,lson);
else return query(p,rson);
} int main()
{
while(scanf("%I64d",&n)&&n){
ll tmp = ;
mp.clear();
for(ll i = ;i <= n;i ++){
scanf("%I64d",&a[i]);
mp[a[i]] = ;
while(mp.find(tmp) != mp.end()) tmp++;
mex[i] = tmp;
}
mp.clear();
for(ll i = n;i >= ;i --){
if(mp.find(a[i]) == mp.end()) Next[i] = n + ;
else Next[i] = mp[a[i]];
mp[a[i]] = i;
}
build(,n,);
ll ans = ;
for(ll i = ;i <= n;i ++){
ans += sum[];
if(maxx[] > a[i]){
ll l = query(a[i],,n,);
ll r = Next[i];
//cout<<l<<" "<<r<<endl;
if(l < r)
update(l,r-,a[i],,n,);
}
update(i,i,,,n,);
}
printf("%I64d\n",ans);
}
return ;
}

hdu 4747 Mex (2013 ACM/ICPC Asia Regional Hangzhou Online)的更多相关文章

  1. HDU 4747 Mex(线段树)(2013 ACM/ICPC Asia Regional Hangzhou Online)

    Problem Description Mex is a function on a set of integers, which is universally used for impartial ...

  2. HDU 4745 Two Rabbits(最长回文子序列)(2013 ACM/ICPC Asia Regional Hangzhou Online)

    Description Long long ago, there lived two rabbits Tom and Jerry in the forest. On a sunny afternoon ...

  3. HDU 4744 Starloop System(最小费用最大流)(2013 ACM/ICPC Asia Regional Hangzhou Online)

    Description At the end of the 200013 th year of the Galaxy era, the war between Carbon-based lives a ...

  4. (并查集)Travel -- hdu -- 5441(2015 ACM/ICPC Asia Regional Changchun Online )

    http://acm.hdu.edu.cn/showproblem.php?pid=5441 Travel Time Limit: 1500/1000 MS (Java/Others)    Memo ...

  5. (二叉树)Elven Postman -- HDU -- 54444(2015 ACM/ICPC Asia Regional Changchun Online)

    http://acm.hdu.edu.cn/showproblem.php?pid=5444 Elven Postman Time Limit: 1500/1000 MS (Java/Others)  ...

  6. [2013 ACM/ICPC Asia Regional Hangzhou Online J/1010]hdu 4747 Mex (线段树)

    题意: + ;];;;], seg[rt <<  | ]);)) * fa.setv;) * fa.setv;;], seg[rt <<  | ], r - l + );;,  ...

  7. HDU 4757 Tree(可持久化字典树)(2013 ACM/ICPC Asia Regional Nanjing Online)

    Problem Description   Zero and One are good friends who always have fun with each other. This time, ...

  8. HDU 4729 An Easy Problem for Elfness(主席树)(2013 ACM/ICPC Asia Regional Chengdu Online)

    Problem Description Pfctgeorge is totally a tall rich and handsome guy. He plans to build a huge wat ...

  9. HDU 4735 Little Wish~ lyrical step~(DLX搜索)(2013 ACM/ICPC Asia Regional Chengdu Online)

    Description N children are living in a tree with exactly N nodes, on each node there lies either a b ...

随机推荐

  1. Could not obtain transaction-synchronized Session for current thread原因及解决方案

            在开发中,碰到到了Could not obtain transaction-synchronized Session for current thread异常,因此特意记录下. 一.问 ...

  2. 《FPGA设计技巧与案例开发详解-第二版》全套资料包

    本人参与写的一本书(TimeQuest一章由我所写),希望大家多多支持: 全书配套资料上传各大网盘资料中附送大量源码,你值得拥有--<FPGA设计技巧与案例开发详解-第二版>全套资料包-V ...

  3. python 回溯法 子集树模板 系列 —— 18、马踏棋盘

    问题 将马放到国际象棋的8*8棋盘board上的某个方格中,马按走棋规则进行移动,走遍棋盘上的64个方格,要求每个方格进入且只进入一次,找出一种可行的方案. 分析 说明:这个图是5*5的棋盘. 图片来 ...

  4. Linux中tty、pty、pts的概念区别 转载

    基本概念: > tty(终端设备的统称): tty一词源于Teletypes,或teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西 ...

  5. Ubuntu中程序部署时无法加载动态库的解决方法

    Ubuntu下修改环境变量的三种方法 添加环境变量无法解决,可尝试如下操作: sudo vim /etc/ld.so.conf 在ld.so.conf中加入动态库的目录... 然后 sudo ldco ...

  6. MQ见解

    MQ 消息队列是系统级.模块级的通信.RPC是对象级.函数级通信. 1) 什么是推模式,什么是拉模式 2) 有没有消息丢失情况,如何防止 3) MQ用来解决什么问题 4) 你们用的什么MQ,为什么要用 ...

  7. flask-login 整合 pyjwt + json 简易flask框架

    现在很多框架都实现前后端分离,主要为了适应以下几个目的: 1,前后端的分离,可以使前端开发和后端开发更加分工明确,而不是后端还需要在视图模板中加入很多{% XXXX %}标签 2,是为了适应跨域调用或 ...

  8. Vue重载组件....

    v-if配合Vue.nextTick()销毁当前组件后,重新加载...

  9. rabbitMQ教程(四) spring整合rabbitMQ代码实例

    一.开启rabbitMQ服务,导入MQ jar包和gson jar包(MQ默认的是jackson,但是效率不如Gson,所以我们用gson) 二.发送端配置,在spring配置文件中配置 <?x ...

  10. 初次接触Dynamics 365

    最近项目上需要用到微软的Dynamics 365 这个产品,Bing上搜索了一下,看了很多大佬在博客上分享了使用Dynamics 365的经验,简单了解了Dynamics 365 是什么,也有很多大企 ...