题目链接: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. 计算机视觉-sift(1)原理

    1999年由David Lowe首先发表于计算机视觉国际会议(International Conference on Computer Vision,ICCV),2004年再次经David Lowe整 ...

  2. 50Hz工频干扰消除

    50Hz工频干扰消除 今天整理工频干扰消除算法. 我们知道,设计数字滤波器,和模拟滤波器的实质,其实就是求一组系数,逼近要求的频率响应. 模拟滤波器已经很成熟,因此,数字滤波器的设计,将S平面映射到Z ...

  3. 第4章 初识STM32

    第4章     初识STM32 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege ...

  4. MySQL主从报错1594

    一.主从报错 Relay log read failure 问题原因,MySQL主从使用的是kvm虚拟机,物理机超分严重,在负载高的情况下会kill掉占用资源最多的虚拟机,再启动后导致主从失败 mys ...

  5. idea git pull项目到本地时容易出现的问题

    有时候pull到本地,出了各种错误,其实是因为搞来搞去的,容易出问题,所以最好的方法是拿原有打包好的整个稳定能跑的项目环境, 先git add,然后vcs重置head为hard,然后再pull,一般就 ...

  6. C#字符串截取、获取当前电脑时间、判断输入日期对错 随手记

    字符串截取:这个就当复习了,看意见就可以 //身份证生日截取 //Console.WriteLine("请输入18位身份证号:"); //string x = Console.Re ...

  7. NAND Flash底层原理,SLC MLC TLC比较

    NAND-Flash 的存储原理 固态硬盘最小单元的基本架构如下: 我们知道计算机中所有的信息储存最终都必须回归到 0与1,原则上,只要存储单元能提供两种或两种以上可供辨识的状态,便可以拿来纪录数据. ...

  8. [摘抄]从 GitHub 身上学到的 3 个创业经验

    1.找一个大问题去解决 让 Git 更容易使用是 GitHub 的目标,但它从来不是 GitHub 的最终目标.GitHub 的真正目标是让协作和编写软件变得更容易.世界上每一个软件开发者都在努力解决 ...

  9. CM005-逆向分析过程(上篇)

    前言 005,都说比较变态,很多人给放过去了,但是我还是决定上了它,既然变态就分两篇,上篇先实际说流程,到底应该怎么上它,下篇会告诉逆向分析的过程和方法 准备 [环境和工具] win7/xp虚拟机环境 ...

  10. C. Smallest Word

    链接 [http://codeforces.com/contest/1043/problem/C] 题意 给你一个只包含a,b的字符串,有一种操作把第1个字符到第i个字符的子串进行反转,问要使最后字符 ...