rt,两年前写的,现在发现复杂度不对,求hack。
#include<cstdio>
#include<algorithm>
using namespace std;
//#define int long long
#define mod 998244353
struct node{
int l,r,h;
bool operator <(const node &A)const{
return h<A.h;
}
}a[1000010];
int n,m;
int x[1000010];
int f[1000010];
int ans;
int dfs(int x,int h){
if(f[x]) return f[x];
bool fg=0,fg1=0;
for(int i=x;i>=1;i--){
if(i>=x||a[i].h>=a[x].h) continue;
if(!fg&&a[i].l<=a[x].l&&a[i].r>=a[x].l){
f[x]+=dfs(i,a[i].h),fg=1;
}
f[x]%=mod;
if(!fg1&&a[i].l<=a[x].r&&a[i].r>=a[x].r){
f[x]+=dfs(i,a[i].h),fg1=1;
}
f[x]%=mod;
if(fg&&fg1) break;
}
if(!fg) f[x]++;
if(!fg1) f[x]++;
return f[x];
}
signed main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].h);
}
for(int i=1;i<=n;i++){
scanf("%d",&x[i]);
}
sort(a+1,a+1+m);
//for(int i=m;i>=1;i--){
// if(!f[i]) dfs(i,a[i].h);
//}
for(int i=1;i<=n;i++){
bool fg=0;
for(int j=m;j>=1;j--){
if(a[j].l<=x[i]&&a[j].r>=x[i]){
ans+=dfs(j,a[j].h);
fg=1;
ans%=mod;
break;
}
}
if(!fg) ans++;
}
printf("%d",ans%mod);
return 0;
}