样例没过,数据AC。
查看原帖
样例没过,数据AC。
381996
yukari1735楼主2022/5/27 18:42

不知道为啥。

样例输出

1
0
# include <cstdio>
# include <iostream>
# include <algorithm>

namespace IO{
	inline int read(){
		int res = 0 , ti = 1;
		char c = getchar();
		while( ! isdigit( c ) ){ if( c == '-' ) ti = -1; c = getchar(); }
		while( isdigit( c ) ) res = res * 10 + c - '0' , c = getchar();
		return res * ti;
	}
}


using namespace std;

const int N = 5e5 + 225;

struct Operations{ int l , r , v , op , id; }a[ N ] , t[ N ];
int s;

int n , q;

int T[ N ];
inline int lowbit( int x ){ return x & ( -x ); }
void Modify( int p , int x ){ for( int i = p ; i <= n ; i += lowbit( i ) ) T[ i ] += x; }
int Query( int p ){
	int res = 0;
	for( int i = p ; i ; i -= lowbit( i ) ) res += T[ i ];
	return res;
}

int ans[ N ];
Operations Ql[ N ] , Qr[ N ];
void Solve( int l , int r , int p , int q ){
	if( p > q ) return;
	if( l == r ){
		for( int i = p ; i <= q ; i ++ )
			if( ! a[ i ] . op ) ++ ans[ l ];
		return;
	}	
	int mid = l + r >> 1;
	int cl = 0 , cr = 0;
	for( int i = p ; i <= q ; i ++ ){
		if( a[ i ] . op ){
			if( a[ i ] . v <= mid ) Modify( a[ i ] . l , 1 ) , Ql[ ++ cl ] = a[ i ];
			else Qr[ ++ cr ] = a[ i ]; 
		}
		else{
			int res = Query( a[ i ] . r ) - Query( a[ i ] . l - 1 );
			if( a[ i ] . v <= res ) Ql[ ++ cl ] = a[ i ];
			else a[ i ] . v -= res , Qr[ ++ cr ] = a[ i ];
		}
	}
	for( int i = 1 ; i <= cl ; i ++ ) 
		if( Ql[ i ] . op ) Modify( Ql[ i ] . l , -1 );
	for( int i = 1 ; i <= cl ; i ++ ) a[ p + i - 1 ] = Ql[ i ];
	for( int i = 1 ; i <= cr ; i ++ ) a[ p + cl + i - 1 ] = Qr[ i ];
	Solve( l , mid , p , p + cl - 1 ) , Solve( mid + 1 , r , p + cl , q );
}

void Input(){
	n = IO :: read() , q = IO :: read();
	for( int i = 1 ; i <= n ; i ++ ) t[ i ] . l = IO :: read() , t[ i ] . r = IO :: read() , t[ i ] . v = IO :: read();
	for( int i = 1 ; i <= q ; i ++ )
		a[ ++ s ] . l = IO :: read() , a[ s ] . v = i , a[ s ] . op = 1;
	for( int i = 1 ; i <= n ; i ++ ){
		a[ ++ s ] . l = t[ i ] . l , a[ s ] . r = t[ i ] . r , a[ s ] . v = t[ i ] . v;
		a[ s ] . op = 0;
	}
}

int main(){
	Input();
	Solve( 1 , q + 1 , 1 , s );
	for( int i = 1 ; i <= q ; i ++ ) printf( "%d\n" , ans[ i ] );
	return 0;
}
2022/5/27 18:42
加载中...