关于我是怎么AC的
查看原帖
关于我是怎么AC的
327193
golden_alpaca楼主2022/8/7 11:01
#include<stdio.h>
#include<algorithm>
using namespace std;

const int N=100005;
const long long mod=998244353;

int x[N],n,m;
struct node{
	int l,r,h;
}a[N];
long long num[N];

int st;

inline int read(){
	int a=0,op=1;char c=getchar();
	while((c<'0' || c>'9') && c!='-')c=getchar();
	if(c=='-')op=-1,c=getchar();
	while(c>='0' && c<='9')a=(a<<1)+(a<<3)+c-'0',c=getchar();
	return a*op;
}

bool cmp(const node a,const node b){
	return a.h>b.h;
}	

inline void work(int x,int h,long long val){
	for(int i=st;i<=m;i++){
		if(a[i].l<=x && a[i].r>=x && h>a[i].h){
			num[i]=(num[i]+val)%mod;
			return ;
		}
	}
	return ;
}

int main(){
	n=read(),m=read();
	for(int i=1;i<=m;i++)a[i].l=read(),a[i].r=read(),a[i].h=read();
	a[m+1].l=1;
	a[m+1].r=1e6;
	a[m+1].h=0;
	m++;
	sort(a+1,a+m+1,cmp);
	st=1;
	for(int i=1;i<=n;i++){
		work(read(),1e9,1);
	}
	for(int i=1;i<m;i++){
		while(a[st].h>a[i].h && st<i)st++;
		work(a[i].l,a[i].h,num[i]);
		work(a[i].r,a[i].h,num[i]);
	}
	printf("%lld\n",num[m]);
	return 0;
}

RT,明明是N²啊。。。

2022/8/7 11:01
加载中...