hihocoder 1342 二分
来源:互联网 发布:怎么弄多个淘宝号 编辑:程序博客网 时间:2024/06/05 10:39
#include<bits/stdc++.h>#define Mem(a,b) memset(a,b,sizeof(a))#define eps 1e-6#define ll long long#define l(x) (x<<1)#define r(x) (x>>1)#define lson root<<1#define rson root<<1|1#define Mid int mid=(l+r)>>1#define FREI freopen("in.txt","r",stdin)#define FREO freopen("out.txt","w",stdout)#define N 500100#define Maxn 1010#define inf 0x3f3f3f3fusing namespace std;int y[2000000]= {0},n,m,x[2000000]= {0};int marky[2000000],markx[2000000];void init() { x[1]=0; int flag[30]= {0},p=0; int maxn=0; int cnt=1,num=1<<(n-1),tmp=1,pre=-1,now=0; while(cnt<num) { cnt*=2; flag[++p]=now+pre-1; now=flag[p]; pre=now; maxn=-now; } cnt=1; p--; while(cnt<num) { cnt*=2; for(int i=0; i<cnt; i++) { x[++tmp]=flag[p]+maxn; } p--; } for(int i=1; i<=tmp; i++) { (i&1)?y[i]=y[i/2]+(x[i]-x[i/2]):y[i]=y[i/2]-(x[i]-x[i/2]); } for(int i=1; i<=tmp; i++) markx[i]=x[i],marky[i]=y[i];}int Y(int mid,int l,int r){ if(mid==l) return -inf; if(mid==r) return inf; return y[mid];}void work(int tmp,int lx,int ly,int rx,int ry) { int ans=0; x[0]=-inf,x[tmp+1]=inf; int l=0,r=tmp+1; int ansxl,ansxr,ansyup,ansydown; while(r>l+1) { int mid=(l+r)>>1; if(x[mid]>=lx) r=mid; else l=mid; } ansxl=r; l=0,r=tmp+1; while(r>l+1) { int mid=(l+r)>>1; if(x[mid]>rx) r=mid; else l=mid; } ansxr=l; queue<int>q; int cnt1=ansxl; while(cnt1<=ansxr) { q.push(cnt1); cnt1<<=1; } while(!q.empty()) { int id=q.front(); q.pop(); l=id-1,r=id<<1; while(r>l+1) { int mid=(l+r)>>1; if(Y(mid,id-1,id<<1)>=ly) r=mid; else l=mid; } ansyup=r; l=id-1,r=id<<1; while(r>l+1) { int mid=(l+r)>>1; if(Y(mid,id-1,id<<1)>ry) r=mid; else l=mid; } ansydown=l; ans+=ansydown-ansyup+1; } cout<<ans<<endl;}void solve(int tmp,int lx,int ly,int rx,int ry) { int cnt=0; for(int i=1; i<=tmp; i++) { if(x[i]>=lx&&x[i]<=rx&&y[i]<=ry&&y[i]>=ly) cnt++; } cout<<cnt<<endl;}int main() { //FREI; //FREO; while(scanf("%d%d",&n,&m)!=EOF) { init(); while(m--) { int lx,ly,rx,ry; scanf("%d%d%d%d",&lx,&ly,&rx,&ry); solve((1<<n)-1,lx,ly,rx,ry); //work((1<<n)-1,lx,ly,rx,ry); //cout<<endl; } }}
暴力也可以过
0 0
- hihocoder 1342 二分
- hihocoder:二分查找
- hihocoder #1095 二分
- hihocoder 1158 二分图
- hihocoder 1122 二分图进阶
- hihoCoder - 1121 - 二分图判定
- hihoCoder 二分图系列(模板)
- hihoCoder 1121 二分图判定
- hihocoder 1123 好配对 (二分)
- Hihocoder #1362 : 修补木桶 (二分)
- hihoCoder 1288 Font Size 二分
- 二分图最大匹配(HihoCoder
- hihoCoder 1128 二分·二分查找
- 【hihoCoder 1139】 二分·二分答案
- hihoCoder 1139 二分·二分答案
- hihocoder 1128 : 二分·二分查找
- hihocoder #1128 : 二分·二分查找
- hihoCoder#1128 : 二分·二分查找
- Sonatype Nexus 手动更新索引
- JAVA中的异常处理机制及异常分类
- jQuery.cookie.js取cookie值为undefined问题
- vuforia6.2 在unity中图片识别教程
- 前端编程的几点建议及问题
- hihocoder 1342 二分
- 轮播图
- iptable防火墙命令个人整理
- and-or 技巧
- Etcd分布式原理基于Raft算法
- 递推递归练习--I(蟠桃记)
- jquery选择器引擎Sizzle
- microsoft project 2010专业版带破解工具.zip下载地址
- html的学习