CodeFocrces 369E. Valera and Queries

原创 2013年12月05日 22:40:13


E. Valera and Queries
time limit per test
2 seconds
memory limit per test
512 megabytes
input
standard input
output
standard output

Valera loves segments. He has recently come up with one interesting problem.

The Ox axis of coordinates has n segments, the i-th segment starts in position li and ends in position ri (we will mark it as [li, ri]). Your task is to process m queries, each consists of number cnti and a set of cnti coordinates of points located on the Ox axis. The answer to the query is the number of segments, such that each of them contains at least one point from the query. Segment [l, r] contains point q, if l ≤ q ≤ r.

Valera found the solution of this problem too difficult. So he asked you to help him. Help Valera.

Input

The first line contains two integers nm (1 ≤ n, m ≤ 3·105) — the number of segments on the axis of coordinates and the number of queries.

Next n lines contain the descriptions of the segments. The i-th line contains two positive integers liri (1 ≤ li ≤ ri ≤ 106) — the borders of the i-th segment.

Next m lines contain the description of the queries, one per line. Each line starts from integer cnti (1 ≤ cnti ≤ 3·105) — the number of points in the i-th query. Then the line contains cnti distinct positive integers p1, p2, ..., pcnti (1 ≤ p1 < p2 < ... < pcnti ≤ 106) — the coordinates of points in the i-th query.

It is guaranteed that the total number of points in all queries doesn't exceed 3·105.

Output

Print m non-negative integers, where the i-th number is the response to the i-th query.

Sample test(s)
input
3 3
1 3
4 5
6 7
3 1 4 7
2 4 5
1 8
output
3
1
0

反过来求在两个点之间的线段的个数。。。。很好的数状数组题目。。。。。


#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int maxn=3000010;

int ans[maxn];

struct Interval
{
    int l,r,id;
}I[maxn],q[maxn];

bool cmp(Interval a,Interval b)
{
    return a.r<b.r;
}

int tree[maxn];

int lowbit(int x) {return x&-x; }

void Add(int x)
{
    while(x<1000010)
    {
        tree[x]+=1;
        x+=lowbit(x);
    }
}

int getSum(int x)
{
    int sum=0;
    while(x>0)
    {
        sum+=tree[x];
        x-=lowbit(x);
    }
    return sum;
}

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
    {
        scanf("%d%d",&I[i].l,&I[i].r);
        I[i].id=i;
    }
    int e=0;
    for(int i=0;i<m;i++)
    {
        int t;
        scanf("%d",&t);
        for(int j=0;j<t;j++)
        {
             scanf("%d",&q[e].r);
             q[e].id=i;
             if(j==0) q[e].l=0;
             else q[e].l=q[e-1].r;
             e++;
        }
        q[e].id=i;
        q[e].l=q[e-1].r;
        q[e++].r=1000010;
    }
    sort(I,I+n,cmp);
    sort(q,q+e,cmp);
    for(int i=0;i<m;i++) ans[i]=n;
    memset(tree,0,sizeof(tree));
    int j=0;
    for(int i=0;i<e;i++)
    {
        while(j<n&&I[j].r<q[i].r)
        {
            Add(I[j].l);j++;
        }
        ans[q[i].id]-=getSum(q[i].r-1)-getSum(q[i].l);
    }
    for(int i=0;i<m;i++)
        printf("%d\n",ans[i]);
    return 0;
}




版权声明:来自: 码代码的猿猿的AC之路 http://blog.csdn.net/ck_boss

【CodeChef-XRQRS】Xor Queries【可持久化Trie / +主席树】

【题目链接】 有中文题面就不发题意了。 似乎维护一个可持久化Trie和一个主席树就可以做了,但是仔细想想好像只需要一个可持久化Trie就完了。 脑补了一下Trie上找第k大和统计数个数,似乎...
  • BraketBN
  • BraketBN
  • 2016年04月22日 08:27
  • 503

mysql 多线程备份工具mydumper 备份测试(含与mysqldump的对比)

关于Mydumper 的详细信息可参见:mydumper 源码分析 ,mydumper 官方网站  测试环境说明: OS Centos 6.4 X86_64  2U 8 Core 24 Thre...
  • lidan3959
  • lidan3959
  • 2014年03月10日 01:09
  • 3434

poj 1986 Distance Queries 【LCA转RMQ 裸题】【求两点最短距离】

Distance Queries Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 10510   Accepted...
  • chenzhenyu123456
  • chenzhenyu123456
  • 2015年08月10日 10:40
  • 539

OpenTSDB源码分析之TSDB表操作(查询)

TSDB表的行键比tsdb-uid表复杂,查询也要复杂一些,这种复杂性体现在字段过滤器,在该过滤器中监控指标、日期范围和标签都要考虑到。        所有的过滤器都通过TsdbQuery.run(...
  • bingjie1217
  • bingjie1217
  • 2013年10月15日 09:16
  • 5050

分区表,管理表

创建分区表: create table if not exists china_partition( ProvinceID int, ProvinceName string, CityID int, ...
  • nihaoma_ff
  • nihaoma_ff
  • 2017年04月25日 11:19
  • 385

【redis 基础篇一】redis初识

在JDB来了差不多一个月的时间了,在了解公司业务和框架的过程中,看到了在通过上游调用接口的过程中,使用到了redis来调用值,上游将一个参数传过来,我们通过这个参数去redis中读取部分参数,然后将所...
  • huo065000
  • huo065000
  • 2016年02月28日 18:57
  • 595

【专题】线段树

单点更新 最最基础的线段树,只更新叶子节点,然后把信息用PushUP(int r)这个函数更新上来。 hdu1166 敌兵布阵 线段树 hdu 1166 敌兵布阵 单点更新区间求和 hdu1754 ...
  • cyendra
  • cyendra
  • 2013年05月12日 17:33
  • 736

Codeforces 369E Valera and Queries【逆向思维+离线+树状数组】好题!好题!好题!

E. Valera and Queries time limit per test 2 seconds memory limit per test 512 megabytes i...
  • mengxiang000000
  • mengxiang000000
  • 2017年04月28日 15:33
  • 370

Structured Streaming Programming Guide官方文档再次阅读理解强化学习

Overview Structured Streaming is a scalable and fault-tolerant stream processing engine built on th...
  • Dax1n
  • Dax1n
  • 2017年03月05日 19:47
  • 1069

QT中使用QSqlDatabase 时出现的问题。

1、   程序中用一个类封装了一个操作数据库文件的方法,但是我需要在不同的窗口中调用该数据库(多个应用连接数据),如果我在不同窗口中分别定义了该数据库类的变量,运行的过程中会出现以下警告:     ...
  • sbisyju
  • sbisyju
  • 2013年05月14日 15:45
  • 9402
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CodeFocrces 369E. Valera and Queries
举报原因:
原因补充:

(最多只允许输入30个字)