?
by Freddie @ 2017-09-26 13:09:32
我想说几句:
曹操没事计算钻入火海的船的长度干嘛???
气疯了么???
还有,为什么非要找我计算呢???
为啥不找万能的小明???
by 6QWQ6 @ 2017-11-23 19:35:19
同求
by o_cean @ 2018-07-06 23:25:29
```cpp
#include <bits/stdc++.h>
#define R register
using namespace std;
const int maxn=1e5+7;
template <typename T> void inline read(T &x){
x=0;int f=1;char ch=getchar();if(ch==EOF) return ;
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^'0');ch=getchar();}
x*=f;
}
template <typename T> void inline write(T x){
if(x<0) x=-x,putchar('-');
if(x>9) write(x/10);
putchar(x%10+'0');
}
typedef long long ll;
struct node{
ll l,r;
bool operator<(node const x)const {
return l<x.l;
}
}p[maxn];
ll cnt=0;
int main(){
int n;read(n);
for(int i=1;i<=n;i++){
read(p[i].l);read(p[i].r);
}
sort(p+1,p+1+n);
for(int i=1;i<=n;i++){
if(p[i+1].l<p[i].r){
p[i+1].l=p[i].r;
}
if(p[i].l>p[i].r) continue;
cnt+=p[i].r-p[i].l;
}
cout<<cnt;
return 0;
}
/*
3
-1 1
5 11
2 9
*/
```
by o_cean @ 2018-07-06 23:26:16
同求
```
#include<bits/stdc++.h>
using namespace std;
struct Node
{
int l,r;
}a[20010];
bool cmp(Node a,Node b)
{
if(a.l==b.l)
{
return a.r<b.r;
}
return a.l<b.l;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].l>>a[i].r;
}
sort(a+1,a+n+1,cmp);
long long l=a[1].l,r=a[1].r,ans=0;
for(int i=2;i<=n;i++)
{
if(a[i].l>r)
{
ans+=r-l;
l=a[i].l;
r=a[i].r;
}
else
{
r=a[i].r;
}
}
ans+=r-l;
cout<<ans<<endl;
}
```
by partychicken @ 2018-07-13 10:50:01
同求
```pascal
var
n,i,sum:longint;
a,b:array[1..100000] of longint;
procedure kuai(t,w:longint);
var
tt,ww,x,h:longint;
begin
tt:=t;ww:=w;
x:=a[(t+w) div 2];
while t<=w do
begin
while a[t]<x do t:=t+1;
while a[w]>x do w:=w-1;
if t<=w then
begin
h:=a[t];a[t]:=a[w];a[w]:=h;
h:=b[t];b[t]:=b[w];b[w]:=h;
t:=t+1;
w:=w-1;
end;
end;
if t<ww then kuai(t,ww);
if tt<w then kuai(tt,w);
end;
begin
readln(n);
for i:=1 to n do
begin
readln(a[i],b[i]);
end;
kuai(1,n);
sum:=b[1]-a[1];
for i:=2 to n do
begin
if (a[i]>=a[i-1]) and (b[i]<=b[i-1]) then continue
else if (a[i]<b[i-1]) and (b[i]>b[i-1]) then a[i]:=b[i-1]+1;
sum:=sum+b[i]-a[i];
end;
writeln(sum);
end.
```
by 宇宙穿梭 @ 2018-08-14 10:49:54
因为前一个区间的右端点可能并不是最靠右的,
比如 [1,10],[2,3],[4,11].
这样的话你并不会去选[2,3],但是你的第三个区间不能和它比较。
```cpp
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct cym{
int l,r;
}e[20010];
long long n,ans;
int cmp(const cym &x,const cym &y)
{
if(x.l!=y.l)
return x.l<y.l;
return x.r<y.r;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&e[i].l,&e[i].r);
if(e[i].r<e[i].l)swap(e[i].l,e[i].r);
}
sort(e+1,e+1+n,cmp);
for(int i=1;i<=n;i++)
{
if(i==1)
{
ans+=e[i].r-e[i].l;
continue;
}
if(e[i].l<e[i-1].r)e[i].l=e[i-1].r;
if(e[i].l>=e[i].r)continue;
ans+=e[i].r-e[i].l;
}
printf("%lld",ans);
}//30
```
```
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct cym{
int l,r;
}e[20010];
long long n,ans,_end;
int cmp(const cym &x,const cym &y)
{
if(x.l!=y.l)
return x.l<y.l;
return x.r<y.r;
}
int main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&e[i].l,&e[i].r);
if(e[i].r<e[i].l)swap(e[i].l,e[i].r);
}
sort(e+1,e+1+n,cmp);
for(int i=1;i<=n;i++)
{
if(i==1)
{
ans+=e[i].r-e[i].l;
_end=e[i].r;
continue;
}
if(e[i].r<=_end)continue;
if(e[i].l<_end)e[i].l=_end;
if(e[i].l>=e[i].r)continue;
ans+=e[i].r-e[i].l;
_end=e[i].r;
}
printf("%lld",ans);
}//ac
```
by _ZZH @ 2018-09-21 17:16:06