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 |
用矩形扫描线+STL SET写了个,跑了1S,汗。。。Source Code Problem: 3277 User: yzhw Memory: 5020K Time: 938MS Language: G++ Result: Accepted Source Code # include <iostream> using namespace std; # include <set> # include <cstdio> # include <cstdlib> struct line { int id; long long x; bool sta; }; struct node { long long p; int count; }; class cmp1 { public: bool operator()(node a,node b) const { return a.p>b.p; } }; line data[100000]; long long h[100000]; int cmp(const void *a,const void *b) { line *aa=(line *)a; line *bb=(line *)b; return aa->x-bb->x; } set<node,cmp1> res; int main() { int num; scanf("%d",&num); for(int i=1;i<=num;i++) { scanf("%lld %lld %lld",&data[2*i-1].x,&data[2*i].x,&h[i]); data[2*i-1].id=data[2*i].id=i; data[2*i-1].sta=1; data[2*i].sta=0; } qsort(data+1,2*num,sizeof(line),cmp); long long total=0; for(int i=1;i<2*num;i++) { if(data[i].sta) { node temp; temp.count=1; temp.p=h[data[i].id]; set<node,cmp1>::iterator it=res.find(temp); if(it==res.end()) res.insert(temp); else { temp=*it; temp.count++; res.erase(temp); res.insert(temp); } } else { node temp; temp.count=1; temp.p=h[data[i].id]; set<node,cmp1>::iterator it=res.find(temp); if(it->count==1) res.erase(temp); else { temp=*it; temp.count--; res.erase(temp); res.insert(temp); } } if(data[i].x==data[i+1].x||res.empty()) continue; total+=(data[i+1].x-data[i].x)*(res.begin()->p); } printf("%lld\n",total); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator