hdu4022 离散化
来源:互联网 发布:阿里云 禁止ip访问 编辑:程序博客网 时间:2024/06/06 09:34
去年上海赛区网络赛的一道水题。。。可还是刚开始被我搞的烂七八糟,无奈之下,看了别人的博客,才恍然大悟。。的确,在这种题面前真心弱爆了。。。。这道题一看就是要离散化,然后紧跟着就是排序,分别对x,y排序。我之所以搞乱了,就是在离散化的时候没有记录原值id。。。之所以要这个原值id,就是在要通过离散化的数据找到图上的点,从而完成标记和统计。。。。也就是离散后在归整,附代码:
#include <iostream>using namespace std;struct node{ int val; int id;};const int N=101000;const int Max=0xfffffff;node x[N],y[N];int n,q[N];bool cmp(node a,node b){ return a.val<b.val;}int find(int d,node* c,int l,int r){ if (r-l<=1) { if (c[l].val==d) return l; else if (c[r].val==d) return r; else return -1; } else { int m=(l+r)>>1; if (d<=c[m].val) return find(d,c,l,m); else return find(d,c,m+1,r); }}int deal(int d,node* c){ int j,num=0,k; j=find(d,c,1,n); if (j<0) return 0; do { k=c[j].id; if (!q[k]) { q[k]=1; num++; } if (c[j].val==c[j+1].val) j++; else break; } while (true); return num;}int main(){ int m,i,c,d,k; while (scanf("%d%d",&n,&m)!=EOF) { if (n==0&&m==0) break; memset(q,0,sizeof(q)); for (i=1;i<=n;i++) { scanf("%d%d",&x[i].val,&y[i].val); x[i].id=y[i].id=i; } sort(x+1,x+n+1,cmp); sort(y+1,y+n+1,cmp); x[n+1].val=y[n+1].val=Max-1; x[n+1].id=y[n+1].id=n+1; for (i=1;i<=m;i++) { scanf("%d%d",&c,&d); if (c==0) { printf("%d\n",deal(d,x)); } else { printf("%d\n",deal(d,y)); } } printf("\n"); } return 0;}
- hdu4022 离散化
- hdu4022
- hdu4022
- hdu4022
- HDU4022(二分法)
- hdu4022 map+multiset
- hdu4022-bomb stl
- 离散化
- 离散化
- 离散化
- 离散化
- 离散化
- 离散化
- 离散化
- 离散化
- 离散化
- 离散化
- 离散化
- 若爱 就如桃花般地去爱
- lua访问C++类简单手工实现
- 对volatile修饰符的理解和使用
- poj 2430 Lazy Cows
- 浅析ServerSocket与Socket
- hdu4022 离散化
- 吐糟大部分面试官的必问题:你为何辞职?
- ASIHTTPRequest精确进度条vs简单进度条
- 复选框(checkbox)全选--js代码
- 文字编码 历史
- js中选择html-table中的元素值
- 想念那一池莲花
- vs2010dumpbin 查看静态库的函数
- hdu 4277 爆搜 set 去重