1 #include<stdio.h> 2 #include<string.h> 3 int addv[100005],minv[100005],fmin,y1,y2,v,l[20005],d[20005],len[20005]; 4 int min(int x,int y) 5 { 6 if (x<y) return x; 7 return y; 8 } 9 void update(int o,int l,int r) 10 { 11 int lc=o*2,rc=o*2+1; 12 if (y1<=l&&y2>=r) addv[o]+=v; 13 else{ 14 int mid=l+(r-l)/2; 15 if (y1<=mid) update(lc,l,mid); 16 if (y2>mid) update(rc,mid+1,r); 17 } 18 if (l!=r) minv[o]=min(minv[lc],minv[rc]); 19 minv[o]+=addv[o]; 20 } 21 void query(int o,int l,int r,int add) 22 { 23 if (y1<=l&&y2>=r) fmin=min(fmin,minv[o]+add); 24 else{ 25 int mid=l+(r-l)/2; 26 if (y1<=mid) query(o*2,l,mid,add+addv[o]); 27 if (y2>mid) query(o*2+1,mid+1,r,add+addv[o]); 28 } 29 } 30 void sort(int ll,int rr) 31 { 32 int i=ll,j=rr,x=l[(i+j)/2],y; 33 while (i<=j) 34 { 35 while (l[i]<x) i++; 36 while (x<l[j]) j--; 37 if (i<=j) 38 { 39 y=l[i]; l[i]=l[j]; l[j]=y; 40 y=d[i]; d[i]=d[j]; d[j]=y; 41 i++; j--; 42 } 43 } 44 if (ll<j) sort(ll,j); 45 if (i<rr) sort(i,rr); 46 } 47 int main() 48 { 49 int T,n,i,ans; 50 scanf("%d",&T); 51 while (T--) 52 { 53 scanf("%d",&n); 54 for (i=1;i<=n;i++) 55 { 56 d[2*i-1]=2*i-1; d[2*i]=2*i; 57 scanf("%d%d",&l[2*n-2*(i-1)-1],&l[2*n-2*(i-1)]); 58 } 59 sort(1,2*n); 60 len[d[1]]=1; 61 for (i=2;i<=2*n;i++) 62 if (l[i]!=l[i-1]) len[d[i]]=i; 63 else len[d[i]]=len[d[i-1]]; 64 memset(addv,0,sizeof(addv)); 65 memset(minv,0,sizeof(minv)); 66 ans=0; 67 for (i=1;i<=n;i++) 68 { 69 fmin=0x3f3f3f3f; y1=len[2*i-1]; y2=len[2*i]; 70 query(1,1,2*n,0); 71 if (fmin==0) ans++; 72 v=1; update(1,1,2*n); 73 } 74 printf("%d\n",ans); 75 } 76 }
转载于:https://www.cnblogs.com/xiao-xin/articles/3861741.html