NOIP 模拟 $15\; \rm \text{玫瑰花精}$
题解 \(by\;zj\varphi\)
一道线段树题目
这道题可以通过维护一棵线段树,线段树上的每个节点维护 \(\rm l,r,len,p\) 分别表示这段区间最左边的花精,最右边的花精,被两只花精夹着的中间没有花精的最长一段距离,和取 \(\rm len\) 是花精放的位置
那么关键就是 \(\rm up\) 操作,对于一个节点的 \(\rm l,r\),若此区间只有一个花精,那么就设成 \(\rm l=r\) 如果没有,那就都设为 \(0\)
而后 \(\rm len\) 可以由左儿子或右儿子最大值转移而来,特判相等情况,还可以由左儿子的 \(\rm r\),和右儿子的 \(\rm l\) 中间夹的一段转移而来
Code
#include<bits/stdc++.h>
#define ri register signed
#define p(i) ++i
using namespace std;
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
#define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
template<typename T>inline void read(T &x) {
ri f=1;x=0;register char ch=gc();
while(ch<'0'||ch>'9') {if (ch=='-') f=0;ch=gc();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
x=f?x:-x;
}
}
using IO::read;
namespace nanfeng{
#define cmax(x,y) ((x)>(y)?(x):(y))
#define cmin(x,y) ((x)>(y)?(y):(x))
#define FI FILE *IN
#define FO FILE *OUT
static const int N=2e5+7;
int pos[N*10],n,m,nm;
struct Seg{
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
struct segmenttree{int l,r,len,p;}T[N<<2];
inline void up(int x) {
int l=ls(x),r=rs(x);
if (!T[l].l) T[x]=T[r];
else if (!T[r].l) T[x]=T[l];
else {
T[x].l=T[l].l,T[x].r=T[r].r;
int l1=T[l].len,l2=T[r].len;
if (l1>=l2) T[x].len=l1,T[x].p=T[l].p;
else T[x].len=l2,T[x].p=T[r].p;
int len=T[r].l-T[l].r-1,ul=(len>>1)-((len&1)^1)+1,p=T[l].r+ul;
if (ul>T[x].len) T[x].p=p,T[x].len=ul;
else if (ul==T[x].len) T[x].p=cmin(T[x].p,p);
}
}
void update(int x,int p,int opt,int l,int r) {
if (l==r) {
if (opt) T[x].l=T[x].r=l;
else T[x].l=T[x].r=0;
T[x].p=T[x].len=0;
return;
}
int mid(l+r>>1);
if (p<=mid) update(ls(x),p,opt,l,mid);
else update(rs(x),p,opt,mid+1,r);
up(x);
}
}T;
inline int main() {
// FI=freopen("nanfeng.in","r",stdin);
// FO=freopen("nanfeng.out","w",stdout);
read(n),read(m);
for (ri i(1),opt,id;i<=m;p(i)) {
read(opt),read(id);
if (opt==1) {
p(nm);
if (nm==1) {pos[id]=1,puts("1");T.update(1,1,1,1,n);continue;}
int k,ln;
if (T.T[1].l-1<n-T.T[1].r) k=n,ln=n-T.T[1].r;
else k=1,ln=T.T[1].l-1;
if (ln<T.T[1].len) k=T.T[1].p;
if (ln==T.T[1].len) k=cmin(k,T.T[1].p);
T.update(1,k,1,1,n);
printf("%d\n",pos[id]=k);
} else T.update(1,pos[id],0,1,n),--nm;
}
return 0;
}
}
int main() {return nanfeng::main();}
NOIP 模拟 $15\; \rm \text{玫瑰花精}$的更多相关文章
- TEXT 15 A text a day...
TEXT 15 A text a day... Mar 24th 2006 From The Economist print edition The medical uses of mobile ph ...
- NOIP 模拟 $15\; \text{夜莺与玫瑰}$
题解 一道很妙的题,让求对于一个矩阵中,两点相连成线,有多少条直线,他们的交集是有限集. 转化一下题目,发现水平和竖直的只有 \(n+m\) 条,而左斜和右斜的条数是相同的,所以我们只需求出左或右中的 ...
- NOIP 模拟 $15\; \text{影子}$
题解 \(by\;zj\varphi\) 一道并查集的题 对于它路径上点权,我们可以转化一下:对于一个点,它在哪些路径上是最小的点权 那么我们排个序,从大到小加入点,每回加入时,将这个点与它所相连的且 ...
- NOIP模拟 1
NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. # 用 户 名 ...
- 20190725 NOIP模拟8
今天起来就是虚的一批,然后7.15开始考试,整个前半个小时异常的困,然后一看题,T1一眼就看出了是KMP,但是完了,自己KMP的打法忘的一干二净,然后开始打T2,T2肝了一个tarjan点双就扔上去了 ...
- 2021.5.22 noip模拟1
这场考试考得很烂 连暴力都没打好 只拿了25分,,,,,,,,好好总结 T1序列 A. 序列 题目描述 HZ每周一都要举行升旗仪式,国旗班会站成一整列整齐的向前行进. 郭神作为摄像师想要选取其中一段照 ...
- NOIP 模拟 $33\; \rm Connect$
题解 状压 \(\rm DP\). 从 \(1\) 到 \(n\) 一共只要一条路径,那么就是一条链,只要维护一个点集和当前链的末尾就行. 设 \(\rm dp_{i,j}\) 为 \(i\) 的点集 ...
- Noip模拟15 2021.7.14
T1 夜莺与玫瑰 题目越发的变态起来... 这题刚开始看超级像仪仗队,好不容易码完欧拉函数后尝试×2后输出但不对!! 于是选择了跳过.... 正解居然是莫比乌斯函数....我也是醉了 预处理完就剩下$ ...
- noip第15课作业
1. 累加求和 给定n(1<=n<=100),用递归的方法计算1+2+3+4+5+......+(n-1)+n. 输入:一个大于等于1的整数. 输出:输出一个整数. [样例输入] 5 [样 ...
随机推荐
- 白话边缘计算解决方案 SuperEdge
一.SuperEdge的定义 引用下SuperEdge开源官网的定义: SuperEdge is an open source container management system for edge ...
- 谈谈Java事务
事务具基本特征(ACID) ① Atomi(原子性):事务中包含的操作被看做一个整,要么完全部成功,要么全部失败. ② Consistency(一致性):事务在完成时,必须是所有的数据都保持一致状态, ...
- kali2020安装中文界面
1.安装中文字体:apt-get install xfonts-intl-chinese ttf-wqy-microhei 2.设置系统语言:dpkg-reconfigure locales 3.选择 ...
- Selenium启动Chrome浏览器提示“请停用以开发者模式运行的扩展程序”的解决办法
安装了python selenium,运行下面代码: 1 from selenium import webdriver 2 3 browser = webdriver.Chrome() 4 brows ...
- Spring Boot(二):Spring Boot中的配置参数
Spring Boot 配置参数 Spring Boot 帮助我们完成了许许多多的自动化配置 如果我们需要根据自己的需求修改配置 也是可以的 可以使用.properties 和 .yml 格式配置 这 ...
- vue-qiankun公司微前端项稳定目落地后的总结(附github仓库demo,将会持续更新)
️本文为博客园社区首发文章,未获授权禁止转载 大家好,我是aehyok,一个住在深圳城市的佛系码农♀️,如果你喜欢我的文章,可以通过点赞帮我聚集灵力️. 个人github仓库地址: https:gi ...
- File类与常用IO流第九章——转换流
第九章.转换流 字节编码和字符集 编码:按照某种规则将字符以二进制存储到计算机中. 解码:将存储在计算机中的二进制数按照某种规则解析显示出来. 字符编码:Character Encoding ,就是一 ...
- kubespray-2.14.2安装kubernetes-1.18.10(ubuntu-20.04.1)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 基于 apache-arrow 的 duckdb rust 客户端
背景 duckdb 是一个 C++ 编写的单机版嵌入式分析型数据库.它刚开源的时候是对标 SQLite 的列存数据库,并提供与 SQLite 一样的易用性,编译成一个头文件和一个 cpp 文件就可以在 ...
- MYSQL一个设备上的主从复制实现-windows
只记录一次在一个设备上实现mysql主从复制的过程,很详细,建议收藏,用到的时候照着步骤做就可以,会记录所有需要注意到的细节和一些容易遇到的坑以及解决办法! 如果需要在同一台电脑(服务器)上实现mys ...