首页 > 其他分享 >【题解】洛谷P4198 楼房重建

【题解】洛谷P4198 楼房重建

时间:2024-12-08 10:20:42浏览次数:3  
标签:洛谷 int 题解 pos mid 斜率 ls P4198 define

因为有个bool调了一个小时,汤碗里。

题解

显然能看到是斜率的问题,后面的斜率要严格大于前面的斜率才能够看见,所以这就是最大严格前缀长度问题。

有修改考虑线段树维护,信息合并时并不能直接合并,左部分可以直接合并,但右部分不能超过左部分的斜率最大值,所以我们用函数递归右区间判断,如果当前部分左区间的斜率最大值大于 \(K\),那右边全部合法,左边部分合法,函数调用左边,否则只有右边部分合法,函数递归调用右边。

真的要注意维护斜率,线段树上要维护斜率最大值所在的下标,判断斜率大小时返回 bool,我因此调了 \(1\) 个小时。

image

#include <bits/stdc++.h>
#define ll long long
#define int ll
#define ls p<<1
#define rs p<<1|1 
#define re register 
#define pb push_back
#define pir pair<int,int>
#define f(a,x,i) for(int i=a;i<=x;i++)
#define fr(a,x,i) for(int i=a;i>=x;i--)
#define lb(x) x&(-x);
const int N=1<<18|7;
const int mod=1e9+7;
using namespace std;

int n,m;
int mx[N],H[N];
int cnt[N];

bool gt(int p1,int p2){
	if(!p2) return H[p1];
	return (ll)H[p1]*p2>(ll)H[p2]*p1;
}

int fs(int p,int k,int l,int r){
	if(l==r) return gt(l,k);
	int mid=(l+r)>>1;
	if(gt(mx[ls],k)){
		return fs(ls,k,l,mid)+cnt[p]-cnt[ls];
	} 
	else{
		return 0+fs(rs,k,mid+1,r);
	}
}

void change(int p,int l,int r,int pos){
	if(l==r) return;
	int mid=(l+r)>>1;
	if(pos<=mid) change(ls,l,mid,pos);
	else change(rs,mid+1,r,pos);
	mx[p]=gt(mx[rs],mx[ls])?mx[rs]:mx[ls];
	cnt[p]=cnt[ls]+fs(rs,mx[ls],mid+1,r); 
}

void build(int p,int l,int r){
	mx[p]=l,cnt[p]=1;
	if(l==r) return;
	int mid=(l+r)>>1;
	build(ls,l,mid),build(rs,mid+1,r);
}

signed main(){
//	freopen("xp1.in","r",stdin);
    ios::sync_with_stdio(0);
    cin.tie(nullptr);
	
	cin>>n>>m;
	build(1,1,n);
	while(m--){
		int pos,x;
		cin>>pos>>x;
		H[pos]=x;
		change(1,1,n,pos);
		cout<<fs(1,0,1,n)<<"\n";	
	}
	return 0;
}

标签:洛谷,int,题解,pos,mid,斜率,ls,P4198,define
From: https://www.cnblogs.com/sadlin/p/18593114

相关文章

  • 洛谷线性动态规划
    P1541[NOIP2010提高组]乌龟棋[NOIP2010提高组]乌龟棋题目背景NOIP2010提高组T2题目描述小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。乌龟棋的棋盘是一行$N$个格子,每个格子上一个分数(非负整数)。棋盘第$1$格是唯一的起点,第$N$格是终点,游戏要求玩家控制一个乌......
  • 关于网站icon小图标在网站上不显示的问题解决办法,确保图标正常显示
    解决网站icon小图标不显示的步骤检查文件路径:确保favicon.ico文件的路径正确。如果手动指定了图标路径,检查 <link> 标签中的 href 属性是否正确指向图标文件。检查文件格式:确保favicon.ico文件的格式正确。ICO文件是最常用的格式,但也可以使用PNG、JPEG等其他格式。如果使用......
  • 使用外站题目与数据(以洛谷和Loj为例)
    本食用方法以[NOIP2024]树上查询为例一、题目仅介绍洛谷食用方法在洛谷页面首先确保你有洛谷账号(非常重要,没有账号测试样例无法下载!)在左侧侧边栏点击“题库”,进入洛谷主题库进入题目P11364请点击题面右上角复制Markdown标签随后回到洛谷题面页面,查看并记......
  • NOIP 2024 题解
    NOIP2024题解T1首先对于两个串都不能动的位置,直接统计是否相等。对于连续的一段能动的位置,这一段的数可以随便交换,可以预处理每个位置属于哪一段,以及这一段中0和1的个数。我们贪心地考虑,优先匹配一个串能动,另一个串不能动的位置。可以感受到,先把不能动的位置匹配掉后,剩......
  • 2024 IntelliJ IDEA安装使用教程(附激活,含常见问题解答)
    第一步:下载IDEA安装包访问IDEA官网,下载IDEA也可以在这里点击下载idea(含博主使用版本)下载idea第二步:安装IDEA点击xx关掉程序!第三步:下载补丁IntelliJIDEA补丁文件点击获取补丁下载成功后,打开标注的文件文件夹,进入到文件夹/jetbra注意:这个文件夹单......
  • 洛谷P10244 String Minimization 题解
    题目传送门思路本题就是让你求\(a\)字典序最小时的\(b\),毕竟他说在\(a\)的字典序尽量小的前提下。接下来就做这个判断:如果\(a_i\)<\(c_i\),则\(b_i\)和\(d_i\)交换。如果\(a_i\)<\(c_i\)且\(b_i\)>\(d_i\),则\(b_i\)和\(d_i\)交换。其余情况不用交换。......
  • ABC382 C-F题解
    C-KaitenSushi把寿司都放到一个堆里,从前往后扫\(A\)数组,如果当前食客\(A_i\)小于等于堆顶,就取出堆顶,记录这份寿司被第\(i\)个人吃掉。复杂度\(O(n\logm)\)。D-KeepDistance搜索回溯,但每一步从\(10\)枚举到\(m\)会超时,剪一下枝for(inti=10;res.back()+......
  • 【题解】洛谷P6225: [eJOI2019] 异或橙子
    P6225[eJOI2019]异或橙子结论题,要手玩几组样例就懂了,发现长度为偶数的最后削为0,否则的话下标为奇数答案就是区间下标为奇数的异或和,偶数相同,所以考虑用两个树状数组分别维护下标奇偶数的异或前缀和,然后再异或区间。#include<bits/stdc++.h>//#defineintlonglong#define......
  • 信奥赛CSP-J复赛集训(dfs专题)(11):洛谷P1036:[NOIP2002 普及组] 选数
    信奥赛CSP-J复赛集训(dfs专题-刷题题单及题解)(11):洛谷P1036:[NOIP2002普及组]选数题目描述已知nnn个整数x......
  • 信奥赛CSP-J复赛集训(dfs专题)(12):洛谷P2404:自然数的拆分问题
    信奥赛CSP-J复赛集训(dfs专题-刷题题单及题解)(12):洛谷P2404:自然数的拆分问题题目描述任何一个大于111的自然数n......