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

在一维坐标系中,给定 n条有颜色的线段,第 i条线段的左右端点分别为 li​和 ri​,此外它的颜色为 ci​。

给定m个查询,每个查询给定一个区间 [a,b],需要求出这个区间完全包含的线段中有多少种不同颜色的线段。

题解:说是普及组,还是需要一些水平的。简单的版本可以参考:最开始学主席树的时候的题目:SPOJ:D-query这些说起来之前那个题也可以这样做的。 即是离线操作,把询问和线段一起按右端点排序,然后依次处理,对于同一种颜色,树状数组里面保存最右边的那个。
这样保证了包含的的优先级,而且只统计了依次。
(copy了一份初中生的代码。

#include<bits/stdc++.h>
using namespace std;
const int M = ;
int C,n,m,k,a[M],b[M],c[M],cnt,res[M]; void add(int x,int y)
{
for(int i=x;i<=C+;i+=i&-i) c[i]+=y;
} int ask(int x)
{
int ans=;
for(int i=x;i;i-=i&-i) ans+=c[i];
return ans;
} struct vv
{
int l,r,c;
} s[M],q[M]; bool cmp(vv a,vv b)
{
return a.r<b.r;
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&s[i].l,&s[i].r,&s[i].c);
C=max(C,s[i].r);
}
for(int i=;i<=m;i++)
{
scanf("%d%d",&q[i].l,&q[i].r);
q[i].c=i;
}
sort(s+,s++n,cmp);
sort(q+,q++m,cmp);
int l=;
for(int i=;i<=m;i++)
{
while(s[l].r<=q[i].r && l<=n)
{
if(b[s[l].c]<s[l].l+)
{
if(!b[s[l].c]) cnt++;
if(b[s[l].c]) add(b[s[l].c],-);
add(s[l].l+,);
b[s[l].c]=s[l].l+;
}
l++;
}
res[q[i].c]=cnt-ask(q[i].l);
}
for(int i=;i<=m;i++) printf("%d\n",res[i]);
}
 
 
 

牛客NOIP暑期七天营-普及组2D的更多相关文章

  1. 牛客NOIP暑期七天营-普及组1 解题报告

    A 对于\(100\%\),直接开个桶统计即可.入门题目. 代码:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41 ...

  2. 牛客NOIP暑期七天营-提高组1

    牛客NOIP暑期七天营-提高组1 链接 A 边权可为0就排序建一条链子. 但是边权不为0 除了第一个有0的不行. x连向上一个比他小的数. 期间判断有无解. #include <bits/std ...

  3. 牛客NOIP暑期七天营-提高组5+普及组5

    ————提高组———— 第一题:deco的abs 题目链接:https://ac.nowcoder.com/acm/contest/934/A 因为每个数都可以加任意次 d ,所以可以推出 0 < ...

  4. 牛客NOIP暑期七天营-提高组6

    目录 A-积木大赛 题目描述 link 题解 代码 B-破碎的序列 题目描述 link 题解 C-分班问题 题目描述 link 题解 比赛链接 官方题解 A-积木大赛 题目描述 link 题解 标签: ...

  5. 牛客NOIP暑期七天营-提高组3

    第一题:破碎的矩阵 题目链接:https://ac.nowcoder.com/acm/contest/932/A    刚看到这题的时候感觉特别熟悉...诶,这不就是codeforces某场比赛的某某 ...

  6. 牛客NOIP暑期七天营-提高组2

    第一题:ACGT 题目链接:https://ac.nowcoder.com/acm/contest/931/A trie树.hash.map遍历  ①.trie树上的节点多记一个rest值表示还有多少 ...

  7. 牛客NOIP暑期七天营-提高组6C:分班问题 (组合数)

    题意:A班有N个人,B班有M个人,现在要组成一个新的班级C班,为了公平,从AB班各抽相同人数的人. 现在求所有方案中,人数之和是多少. 思路:即求Σ k*C(N,k)*C(M,k);    先忽略这个 ...

  8. 牛客NOIP暑期七天营-提高组5

    A:deco的abs. 水题,先%,然后相邻两个数min()一下差值. #include<bits/stdc++.h> #define ll long long using namespa ...

  9. 牛客NOIP暑期七天营-提高组2C:滑块(平衡树) (这里rope骗分)

    A:hash 或者 map 或者trie. #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) usin ...

随机推荐

  1. 【java】获取客户端访问的公网ip和归属地

    import com.alibaba.druid.support.json.JSONUtils; import org.thymeleaf.util.StringUtils; import javax ...

  2. 【转】用 async/await 来处理异步

    原文地址:https://www.cnblogs.com/SamWeb/p/8417940.html 昨天看了一篇vue的教程,作者用async/ await来发送异步请求,从服务端获取数据,代码很简 ...

  3. SQL Server 10分钟理解游标

    概述 游标是邪恶的! 在关系数据库中,我们对于查询的思考是面向集合的.而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服. 正常面向集合的思维方式 ...

  4. Springboot Actuator之十二:actuator aop

    前言spring 中aop是一个核心概念,spring boot 是如何实现自动化配置的?现在我们就来分析一下 解析spring boot 中自动化配置是读取/META-INF/spring.fact ...

  5. latex在vim中的代码片段

    Gilles Castel写的vim中使用的代码片段,质量很高,原文:https://github.com/gillescastel 下载后,存放到 ~/.vim/plugged/ultisnips/ ...

  6. vs2012新建单元测试

    多写单元测试也是算向优秀程序员迈进吧((ˇˍˇ)),就像我们小时候做算算术一样,老师会交给我们怎么样检验答案是否正确性.那么我们做程序员也一样,检验自己写的代码是否和我们预期的结果一样!项目小还行,但 ...

  7. 如何在ppt全屏演示时仍然显示任务栏?

    相信做过ppt演讲的人会有这样的体会:有的时候希望全屏ppt时不要直接霸占全部的屏幕,至少希望能够看到任务栏,这样就可以仍然方便切换程序. 如何实现呢? 很简单,看下图吧:) https://www. ...

  8. Linux(Ubuntu)通过nfs挂载远程硬盘

    需求 现有两台Linux Server,需要把Linux01 下的8T硬盘挂在到 Linux02 下:Linux01 硬盘: Linux02 硬盘: 挂载原理 通过 nfs-server 将Linux ...

  9. Python基础之time、os模块

    1.时间模块 1)模块 python安装好之后,会有一些默认模块,我们称之为标准库,标准库中的模块python自带,无需安装. 除了标准库,还有一个第三方库,可以通过pip来安装,不同的库有不同的功能 ...

  10. Java之路---Day13

    2019-10-28-22:40:14 目录 1.Instanceof关键字 2.Final关键字 2.1Final关键字修饰类 2.2Final关键字修饰成员方法 2.3Final关键字修饰局部变量 ...