#思路:
#代码:
#include<bits/stdc++.h>
using namespace std;
#define mod 998244353
int n,m;
long long tmp,ans;
struct node
{
long long x,q;
}a[300010];
int cmp(node A,node B)
{
return A.x==B.x?A.q>B.q:A.x<B.x;
}
set<int> s;
long long quick(long long a,long long b)
{
long long res=1;
for(;b;b>>=1,a=a*a%mod)
if(b&1)
res=res*a%mod;
return res;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i].x;
cin>>a[i+n].x;
a[i].q=i;
a[i+n].q=-i;
}
for(int i=1;i<=m;i++)
cin>>a[i+n*2].x;
sort(a+1,a+n*2+m+1,cmp);
for(int i=1;i<=2*n+m;i++)
{
if(a[i].q==0)
{
ans+=quick(2,tmp-s.size())*(quick(2,s.size())-1)%998244353;
ans%=998244353;
s.clear();
}
if(a[i].q>0)
tmp++,s.insert(a[i].q);
if(a[i].q<0)
tmp--,s.erase(abs(a[i].q));
}
cout<<ans;
}
来源:zr