题目链接: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 (动态开点线段树,沙雕写法)相关推荐

  1. CodeForces - 960F[动态开点线段树优化dp]详解

    题意:给一张有向图,每条边有边权与编号,求一条最长的路径,这条路径的边权与编号都是递增的.(编号指输入顺序) 首先我们回忆一下普通得LIS得做法:就是dp[i]以第i个结尾得最长上升子序列的长度,那么 ...

  2. codeforces G - Almost Increasing Array 动态规划、动态开点线段树

    题意 给出一个序列,允许删除一个元素,并将任意元素的值修改为任意整数,问最少修改多少个元素使得序列变成严格单调递增的序列? 题解 这道题目很具有启发性: 不考虑删除元素,原数列各个数值减去他们下标得到 ...

  3. codeforces 915E - Physical Education Lessons 动态开点线段树

    题意: 最大$10^9$的区间, $3*10^5$次区间修改,每次操作后求整个区间的和 题解: 裸的动态开点线段树,计算清楚数据范围是关键... 经过尝试 $2*10^7$会$MLE$ $10^7$会 ...

  4. LOJ #510. 「LibreOJ NOI Round #1」北校门外的回忆(倍增+动态开点线段树)

    题目 这个题是一个精彩的分析性质区间离散的问题 真的详细 维护链真的一绝. LOJ\rm LOJLOJ最短ACCode\rm AC \ CodeAC Code #include<bits/std ...

  5. Codeforces Global Round 3

    Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...

  6. Codeforces Global Round 1 晕阙记

    Codeforces Global Round 1 晕阙记 我做这场比赛的时候晕得要死.做这三道题做太久了,rating涨不起来啊! A 如果愿意的话你可以看做是膜2意义下的运算,写快速幂等各种膜运算 ...

  7. Codeforces Global Round 14 F. Phoenix and Earthquake 思维 + 并查集

    传送门 文章目录 题意: 思路: 题意: 给你nnn个点,mmm条边,限制xxx,每个点都有沥青aia_iai​,定义合并两个点即两点之间有边且au+av≥xa_u+a_v\ge xau​+av​≥x ...

  8. Codeforces Global Round 1

    Codeforces Global Round 1 题解:The Editorial of the First Codeforces Global Round A:其实mod 2计算一下就行了 B:删 ...

  9. 【Codeforces Global Round 23】B. Rebellion

    Codeforces Global Round 23中B. Rebellion Codeforces比赛记录 文章目录 题目链接: 一.B. Rebellion 题目意思: 上思路: 总结 B. Re ...

最新文章

  1. jQuery数组处理详解(含实例演示)
  2. 用JavaScript来实现链表LinkedList
  3. Babel的配置和使用
  4. python界面颜色怎么改变_pycharm 界面风格修改
  5. 用Python实现一个1加到n求和功能的函数
  6. android 微信分享gif图,android后台动态创建图片并实现微信分享
  7. 避免在ConcurrentHashMap.computeIfAbsent()中进行递归
  8. methods vue过滤器 和_数据动态过滤技巧在 Vue 项目中的实践
  9. jquery的全选代码
  10. 设计模式原则之二:开闭原则
  11. maven依赖和传递
  12. CSDN下载积分的获取方式
  13. Cesium gltf(1.70)三维人物动画制作
  14. 形式语言与自动机 3.正则表达式
  15. win10删除右键菜单多余项
  16. 智慧实验室综合安全管理系统(高校版)、危化品管理、设备预约等
  17. 更改ip地址的软件多少钱一个月_武汉社保代缴多少钱一个月?武汉社保一个月交多少钱?...
  18. iOS 相机拍照、相册获取照片(仿微信) 一一 拍照、图片裁剪
  19. 车载毫米波雷达信号处理中的模糊问题
  20. IAR指定FLASH地址定义常量

热门文章

  1. java去掉字符串中前后空格函数_Java去除字符串中的空格
  2. 用友U9执行JS代码。
  3. pyspider爬虫框架
  4. Robbers' watch CodeForces - 685A (暴力)
  5. 点分治经典_动态点分治
  6. element table 组件内容换行方案
  7. Linux中拷贝和移动文件
  8. ReactNative——打包发布
  9. web.xml上监听器作用
  10. Quick cocos2dx-Lua(V3.3R1)学习笔记(十)-----搭建安卓打包环境,用官方示例anysdk生成apk运行...