Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
本人线段树+离散化的代码能AC且我认为无bug!#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define Maxn 12000 int tol[Maxn<<4],segT[Maxn<<4],li[Maxn],ri[Maxn]; bool vis[Maxn]; int ans; int Binsearch(int key,int r,int tol[]) { int l = 1,m; while (l <= r) { m = (l+r) >> 1; if (tol[m] > key) r = m - 1; else if (tol[m] < key) l = m + 1; else return m; } } void PushDown(int rt) { if (segT[rt]) { segT[rt<<1] = segT[rt<<1|1] = segT[rt]; segT[rt] = 0; } } void update(int L,int R,int color,int l,int r,int rt) { if (L <= l && r <= R) { segT[rt] = color; return ; } PushDown(rt); int m = (l+r) >> 1; if (L <= m) update(L,R,color,lson); if (R > m) update(L,R,color,rson); } void query(int l,int r,int rt) { if (segT[rt]) { if (!vis[segT[rt]]) { ++ans; vis[segT[rt]] = true; } return ; } if (l == r) return ; int m = (l+r) >> 1; query(lson); query(rson); } int main() { int c,n,i,k; while (~scanf("%d",&c)) { while (c--) { scanf("%d",&n); k = 1; for (i = 1; i <= n; ++i) { scanf("%d%d",&li[i],&ri[i]); tol[k++] = li[i]; tol[k++] = ri[i]; } sort(tol+1,tol+k); int m = 2; for (i = 2; i < k; ++i) { if (tol[i] != tol[i-1]) tol[m++] = tol[i]; } for (i = m - 1; i > 1; --i) { if (tol[i] != tol[i-1]+1) tol[m++] = tol[i-1] + 1; } sort(tol+1,tol+m); memset(segT,0,sizeof(segT)); for (i = 1; i <= n; ++i) { int a = Binsearch(li[i],m-1,tol); int b = Binsearch(ri[i],m-1,tol); update(a,b,i,1,m-1,1); } ans = 0; memset(vis,false,sizeof(vis)); query(1,m-1,1); printf("%d\n",ans); } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator