【题解】Luogu P1204 [USACO1.2]挤牛奶Milking Cows
2023-09-25 17:38:20
原题传送门:P1204 [USACO1.2]挤牛奶Milking Cows
实际是道很弱智的题目qaq
但窝还是觉得用珂朵莉树写会++rp(窝都初二了,还要考pj)
前置芝士:珂朵莉树
窝博客里对珂朵莉树的介绍
没什么好说的自己看看吧
每个农夫就assign_val一下,但要注意一下细节qaq
窝不会告诉你因这个错调了我十几分钟qaq
应该写assign_val(l,r-1,1),查询时应写query(lmin,rmax,1/0)
其他没什么好说的了,细节详见程序
#pragma GCC optimize("O3")
#include<bits/stdc++.h>
#define IT set<node>::iterator
using namespace std;
struct IO_Tp
{
static const int _I_Buffer_Size = 1 << 24;
char _I_Buffer[_I_Buffer_Size];
char* _I_pos;
static const int _O_Buffer_Size = 1 << 24;
char _O_Buffer[_O_Buffer_Size];
char* _O_pos;
IO_Tp() : _I_pos(_I_Buffer), _O_pos(_O_Buffer)
{
fread(_I_Buffer, 1, _I_Buffer_Size, stdin);
}
~IO_Tp()
{
fwrite(_O_Buffer, 1, _O_pos - _O_Buffer, stdout);
}
inline bool is_digit(const char ch)
{
return '0' <= ch && ch <= '9';
}
inline IO_Tp& operator>>(int& res)
{
res = 0;
while (!is_digit(*_I_pos))
++_I_pos;
do
(res *= 10) += (*_I_pos++) & 15;
while (is_digit(*_I_pos));
return *this;
}
inline IO_Tp& operator<<(int n)
{
static char _buf[10];
char* _pos(_buf);
do
*_pos++ = '0' + n % 10;
while (n /= 10);
while (_pos != _buf)
*_O_pos++ = *--_pos;
return *this;
}
inline IO_Tp& operator<<(char ch)
{
*_O_pos++ = ch;
return *this;
}
} IO;
inline int Max(register int a,register int b)
{
return a>b?a:b;
}
inline int Min(register int a,register int b)
{
return a<b?a:b;
}
struct node
{
int l,r;
mutable bool v;
node(int L, int R=-1, bool V=0):l(L), r(R), v(V) {}
bool operator<(const node& o) const
{
return l < o.l;
}
};
set<node> s;
IT split(int pos)
{
IT it = s.lower_bound(node(pos));
if (it != s.end() && it->l == pos)
return it;
--it;
int L = it->l, R = it->r;
bool V = it->v;
s.erase(it);
s.insert(node(L, pos-1, V));
return s.insert(node(pos, R, V)).first;
}
void assign_val(int l,int r,bool v)
{
IT itr = split(r+1),itl = split(l);
s.erase(itl, itr);
s.insert(node(l, r, v));
}
inline int query(register int l,register int r,register bool v)
{
int sum=0,res=0;
IT itr = split(r+1),itl = split(l);
for(;itl!=itr;++itl)
if(itl->v==v)
sum+=itl->r-itl->l+1;
else
{
res=Max(res,sum);
sum=0;
}
return res;
}
int main()
{
int n;
IO>>n;
int a=1000005,b=0;
s.insert(node(0,1000005));
while(n--)
{
int l,r;
IO>>l>>r;
assign_val(l,r-1,1);
a=Min(a,l);
b=Max(b,r);
}
IO<<query(a,b,1)<<' '<<query(a,b,0);
return 0;
}
最新文章
- 解决NetBeans运行卡顿问题
- 401 - 未授权:由于凭据无效,访问被拒绝”在iis的解决办法
- EF Codefirst 多对多关系 操作中间表的 增删改查(CRUD)
- 数据表格 - DataGrid - 查询
- HNU 12906 Battleship
- 数字证书私钥sign及验证
- 高德地图 JavaScript API 开发系列教程(一)
- 【转】使用VisualSVN Server搭建SVN服务器
- POJ2446 二分图最大匹配
- 6)图[2]Prim算法[最小生成树]
- Apple Swift 中文教程 高速參考 基本的语法
- Javascript事件模型(二):Javascript事件的父元素和子元素
- opencv 基本绘图函数
- 【java集合系列】--- LinkedList
- C#更改操作系统时间
- windows service创建使用整合
- 异常详细信息: System.BadImageFormatException: 未能加载文件或程序集“Maticsoft.Common”或它的某一个依赖项。试图加载格式不正确的程序。
- WCF系列_WCF如何选择不同的绑定
- 常用类:Object
- df、du、fdisk
热门文章
- [LeetCode] 240. Search a 2D Matrix II_Medium tag: Binary Search
- 《Java程序设计》第十一章 JDBC与MySQL数据库
- Apache和Tomcat的区别?
- python使用cx_Oracle在Linux和Windows下的一点差异
- 文档设计也需要坚持DRY原则--支付中心应用部署结构图完善
- MyBatis基础入门《十》添加数据
- Css预处理器---Less(一)
- c#之课后习题
- NHibernate初学者指南系列文章导航
- 强化学习--QLearning