码迷,mamicode.com
首页 > 其他好文 > 详细

题目1 : 打折机票(hihocoder 20挑战赛)

时间:2016-05-13 01:25:19      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:


时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

技术分享

 因为思念新宿的"小姐姐"们,岛娘计划6月份再去一趟东京,不过这次看来她需要自掏腰包。经过了几天的夜战,岛娘终于在体力耗尽之前,用Python抓下了所有6月份,上海至东京的全部共 n 张机票。现在请你帮助债台高筑的岛娘筛选出符合时间区间要求的,最贵的机票。

输入

输入数据的第一行包含两个整数 n,?m(1?≤?n,?m?≤?105),分别表示机票的总数,和询问的总数。接下来的 n 行,每行两个整数 t,?v (1?≤?t,?v?≤?105),表示每张机票出发的时间和价格。 接下来的 m 行,每行两个整数 a,?b (1?≤?a?≤?b?≤?105),表示每个询问所要求的时间区间。

输出

对于每组询问,输出一行表示最贵的价格。如果没有符合要求的机票,输出一行"None"。

样例输入
7 6
1 1
2 1
4 3
4 4
4 5
6 9
7 9
1 7
1 2
6 7
3 3
4 4
5 5
样例输出
9
1
9
None
5
None
分析:很明显的线段树区间求最值,区别:存在间断点特殊处理一下


/*
7 6

1 1
2 1
4 3
4 4
4 5
6 9
7 9


1 7
1 2
6 7
3 3
4 4
5 5


9
1
9
None
5
None
*/

#include <cstdio>
#include <cstring>
#include <vector>
#include <iostream>
#include <algorithm>
#define INF -0xf

const int maxn=1000005;

using namespace std;

struct node
{
    int id;
    int price;
};

int segTree[maxn];
int a[maxn];




void Build(int node, int b, int e)
{
    if (b == e)
        segTree[node] = a[b];
    else
    {
        Build(2*node, b, (b+e)/2);
        Build(2*node+1, (b+e)/2+1, e);
        if (segTree[2 * node] >= segTree[2 * node + 1])
            segTree[node] = segTree[2 * node];
        else
            segTree[node] = segTree[2 * node + 1];
    }
}


int Query(int node,int b,int e,int left,int right)
{
    if (b>=left && e<=right) return segTree[node];
    int m=(b+e)/2;
    int sum=0;
    if(left<=m)sum=max(sum,Query(node<<1,b,m,left,right));
    if(right>m)sum=max(sum,Query(node<<1|1,m+1,e,left,right));
    return sum;
}




int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    int a1,a2;
    for (int i=1;i<=n;i++)
        a[i]=INF;
    for (int i=1;i<=n;i++)
    {
        scanf("%d%d",&a1,&a2);
        if (a[a1] == INF) a[a1]=a2;
        else a[a1]=max(a[a1],a2);
    }
    Build(1,1,n);
    for (int i=1;i<=m;i++)
    {
        scanf("%d%d",&a1,&a2);
        int ans=Query(1,1,n,a1,a2);
        if (ans == 0) printf("None\n");//特判
        else printf("%d\n",ans);
    }
    return 0;
}




题目1 : 打折机票(hihocoder 20挑战赛)

标签:

原文地址:http://blog.csdn.net/qq_32036091/article/details/51344416

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!