[CodeForces - 369E Valera and Queries](http://codeforces.com/problemset/problem/369/E)
题目大意:给出n个线段(线段的左端点和右端点坐标)和m个查询,每个查询有cnt个点,要求给出有多少条线段包含至少其中一个点。
思路:如果按照题意正面去算有每个线段是否包含点,那么时间复杂度是不允许的;如果去算每个点被哪些线段包含,那么去重比较困难。正难则反,因此对于每个查询,选择去求有多少个线段没有覆盖任何一个点,那么答案则为n减所求。用树状数组来统计没有覆盖任何一个点的线段数,大致做法是将临界线段(如x1+1,x2-1)插入seg数组中,再按一定规则进行排序,之后通过树状数组维护统计被包含于临界线段的线段数,具体实现在代码中。
代码:
```C++
#include
#include
#include
using namespace std;
const int maxn=1000000+5;
struct segment
{
int l,r,id;
};
bool cmp(const segment& a,const segment& b)
{
if (a.l!=b.l)
return a.l>b.l;
if (a.r!=b.r)
return a.r0)
{
sum+=tree[i];
i-=i&-i;
}
return sum;
}
int ans[maxn];

int main()

{

int n,m,i,j;

cin>>n>>m;

for (i=0;i<n;++i)

{

scanf("%d%d",&seg[i].l,&seg[i].r);

seg[i].id=0;

}

int cnt,x,pre,tt=n;

for (i=1;i<=m;++i)

{

ans[i]=n;

pre=0;

scanf("%d",&cnt);

for (j=0;j<cnt;++j)

{

scanf("%d",&x);

if (pre+1<=x-1)

{

seg[tt].l=pre+1;

seg[tt].r=x-1;

seg[tt++].id=i;

}

pre=x;

}

seg[tt].l=pre+1;

seg[tt].r=maxn;

seg[tt++].id=i;

}

sort(seg,seg+tt,cmp);

for (i=0;i<tt;++i)

{

if (seg[i].id)

{

ans[seg[i].id]-=sum(seg[i].r);

}

else

{

add(seg[i].r,1);

}

}

for (i=1;i<=m;++i)

{

printf("%d\n",ans[i]);

}

return 0;

}

</font>

CodeForces - 369E Valera and Queries(树状数组)的更多相关文章

  1. Codeforces 369E Valera and Queries --树状数组+离线操作

    题意:给一些线段,然后给m个查询,每次查询都给出一些点,问有多少条线段包含这个点集中的一个或多个点 解法:直接离线以点为基准和以线段为基准都不好处理,“正难则反”,我们试着求有多少线段是不包含某个查询 ...

  2. Codeforces Round #216 (Div. 2) E. Valera and Queries 树状数组 离线处理

    题意:n个线段[Li, Ri], m次询问, 每次询问由cnt个点组成,输出包含cnt个点中任意一个点的线段的总数. 由于是无修改的,所以我们首先应该往离线上想, 不过我是没想出来. 首先反着做,先求 ...

  3. codeforces 570 D. Tree Requests 树状数组+dfs搜索序

    链接:http://codeforces.com/problemset/problem/570/D D. Tree Requests time limit per test 2 seconds mem ...

  4. CodeForces 828E DNA Evolution(树状数组)题解

    题意:给你一个串k,进行两个操作: “1 a b”:把a位置的字母换成b “2 l r s”:求l到r有多少个字母和s匹配,匹配的条件是这样:从l开始无限循环s形成一个串ss,然后匹配ss和指定区间的 ...

  5. Codeforces 909C Python Indentation:树状数组优化dp

    题目链接:http://codeforces.com/contest/909/problem/C 题意: Python是没有大括号来标明语句块的,而是用严格的缩进来体现. 现在有一种简化版的Pytho ...

  6. CodeForces - 597C Subsequences 【DP + 树状数组】

    题目链接 http://codeforces.com/problemset/problem/597/C 题意 给出一个n 一个 k 求 n 个数中 长度为k的上升子序列 有多少个 思路 刚开始就是想用 ...

  7. Codeforces 635D Factory Repairs【树状数组】

    又是看了很久的题目... 题目链接: http://codeforces.com/contest/635/problem/D 题意: 一家工厂生产维修之前每天生产b个,维修了k天之后每天生产a个,维修 ...

  8. GYM 100741A Queries(树状数组)

    A. Queries time limit per test 0.25 seconds memory limit per test 64 megabytes input standard input ...

  9. codeforces E. DNA Evolution(树状数组)

    题目链接:http://codeforces.com/contest/828/problem/E 题解:就是开4个数组举一个例子. A[mod][res][i]表示到i位置膜mod余数是res的‘A’ ...

随机推荐

  1. MySQL的简介、启动及其DDL

    MySQL的各项配置: 默认会启用TCP/IP网络: 默认客户端/服务器端口:3306: 将数据库的BIN目录写入Windows的的path环境变量: 默认不允许root用户在其他机器上远程登录: M ...

  2. centos 服务器 发开防火墙端口

    一.概述 在服务器上手动安装了某个软件,需要通过外部访问该软件(有对外开放端口),但是此时访问不通,此时检查,发现是该端口没有在防火墙开放,因此外界访问不了该服务器上的该软件对外提供的功能,基于此,需 ...

  3. QT 安卓动态获取权限

    一:在AndroidManifest.xml文件中赋予相关权限 二: package ckdz.Appproject; import android.Manifest; import android. ...

  4. python检测域名

    pip install python-whois import whois print(whois.whois('baidu.com')) #输出有关baidu.com的所有域名

  5. 第二十四篇 jQuery 学习6 删除元素

    jQuery 学习6 删除元素   上节课我们做了添加元素,模拟的是楼主发的文章,路人评论,那么同学们这节课学了删除之后,去之前的代码上添加一个删除,模拟一个楼主删除路人的评论. jQuery的删除方 ...

  6. vue 编译警告 Compiled with 4 warnings

    问题原因: windows下盘符的大小写导致的. 我在cmd里运行的时候,是切换到小写,改成大写的E盘符就没问题了

  7. java开发环境构建

    一. 基本工具安装 1. 配置终端命令别名 vim ~/.bash_profile *********************************************** # for colo ...

  8. pycharm问题合集

    一  打开pycharm出现 点击右上角的配置之后 配置正确的python路径 又出现 解决办法 删除所有的解释器,据说是重名导致的. 然后在配置一次 二  ModuleNotFoundError: ...

  9. 【转】(深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)

    bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域. bss是英文Block Started by Symbol的简称. bss段属于静态内存分配. ...

  10. python常用模块:模块练习

    今日作业: 1.简述 什么是模块 模块就将一些函数功能封装在一个文件内,以‘文件名.py’命名,以“import 文件名”方式调用 模块有哪些来源  自定义.内置.DLL编译器.包模块的格式要求有哪些 ...