调试代码的好处
查看原帖
调试代码的好处
580608
lupengheyyds楼主2024/9/8 22:16

好处:

发现和修复错误:调试是找出并修复代码中错误的关键步骤。通过调试,开发者可以逐步跟踪代码执行过程,定位问题的根本原因,并及时修复这些错误,确保代码的正确性和可靠性。

提高代码质量:调试有助于发现代码中的逻辑错误、潜在的错误或者代码不规范的地方。通过逐行调试代码,开发者可以更加深入地理解代码的运行机制和细节,以及找出代码中的问题并进行修正,从而提高代码质量。

加快开发速度:调试可以帮助开发者快速定位问题,减少排查错误的时间,从而提高开发速度。通过调试,开发者可以逐步分析代码执行过程,并逐步排除错误,减少调试时间,加快代码开发的进度。

增强开发技能:经过长时间的调试实践,开发者可以积累大量的经验和技巧。不仅可以提高开发者的调试能力,还可以提高他们解决问题的能力和创新能力。

怎么样,是不是心动了,快试试吧!

96分求调

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pa;
const int NN=1e6+5,INF=1e9,MOD=1e9+7;
int n,L[NN],R[NN];
struct DP{
	int f,g;
	DP(int _f=-INF,int _g=0){f=_f,g=_g;};
	DP operator+(DP b){
		if(f!=b.f)return (f>b.f)?*this:b;
		return DP(f,(g+b.g)%MOD);
	}
}dp[NN];
vector<pa> op[NN];
struct SegTr{
	DP sgt[NN<<2];
	#define ls(x) (x<<1)
	#define rs(x) (x<<1|1)
	#define val(x) sgt[x]
	void Up(int p){
		val(p)=val(ls(p))+val(rs(p));
		return;
	}
	void Prune(int p,int pos,DP v,int L=1,int R=n){
		if(L==R){val(p)=v;return;}
		int mid=L+R>>1;
		if(pos<=mid)Prune(ls(p),pos,v,L,mid);
		else		Prune(rs(p),pos,v,mid+1,R);
		return Up(p);
	}
	DP Pick(int p,int l,int r,int L=1,int R=n){
		if(l>R||L>r)return {-INF,0};
		if(l<=L&&R<=r)return val(p);
		int mid=L+R>>1;
		return Pick(ls(p),l,r,L,mid)+Pick(rs(p),l,r,mid+1,R);
	}
}sgt;
void CDQ(int l,int r){
	if(l==r)return;
	int mid=l+r>>1;
	CDQ(l,mid);
	for(int i=mid,mx=L[mid+1],mn=R[mid+1];i>=l&&mx<=mn;i--){
		if(i+mx<=r&&i+mn>=mid+1){
			op[max(i+mx,mid+1)].push_back({i,1});
			op[min(i+mn,r)+1].push_back({i,-1});
		}
		mn=min(mn,R[i]);
		mx=max(mx,L[i]);
	}
	for(int i=mid+1,mx=0,mn=INF;i<=r&&mx<=mn;i++){
		for(pa opt:op[i]){
			int id=opt.first,si=opt.second;
			sgt.Prune(1,id,si>0?DP(dp[id].f+1,dp[id].g):DP());
		}
		op[i].clear();
		mx=max(mx,L[i]);
		mn=min(mn,R[i]);
		if(mx<=mn)dp[i]=dp[i]+sgt.Pick(1,max(i-mn,l),min(i-mx,mid));
	}
	for(pa opt:op[r+1])sgt.Prune(1,opt.first,DP());
	op[r+1].clear();
	CDQ(mid+1,r);
	return;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>L[i]>>R[i];
	for(int i=1,mn=INF,mx=0;i<=n;i++){
		mx=max(mx,L[i]),mn=min(mn,R[i]);
		if(mx<=i&&i<=mn)dp[i]=DP(1,1);
	}
	CDQ(1,n);
	dp[n].f<=0?cout<<"NIE":cout<<dp[n].f<<" "<<dp[n].g<<"\n";
	return 0;
} 
2024/9/8 22:16
加载中...