Hossam and Friends - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
给出1~n的总的大区间,m个关系区间【xi,yi】,找到全部不完全包含【xi,yi】的【a,b】,
也就是找到全部不同时包含一个关系中两个点的区间
根据每个位置最远能走到哪,来计算区间个数
#include <bits/stdc++.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <set>
#include <queue>
#define x first
#define int long long
#define y second
#define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
typedef pair<char,int> PCI;
typedef pair<LL,LL> PLL;
//typedef __int128 i128;
typedef unsigned long long ULL;
const int N=1e5+10,INF = 1e9 ,mod = 1e9 + 7 ,P = 131;
const double eps = 1e-7;
int n,m,a[N];
void solve()
{
cin >> n >> m;
for(int i=1;i<=n;i ++ ) a[i] = n;// 能到达的最远点
int x,y;
while(m -- )
{
cin >>x >> y;if(x > y )swap(x,y);
a[x] = min(a[x],y-1);
}
for(int i=n-1;i;i--)
a[i] = min(a[i],a[i + 1]);//更新限制
//防止 i 前面的位置 最远能走到的位置 超过了a[i],也就是包含了题目所给的关系区间
LL ans =0;
for(int i=1;i<=n;i ++ )
ans += a[i] -i + 1;
// [i,a[i]],区间长度从0~a[i]-i 总共有 a[i] - i+1 个区间
cout << ans << endl;
}
signed main()
{
// freopen("1.txt","r",stdin);
ios
LL T=1;
cin>>T;
while(T -- )
{
solve();
}
return 0;
}