标签:for 位运算 sort span div blog int amp reset
位运算。
四维分开计算。
按照某个维度从小到大排序询问和企鹅。用bitset状态压缩记录这一维中满足询问要求的企鹅有哪些。
然后求四维度答案的交集。
1 /*by SilverN*/ 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 #include<bitset> 8 using namespace std; 9 const int mxn=30010; 10 int n; 11 struct qe{ 12 double w[5]; 13 int id; 14 }a[mxn],q[mxn]; 15 bitset<30010> b[30010]; 16 int ans[mxn]; 17 int D=0; 18 int cmp(const qe a,const qe b){return a.w[D]<b.w[D];} 19 int main(){ 20 int i,j; 21 scanf("%d",&n); 22 for(i=1;i<=n;i++){ 23 scanf("%lf%lf%lf%lf",&a[i].w[1],&a[i].w[2],&a[i].w[3],&a[i].w[4]); 24 a[i].id=i; 25 } 26 int Q; 27 scanf("%d",&Q); 28 for(i=1;i<=Q;i++){ 29 scanf("%lf%lf%lf%lf",&q[i].w[1],&q[i].w[2],&q[i].w[3],&q[i].w[4]); 30 q[i].id=i; 31 b[i].set(); 32 } 33 for(i=1;i<=4;i++){ 34 D=i; 35 sort(a+1,a+n+1,cmp); 36 sort(q+1,q+Q+1,cmp); 37 int hd=1; 38 bitset<30010>res; 39 res.reset(); 40 for(j=1;j<=Q;j++){ 41 while(a[hd].w[D]<=q[j].w[D] && hd<=n){ 42 res[a[hd].id]=1; 43 hd++; 44 } 45 b[q[j].id]&=res; 46 } 47 } 48 for(i=1;i<=Q;i++)printf("%d\n",b[i].count()); 49 return 0; 50 }
清澄 A1485. Catch The Penguins 抓企鹅
标签:for 位运算 sort span div blog int amp reset
原文地址:http://www.cnblogs.com/SilverNebula/p/6329631.html