Submission #13356

#TimeUsernameProblemLanguageResultExecution timeMemory
13356gs14004수족관 2 (KOI13_aqua2)C++14
69 / 100
1000 ms13468 KiB
#include <cstdio> #include <utility> #include <map> #include <algorithm> using namespace std; typedef pair<int,int> pi; int x[150005], y[150005], hole[150005], n; map<pi,int> mp; int h; long long res; struct bit{ int tree[265000], lim; void init(int n) { for(lim = 1; lim <= n+1; lim <<= 1); } void add(int x, int v){ x++; while(x <= lim){ tree[x] += v; x += x & -x; } } int sum(int x){ x++; int r = 0; while(x){ r += tree[x]; x -= x & -x; } return r; } }bit; double f(int s, int e){ if(s >= e) return 0; int pos = (int)(min_element(y+s,y+e)-y); int ph = h; h = y[pos]; double r = max(f(s,pos),f(pos+1,e)); if(bit.sum(e-1) == bit.sum(s-1)){ res += 1ll * (x[e] - x[s]) * (y[pos] - ph); } else{ r += 1.0 * (x[e] - x[s]) * (y[pos] - ph) / (bit.sum(e-1) - bit.sum(s-1)); } h = ph; return r; } int main(){ scanf("%d",&n); n/=2; for (int i=0; i<n; i++) { scanf("%*d %*d %d %d",&x[i],&y[i]); mp[pi(x[i],y[i])] = i; } bit.init(n); int t; scanf("%d",&t); for (int i=0; i<t; i++) { int s,e; scanf("%d %d %*d %*d",&s,&e); hole[mp[pi(s,e)]] = 1; bit.add(mp[pi(s,e)],1); } printf("%.2lf\n",f(0,n-1)); printf("%lld",res); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...