Codeforces Global Round 2 D. Frets On Fire (动态开点线段树,沙雕写法)
题目链接:D. Frets On Fire
思路:明明可以离散化+二分写,思路硬是歪到了线段树上,自闭了,真实弟弟,怪不得其他人过得那么快
只和查询的区间长度有关系,排完序如果相邻的两个点的差值小于等于查询的区间长度,那么给结果带来的变化就会新增差值个数,如果大于区间长度那么就会新增区间长度个数
维护的话,线段树和二分都可以,二分需要离散化处理,再给差值排个序,每次找到第一个大于当前区间长度的差值位置就好了,(没实现,但是理论上应该没问题)
线段树直接动态开点可以不用离散化。。
实现代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define mid ll m = (l + r) /2 const ll M = 1e5+10; #define ROF(i,a,b) for(ll i=a;i>=b;i--) ll sum[M*40],num[M*40]; ll ls[M*40],rs[M*40]; ll idx; void update(ll p,ll c,ll l,ll r,ll &rt){if(!rt) rt = ++idx;sum[rt] += c;num[rt] += 1;if(l == r){return ;}mid;if(p <= m) update(p,c,l,m,ls[rt]);else update(p,c,m+1,r,rs[rt]); }ll query(ll L,ll R,ll l,ll r,ll rt){if(L <= l&&R >= r){return sum[rt];}mid;ll ret = 0;if(L <= m) ret += query(L,R,l,m,ls[rt]);if(R > m) ret += query(L,R,m+1,r,rs[rt]);return ret; }ll ask(ll L,ll R,ll l,ll r,int rt){if(L <= l&&R >= r){return num[rt];}mid;ll ret = 0;if(L <= m) ret += ask(L,R,l,m,ls[rt]);if(R > m) ret += ask(L,R,m+1,r,rs[rt]);return ret; } ll a[2*M]; int main() {ll n,m,x,y,rt = 0;scanf("%lld",&n);for(ll i = 1;i <= n;i ++){scanf("%lld",&a[i]);}sort(a+1,a+1+n);for(ll i = 2;i <= n;i ++){ll num = a[i] - a[i-1];update(num,num,1,1e18,rt);}scanf("%lld",&m);for(ll i = 1;i <= m;i ++){scanf("%lld%lld",&x,&y);ll num = y-x+1;ll ans = num;ans += query(1,num,1,1e18,rt);//cout<<ans<<" ";ans += ask(num+1,1e18,1,1e18,rt)*num;printf("%lld\n",ans);} }
转载于:https://www.cnblogs.com/kls123/p/10663399.html
Codeforces Global Round 2 D. Frets On Fire (动态开点线段树,沙雕写法)相关推荐
- CodeForces - 960F[动态开点线段树优化dp]详解
题意:给一张有向图,每条边有边权与编号,求一条最长的路径,这条路径的边权与编号都是递增的.(编号指输入顺序) 首先我们回忆一下普通得LIS得做法:就是dp[i]以第i个结尾得最长上升子序列的长度,那么 ...
- codeforces G - Almost Increasing Array 动态规划、动态开点线段树
题意 给出一个序列,允许删除一个元素,并将任意元素的值修改为任意整数,问最少修改多少个元素使得序列变成严格单调递增的序列? 题解 这道题目很具有启发性: 不考虑删除元素,原数列各个数值减去他们下标得到 ...
- codeforces 915E - Physical Education Lessons 动态开点线段树
题意: 最大$10^9$的区间, $3*10^5$次区间修改,每次操作后求整个区间的和 题解: 裸的动态开点线段树,计算清楚数据范围是关键... 经过尝试 $2*10^7$会$MLE$ $10^7$会 ...
- LOJ #510. 「LibreOJ NOI Round #1」北校门外的回忆(倍增+动态开点线段树)
题目 这个题是一个精彩的分析性质区间离散的问题 真的详细 维护链真的一绝. LOJ\rm LOJLOJ最短ACCode\rm AC \ CodeAC Code #include<bits/std ...
- Codeforces Global Round 3
Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...
- Codeforces Global Round 1 晕阙记
Codeforces Global Round 1 晕阙记 我做这场比赛的时候晕得要死.做这三道题做太久了,rating涨不起来啊! A 如果愿意的话你可以看做是膜2意义下的运算,写快速幂等各种膜运算 ...
- Codeforces Global Round 14 F. Phoenix and Earthquake 思维 + 并查集
传送门 文章目录 题意: 思路: 题意: 给你nnn个点,mmm条边,限制xxx,每个点都有沥青aia_iai,定义合并两个点即两点之间有边且au+av≥xa_u+a_v\ge xau+av≥x ...
- Codeforces Global Round 1
Codeforces Global Round 1 题解:The Editorial of the First Codeforces Global Round A:其实mod 2计算一下就行了 B:删 ...
- 【Codeforces Global Round 23】B. Rebellion
Codeforces Global Round 23中B. Rebellion Codeforces比赛记录 文章目录 题目链接: 一.B. Rebellion 题目意思: 上思路: 总结 B. Re ...
最新文章
- jQuery数组处理详解(含实例演示)
- 用JavaScript来实现链表LinkedList
- Babel的配置和使用
- python界面颜色怎么改变_pycharm 界面风格修改
- 用Python实现一个1加到n求和功能的函数
- android 微信分享gif图,android后台动态创建图片并实现微信分享
- 避免在ConcurrentHashMap.computeIfAbsent()中进行递归
- methods vue过滤器 和_数据动态过滤技巧在 Vue 项目中的实践
- jquery的全选代码
- 设计模式原则之二:开闭原则
- maven依赖和传递
- CSDN下载积分的获取方式
- Cesium gltf(1.70)三维人物动画制作
- 形式语言与自动机 3.正则表达式
- win10删除右键菜单多余项
- 智慧实验室综合安全管理系统(高校版)、危化品管理、设备预约等
- 更改ip地址的软件多少钱一个月_武汉社保代缴多少钱一个月?武汉社保一个月交多少钱?...
- iOS 相机拍照、相册获取照片(仿微信) 一一 拍照、图片裁剪
- 车载毫米波雷达信号处理中的模糊问题
- IAR指定FLASH地址定义常量
热门文章
- java去掉字符串中前后空格函数_Java去除字符串中的空格
- 用友U9执行JS代码。
- pyspider爬虫框架
- Robbers' watch CodeForces - 685A (暴力)
- 点分治经典_动态点分治
- element table 组件内容换行方案
- Linux中拷贝和移动文件
- ReactNative——打包发布
- web.xml上监听器作用
- Quick cocos2dx-Lua(V3.3R1)学习笔记(十)-----搭建安卓打包环境,用官方示例anysdk生成apk运行...