思维+multiset ZOJ Monthly, July 2015 - H Twelves Monkeys
2024-08-28 15:12:10
/*
题意:n个时刻点,m次时光穿梭,告诉的起点和终点,q次询问,每次询问t时刻t之前有多少时刻点是可以通过两种不同的路径到达
思维:对于当前p时间,从现在到未来穿越到过去的是有效的值,排个序,从大到小询问,那么之前添加的穿越点都是有效的,
用multiset保存。比赛时想到了排序,但是无法用线段树实现查询,stl大法好!
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <set>
#include <iostream>
using namespace std; const int MAXN = 1e5 + ;
const int INF = 0x3f3f3f3f;
struct Year {
int u, v;
bool operator < (const Year &r) const {
return u > r.u;
}
}y[MAXN];
struct Query {
int p, id;
bool operator < (const Query &r) const {
return p > r.p;
}
}q[MAXN];
int ans[MAXN];
int a[];
int n, m, l; int main(void) { //ZOJ Monthly, July 2015 - H Twelves Monkeys
//freopen ("H.in", "r", stdin); while (scanf ("%d%d%d", &n, &m, &l) == ) {
for (int i=; i<=m; ++i) {
scanf ("%d%d", &y[i].u, &y[i].v);
}
for (int i=; i<=l; ++i) {
scanf ("%d", &q[i].p); q[i].id = i;
} sort (y+, y++m); sort (q+, q++l);
multiset<int> S; int j = ;
for (int i=; i<=l; ++i) {
while (j <= m && y[j].u >= q[i].p) {
S.insert (y[j].v); j++;
}
multiset<int>::iterator it; int cnt = ;
for (it=S.begin (); it!=S.end (); ++it) {
a[++cnt] = *(it); if (cnt == ) break;
}
if (cnt == && a[] <= q[i].p) ans[q[i].id] = q[i].p - a[];
else ans[q[i].id] = ;
}
for (int i=; i<=l; ++i)
printf ("%d\n", ans[i]);
} return ;
}
最新文章
- ASP------如何读取文件内容
- DNS分别在什么情况下使用UDP和TCP
- C# conn.open() 外部表不是预期的格式( 读取EXCEL文件出错)
- 让mingw gdb支持STL,并自动load .gdbinit
- Atitit.atiInputMethod&#160;v2词库清理策略工具&#160;&#160;&#160;&#160;q229
- 国际制造执行系统(MES)应用与发展
- jquery的jquery c.browser msie undefined的问题解决办法
- sql中用逗号拼接字符串
- jquery判断复选框是否选中
- careercup-栈与队列 3.3
- hdu_5711_Ingress(TSP+贪心)
- Xamarin组件包 Xamarin.ToolKit第二波
- Akka(21): Stream:实时操控:人为中断-KillSwitch
- jQuery对象和DOM对象和字符串之间的转化
- JSON Web Token入门教程
- 超简单(两步)-微信怎么实现打开外部浏览器,下载app,打开网页URL
- C++模板参数类型(转载)
- HDU 1010生成树
- C# 连接PDA扫码枪
- 未能加载文件或程序集“XX.XXX.Web”或它的某一个依赖项。试图加载格式不正确的程序