C Tokitsukaze and a+b=n (hard) {FriedChicken代码+注解}
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int, int> pii;
typedef pair<db, db> pdd;
const int Mo=998244353;
const int N=2e5+6;
ll l,r,L,R,n,m;
ll sum[N];
int main(){
scanf("%lld %lld",&n,&m);
ll ans=0;
for(int i=1;i<=m;i++){
scanf("%lld %lld",&l,&r);
sum[l]++;
sum[r+1]--;//差分
L=n-r;
R=n-l;//
ans-=max(0ll,min(R,r)-max(l,L)+1);//去掉会重复的情况,也就是自己和自己匹配的情况
ans%=Mo;
}
if(ans<0) ans+=Mo;
for(int i=1;i<=N-6;i++){
sum[i]+=sum[i-1];
sum[i]%=Mo;
}//前缀和恢复成原数组
for(int i=1;i<=n;i++){
int j=n-i;
if(i>N-6||j>N-6) continue;//防止越界情况
ans=(ans+sum[i]*sum[j])%Mo;
}
cout<<ans;
return 0;
}