ZOJ 3888 Twelves Monkeys (预处理+优先队列)
题意:题目描写叙述起来比較绕,直接讲案例
9 3 3
9 1
6 1
4 1
6
7
2
输入n,m,q。n限制了你询问的年份,m台时光机,q个询问。
接下来m行,描写叙述从第9年回到第1年。
接下里就是三个询问。
第一个询问6的答案是5.
1.从第6年回到第1年 (6-1)直接做时光机2,(6-7-8-9-1)过3年之后能够做时光机3。
有两个路径能够走(题目中要求至少两条路径)。所以是有效的方案。
2.从第6年回到第2年
.....
思路:先按第一维排序,查找大于等于X(X是询问的年份)的有多少个,若个数小于2。该方案不可行,若个数大于等于2。在查找全部第一维大于等于X的区间中第二维的第二小的值,答案就是X-第二小的值
AC代码:
#include <stdio.h>
#include <algorithm>
#include <queue>
#include <string.h>
using namespace std; struct node {
int a,b;
};
struct node p[50010];
bool cmp(node a,node b) {
if(a.a!=b.a) return a.a>b.a;
return a.b>b.b;
} int sum[50010];
priority_queue<int, vector<int>, greater<int> > que;
int main() {
int i,j;
int n,m,q,c;
while(scanf("%d %d %d",&n,&m,&q)!=EOF) {
while(!que.empty())
que.pop();
for(i=0; i<m; i++) {
scanf("%d %d",&p[i].a,&p[i].b);
}
sort(p,p+m,cmp);
sum[1]=0;
int a1,a2;
for(i=n,j=0; i>=2; i--) {
for(; j<m; j++) {
if(i<=p[j].a) que.push(p[j].b);
else break;
}
if((int)que.size()<2) {
sum[i]=0;
continue;
}
a1=que.top();
que.pop();
a2=que.top();
que.pop();
que.push(a1);
que.push(a2);
if(i-a2<0) sum[i]=0;
else sum[i]=i-a2;
}
while(q--) {
scanf("%d",&c);
printf("%d\n",sum[c]);
}
}
return 0;
}
ZOJ 3888 Twelves Monkeys (预处理+优先队列)的更多相关文章
- zoj 3888 Twelves Monkeys 二分+线段树维护次小值
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemCode=3888 Twelves Monkeys Time Limit: 5 ...
- ZOJ 3888 Twelves Monkeys
Twelves Monkeys Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Origina ...
- 思维+multiset ZOJ Monthly, July 2015 - H Twelves Monkeys
题目传送门 /* 题意:n个时刻点,m次时光穿梭,告诉的起点和终点,q次询问,每次询问t时刻t之前有多少时刻点是可以通过两种不同的路径到达 思维:对于当前p时间,从现在到未来穿越到过去的是有效的值,排 ...
- Twelves Monkeys (multiset解法 141 - ZOJ Monthly, July 2015 - H)
Twelves Monkeys Time Limit: 5 Seconds Memory Limit: 32768 KB James Cole is a convicted criminal ...
- [主席树 强制在线]ZOJ3888 Twelves Monkeys
题意:有n年,其中m年可以乘时光机回到过去,q个询问 下面m行,x,y 表示可以在y年穿越回x年, 保证y>x 下面q个询问, 每个询问有个年份k 问的是k年前面 有多少年可以通过一种以上($\ ...
- POJ 1862 & ZOJ 1543 Stripies(贪心 | 优先队列)
题目链接: PKU:http://poj.org/problem?id=1862 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...
- zoj 2724 Windows Message Queue 优先队列
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1724 题目大意: 给出两种操作,GET要求取出当前队首的元素,而PUT会输入名 ...
- ZOJ 3953:Intervals(优先队列+思维)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5572 题意:给出n个线段,问最少删除几个线段可以使得任意一个点不会被三个以上的 ...
- zoj 3888 线段树 ***
卡n^2,用线段树降到nlogn 记录每个点上所覆盖线段的次小值,保证能有两条路径能走 #include<cstdio> #include<iostream> #include ...
随机推荐
- WinRT ListView间隔变色(一)
我们知道,在WPF里,MSDN提供了三种方法 1.使用转换器Converter 2.继承ListView类,自己处理 3.使用StyleSelctor 到了WinRT的世界了 1. Winrt中Set ...
- 弹性分布式数据集(RDD)
spark围绕弹性分布式数据集(RDD)的概念展开的,RDD是一个可以并行操作的容错集合. 创建RDD的方法: 1.并行化集合(并行化驱动程序中现有的集合) 调用SparkContext的parall ...
- Script:shell脚本生成随机字符串
#!/bin/bash # bash generate random alphanumeric string # # bash generate random character alphanumer ...
- 恶补数论(二) Baby-Step-Giant-Step 大步小步求离散模对数
知识概述 好吧,我承认这是我初三寒假就听过的知识,然而我现在早就高一了(又是寒假,只不过我已经在省选了...) 额,这是求离散模对数的一种算法 也就是求满足方程a^x≡b(mod p)的最小的x(其中 ...
- mysql根据用户的邀请码查询该用户所有的上级
SELECT T1.lvl AS 'level', T2.id AS 'id', T2.zid AS 'zid', T2.self_invite AS 'selfInvite', T2.invite_ ...
- 解决maven无法加载本地lib/下的jar包问题(程序包XXX不存在)
这次一个项目用到maven编译,我在本地开发的时候jar包都是放在WEB-INF/lib目录下,通过 BuildPath将jar包导入,然后用MyEclipse中的:maven package命令打成 ...
- 【Codeforces 582A】GCD Table
[链接] 我是链接,点我呀:) [题意] 给你一个数组A[]经过a[i][j] = gcd(A[i],A[j])的规则生成的二维数组 让你求出原数组A [题解] 我们假设原数组是A 然后让A数组满足A ...
- Java基础学习总结(79)——Java本地接口JNI详解
对于java程序员来说,java语言的好处和优点,我想不用我说了,大家自然会说出很多一套套的.但虽然我们作为java程序员,但我们不得不承认java语言也有一些它本身的缺点.比如在性能.和底层打交道方 ...
- nyoj 31 5个数求最值
5个数求最值 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 设计一个从5个整数中取最小数和最大数的程序 输入 输入只有一组测试数据,为五个不大于1万的正整数 输 ...
- HDU 1542 Atlantics 线段树+离散化扫描
将 x 轴上的点进行离散化,扫描线沿着 y 轴向上扫描 每次添加一条边不断找到当前状态有效边的长度 , 根据这个长度和下一条边形成的高度差得到一块合法的矩形的面积 #include<iostre ...