95分求助
查看原帖
95分求助
285617
黑影洞人楼主2022/8/6 21:58
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#define ct Chtholly_tree
#define Chtholly set<ct>::iterator
#define N 1919810
#define pp 998244353
#define int long long 
using namespace std;
int n,m,dp[N],mk[N],tot,ans;
vector<int>p;
map<int,int>mp;
struct line{
	int l,r,h;
	void in(){scanf("%lld%lld%lld",&l,&r,&h);}
}a[N];
struct Chtholly_tree{
	int l,r;
	mutable int val;
	ct(int a=-1,int b=-1,int c=0){l=a,r=b,val=c;}
	bool operator <(const ct &a)const{return l<a.l;}
};
set<ct>st;
Chtholly split(int p){
	Chtholly it=st.lower_bound(ct(p,0,0));
	if(it!=st.end()&&it->l==p)return it;
	it--;ct tmp=*it;st.erase(it);
	st.insert(ct(tmp.l,p-1,tmp.val));
	return st.insert(ct(p,tmp.r,tmp.val)).first;
}
void assign(int l,int r,int v){
	Chtholly right=split(r+1ll),left=split(l);
	st.erase(left,right);
	st.insert(ct(l,r,v));
}
int find(int aa){
	Chtholly r=split(aa+1ll),l=split(aa);
	return l->val%pp;
}
bool cmp(line a,line b){return a.h<b.h;}
signed main(){
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=m;i++)a[i].in(),st.insert(ct{a[i].l,a[i].r,1});
	sort(a+1,a+m+1,cmp);
	for(int i=1;i<=m;i++){
		int le=find(a[i].l),re=find(a[i].r);
		assign(a[i].l,a[i].r,(le+re)%pp);
	}
	for(int i=1;i<=n;i++){
		int a;
		scanf("%lld",&a);
		ans=(ans+find(a))%pp;
	}
	printf("%lld",ans); 
	return 0;
}






2022/8/6 21:58
加载中...