分析:
需要找到每一个区间之间不含不认识得人,那么也就是找最小区间,可以遍历每一个人的编号,找出当前编号i右侧最小的不含不认识的人得区间右端点,还需要处理·可能出现区间内有更小的区间范围,比如i得最小右端点是j,但是区间内存在x和y不认识,这时需要再取最小值取最小的右端点,最后统计子区间个数加在一起。会卡long long ,要开long long 。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=2e5+10;
int f[N];
void solve()
{
int t;
cin>>t;
while(t--)
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) f[i]=n+1;
while(m--)
{
int a,b;
cin>>a>>b;
if(a>b) swap(a,b);
f[a]=min(f[a],b);
}
ll ans=0;
for(int i=n-1;i>=1;i--)
{
f[i]=min(f[i],f[i+1]);
}
for(int i=1;i<=n;i++)
{
if(f[i]==n+1) ans+=(n-i+1);
else ans+=(f[i]-i);
}
cout<<ans<<'\n';
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
solve();
return 0;
}