ACM/ICPC 2018亚洲区预选赛北京赛站网络赛D-80 Days--------树状数组
题意就是说1-N个城市为一个环,最开始你手里有C块钱,问从1->N这些城市中,选择任意一个,然后按照顺序绕环一圈,进入每个城市会有a[i]元钱,出来每个城市会有b[i]个城市,问是否能保证经过每个城市,钱都不会能为0,如果可以请输出最小的那个
这题最开始队员想错了。。。后来思路就乱了,整理一下思路,你会发现,其实我们要求的就是从i到n+i的前缀和最小值一定要大于c。
那么如何解决这个问题呢???
你会发现,其实我们只需要算一个影响就行,假如最小的点的在ID,那么前面i->ID的数肯定小,对吧???
如果ID<0,我从i到id,依次减去这个点的贡献,直到ID>=0,那么由于i到ID,ID到N这些数肯定是比ID大的,因此我们只需要看尾部增加的值的是否小于0并且是否小于最小值,如果小于我们,把最小值和最小值的位置更新,这样我们就实现了区间的移动,这样不断移动,我们判断移动是否超过N,如果超过N,证明找不到这个点,如果可以,直接break,输出就可以了。
个人感觉有点莫队的意思。。。
#include<bits/stdc++.h>
using namespace std; int t;
typedef long long ll;
const int maxn = 1e6+; struct Node
{
ll a,b,w;
} node[maxn<<]; int n,c;
ll tree[maxn<<]; int lowbit(int x)
{
return x&(-x);
} void add(int x,ll v)
{
for(int i=x; i<=n; i+=lowbit(i))
{
tree[i] += v;
}
} ll query(int x)
{
ll ans = ;
for(int i=x; i>; i-=lowbit(i))
{
ans += tree[i];
}
return ans;
} int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&c);
memset(tree,,sizeof(tree));
for(int i=; i<=n; i++)
scanf("%lld",&node[i].a);
ll minn = 0x3f3f3f3f3f;
int id = ;
ll tmp = c;
for(int i=; i<=n; i++)
{
scanf("%lld",&node[i].b);
node[i].w = node[i].a - node[i].b;
node[i+n].w = node[i].w;
add(i,node[i].w);
add(i+n,node[i].w);
tmp += node[i].w;
if(tmp < minn)
{
minn = tmp;
id = i;
}
}
int cnt = ;
int len = id;
while(minn < )
{
if(cnt > n)break;
for(int i=cnt;i<=cnt + len - ;i++)
{
minn -= node[i].w;
if(minn >= )
{
cnt = i+;
break;
}
}
ll tmp = query(n) - query(cnt-) + c;
minn = ;
for(int i=n+;i<=n+cnt-;i++)
{
tmp += node[i].w;
if(tmp < )
{
if(tmp < minn)
{
minn = tmp;
id = i;
}
}
}
len = id - cnt + ;
}
if(cnt > n)printf("-1\n");
else printf("%d\n",cnt);
}
}
ACM/ICPC 2018亚洲区预选赛北京赛站网络赛D-80 Days--------树状数组的更多相关文章
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 D 80 Days (线段树查询最小值)
题目4 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an interesting game based on Jules Ve ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛-B:Tomb Raider(二进制枚举)
时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Lara Croft, the fiercely independent daughter of a missing adv ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(尺取)题解
题意:n个城市,初始能量c,进入i城市获得a[i]能量,可能负数,去i+1个城市失去b[i]能量,问你能不能完整走一圈. 思路:也就是走的路上能量不能小于0,尺取维护l,r指针,l代表出发点,r代表当 ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛
题意:到一个城市得钱,离开要花钱.开始时有现金.城市是环形的,问从哪个开始,能在途中任意时刻金钱>=0; 一个开始指针i,一个结尾指针j.指示一个区间.如果符合条件++j,并将收益加入sum中( ...
- hihoCoder #1831 : 80 Days-RMQ (ACM/ICPC 2018亚洲区预选赛北京赛站网络赛)
水道题目,比赛时线段树写挫了,忘了RMQ这个东西了(捞) #1831 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an int ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A、Saving Tang Monk II 【状态搜索】
任意门:http://hihocoder.com/problemset/problem/1828 Saving Tang Monk II 时间限制:1000ms 单点时限:1000ms 内存限制:25 ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 B Tomb Raider 【二进制枚举】
任意门:http://hihocoder.com/problemset/problem/1829 Tomb Raider 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 L ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II(优先队列广搜)
#include<bits/stdc++.h> using namespace std; ; ; char G[maxN][maxN]; ]; int n, m, sx, sy, ex, ...
- 2018亚洲区预选赛北京赛站网络赛 D.80 Days 尺取
题面 题意:你带着K元要去n个城市,这n个城市是环形的,你可以选择任意一个起点,然后顺时针走,对于每个城市,到达时可以获得a元,但是从这里离开又需要花费b元,问你能否找到一个起点(输出花钱最少的那个) ...
随机推荐
- 洗礼灵魂,修炼python(90)-- 知识拾遗篇 —— 协程
协程 1.定义 协程,顾名思义,程序协商着运行,并非像线程那样争抢着运行.协程又叫微线程,一种用户态轻量级线程.协程就是一个单线程(一个脚本运行的都是单线程) 协程拥有自己的寄存器上下文和栈.协程调度 ...
- visual Studio 中使用正则表达式来进行查找替换
1.打开visual Studio 2. 通过菜单Edit -->Find and Replace -->Replace In File ,或者使用 ctrl + Shift + H ...
- 什么是JDK?什么是JRE?JDK与JRE的区别和用途
一.编程环境与运行环境 JDK(Java Development Kit)称为Java开发包或Java开发工具.是一个编写Java的Applet小程序和应用程序的程序开发环境.JDK是整个Java的核 ...
- Call to a member function display() on a non-object问题的解决
在使用ThinkPHP做项目的时候,出现了如下 的报错: 报错是Call to a member function display() on a non-object.我的代码是: 查看了ThinkP ...
- Java反射机制小结和实际操作
一.什么是反射 1.编译和运行 在了解什么是Java反射机制前,先聊聊Java的编译和运行. 还记得第一次使用记事本编写第一个Java程序的场景吗?通过命令窗口,使用javac命令编译一个.java文 ...
- 详解 JSONP跨域请求的实现
跨域问题是由于浏览器为了防止CSRF攻击(Cross-site request forgery跨站请求伪造),避免恶意攻击而带来的风险而采取的同源策略限制.当一个页面中使用XMLHTTPR ...
- echarts设置y轴值间隔
其中min.max可以自定义可以动态获取数据 yAxis : [ { type : 'value', axi ...
- 阿里云ECS配置踩坑之路
1.利用shadowsocks配置SVN(用于软件部署环境) 2.安全组设置 3.FTP搭建 https://www.cnblogs.com/hexige/p/7809481.html
- socket编程解决粘包和丢包问题
##socket 丢包粘包解决方式 采用固定头部长度(一般为4个字节),包头保存的是包体的长度 header+body 包头+包体 下面的例子不是按照上图中规定的格式编写的,但是思路都是一样的,先读出 ...
- 第一章 mysql的体系结构与存储引擎
数据库从逻辑上可以分为两部分,一部分负责存储即文件系统,这部分有个更时髦的名字叫存储引擎,存储引擎负责如何把数据以及索引相关的内容以合适的形式组织并存储到磁盘上.另一部分为server部分,负责和用户 ...