地址:http://codeforces.com/contest/1366/problem/B
题意:n,x,m
n个位置,ax=1,其他初始均为0
m次输入l,r:可以在[l,r]找到两个下标c,d,交换它俩的值,c可以==d
求所有可能为1的坐标数。
解析:
刚开始看是有点绕的。。。
设初始L=x,R=x,[L,R]区间内,全都可能为1
然后在每次输入l,r,看与之前的L,R有无交集,有的话,更新区间,
l=min(a,l);
r=max(b,r);
#include<cstdio> #include<algorithm> #include<cstring> #include<iostream> using namespace std; const int maxn=200; typedef long long ll; struct node { ll l,r; int ok ; }st[maxn]; bool cmp(node a,node b) { return a.l<b.l; } int main() { int t; cin>>t; while(t--) { ll n,x,m; cin>>n>>x>>m; ll l=x,r=x; ll sum=0; ll a,b; for(int i=1;i<=m;i++) { cin>>a>>b; if(b<l||a>r) continue; l=min(a,l); r=max(b,r); } cout<<r-l+1<<endl; } }
Educational Codeforces Round 89 (Rated for Div. 2) B-Shuffle(更新区间)
原文:https://www.cnblogs.com/liyexin/p/13109938.html