loj2275 「JXOI2017」颜色
枚举右端点,然后看左端点合法情况。
先预处理每个颜色 \(i\) 的最大出现位置 \(max_i\) 和最小出现位置 \(min_i\)。对于枚举右端点在一个位置 \(i\),凡是 \(max_k > i\) 的颜色 \(k\) 都是不能要的。那么要满足右端点往右都合法,就要找出一个 \(j < i\) 且 \(max_{col_j} > i\) 这样的最大的 \(j\)。那么左端点就可以在 \((j,i]\) 之间了。
再来满足左端点往左都合法。对于一个颜色 \(k\),当 \(max_k \leq i\) 时,左端点显然不能在 \((min_k,max_k]\) 之间。线段树+栈解决问题。
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
int T, n, col[300005], minn[300005], maxn[300005], sta[300005], din;
const int oo=0x3f3f3f3f;
ll ans;
struct SGT{
int sum[1200005];
bool tag[1200005];
void build(int o, int l, int r){
sum[o] = tag[o] = 0;
if(l==r) ;
else{
int mid=(l+r)>>1;
int lson=o<<1;
int rson=lson|1;
if(l<=mid) build(lson, l, mid);
if(mid<r) build(rson, mid+1, r);
}
}
void pushDown(int o, int l, int r, int lson, int rson, int mid){
sum[lson] = mid - l + 1;
sum[rson] = r - mid;
tag[lson] = true;
tag[rson] = true;
tag[o] = false;
}
void update(int o, int l, int r, int x, int y){
if(l>r) return ;
if(l>=x && r<=y){
sum[o] = (r - l + 1);
tag[o] = true;
}
else{
int mid=(l+r)>>1;
int lson=o<<1;
int rson=lson|1;
if(tag[o]) pushDown(o, l, r, lson, rson, mid);
if(x<=mid) update(lson, l, mid, x, y);
if(mid<y) update(rson, mid+1, r, x, y);
sum[o] = sum[lson] + sum[rson];
}
}
int query(int o, int l, int r, int x, int y){
if(l>r) return 0;
if(l>=x && r<=y) return sum[o];
else{
int mid=(l+r)>>1;
int lson=o<<1;
int rson=lson|1;
int re=0;
if(tag[o]) pushDown(o, l, r, lson, rson, mid);
if(x<=mid) re += query(lson, l, mid, x, y);
if(mid<y) re += query(rson, mid+1, r, x, y);
return re;
}
}
}sgt;
int main(){
cin>>T;
while(T--){
scanf("%d", &n);
ans = din = 0;
for(int i=1; i<=n; i++){
scanf("%d", &col[i]);
minn[col[i]] = oo;
maxn[col[i]] = 0;
}
for(int i=1; i<=n; i++){
minn[col[i]] = min(minn[col[i]], i);
maxn[col[i]] = max(maxn[col[i]], i);
}
sgt.build(1, 1, n);
for(int i=1; i<=n; i++){
if(i==maxn[col[i]])
sgt.update(1, 1, n, minn[col[i]]+1, i);
sta[++din] = i;
while(din && maxn[col[sta[din]]]<=i) din--;
int pos=!din?1:sta[din]+1;
ans += (i - pos + 1) - sgt.query(1, 1, n, pos, i);
}
printf("%lld\n", ans);
}
return 0;
}
loj2275 「JXOI2017」颜色的更多相关文章
- 【LOJ】#2275. 「JXOI2017」颜色
题解 我们枚举右端点判断合法的左端点有哪些 首先,记录一下右端点右边的点的pre,也就是这个数字前一个出现的位置,取所有小于枚举右端点r的值中最大的一个做为l,用优先队列维护即可,[l + 1,r]就 ...
- loj2274 「JXOI2017」加法
二分一下,然后从左到右扫描,扫到左端点就把区间 push 到堆里. 每次有点不符合二分的值时,就贪心地选择右端点最远的 add. #include <algorithm> #include ...
- 「SDOI2017」树点涂色 解题报告
「SDOI2017」树点涂色 我sb的不行了 其实一开始有一个类似动态dp的想法 每个点维护到lct树上到最浅点的颜色段数,然后维护一个\(mx_{0,1}\)也就是是否用虚儿子的最大颜色 用个set ...
- LOJ #2116 Luogu P3241「HNOI2015」开店
好久没写数据结构了 来补一发 果然写的时候思路极其混乱.... LOJ #2116 Luogu P3241 题意 $ Q$次询问,求树上点的颜色在$ [L,R]$中的所有点到询问点的距离 强制在线 询 ...
- 「ZJOI2018」历史(LCT)
「ZJOI2018」历史(LCT) \(ZJOI\) 也就数据结构可做了-- 题意:给定每个点 \(access\) 次数,使轻重链切换次数最大,带修改. \(30pts:\) 挺好想的.发现切换次数 ...
- Loj #3057. 「HNOI2019」校园旅行
Loj #3057. 「HNOI2019」校园旅行 某学校的每个建筑都有一个独特的编号.一天你在校园里无聊,决定在校园内随意地漫步. 你已经在校园里呆过一段时间,对校园内每个建筑的编号非常熟悉,于是你 ...
- 「HAOI2018」染色 解题报告
「HAOI2018」染色 是个套路题.. 考虑容斥 则恰好为\(k\)个颜色恰好为\(c\)次的贡献为 \[ \binom{m}{k}\sum_{i\ge k}(-1)^{i-k}\binom{m-k ...
- 摹客iDoc「标注」新玩法!这些细节让你爱不释手(201903-2版本更新)
哈喽小伙伴们,我们又见面啦!没错,小摹就是来告诉大家:摹客iDoc又双叒叕升级了!这次又上线了许多新玩法,在此之前,小摹先带大家温习一下iDoc以往的知识点: 攻城狮查看标注的利器 —— 标注信息智能 ...
- LOJ #2585. 「APIO2018」新家
#2585. 「APIO2018」新家 https://loj.ac/problem/2585 分析: 线段树+二分. 首先看怎样数颜色,正常的时候,离线扫一遍右端点,每次只记录最右边的点,然后查询左 ...
随机推荐
- mongodb关联查询 和spring data mongodb
GITHUB:https://github.com/peterowang/Springdata-mongo 使用DBRefs DBRefs中有三个字段 - $ref - 此字段指定引用文档的集合 $i ...
- dubbo rest返回值异常Incompatible types: declared root type
2018-08-28 17:26:02,208 [http-bio-9090-exec-1][][][][][] ERROR com.wjs.member.plugin.intercepter.Ser ...
- 牛客NOIP提高组(二)题解
心路历程 预计得分:100 + 40 + 30 = 170 实际得分:100 + 30 + 0 = 130 T2有一个部分分的数组没开够RE了. T3好像是思路有点小问题.. 思路没问题,实现的时候一 ...
- 关于vue-resource 转变成axios的过程
在做东钿贷后系统的时候,我选择了vue-resource这个插件作为与服务器沟通工具,但是听说前端同行说vuejs2.0已经不在维护vue-resource了,vuejs2.0 已经使用了axios了 ...
- 大家一起和snailren学java-(一)对象导论
OOP,是java语言的特性.面向对象思想贯穿整个java开发. 那什么是面向对象呢?什么是对象? 在面向对象设计语言看来,万事万物都为对象.生活中的一个物体,有自己的属性,有自己的活动.比如一辆汽车 ...
- 前端APP打包管理规范
1.包命名规范1)说明打包人:姓名拼音首字母小写 dev:开发环境 test:测试环境 pre:预发布环境 prod:正式环境 例如:版本号:1.2.3,说明:第一个数字大版本:变更框架.调整结构时变 ...
- ansible-galera集群部署
一.环境准备 1.各主机配置静态域名解析: [root@node1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain local ...
- nginx的工作流程
nginx请求处理流程 nginx进程结构 master进程:是作为worker进程管理的 worker进程:处理真正的请求的而master进程则是管控这些进程的工作方式的:缓存是在多个worker进 ...
- HTML之基本语法(段落标签、标题标签、空格标签、换行标签、图片标签和图片的基本属性)
一.HTML标签 所谓的HTML的标签就是发明者认为定义好的一些单词,就相当于我们汉语中的字 二.HTML的语法 语法就是用来定义这些“字”应该如何解析或者书写的规则 三.常见标签及基本语法 1.人为 ...
- 《毛毛虫组》【Alpha】Scrum meeting 5
第二天 日期:2019/6/18 1.1 今日完成任务情况以及遇到的问题. 今日完成任务情况: 出入库货物年统计模块设计及系统的测试运行: (1)对数据库表--tb_InStore和tb_OutSto ...