10pts求助!提供debug程序,一直没找到bug
查看原帖
10pts求助!提供debug程序,一直没找到bug
427120
KS_tips_CN楼主2022/8/13 19:28

rt,我写的是常规的线段树,下面是我的代码

放到luogu只有#2过了,10pts

//#include<bits/stdc++.h>
//#include<map>
//#include<stack>
//#include<list>
//#include<set>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<queue>
#include<algorithm>
#include<vector>
#define ll long long
#define reg register int
#define gc getchar()
#define MAXN 200010
#define MOD

using namespace std;
inline ll read( void ) ;

int n,m,c,l_,r_;
int tree[MAXN*4];
bool lazy_tag[MAXN*4];
bool In_Range( int l , int r , int L , int R ){
	if( l >= L && r <= R ) return 1;
	return 0;
}
bool Out_Range( int l , int r , int L , int R ){
	if( l > R || r < L ) return 1;
	return 0;
}
void make_tag( int x, int l , int r ){
	tree[x] = (r-l+1) - tree[x];
	lazy_tag[x] = 1 ;
}
void pushdown( int x , int l , int r ){
	//如果这个点没有tag的话,就不需要maketag了 
	if( !lazy_tag[x] ) return ;
	int mid = ( l + r ) >> 1 ;
	make_tag( x*2 , l , mid );
	make_tag( x*2+1 , mid+1 , r );
	tree[x] = tree[x*2] + tree[x*2+1];
	lazy_tag[x] = 0 ;
}
void set( int x , int l , int r , int L , int R ){
	if( Out_Range(l,r,L,R) ) return ;
	else if( In_Range(l,r,L,R) ) make_tag(x,l,r);
	else {
			pushdown(x,l,r);
			int mid = ( l + r ) >> 1 ;
			set( x*2 , l , mid , L , R );
			set( x*2+1 , mid+1 , r , L , R );
			tree[x] = tree[x*2] + tree[x*2+1];
	}
}
int search( int x , int l , int r , int L , int R ){
	if( In_Range(l,r,L,R) ) return tree[x];
	else if( Out_Range(l,r,L,R) ) return 0;
	else{
		if( !Out_Range(l,r,L,R) ){
			pushdown(x,l,r);
			int mid = (l+r) >> 1 ;
			return search( x*2,l,mid,L,R ) + search( x*2+1,mid+1,r,L,R);
		}
	}
}

int main( void ) {

	n = read();
	m = read();
	for( reg i = 1 ; i <= m ; i++ ){
		c = read();
		l_ = read();
		r_ = read();
		if( !c ) set(1,1,n,l_,r_);
		else cout << search(1,1,n,l_,r_) << endl ;
	}

	return 0;
}

inline ll read( void ) {
	ll x = 0 , f = 0 ;
   	char ch = gc ;
   	while( !isdigit( ch ) )
    	f |= ( ch == '-' ) , ch = gc ;
   	while( isdigit( ch ) )
    	x = ( x << 1 ) + ( x << 3 ) + ( ch ^ 48 ) , ch = gc ;
    return f ? -x : x ;
}

我会在评论一楼放一个写好了debug语句的程序awa

2022/8/13 19:28
加载中...