HDU_5517_Triple
2018-06-17 21:48:12来源:未知 阅读 ()
Triple
Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1004 Accepted Submission(s): 356
C=A∗B={?a,c,d?∣?a,b?∈A, ?c,d,e?∈B and b=e}
For each ?a,b,c?∈C, its BETTER set is defined as
BETTERC(?a,b,c?)={?u,v,w?∈C∣?u,v,w?≠?a,b,c?, u≥a, v≥b, w≥c}
As a \textbf{multi-set} of triples, we define the TOP subset (as a multi-set as well) of C, denoted by TOP(C), as
TOP(C)={?a,b,c?∈C∣BETTERC(?a,b,c?)=∅}
You need to compute the size of TOP(C).
Each test case contains three lines. The first line contains two integers n (1≤n≤105) and m (1≤m≤105) corresponding to the size of A and B respectively.
The second line contains 2×n nonnegative integers
which describe the multi-set A, where 1≤ai,bi≤105.
The third line contains 3×m nonnegative integers
corresponding to the m triples of integers in B, where 1≤ci,di≤103 and 1≤ei≤105.
- 集合凸点
- 难点在于能否快速判定比当前三维数据(ai,ci,di)更大的点是否存在
- 首先能不能对原始数据做一次压缩呢?
- 看数据范围发现a,b,e的范围一致,c,d的范围一致,而c,d的范围只有1e3,是可以接受的
- 那么我们可以先对于有效点集P做一次排序,从大到小排,优先度分别是a,c,d,那么我们算是对第一维a的数据进行一次筛选,剩下的就是对于c和d这两维数据的判定
- 在一维数据中我们可以用线段树或树状数组的方式对于有限数据范围的数据进行RMQ操作,快速找出区间内max,min,sum。。。。
- 那么我们这里的算是一维RMQ的一个扩展
- 如果我们可以找出比当前结点大的点的个数就可以把题解决
- 那么这里就是一个二维数据的RMQ问题,询问区间内点点的数目
- 可以通过二维树状数组来实现
- 这里需要注意的一点是,普通二维树状数组在update的时候是从小到大维护自[0][0]点至[x][y]点整体矩阵的数据,因此update(x,y)应该分别对于大于x和y的坐标点进行更新,意思是update的(x,y)这个点的信息对于大于等于当前矩阵所维护的信息具有影响作用,但对小的点所维护的信息没有效用
- 这道题却和普通思想截然相反,update的点(x,y)对于比此点小的点具有效用,因此更新方向和原始方向刚好相反,对应的quary过程也是相反的
- 最后还要对点集去重,记录对应点出现次数
1 #include <iostream> 2 #include <string> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 #include <climits> 7 #include <cmath> 8 #include <vector> 9 #include <queue> 10 #include <stack> 11 #include <set> 12 #include <map> 13 using namespace std; 14 typedef long long LL ; 15 typedef unsigned long long ULL ; 16 const int maxn = 1e5 + 10 ; 17 const int inf = 0x3f3f3f3f ; 18 const int npos = -1 ; 19 const int mod = 1e9 + 7 ; 20 const int mxx = 100 + 5 ; 21 const double eps = 1e-6 ; 22 const double PI = acos(-1.0) ; 23 24 struct node{ 25 int a, c, d, cnt; 26 bool operator < (const node &r)const{ 27 if(a!=r.a) return a>r.a; 28 else if(c!=r.c) return c>r.c; 29 else return d>r.d; 30 } 31 bool operator == (const node &r)const{ 32 return (a==r.a)&&(c==r.c)&&(d==r.d); 33 } 34 }; 35 node e[maxn]; 36 int T, n, m, u, v, w, cnt, tot; 37 int a[maxn], c[maxn], d[1000+5][1000+5]; 38 int lowbit(int x){ 39 return x&(-x); 40 } 41 void update(int x, int y, int z){ 42 for(int i=x;i>0;i-=lowbit(i)) 43 for(int j=y;j>0;j-=lowbit(j)) 44 d[i][j]+=z; 45 } 46 int quary(int x, int y){ 47 int res=0; 48 for(int i=x;i<=1e3;i+=lowbit(i)) 49 for(int j=y;j<=1e3;j+=lowbit(j)) 50 res+=d[i][j]; 51 return res; 52 } 53 int main(){ 54 // freopen("in.txt","r",stdin); 55 // freopen("out.txt","w",stdout); 56 while(~scanf("%d",&T)){ 57 for(int kase=1;kase<=T;kase++){ 58 cnt=0; 59 tot=0; 60 memset(a,0,sizeof(a)); 61 memset(c,0,sizeof(c)); 62 memset(d,0,sizeof(d)); 63 scanf("%d %d",&n,&m); 64 for(int i=1;i<=n;i++){ 65 scanf("%d %d",&u,&v); 66 if(a[v]<u) 67 a[v]=u, c[v]=1; 68 else if(a[v]==u) 69 c[v]++; 70 } 71 for(int i=1;i<=m;i++){ 72 scanf("%d %d %d",&u,&v,&w); 73 if(a[w]) 74 e[cnt++]=(node){a[w],u,v,c[w]}; 75 } 76 sort(e,e+cnt); 77 for(int i=1;i<cnt;i++) 78 if(e[tot]==e[i]) 79 e[tot].cnt+=e[i].cnt; 80 else 81 e[++tot]=e[i]; 82 LL ans=0LL; 83 for(int i=0;i<=tot;i++){ 84 if(!quary(e[i].c,e[i].d)) 85 ans+=e[i].cnt; 86 update(e[i].c,e[i].d,1); 87 } 88 printf("Case #%d: %lld\n",kase,ans); 89 } 90 } 91 return 0; 92 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- HDU-2955-Robberies(0-1背包) 2020-03-30
- hdu1455 拼木棍(经典dfs) 2020-02-29
- anniversary party_hdu1520 2020-02-16
- hdu1062 text reverse 2020-01-27
- hdu4841 2020-01-26
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash