链接:https://ac.nowcoder.com/acm/contest/3005/H
来源:牛客网

大致题意:让我们针对每一个数,求这个数左区间和右区间颜色相同(也就是数字相同)得对数;
比如:左边3个“3'得颜色,右边2个‘3’得颜色,就有2*3=6对;
数据范围为5e5;所以可接受得复杂度为nlogn;
那么我们可以考虑线段树;
如何维护呢?
我们用两个vis去标记左边和右边各种颜色的个数;代码中visa标记的是右区间,visb标记的是左区间;
然后从左往右遍历一遍:
  在某一次操作中,我们对第K个数求值;那么我们需要先把右区间颜色k的减1;
这个时候假如左区间有这个K数,我们就需要将这个数包含的对数求出来,然后update,
这里有个细节,假如k-1==k,那么需要减掉的对数要减1;
因为k-1并没有在上次的操作中计算;
然后,我们就求K-1这个位置的颜色在右区间的个数,然后将这个数update;
在跑一遍线段树求出第K个数的query(l,r,1)即可;
 
 
 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=5e5+;
int visa[maxn];
int visb[maxn];
ll ans[maxn];
struct node
{
int val,l,r;
}a[maxn];
struct haa
{
int l;int r;
ll sum;
}tree[maxn<<];
void build(int l,int r,int root)
{
tree[root].l=l;tree[root].r=r;
tree[root].sum=;
if(l==r) return;
int mid=l+r>>;
build(l,mid,root<<);
build(mid+,r,root<<|);
}
void up(int root)
{
tree[root].sum=tree[root<<].sum+tree[root<<|].sum;
}
void update(int pos,int val,int root)
{
int L=tree[root].l;
int R=tree[root].r;
if(L==R){
tree[root].sum+=val;
return;
}
int mid=L+R>>;
if(pos<=mid) update(pos,val,root<<);
else update(pos,val,root<<|);
up(root);
}
ll query(int l,int r,int root)
{
int L=tree[root].l;
int R=tree[root].r;
if(l<=L&&r>=R){
return tree[root].sum;
}
ll ans=;
int mid=L+R>>;
if(l<=mid) ans+=query(l,r,root<<);
if(r>mid) ans+=query(l,r,root<<|);
return ans;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d%d%d",&a[i].val,&a[i].l,&a[i].r);
visa[a[i].val]++;
}
build(,maxn,);
ans[]=;
visa[a[].val]--; //右区间--
visb[a[].val]++; //左区间++;
for(int i=;i<=n;i++){
visa[a[i].val]--; //右区间--;
if(visb[a[i].val]){ //如果左区间包含这个数的话;
//我们就需要减掉与这个数相关的对数;
//但是左区间包含i-1这一项;而这一项在上次操作中没有出现;
//所以当两者相等的时候,tmp--;
int tmp=visb[a[i].val];
if(a[i-].val==a[i].val) tmp--;
update(a[i].val,-tmp,);
}
int tmp=visa[a[i-].val];
update(a[i-].val,tmp,);
ans[i]=query(a[i].l,a[i].r,);
visb[a[i].val]++;
}
for(int i=;i<=n;i++)
printf("%lld ",ans[i]);
printf("\n");
return ;
}

2020算法设计竞赛 H 坐火车的更多相关文章

  1. 2020算法设计竞赛 I、匹配星星

    链接:https://ac.nowcoder.com/acm/contest/3005/I来源:牛客网 天上有n颗星星,每颗星星有二维坐标(xi,yi)(x_i, y_i)(xi​,yi​),还有一个 ...

  2. 2020算法设计竞赛 C 汉诺塔

    作者:珩月链接:https://ac.nowcoder.com/discuss/367149来源:牛客网 将木板按照Xi从小到大排序,将这时的Yi数列记为Zi数列,则问题变成将Zi划分为尽可能少的若干 ...

  3. 2020牛客寒假算法基础集训营4 H坐火车

    题目描述 牛牛是一名喜欢旅游的同学,在来到渡渡鸟王国时,坐上了颜色多样的火车. 牛牛同学在车上,车上有 n 个车厢,每一个车厢有一种颜色. 他想知道对于每一个正整数 $ x \in [1,\ n] $ ...

  4. 2020年算法设计竞赛 DP

    链接:https://ac.nowcoder.com/acm/contest/3002/I来源:牛客网https://ac.nowcoder.com/acm/contest/3002/I 题目描述 & ...

  5. 集训第四周(高效算法设计)H题 (贪心)

    Description   Most financial institutions had become insolvent during financial crisis and went bank ...

  6. 2020 年TI 杯大学生电子设计竞赛E题总结(放大器非线性失真研究装置)

    2020年TI杯大学生电子设计竞赛E题总结(放大器非线性失真研究装置) 摘要:E题的竞赛内容主要是参赛者自己搭建一个晶体管放大器,能够产生不失真.顶部失真.底部失真.双向失真和交越失真五种波形,并分别 ...

  7. 算法设计与分析 - 李春葆 - 第二版 - html v2

    1 .1 第 1 章─概论   1.1.1 练习题   1 . 下列关于算法的说法中正确的有( ).   Ⅰ Ⅱ Ⅲ Ⅳ .求解某一类问题的算法是唯一的   .算法必须在有限步操作之后停止   .算法 ...

  8. 算法设计和数据结构学习_5(BST&AVL&红黑树简单介绍)

    前言: 节主要是给出BST,AVL和红黑树的C++代码,方便自己以后的查阅,其代码依旧是data structures and algorithm analysis in c++ (second ed ...

  9. 算法设计手冊(第2版)读书笔记, Springer - The Algorithm Design Manual, 2ed Steven S.Skiena 2008

    The Algorithm Design Manual, 2ed 跳转至: 导航. 搜索 Springer - The Algorithm Design Manual, 2ed Steven S.Sk ...

随机推荐

  1. 《茶余饭后小故事》MV*、MVC、MVP、MVVM的前世今生

    今天我们讲讲历史,讲讲故事,不扯高深术语. MV*表示的意思是:M(Model逻辑层) + View(视图层) + *(中间者).上帝提出了这个逻辑与视图分离,用中间者进行连接的伟大思想,并将实现这个 ...

  2. 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装

    实验目的 了解hive的原理和安装方式 学习使用MySQL数据库 使用hive进行基本操作 实验原理 1.Hive Hive是一个数据仓库技术,包括解释器.编译器.优化器,一次将一个sql语句装化为m ...

  3. Wannafly Winter Camp 2020 Day 6I 变大! - dp

    给定一个序列,可以执行 \(k\) 次操作,每次选择连续的三个位置,将他们都变成他们的最大值,最大化 \(\sum a_i\) 需要对每一个 \(k=i\) 输出答案 \(n \leq 50, a_i ...

  4. python下timer定时器常用的两种实现方法

    方法一,使用线程中现成的:   这种一般比较常用,特别是在线程中的使用方法,下面是一个例子能够很清楚的说明它的具体使用方法: #! /usr/bin/python3 #! -*- conding: u ...

  5. Spring学习笔记-面向切面(AOP)-04

    什么是面向切面编程 先大概了解一下部分术语 横切关注点:软件开发中,散布于多出的功能称为横切关注点(cross-cutting concern),简单的可以描述为可以影响应用多处的功能,比如日志.安全 ...

  6. [NOI2003]文本编辑器 [Fhq Treap]

    [NOI2003]文本编辑器 没啥好说的 就是个板子 #include <bits/stdc++.h> // #define int long long #define rep(a , b ...

  7. 《京东B2B业务架构演变》阅读

    转载:https://mp.weixin.qq.com/s/5xmmuw8O-I_Fi5bzE-_baA?tdsourcetag=s_pcqq_aiomsg 京东 B2B 业务的定位是让各类型的企业都 ...

  8. HDU 6417

    题意 英文 做法 \(S_{a,b}\)为\(a\)与\(b\)中素数次幂奇偶性不同的集合,容易得出\[d_{a,b}=\left\{\begin{aligned}1 &&|S_{a, ...

  9. P1041 传染病控制【暴搜】

    P1041 传染病控制 提交 10.78k 通过 3.74k 时间限制 1.00s 内存限制 125.00MB 题目提供者CCF_NOI 难度提高+/省选- 历史分数100 提交记录 查看题解 标签 ...

  10. docker下载镜像太慢的解决方案

    参考链接:https://blog.csdn.net/weixin_43569697/article/details/89279225 docker下载镜像卡死或太慢找了网上很多方法,使用镜像中国也是 ...