zoj Monthly, February 2012 - D Under Attack II (zoj 3574)
来源:互联网 发布:ubuntu intel显卡驱动 编辑:程序博客网 时间:2024/05/18 22:52
先离散化建一个二部图,两边都有n个点,然后从左边依次往上扫描,插入线段,每次统计新插入的线段后和原来的线段有多少个交点,这样就知道新插入的线段会增加多少个区域,可以用树状数组来解决这个问题
#include<iostream>#include<vector>#include<cstring>#include<string>#include<cstdio>#include<iomanip>#include<queue>#include<map>#include<algorithm>using namespace std;const int maxn = 30011*5;const int maxc = 30011;vector<int>va;vector<int>vb;vector<int>ca;vector<int>cb;map<int,int>ma;map<int,int>mb;int a,b;int x,y,za,zb,n,tot,all;int k,t;int from[maxc];int to[maxc];int g[maxc];int zx[maxn];int zz[maxn];inline int lowbit(int x){ return x&(-x);}int sum(int now){ int ans = 0; while(now > 0) { ans += zx[now]; now -= lowbit(now); } return ans;}void insert(int now){ while(now <= tot) { zx[now]++; now += lowbit(now); } return ;}int main(){ while(cin>>a>>b) { va.clear(); vb.clear(); ca.clear(); cb.clear(); ma.clear(); mb.clear(); memset(g,0,sizeof(g)); cin>>n; for(int i=1;i<=n;i++) { cin>>k>>t; za = k*a + t; zb = k*b + t; from[i] = za; to[i] = zb; ca.push_back(za); cb.push_back(zb); } sort(ca.begin(),ca.end()); sort(cb.begin(),cb.end()); int temp = ca[0]; int t2 = cb[0]; va.push_back(temp); ma[temp] = 0; vb.push_back(t2); mb[t2] = 0; for(int i=1;i<ca.size();i++) { if(temp != ca[i]) { temp = ca[i]; va.push_back(temp); ma[temp] = va.size() - 1; } } for(int i=1;i<cb.size();i++) { if(t2 != cb[i] ) { t2 = cb[i]; vb.push_back(t2); mb[t2] = vb.size() - 1; } } int f,t; for(int i=1;i<=n;i++) { f = ma[from[i]]; t = mb[to[i]]; g[f] = t; } tot = va.size(); memset(zx,0,sizeof(zx)); memset(zz,0,sizeof(zz)); all=1; for(int i=0;i<tot;i++) { t = tot - g[i]; temp = sum(t-1) + 1; insert(t); all += temp; } cout<<all<<endl; } return 0;}
- zoj Monthly, February 2012 - D Under Attack II (zoj 3574)
- zoj 3574 Under Attack II//归并排序
- 【归并排序】ZOJ-3574-Under Attack II
- ZOJ Monthly, February 2012 C,D,F,H
- ZOJ--3574--Under Attack II【线段树+欧拉公式】
- ZOJ 3574 Under Attack II 归并排序求逆序对
- ZOJ 3574 Under Attack II 归并排序求逆序对
- zoj 3573 Under Attack
- zoj 3573 Under Attack
- zoj 3573 Under Attack
- zoj 3573 Under Attack
- ZOJ 3573 Under Attack
- ZOJ Monthly, February 2012 - H Matrix (ZOJ 3578)
- ZOJ 3575 Under Attack III
- ZOJ Monthly, February 2016 - E:Ellipse
- ZOJ 3573 Under Attack (线段树版)
- ZOJ Monthly, June 2012
- ZOJ Monthly, August 2012
- 通过网页修改人人尾巴
- Latex 设置页码位置 (包括 pdfpages)
- Git学习笔记一:Windows安装篇
- android:padding和android:layout_margin的区别?
- 弱校ACM奋斗史【转载】
- zoj Monthly, February 2012 - D Under Attack II (zoj 3574)
- mfc的消息映射学习笔记
- c_user--RTEMS Data Types
- i=i+1 i++ ++I的区别
- 2012-02-26
- SCAU2011新生现场赛题解
- 2.69
- c++ 简单的日志类 CCLog
- 专注于操作系统6之导入操作系统内核