P2898 [USACO08JAN]haybale猜测Haybale Guessing
好题.
搬运一下luogu的题解, 讲的挺清楚的.
题意:给出一些区间的最小值 求问 最早哪个问题会产生矛盾 输出
我们可以二分判断 哪个地方最早出现矛盾
然后每次针对二分的一个值 我去判断一下是否成立 我首先针对权值排序
然后从大到小去覆盖 出现第一个无法覆盖的区域我就返回false
当然, 此处无法覆盖的区域
其实有两种情况 :
- 多个区间最小值相同却没有一个共同包含的区间;
- 多个区间最小值相同且有一个共同包含的区间, 但是这个区间被一个最小值更大的区间包含.
为了处理这两种不合法的情况, 我们先二分不合法端点所在位置, 然后按照所给的最小值从大到小排序.
对于情况一, 我们记录下相同权值的区间中左端点的最大值和右端点的最小值. 假如左端点的最大值 \(>\) 右端点的最小值, 就说明这之间没有被这些区间完全覆盖, 显然不合法.
情况二用线段树或者并查集都可以.
假如遇见了这两种情况, 就缩小二分的右端点即可.
这里我用的线段树.
#include <cstdio>
#include <cstring>
#include <cassert>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1e6 + 10;
const int MAXQ = 25000 + 10;
inline int read(){char ch = getchar(); int x = 0;while(!isdigit(ch)) ch = getchar();while(isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();return x;
}int N, Q;
struct Query
{int l, r, v;bool operator >(const Query &rhs) const {return v > rhs.v;}
}que[MAXQ], q[MAXQ];namespace stree
{#define mid ((l + r) >> 1)#define ls (o << 1)#define rs ((o << 1) | 1)struct Node{int val, tag;}node[MAXN << 2];inline void pushup(int o) {node[o].val = node[ls].val + node[rs].val;}inline void givetag(int o, int l, int r, int v) {node[o].val = (r - l + 1) * v;node[o].tag = v;}inline void pushdown(int o, int l, int r) {int &v = node[o].tag;if(v == 0) return;givetag(ls, l, mid, v), givetag(rs, mid + 1, r, v);v = 0;} void modify(int o, int l, int r, int a, int b, int v) {if(l > b || r < a) return ;if(a <= l && r <= b) return givetag(o, l, r, v);pushdown(o, l, r);modify(ls, l, mid, a, b, v), modify(rs, mid + 1, r, a, b, v); return pushup(o);}int query(int o, int l, int r, int a, int b) {if(l > b || r < a) return 0;if(a <= l && r <= b) return node[o].val;pushdown(o, l, r);return query(ls, l, mid, a, b) + query(rs, mid + 1, r, a, b);}#undef mid#undef ls#undef rs
}inline bool check(int x) {using namespace stree;memcpy(q, que, (x + 1) * sizeof(Query));sort(q + 1, q + x + 1, greater<Query>());memset(node, 0, ((N + 1) << 2) * sizeof(Node));for(int i = 1; i <= x; i++) {int lmin = q[i].l, rmin = q[i].r, lmax = q[i].l, rmax = q[i].r;while(i + 1 <= x && q[i].v == q[i + 1].v) {++i;lmin = min(lmin, q[i].l), rmin = min(rmin, q[i].r);lmax = max(lmax, q[i].l), rmax = max(rmax, q[i].r);}if(lmax > rmin || query(1, 1, N, lmax, rmin) == (rmin - lmax + 1)) return false;modify(1, 1, N, lmin, rmax, 1);}return true;
}int main(){// freopen("p2898.in", "r", stdin);cin>>N>>Q;for(int i = 1; i <= Q; i++)que[i].l = read(), que[i].r = read(), que[i].v = read();int l = 1, r = Q + 1;while(l < r) {int mid = (l + r) >> 1;if(check(mid)) l = mid + 1;else r = mid;}if(r == Q + 1) puts("0");else printf("%d\n", l);return 0;
}
转载于:https://www.cnblogs.com/wsmrxc/p/9811949.html
P2898 [USACO08JAN]haybale猜测Haybale Guessing相关推荐
- 线段树 + 二分答案:Haybale Guessing G
参考文献:题解 P2898 [[USACO08JAN]haybale猜测Haybale Guessing] - レムの小屋 - 洛谷博客 题目链接:[USACO08JAN]Haybale Guessi ...
- 开源Python小项目
原文地址:开源Python小项目贡献! (github.com) 自述文件模板 项目 SR 否 项目 描述 作者 1 掷骰子刺激器Dice rolling Stimulator 这是一个使用Pytho ...
- MixMatch:半监督学习
MixMatch:半监督学习 1 摘要 2 介绍 3 已有相关工作 3.1 Consistency Regularization 一致性正则化 3.2 Entropy Minimization/ En ...
- 七种不同类型的游戏测试技术
游戏测试是协助确保最终产品具有最佳性能和质量的关键步骤之一.不同的测试技术,能够使游戏的品控人员更加集中精力发现诸如:缺陷.完整性.错误.瓶颈.不一致性.以及流 根据GlobalData(译者注:是全 ...
- [USACO 08JAN]Haybale Guessing
Description The cows, who always have an inferiority complex about their intelligence, have a new gu ...
- Haybale Guessing (POJ-3657)
Problem Description The cows, who always have an inferiority complex about their intelligence, have ...
- POJ Haybale Guessing
Description The cows, who always have an inferiority complex about their intelligence, have a new gu ...
- luogu P4085 [USACO17DEC]Haybale Feast(尺取法 + 线段树)
C.luogu P4085 [USACO17DEC]Haybale Feast 题目链接 直接开一个线段树维护即可. 注意开ll 线段树维护最大值.注意下标别写错了,比如tr[r] #include& ...
- 洛谷P3051 [USACO12MAR]Haybale Restacking
[USACO12MAR]Haybale Restacking 源题目传送门 大意: 给出n块土地,现有泥土A[i],需要改造成B[i],但这次土地排列成环,且不可买进买出,只能运,且∑A[i]=∑B ...
最新文章
- 自己实现 koa 中间件的 app.use 和 next 函数
- 妹纸这套路玩的好深,吹泡泡能吹出气球来
- 宝塔挂载linux硬盘,宝塔移动硬盘挂载Linux服务器挂载ntfs移动硬盘
- SharePoint Framework 构建你的第一个web部件(三)
- openpyxl 绘制饼形图_好享学丨快速上手Pythonmatplotlib 箱线图绘制,学术人必备
- java安卓原生影视APP源码 对接苹果cms后台
- C#如何获取物理网卡,虚拟网卡,以及无线网卡
- 一生不要瞎忙,只要做对三件事
- PIXHAWK飞行模式
- 华硕服务器 u盘安装系统,华硕电脑u盘安装系统教程
- G - Numbers ZOJ - 3987 (大数+贪心)
- 【网络实验箱02】-odl-neutron北向抓包分析
- 自己碰到的一个control +鼠标左键无效问题。
- android涟漪效果,在5.0以上手机上用系统原生方式实现波纹涟漪效果
- 【原创整理】软件测试自我记录(目前携程+招银网络科技)
- 调用个人微信的API接口实现微信收发消息
- Skype for Business Server 2015-07-边缘服务器-1-安装-先决条件
- RSTP配置_思科模拟器
- html5禁止浏览器缩放网页大小 (实用)
- Hbuilder开发移动新闻客户端(二)