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 |
Re:这神题(像LS所说)只有写错了才能A。。。。。。无语 一整天搭进去了In Reply To:Re:这神题(像LS所说)只有写错了才能A。。。。。。无语 一整天搭进去了 Posted by:Gzs_iceberg at 2012-06-16 02:13:05 #include <cstdio> #include <cstring> struct LT { int linestart,lineend; bool notcovered; LT *left,*right; ~LT() {delete left;delete right;} }; typedef LT *line; line build(int l,int r) { line root = new LT; root->linestart = l; root->lineend = r; root->notcovered = true; if (~(l-r)) { root->left = build(l,(r+l)/2); root->right = build((r+l)/2,r); } else { root->left = root->right = NULL; } return root; } bool post(line t,int l,int r) { bool returnbl; if (r <= t->linestart || l >= t->lineend) return false; if (l <= t->linestart && r >= t->lineend) { returnbl = t->notcovered; t->notcovered = false; return returnbl; } if (t->notcovered) { returnbl = post(t->left,l,r); if (post(t->right,l,r)) returnbl = true; t->notcovered = (t->left->notcovered || t->right->notcovered); return returnbl; } return false; } struct pst { int start,end; }poster[10005]; int dismaping[10000005]; int main() { int c,n,i,count; line wall; scanf("%d",&c); while (c--) { scanf("%d",&n); memset(dismaping,0,sizeof(dismaping)); i = n; while (i--) { scanf("%d%d",&poster[i].start,&poster[i].end); dismaping[poster[i].start-1] = dismaping[poster[i].end] = 2;//=1才能Ac } for (i = 1; i < 10000005; i++) { dismaping[i] += dismaping[i-1]; } wall = build(0,dismaping[10000001]); count = 0; for (i = 0; i < n; i++) { if (post(wall,dismaping[poster[i].start]-1,dismaping[poster[i].end])) ++count; } printf("%d\n",count); } return 0; } 看我的代码吧,楼上这样说可真错了,我的离散化自认为好点,那个动态申请的线段树大家忽略掉把Xd Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator