#include<bits/stdc++.h>
#define PII pair<int, int>
#define LL long long
using namespace std;
//_________________________________________________________________________________________________________________________________________
const int N = 500009;
int tr[N];
int n, q;
int lowbit(int x){return x & -x;}
void add(int u, int x){
for(int i = u; i < N; i += lowbit(i)) tr[i] += x;
}
int query(int u){
int res = 0;
for(int i = u; i >= 1; i -= lowbit(i)) res += tr[i];
return res;
}
int fd1(int x){
int l = 1, r = 5e5;
while(l < r){
int mid = (l + r) / 2;
if(query(mid) >= x) r = mid;
else l = mid + 1;
}
return l;
}
int fd2(int x){
int l = 1, r = 5e5;
while(l < r){
int mid = (l + r + 1) / 2;
if(query(mid) <= x) l = mid;
else r = mid - 1;
}
return l;
}
int main(){
// freopen(textin,"r",stdin);
// freopen(textout,"w",stdout);
for(int i = 1; i < N; i++) add(i, 1);
scanf("%d", &n);
for(int i = 1; i <= n; i++){
int l, r;
scanf("%d%d", &l, &r);
int min_L = fd1(l);
int max_R = fd2(r);
add(fd1(l), 1);
add(fd2(r) + 1, -1);
}
scanf("%d", &q);
for(int i = 1; i <= q; i++){
int x;
scanf("%d", &x);
printf("%d\n", query(x));
}
return 0;
}
#include<bits/stdc++.h>
#define PII pair<int, int>
#define LL long long
using namespace std;
//_________________________________________________________________________________________________________________________________________
const int N = 500009;
int tr[N];
int n, q;
int lowbit(int x){return x & -x;}
void add(int u, int x){
for(int i = u; i < N; i += lowbit(i)) tr[i] += x;
}
int query(int u){
int res = 0;
for(int i = u; i >= 1; i -= lowbit(i)) res += tr[i];
return res;
}
int fd1(int x){
int l = 1, r = 5e5;
while(l < r){
int mid = (l + r) / 2;
if(query(mid) >= x) r = mid;
else l = mid + 1;
}
return l;
}
int fd2(int x){
int l = 1, r = 5e5;
while(l < r){
int mid = (l + r + 1) / 2;
if(query(mid) <= x) l = mid;
else r = mid - 1;
}
return l;
}
int main(){
// freopen(textin,"r",stdin);
// freopen(textout,"w",stdout);
for(int i = 1; i < N; i++) add(i, 1);
scanf("%d", &n);
for(int i = 1; i <= n; i++){
int l, r;
scanf("%d%d", &l, &r);
int min_L = fd1(l);
int max_R = fd2(r);
add(min_L, 1);
add(max_R + 1, -1);
}
scanf("%d", &q);
for(int i = 1; i <= q; i++){
int x;
scanf("%d", &x);
printf("%d\n", query(x));
}
return 0;
}
不同之处在 46−49 行,第一个WA,第二个AC