把环倍长,破环成链

设f[i]表示i一次性能飞达的最右边的点,因为f[]单调递增,所以可以$O(n)$求出

这样就形成了一个树结构,对于每个节点,在其到根节点路径上二分出深度最大的点,使得其飞过一圈

常数优化:

注意到答案只有两种,所以可以进行最优性剪枝

内存优化:

只需要开3个200W的数组即可,分别表示相邻两站的距离、f[i]、存该点到根节点路径上所有点的栈

对于树结构的存储,注意到f[]单调递增,所以我们可以求出c[i]表示父亲为i的点的开始的位置

在DFS时,如果这个点第一次走到,那么它下一步就走向c[i],否则走向++c[i]

对于这个数组中的每个数,可以拆成两半,各11位,分别放进f[i]和b[i]的后11位中

#include<cstdio>
const int N=2000010,B=2097151;
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
int n,m,i,j,d,x,lim,ans,t,k,l,r,u,mid;unsigned int a[N],b[N],f[N];
inline void set(int x){(f[x]&=B)|=(i&2047)<<21,(b[x]&=B)|=i>>11<<21;}
inline void cal(int x){
if(!k){
l=1,r=t-1;
while(l<=r){
mid=(l+r)>>1;
if((b[mid]&B)>=x)l=(u=mid)+1;else r=mid-1;
}
ans=t-u,k=1;
}else{
if(t>ans&&(b[t-ans]&B)<x)k=2;
if(t+1>ans&&(b[t-ans+1]&B)>=x)ans--,k=2;
}
}
int main(){
read(n),read(m);
for(i=1;i<=n;i++){
read(x);a[i]=a[i+n]=x;
if(lim<x)lim=x;
}
while(m--){
read(d);
if(d<lim){puts("NIE");continue;}
for(j=i=1;i<=n*2;i++){
while(j<n*2&&d>=a[j])d-=a[j++];
f[i]=j;
d+=a[i];
b[i]=0;
}
k=f[b[t=1]=n*2]=0;
for(i=n*2-1;i;i--)set(f[i]&B);
while(t){
x=b[t]&B;
if((f[b[t+1]&B]&B)!=x){
if(x<=n)cal(x+n);
if(k==2)break;
i=(b[x]>>21<<11)|(f[x]>>21);
}else{
i=(b[t+1]&B)+1;
if((f[i]&B)!=x)i=0;
}
if(i)++t,b[t]=(b[t]>>21<<21)|i;else t--;
}
printf("%d\n",ans);
}
return 0;
}

  

BZOJ3827 : [Poi2014]Around the world的更多相关文章

  1. POI2014题解

    POI2014题解 [BZOJ3521][Poi2014]Salad Bar 把p当作\(1\),把j当作\(-1\),然后做一遍前缀和. 一个合法区间\([l,r]\)要满足条件就需要满足所有前缀和 ...

  2. BZOJ 3524: [Poi2014]Couriers [主席树]

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1892  Solved: 683[Submit][St ...

  3. BZOJ 3524: [Poi2014]Couriers

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1905  Solved: 691[Submit][St ...

  4. [BZOJ3872][Poi2014]Ant colony

    [BZOJ3872][Poi2014]Ant colony 试题描述 There is an entrance to the ant hill in every chamber with only o ...

  5. 【BZOJ】【3522】【POI2014】Hotel

    暴力/树形DP 要求在树上找出等距三点,求方案数,那么用类似Free Tour2那样的合并方法,可以写出: f[i][j]表示以 i 为根的子树中,距离 i 为 j 的点有多少个: g[i][j]表示 ...

  6. 【BZOJ】【3831】【POI2014】Little Bird

    DP/单调队列优化 水题水题水题水题 单调队列优化的线性dp…… WA了8次QAQ,就因为我写队列是[l,r),但是实际操作取队尾元素的时候忘记了……不怎么从队尾取元素嘛……平时都是直接往进放的……还 ...

  7. Bzoj 3831 [Poi2014]Little Bird

    3831: [Poi2014]Little Bird Time Limit: 20 Sec Memory Limit: 128 MB Submit: 310 Solved: 186 [Submit][ ...

  8. BZOJ3522: [Poi2014]Hotel

    3522: [Poi2014]Hotel Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 195  Solved: 85[Submit][Status] ...

  9. 3522: [Poi2014]Hotel( 树形dp )

    枚举中点x( 即选出的三个点 a , b , c 满足 dist( x , a ) = dist( x , b ) = dist( x , c ) ) , 然后以 x 为 root 做 dfs , 显 ...

随机推荐

  1. unity3d 加密资源并缓存加载

    原地址:http://www.cnblogs.com/88999660/archive/2013/04/10/3011912.html 首先要鄙视下unity3d的文档编写人员极度不负责任,到发帖为止 ...

  2. 当前标识(IIS APPPOOL\DefaultWebSite)没有对“C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files“的写访问权限

    将C#写的webservice发布到IIS后,通过浏览器访问测试,出现如下错误: 根据提示:对Tempory ASP.NET Files没有写访问权限,在资源管理其中定位到这个地址,发现没有这个文件夹 ...

  3. 2015安徽省赛 B.求和

    题目描述 对于正整数n,k,我们定义这样一个函数f,它满足如下规律 现在给出n和k,你的任务就是要计算f(n,k)的值. 输入 首先是一个整数T,表示有T组数据 接下来每组数据是n和k(1<=n ...

  4. Merge Two Sorted Arrays

    Merge two given sorted integer array A and B into a new sorted integer array. Example A=[1,2,3,4] B= ...

  5. 【leetcode】3Sum

    3Sum Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find a ...

  6. Java构造方法的含义和使用

    我们实例化对象时,一般使用"类名 对象名 = new 类名()"来实例化,其实这样并不是十分严谨,只是编译器帮我们自动补全了一个空的构造方法,当实例化对象时,构造方法会被自动调用, ...

  7. poj 3750 小孩报数问题 解题报告

    题目链接:http://poj.org/problem?id=3750 约瑟夫问题,直接模拟即可. #include <iostream> #include <string> ...

  8. Android涉及到的设计模式

    转载地址:http://blog.csdn.net/dengshengjin2234/article/details/8502097 1.适配器模式:ListView或GridView的Adapter ...

  9. 如何在Win8系统上建立WIFI热点

    1.首先将鼠标移到桌面左下角,单击右键,在弹出的快捷菜单中找到“命令提示符(管理员)”,点击 2.点击后,系统就以管理员权限打开了命令提示符,在命令提示符中输入以下命令“netsh wlan set ...

  10. 小吃(codevs 3231)

    3231 小吃  时间限制: 1 s  空间限制: 16000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 这里简直是吃货的天堂,小吃太多了. ...