让人难以忘怀的怪题。
请看数据:

模拟啊!这么小的数据你还做不来是不是傻逼。
然后我勉为其难想了个正解:
使用差分的思想。
考虑统计出度和入度。
On扫一遍,加到0就是ans到了
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define N 1000100
int T[N]={0};
inline int lowbit(int x){
return x&(-x);
}
inline void update(int x,int val){
while(x<N){
T[x]+=val;
x+=lowbit(x);
}
}
inline int Quary(int x){
int ans=0;
while(x){
ans+=T[x];
x-=lowbit(x);
}
return ans;
}
int cd[N]={0};
int rd[N]={0};
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
int l,r;
scanf("%d%d",&l,&r);
cd[l]++;
rd[r]++;
// update(l,1);
// update(r,-1);
}
// int x=1;
// for(int i=1;i<N;i++){
// if(Quary(i)==0)
// }
int sum=0;
for(int i=1;i<N;i++){
if(sum==0&&cd[i]){
cout<<i<<" ";
}
sum+=cd[i];
sum-=rd[i];
if(sum==0&&rd[i]){
cout<<i<<endl;
}
}
}

本文介绍了一种利用差分思想解决特定类型问题的方法,并通过一个具体的编程实例进行讲解。通过统计节点的入度和出度,实现了对于特殊数据结构的有效查询和更新。
4691

被折叠的 条评论
为什么被折叠?



