HDU6534 Chika and Friendly Pairs

莫队,树状数组的简单题

#include<bits/stdc++.h>

using namespace std;

const int maxn = 30005;
const int maxq = 27005;
int n, m, k, num, sz, len;
int a[maxn], belong[maxn], t[maxn], tree[maxn], ans[maxq];
int lowerl[maxn], lowerr[maxn], lower[maxn];
struct Q{
int l ,r, id;
}query[maxq]; int cmp(Q a, Q b){
return (belong[a.l] ^ belong[b.l]) ? belong[a.l] < belong[b.l] : ((belong[a.l] & 1) ? a.r < b.r : a.r > b.r);
}
void init()
{
for(int i = 1; i <= n; i++) t[i] = a[i];
sort(t + 1, t + n + 1);
len = unique(t + 1, t + n + 1) - (t + 1);
for(int i = 0; i <= len; i++) tree[i] = 0;
}
int _hash(int x)
{
return lower_bound(t + 1, t + len + 1, x) - t;
}
inline int lowbit(int x){return x & (-x);}
void update(int pos, int x)
{
if(pos < 1) return;
while(pos <= len + 1){
tree[pos] += x;
pos += lowbit(pos);
}
}
int query_ans(int pos)
{
int ret = 0;
while(pos >= 1){
ret += tree[pos];
pos -= lowbit(pos);
}
return ret;
}
int main()
{
while(~scanf("%d%d%d", &n, &m, &k)){
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
sz = sqrt(n);
num = ceil((double)n / sz);
for(int i = 1; i <= num; i++){
for(int j = (i - 1) * sz + 1; j <= i * sz && j <= n; j++){
belong[j] = i;
}
}
for(int i = 1; i <= m; i++){
scanf("%d%d", &query[i].l, &query[i].r);
query[i].id = i;
}
init();
sort(query + 1, query + m + 1, cmp); int l = 1, r = 0;
int now = 0; for(int i = 1; i <= n; i++){
lowerl[i] = _hash(a[i] - k);
lowerr[i] = _hash(a[i] + k);
lower[i] = _hash(a[i]);
} for(int i = 1; i <= m; i++){
int ql = query[i].l, qr = query[i].r;
while(l < ql){
int lid = lowerl[l], rid = lowerr[l], id = lower[l];
lid--;
if(t[rid] > a[l] + k) rid--; update(id, -1);
now -= (query_ans(rid) - query_ans(lid));
l++;
}
while(l > ql){
l--;
int lid = lowerl[l], rid = lowerr[l], id = lower[l];
lid--;
if(t[rid] > a[l] + k) rid--;
now += (query_ans(rid) - query_ans(lid));
update(id, 1); }
while(r < qr){
r++;
int lid = lowerl[r], rid = lowerr[r], id = lower[r];
lid--;
if(t[rid] > a[r] + k) rid--; now += (query_ans(rid) - query_ans(lid));
update(id, 1); }
while(r > qr){
int lid = lowerl[r], rid = lowerr[r], id = lower[r];
lid--;
if(t[rid] > a[r] + k) rid--; update(id, -1);
now -= (query_ans(rid) - query_ans(lid));
r--;
}
ans[query[i].id] = now;
}
for(int i = 1; i <= m; i++){
printf("%d\n", ans[i]);
}
}
return 0;
}

HDU6534 Chika and Friendly Pairs(莫队,树状数组)的更多相关文章

  1. 51nod 1290 Counting Diff Pairs | 莫队 树状数组

    51nod 1290 Counting Diff Pairs | 莫队 树状数组 题面 一个长度为N的正整数数组A,给出一个数K以及Q个查询,每个查询包含2个数l和r,对于每个查询输出从A[i]到A[ ...

  2. bzoj3236 作业 莫队+树状数组

    莫队+树状数组 #include<cstdio> #include<cstring> #include<iostream> #include<algorith ...

  3. BZOJ_3289_Mato的文件管理_莫队+树状数组

    BZOJ_3289_Mato的文件管理_莫队+树状数组 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号 .为了防止他人 ...

  4. BZOJ3236[Ahoi2013]作业——莫队+树状数组/莫队+分块

    题目描述 输入 输出 样例输入 3 4 1 2 2 1 2 1 3 1 2 1 1 1 3 1 3 2 3 2 3 样例输出 2 2 1 1 3 2 2 1 提示 N=100000,M=1000000 ...

  5. COGS.1822.[AHOI2013]作业(莫队 树状数组/分块)

    题目链接: COGS.BZOJ3236 Upd: 树状数组实现的是单点加 区间求和,采用值域分块可以\(O(1)\)修改\(O(sqrt(n))\)查询.同BZOJ3809. 莫队为\(O(n^{1. ...

  6. bzoj 3289: Mato的文件管理 莫队+树状数组

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Mato同学 ...

  7. 【BZOJ3460】Jc的宿舍(树上莫队+树状数组)

    点此看题面 大致题意: 一棵树,每个节点有一个人,他打水需要\(T_i\)的时间,每次询问两点之间所有人去打水的最小等待时间. 伪·强制在线 这题看似强制在线,但实际上,\(pre\ mod\ 2\) ...

  8. HihoCoder 1488 : 排队接水(莫队+树状数组)

    描述 有n个小朋友需要接水,其中第i个小朋友接水需要ai分钟. 由于水龙头有限,小Hi需要知道如果为第l个到第r个小朋友分配一个水龙头,如何安排他们的接水顺序才能使得他们等待加接水的时间总和最小. 小 ...

  9. BZOJ 3236 莫队+树状数组

    思路: 莫队+树状数组 (据说此题卡常数) yzy写了一天(偷笑) 复杂度有点儿爆炸 O(msqrt(n)logn) //By SiriusRen #include <cmath> #in ...

  10. BZOJ 3236: [Ahoi2013]作业(莫队+树状数组)

    传送门 解题思路 莫队+树状数组.把求\([a,b]\)搞成前缀和形式,剩下的比较裸吧,用\(cnt\)记一下数字出现次数.时间复杂度\(O(msqrt(n)log(n)\),莫名其妙过了. 代码 # ...

随机推荐

  1. RabbitMQ入门教程(十):队列声明queueDeclare

    原文:RabbitMQ入门教程(十):队列声明queueDeclare 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ...

  2. LeetCode题目(python)

    1.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样 ...

  3. node.js 设置静态文件托管

    1.在app.js文件中设置静态文件托管 /*应用程序入口文件*/ /*加载express模块*/ var express = require('express'); /*加载模板处理模块*/ var ...

  4. python 实现屏幕录制

    用python实现屏幕录制 PIL 即pollow 的安装命令如下: pip install pillow 其中cv2的安装是下面这条命令 pip install opencv-python 代码实现 ...

  5. GDAL联合OpenCV进行图像处理

    作为一名图像处理方面的工程师,在面对大数据量的遥感影像时,往往会利用到强大的GDAL库,但是GDAL库却没有方面的算法函数进一步进行处理:同时我们看到Opencv库能提供强大的算法支持,却对大数据影像 ...

  6. 用python实现简单的计算器(加减乘除小括号等)

    需求:实现能计算类似 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) ...

  7. UI 设计中的渐变

    简评: 渐变是通过两种或多种不同的色彩来绘制一个元素,同时在颜色的交界处进行衰减变化的一种设计.从拟物到扁平再到渐变,人们慢慢发现它能创造出从未有过的一种色彩感觉 -- 独特.现代和清爽.(本文译者@ ...

  8. 二、Ubuntu16.04安装搜狗wps

    1.搜狗: 安装搜狗输入法,下载地址:http://pinyin.sogou.com/linux/(搜索官网下载及安装方法),deb安装方法类似Windows的exe安装,安装后重启生效. 2.wps ...

  9. squid之------基础知识

    squid是什么? 缓存服务器,即用来存储(内存及硬盘)用户访问的网页.图片.文件等等信息的专用服务器,这种服务器不仅可以使用户最快的得到他们想要的信息,而且大大减少了网络传输的数据量,缓存服务器经常 ...

  10. 「LCT」

    终于在多篇题解和我的个人超常发挥下抄完了lct的所有题,kx死了. 理解 在我看来,实际上lct的板子没有什么考的,更重要的可能是起到一个数据结构的维护作用实际上就是出题人想给你找点乐子. 前几道题都 ...