133. Border
time limit per test: 0.25 sec.
memory limit per test: 4096 KB
Along the border between states A and B there are N defence outposts. For every outpost k, the interval [Ak,Bk] which is guarded by it is known. Because of financial reasons, the president of country A decided that some of the outposts should be abandoned. In fact, all the redundant outposts will be abandoned. An outpost i is redundant if there exists some outpost j such that Aj<Ai and Bi<Bj. Your task is to find the number of redundant outposts.
Input
The first line of the input will contain the integer number N (1<=N<=16 000). N lines will follow, each of them containing 2 integers: Ak and Bk (0<= Ak < Bk <= 2 000 000 000), separated by blanks. All the numbers Akwill be different. All the numbers Bk will be different.
Output
You should print the number of redundant outposts.
Sample Input
5 0 10 2 9 3 8 1 15 6 11
Sample Output
3
水题啊,刚开始还2b的用树状数组... 先按l值排一遍序,再按l从小到大扫一遍,记录途中的maxr值,如果当前的r值小于maxr,那么这个必定是“冗余”的,ans++
#include <cstdio> #include <algorithm> #define lowbit(x) ((x)&(-x)) using namespace std; const int MAXN = 16005; struct range { int l, r; }outpost[MAXN] = {0}; int n; bool cmpl(const range &A, const range &B) { return A.l < B.l; } int main() { scanf("%d", &n); for(int i = 1; i <= n; ++i) scanf("%d%d", &outpost[i].l, &outpost[i].r); sort(outpost+1, outpost+n+1, cmpl); int maxr = 0, ans = 0; for(int i = 1; i <= n; ++i) { if(outpost[i].r <= maxr) ans++; maxr = max(maxr, outpost[i].r); } printf("%d", ans); return 0; }