D. Frets On Fire 前缀和+二分
这个题真的难了我一天了,这种方法一开始没想出来,后来看了题解后明白了大致思路开始自己做但是!!!但是自己实现的时候老是一些细节出错!!!,调bug调了得有一个小时,蠢死了,这道题我一定要好好总结,总结为什么会卡壳,这要是比赛的签到题的话我得哭死!!!!!
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+;
unsigned long long a[maxn];
unsigned long long c[maxn];
unsigned long long sum[maxn];
set<unsigned long long> s;
int main()
{
int n;
cin>>n;
for(int i=; i<=n; i++)
{
unsigned long long t;
cin>>t;
s.insert(t);
}
int cnt=;
for(auto i:s)
a[++cnt]=i;
for(int i=; i<=cnt-; i++)
c[i]=a[i+]-a[i];
cnt--;
sort(c+,c++cnt);
for(int i=; i<=cnt; i++)
sum[i]=sum[i-]+c[i];
int q;
cin>>q;
while(q--)
{
unsigned long long l,r;
cin>>l>>r;
unsigned long long t=r-l;
unsigned long long pos;
unsigned long long ans=;
pos=upper_bound(c+,c++cnt,t)-c;
ans+=+t;
ans+=(sum[pos-]);
ans+=(cnt-pos+)*(t+);
cout<<ans<<endl;
} }
读题之后我的最直接的思路是把这n个数,去重排序,然后是比较两两之间的长度与r-l的区间长度的关系然后一直累加出答案。如下超时代码。
我应该要注意到这两两之间的差值也是可以排序的,排完序之后只要在小于等于r-l的区间长度的都是我下面if语句的第一条,大于r-l区间长度的都是else语句的内容,这个判断可以二分来实现,同时对于小于等于区间长度的可以用预先求出前缀和来快速计算。
#include<bits/stdc++.h>
using namespace std;
set<unsigned long long> s;
const int maxn=1e5+;
unsigned long long a[maxn];
unsigned long long b[maxn];
int main()
{
int n;
cin>>n;
for(int i=; i<=n; i++)
cin>>a[i];
int q;
cin>>q;
while(q--)
{
unsigned long long l,r;
s.clear();
memset(b,,sizeof(b));
cin>>l>>r;
for(int i=; i<=n; i++)
s.insert(a[i]+l);
unsigned long long t=r-l;
int cnt=;
for(auto i:s)
b[++cnt]=i;
unsigned long long ans=;
for(int i=; i<=cnt-; i++)
{
if((b[i]+t)>=b[i+])
ans+=b[i+]-b[i];
else
ans+=t+;
}
ans+=t+;
printf("%lld\n",ans); }
}
D. Frets On Fire 前缀和+二分的更多相关文章
- cf1119d Frets On Fire 前缀和+二分
题目:http://codeforces.com/problemset/problem/1119/D 题意:给一个数n,给出n个数组的第一个数(a[0]=m,a[1]=m+1,a[2]=m+2,... ...
- D. Frets On Fire 【二分,前缀和】 (Codeforces Global Round 2)
题目传送门:http://codeforces.com/contest/1119/problem/D D. Frets On Fire time limit per test 1.5 seconds ...
- Codeforces Global Round 2 D. Frets On Fire (动态开点线段树,沙雕写法)
题目链接:D. Frets On Fire 思路:明明可以离散化+二分写,思路硬是歪到了线段树上,自闭了,真实弟弟,怪不得其他人过得那么快 只和查询的区间长度有关系,排完序如果相邻的两个点的差值小于等 ...
- Glider(前缀和+二分)
题目链接:Glider Gym-101911B 解题分析:下落的高度一定,是h.在没有气流的地方每秒下落1:所以可以转化为经过无气流地带的时间总长为h. 那么很显然从一个有气流地带的开始,选择下落,那 ...
- Acwing:102. 最佳牛围栏(前缀和 + 二分)
农夫约翰的农场由 NN 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头. 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最 ...
- Codeforces 975 前缀和二分算存活人数 思维离直线速度相同判平行
A /* Huyyt */ #include <bits/stdc++.h> using namespace std; typedef long long ll; ]; ]; map< ...
- Codeforces 948 数论推导 融雪前缀和二分check 01字典树带删除
A. 全部空的放狗 B. 先O(NLOGNLOGN)处理出一个合数质因数中最大的质数是多少 因为p1 x1 x2的关系是 x2是p在x1之上的最小倍数 所以x1的范围是[x2-p+1,x2-1]要使最 ...
- cf-Global Round2-D. Frets On Fire(二分)
题目链接:http://codeforces.com/contest/1119/problem/D 题意:给n(<=1e5)个数s[i],i=1..n,(0<=s[i]<=1e18) ...
- Educational Codeforces Round 11 C. Hard Process 前缀和+二分
题目链接: http://codeforces.com/contest/660/problem/C 题意: 将最多k个0变成1,使得连续的1的个数最大 题解: 二分连续的1的个数x.用前缀和判断区间[ ...
随机推荐
- C++变量/函数命名规范
## 参照Google C++编程规范之变量命名 1. 变量 变量名一律小写,单词间以下划线相连.类的成员变量以下划线结尾. 普通变量命名 举例: string window_name; // OK ...
- 20165221 《网络对抗技术》EXP2:后门原理与实践
20165221 <网络对抗技术>EXP2:后门原理与实践 实验任务 任务一:使用netcat获取主机操作Shell,cron启动 (0.5分) 任务二:使用socat获取主机操作Shel ...
- nginx unit PHP
2018-12-26 14:20:33 星期三 综述: nginx unit php 的关系: nginx -> 转发请求到 8300端口 -> unit 转发 8300 收到的请求 -& ...
- WPF 10天修炼 第十天- WPF数据绑定
WPF数据绑定 数据绑定到元素属性是将源对象指定为一个WPF元素,并且源属性是一个依赖属性,依赖属性内置了变更通知.当改变源对象依赖属性值之后,绑定目标可以立即得到更新,开发人员不需要手动编写响应事件 ...
- 安装kafka过程及出现的问题解决
第一步:下载kafka安装包 下载地址:http://kafka.apache.org/downloads 解压 到/usr/local 目录 tar -zxvf kafka_2.12-2.2.0 第 ...
- Uni-app事件处理
事件表: Web事件 uni-app事件 click tap touchstart touchstart touchmove touchmove touchcancel touchcancel tou ...
- JavaScript代码规范
变量名:驼峰命名法(首单词小写,后面每个单词首字母大写) firstName = "John"; lastName = "Doe"; price = 19.90 ...
- 软件工程作业-(third)
1.选题目(1) 最大连续子数组和(最大子段和) 问题:给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值. ...
- selenium自动化测试在富文本中输入信息的方法
第一次用selenium+python编写自动测试脚本,因为页面中插入了富文本编辑,开始怎么都无法输入进去,度娘好多方法都无效,分享踩坑的经历一是为了记录一下自己的成长,二是为了给同样摸索seleni ...
- 使用 Appium 测试微信小程序 Webview
打开调试功能 通过微信打开debugx5.qq.com,或者直接扫下面二维码 勾选[打开TBS内核Inspector调试功能] Chrome查看页面元素 手机连接电脑,查看是否连接成功.如下展 ...