栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 3657 Haybale Guessing

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 3657 Haybale Guessing

#include<stdio.h>#include<string.h>#include<algorithm>#define MAXD 1000010#define MAXQ 25010using namespace std;int N, Q, X, p[MAXD], col[MAXD], s[MAXD];struct Que{    int x, y, z;        bool operator < (const Que &t) const    {        return z > t.z;        }}q[MAXQ], t[MAXQ];int find(int x){    int top = 0;    while(p[x] != x)        s[++ top] = x, x = p[x];    while(top)         p[s[top --]] = x;    return x;}void init(){    int i;    for(i = 1; i <= Q; i ++)        scanf("%d%d%d", &q[i].x, &q[i].y, &q[i].z);}void refresh(int x, int y){    int i = find(x - 1), j = find(x);    if(col[i])        p[i] = j;    col[j] = 1;    for(i = j; i <= y; i = j)    {        j = find(i + 1);        if(col[j] || j <= y) col[j] = 1, p[i] = j;    }}int deal(int n){    int i, j, x, y, tx, ty, fa;    for(i = 0; i <= N + 1; i ++)        p[i] = i, col[i] = 0;    for(i = 1; i <= n; i ++)        t[i] = q[i];    sort(t + 1, t + 1 + n);    for(i = 1; i <= n; i = j + 1)    {        x = tx = t[i].x, y = ty = t[i].y;        for(j = i; j < n && t[j + 1].z == t[j].z;) ++ j, x = max(x, t[j].x), y = min(y, t[j].y), tx = min(tx, t[j].x), ty = max(ty, t[j].y);        if(x > y) return 0;        fa = find(x);        if(col[fa] != 0 && find(fa) >= y) return 0;        refresh(tx, ty);    }    return 1;}void solve(){    int mid, min, max;    min = 1, max = Q + 1;     for(;;)    {        mid = (min + max) >> 1;        if(mid == min) break;        if(deal(mid)) min = mid;        else max = mid;    }    printf("%dn", mid == Q ? 0 : mid + 1);}int main(){    while(scanf("%d%d", &N, &Q) == 2)    {        init();        solve();        }    return 0;    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378056.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号