/*这题的思路是:不断取交集,并判断每个取到的交集中,能分出几个大小为3的子集(以双方都通话的天数为集合元素) //注意,如果没有大于3的子集,那么就说明友谊度不会累加,但也不会扣除,按照原来的计算,不到反而会扣,所以要和0取max // 参考博客; http://blog.csdn.net/a664607530/article/details/70893623 // 我写的和他略有不同的地方是,我的循环退出条件,改为了枚举完任意一个人的所有区间,则退出...不过这个只是小节,怎么写都无妨,最终是对的就行 */
#include <iostream> using namespace std; struct time { int l, r; }a[105], b[105]; int main() { cin.sync_with_stdio(false); cin.tie(0); int t, n, m, x, y; cin >> t; while (t--) { cin >> n >> m >> x >> y; for (int i = 1; i <= x; i++) cin >> a[i].l >> a[i].r; for (int i = 1; i <= y; i++) cin >> b[i].l >> b[i].r; int ii = 1, jj = 1, ans = 0; while (ii <= x && jj <= y) { int mi, ma; ma = max(a[ii].l, b[jj].l); mi = min(a[ii].r, b[jj].r); ans += max(mi - ma - m + 2, 0); if (a[ii].r < b[jj].r) ii++; else if (a[ii].r > b[jj].r) jj++; else ii++, jj++; } cout << ans << endl; } return 0; }