Solar lamps

POI2014

题意

1.有n个灯,他们只会朝一个确定的夹角发光

2.每个灯被放在一个固定的地方,并且朝向同一个方向(指如果发光会朝同一个方向)

3.第i盏灯如果被至少K[i]盏灯照到那么他就会发光

4.现在按从1到n的顺序依次给每盏灯通电,即在第i个时刻给第i盏灯通电

5.问每盏灯在哪个时刻开始发光

1.先转换一下坐标
(方向乱七八糟看着不恶心么)

设新坐标为(a,b)
(x,y)=a(x1,y1)+b(x2,y2)
x=a*x1+b*x2
y=a*y1+b*y2a=(-x*y1+y*x1)/(x1*y2-y1*x2)
b=(+x*y2-y*x2)/(x1*y2-y1*x2)x1*y2-y1*x2 是定值我们令这个定值为一个整数,就可以保证符号了

2.那么一盏灯(a,b),
可以照亮灯(x,y) {x>=a&&y>=n}

3.可以用树套树解决二维偏序问题,但是树套树要nlog⁡n2n{\log{n}}^2nlogn2的内存

4.考虑同时二分

对于每个l,r,L,R
mid=L+R>>1
1.先按照时间序(mid)分成两份询问2.再把(l,r)的询问按y升序3.如果碰到的询问Q[i]
Q[i].id<=mid
或者
当前它前面至少有Q[i].K盏灯已经亮了
那么把它塞入BIT中4.亮了的(被照亮或被点亮)Q[i]放左边,没亮的放右边(放右边时把K-query(Q[i].y))这样子不需要每次从头开始扫,每个区间就扫(L,R),因为前面区间可能产生的贡献已经计算过了

5.细节
如果这个照亮的角度是0°

即 两个向量在同一直线上,但是只有两个不共线的向量才能表示出任意向量,那么坐标转换此时就有问题了

但是重新写一下特殊情况有比较麻烦,所以我们强行把这两个向量掰开那么一丢丢角度(小到不影响结果)

具体代码

#include<bits/stdc++.h>
using namespace std;
const int M=200005;
int n,len,ans[M];
long long B[M];
int sum[M];
void add(int x,int a) {while(x<=len) {sum[x]+=a;x+=-x&x;}
}
int query(int x) {int res=0;while(x) {res+=sum[x];x-=-x&x;}return res;
}
struct node {long long x,y;int id,K;bool operator <(const node&tmp)const {if(x!=tmp.x)return x<tmp.x;return y<tmp.y;}
} Q[M],hc[M];
void solve(int l,int r,int L,int R) {if(l>r||L>R)return;int mid=L+R>>1;int L1=l,R2=r;sort(Q+l,Q+r+1);for(int i=l; i<=r; i++) {int k=query(Q[i].y);if(Q[i].id<=mid||k>=Q[i].K) {hc[L1++]=Q[i],ans[Q[i].id]=mid;add(Q[i].y,1);} else Q[i].K-=k,hc[R2--]=Q[i];}for(int i=l; i<L1; i++)add(hc[i].y,-1);for(int i=l; i<=r; i++)Q[i]=hc[i];solve(l,L1-1,L,mid-1);solve(R2+1,r,mid+1,R);
}
int main() {long long X1,Y1,X2,Y2;int x,y;scanf("%d %lld %lld %lld %lld",&n,&X1,&Y1,&X2,&Y2);int f=1;if(X1*Y2-Y1*X2==0) {int m=max(abs(X1),abs(Y1));int d=(2000000000ll-m+1)/m;X1=X1*d+1,Y1=Y1*d;}if(X1*Y2-Y1*X2<0)f=-f;len=0;for(int i=1; i<=n; i++) {scanf("%d %d",&x,&y);long long a=-1ll*x*Y1+1ll*y*X1;long long b=+1ll*x*Y2-1ll*y*X2;a=a*f,b=b*f;Q[i].x=a,Q[i].y=b;B[++len]=b;}sort(B+1,B+1+len);len=unique(B+1,B+1+len)-B-1;for(int i=1; i<=n; i++) {Q[i].id=i;Q[i].y=lower_bound(B+1,B+1+len,Q[i].y)-B;scanf("%d",&Q[i].K);}solve(1,n,1,n);for(int i=1; i<=n; i++) {printf("%d ",ans[i]);}return 0;
}

POI2014 Solar lamps相关推荐

  1. BZOJ3833 : [Poi2014]Solar lamps

    首先旋转坐标系,将范围表示成矩形或者射线 如果范围是一条线,则将灯按y坐标排序,y坐标相同的按x坐标排序, 对于y相同的灯,f[i]=min(i,它前面灯发光时刻的第k[i]小值), 线段树维护,$O ...

  2. BZOJ3833[Poi2014] Solar lamps

    Task: 有很多盏灯,第ii盏灯在第ii个时刻点亮.如果有至少kik_i盏灯照亮了第ii盏灯,那么这盏灯就将被点亮.每盏灯照亮的范围都是一样角度的一个区域且无限延伸,给定(x1,y1),(x2,y2 ...

  3. POI2014 Solar Panels

    Solar Panels POI2014 题意 多组询问,每次问x∈[L1,R1],y∈[L2,R2]时,gcd(x, y)的最大值 解 1.设答案为d 那么必须满足 ⌊ L 1 − 1 d ⌋ \l ...

  4. [POI2014]Solar Panels

    题目大意: $T(T\le1000)$组询问,每次给出$A,B,C,D(A,B,C,D\le10^9)$,求满足$A\le x\le B,C\le y\le D$的最大的$\gcd(x,y)$. 思路 ...

  5. BZOJ3834: [Poi2014]Solar Panels

    题目大意:给定A,B,C,D,求满足A≤x≤B&&C≤y≤D的gcd(x,y)的最大值 首先枚举答案n,变成检验 ⌊A−1n⌋ \lfloor\frac{A-1}{n}\rfloor ...

  6. usaco party lamps

    不说什么了这题真的解不出来.看了题解,规律一层套一层,题目越来越难了加油吧. /* ID:jinbo wu PROG:lamps LANG:C++ */ #include<bits/stdc++ ...

  7. 洛谷P3572 [POI2014]PTA-Little Bird

    P3572 [POI2014]PTA-Little Bird 题目描述 In the Byteotian Line Forest there are nn trees in a row. On top ...

  8. P3572 [POI2014]PTA-Little Bird

    P3572 [POI2014]PTA-Little Bird 一只鸟从1跳到n.从1开始,跳到比当前矮的不消耗体力,否则消耗一点体力,每次询问有一个步伐限制k,求每次最少耗费多少体力 很简短的题目哼. ...

  9. [BZOJ3832][Poi2014]Rally

    [BZOJ3832][Poi2014]Rally 试题描述 An annual bicycle rally will soon begin in Byteburg. The bikers of Byt ...

最新文章

  1. 【Android OpenGL ES】阅读hello-gl2代码(二)Java代码
  2. C语言-宏定义#define的用法
  3. 使用Core Audio实现VoIP通用音频模块
  4. OpenCASCADE:Foundation Classes之数学原语和算法
  5. 免费LInux主机资源
  6. 要想推荐系统做的好,图技术少不了
  7. 网上图书商城项目学习笔记-008修改密码功能
  8. poj 3167(KMP+树状数组)
  9. 黄永成think php rest,Rest控制器
  10. 哈铁职业学院 计算机,--哈尔滨铁道职业技术学院
  11. Swift3.0学习笔记-Error Handling
  12. English 英文邮件致谢的10种表达方式十种不同场合的英文表达
  13. 【BHOJ 女娲加农炮 |、||】贪心 | 优先队列 | 堆 | E
  14. 大疆FPGA/芯片开发工程师(A卷、B卷)笔试题详解
  15. linux登录pg数据库命令,PostgreSQL数据库pg_dump命令行不输入密码的方法
  16. PTA函数题相关接口(未完)
  17. docker镜像如何下载到本地
  18. 单机redis和redisCluster集群获取所有key
  19. 暂时解决腾讯会议对Sandboxie等沙箱的检测机制
  20. android盒子耗电,家中最耗电的不是电视,而是安卓盒子,赶紧拔掉

热门文章

  1. JAVA计算机毕业设计心灵治愈服务平台Mybatis+源码+数据库+lw文档+系统+调试部署
  2. springboot整合mybatis实现增删改查
  3. matlab示波器有功功率,第5章MATLAB与电力系统仿真(12级)讲解.ppt
  4. vs2010/2019默认不生成ipch文件和.sdf文件
  5. B001-Atmega16-PORTA的定义-(ques=1)
  6. 《鬼谷子本经阴符七术》原文全文
  7. modern android5.1,modern warships
  8. php 3木目,拼多多质量调查:相机买回来才发现是木目木几
  9. MySQL 索引结构
  10. navicat导出sql数据,保留datetime三位小数