hdu 5360 Hiking(贪心)
2015-08-07 19:17
309 查看
题目链接:hdu 5360 Hiking
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 5;
struct Pi {
int idx, l, r;
bool operator < (const Pi& u) const {
if (l != u.l)
return l < u.l;
return r < u.r;
}
}p[maxn];
struct State {
int pos, idx;
State (int pos = 0, int idx = 0) : pos(pos), idx(idx) {}
bool operator < (const State& u) const {
return pos > u.pos;
}
};
int N, order[maxn];
void init () {
scanf("%d", &N);
for (int i = 1; i <= N; i++) {
scanf("%d", &p[i].l);
p[i].idx = i;
}
for (int i = 1; i <= N; i++)
scanf("%d", &p[i].r);
sort(p + 1, p + 1 + N);
}
void solve () {
int mv = 1, ans = 0;
priority_queue<State> Q;
for (int i = 1; i <= N; i++) {
if (p[i].l <= ans) {
Q.push(State(p[i].r, p[i].idx));
continue;
} else {
while (!Q.empty() && Q.top().pos < ans) {
order[mv++] = Q.top().idx;
Q.pop();
}
if (!Q.empty() && Q.top().pos >= ans) {
order[mv++] = Q.top().idx;
Q.pop();
ans++;
i--;
} else
order[mv++] = p[i].idx;
}
}
while (!Q.empty()) {
if (Q.top().pos >= ans)
ans++;
order[mv++] = Q.top().idx;
Q.pop();
}
printf("%d\n", ans);
for (int i = 1; i <= N; i++)
printf("%d%c", order[i], i == N ? '\n' : ' ');
}
int main () {
int cas;
scanf("%d", &cas);
while (cas--) {
init();
solve();
}
return 0;
}
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 5;
struct Pi {
int idx, l, r;
bool operator < (const Pi& u) const {
if (l != u.l)
return l < u.l;
return r < u.r;
}
}p[maxn];
struct State {
int pos, idx;
State (int pos = 0, int idx = 0) : pos(pos), idx(idx) {}
bool operator < (const State& u) const {
return pos > u.pos;
}
};
int N, order[maxn];
void init () {
scanf("%d", &N);
for (int i = 1; i <= N; i++) {
scanf("%d", &p[i].l);
p[i].idx = i;
}
for (int i = 1; i <= N; i++)
scanf("%d", &p[i].r);
sort(p + 1, p + 1 + N);
}
void solve () {
int mv = 1, ans = 0;
priority_queue<State> Q;
for (int i = 1; i <= N; i++) {
if (p[i].l <= ans) {
Q.push(State(p[i].r, p[i].idx));
continue;
} else {
while (!Q.empty() && Q.top().pos < ans) {
order[mv++] = Q.top().idx;
Q.pop();
}
if (!Q.empty() && Q.top().pos >= ans) {
order[mv++] = Q.top().idx;
Q.pop();
ans++;
i--;
} else
order[mv++] = p[i].idx;
}
}
while (!Q.empty()) {
if (Q.top().pos >= ans)
ans++;
order[mv++] = Q.top().idx;
Q.pop();
}
printf("%d\n", ans);
for (int i = 1; i <= N; i++)
printf("%d%c", order[i], i == N ? '\n' : ' ');
}
int main () {
int cas;
scanf("%d", &cas);
while (cas--) {
init();
solve();
}
return 0;
}
相关文章推荐
- HDU 1879 继续畅通工程 prim算法 最小生成树
- 上传文件块client实现
- 用百度API实现热(WIFI)、GPS、基站定位
- Win10开发:数据绑定
- 【CODEFORCES】 B. Towers
- POJ-1581 A Contesting Decision-模拟ACM比赛时的评分规则
- C#高级编程七十九天----反射
- C++(11)标准I/O库
- springMVC获取request和response
- hdu 5358 First One(二进制+twopoint)
- POJ-1552 Doubles-二倍关系
- Docker初识
- (转)CSS中空格的写法
- SQL语句必会的50题
- (转)CSS中空格的写法
- 枚举需要的注意事项
- POJ-1338 Ugly Numbers-被2,3,5整除的数
- MATLAB中如何直接曲线拟合,而不使用cftool的GUI界面
- 软件测试中条件覆盖,路径覆盖,语句覆盖,分支覆盖的区别
- iphone休眠模式下,js定时器无法执行