hihocoder-1299 打折机票(线段树)
2016-05-08 12:02
253 查看
题目链接:
单点时限:1000ms
内存限制:256MB
因为思念新宿的"小姐姐"们,岛娘计划6月份再去一趟东京,不过这次看来她需要自掏腰包。经过了几天的夜战,岛娘终于在体力耗尽之前,用Python抓下了所有6月份,上海至东京的全部共 n 张机票。现在请你帮助债台高筑的岛娘筛选出符合时间区间要求的,最贵的机票。
样例输入
样例输出
打折机票
时间限制: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 题意: 思路: 线段树找区间最大值; AC代码:
#include <bits/stdc++.h> using namespace std; #define Riep(n) for(int i=1;i<=n;i++) #define Riop(n) for(int i=0;i<n;i++) #define Rjep(n) for(int j=1;j<=n;j++) #define Rjop(n) for(int j=0;j<n;j++) #define mst(ss,b) memset(ss,b,sizeof(ss)); typedef long long LL; const LL mod=1e9+7; const double PI=acos(-1.0); const int inf=0x3f3f3f3f; const int N=1e5+5; int n,m; struct Node { int l,r,ans; }tree[4*N]; void build(int node,int L,int R) { tree[node].l=L; tree[node].r=R; tree[node].ans=0; if(L>=R)return ; int mid=(L+R)>>1; build(2*node,L,mid); build(2*node+1,mid+1,R); } void update(int node,int pos,int num) { if(tree[node].l==tree[node].r&&tree[node].r==pos) { tree[node].ans=max(tree[node].ans,num); return ; } int mid=(tree[node].l+tree[node].r)>>1; if(pos<=mid)update(2*node,pos,num); else update(2*node+1,pos,num); tree[node].ans=max(tree[2*node].ans,tree[2*node+1].ans); } int query(int node,int L,int R) { if(L<=tree[node].l&&R>=tree[node].r) { return tree[node].ans; } int mid=(tree[node].l+tree[node].r)>>1; if(R<=mid)return query(2*node,L,R); else if(L>mid)return query(2*node+1,L,R); else return max(query(2*node,L,mid),query(2*node+1,mid+1,R)); } int main() { while(scanf("%d%d",&n,&m)!=EOF) { int x,y; build(1,1,N-2); for(int i=1;i<=n;i++) { scanf("%d%d",&x,&y); update(1,x,y); } while(m--) { scanf("%d%d",&x,&y); int temp=query(1,x,y); if(!temp)printf("None\n"); else printf("%d\n",temp); } } return 0; }
相关文章推荐
- Android工作总结
- oc语言--NSValue
- SQL2005-Windows身份验证改为SQLserver身份验证【sa】
- 专题三1016
- ThinkPHP3.1.3的单字母函数汇总
- bananapro 安装FLASH
- 利用反射及JDBC元数据编写通用查询方法
- Foundation框架NSNumber、NSValue和NSDate
- Leetcode 061 Rotate List
- 二、友录项目-联系人界面搭建
- SQLSERVER2008 R2的端口设置
- 文章标题
- JAVA 文件存储、写入
- Mysql basic interview questions
- n电p空
- ::范围解析操作符
- 版本定制第5课:基于案例一节课贯通Spark Streaming流计算框架的运行源码
- GoogleNet tips
- 【图解HTTP笔记】第一章 了解Web及网络基础
- 图˙谱˙马尔可夫过程˙聚类结构----by林达华