5016: [Snoi2017]一个简单的询问

Time Limit: 30 Sec  Memory Limit: 512 MB
Submit: 87  Solved: 64
[Submit][Status][Discuss]

Description

给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出
get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次。

Input

第一行,一个数字N,表示序列长度。
第二行,N个数字,表示a1~aN
第三行,一个数字Q,表示询问个数。
第4~Q+3行,每行四个数字l1,r1,l2,r2,表示询问。
N,Q≤50000
N1≤ai≤N
1≤l1≤r1≤N
1≤l2≤r2≤N
注意:答案有可能超过int的最大值

Output

对于每组询问,输出一行一个数字,表示答案

Sample Input

5
1 1 1 1 1
2
1 2 3 4
1 1 4 4

Sample Output

4
1

把每个问题拆成四个问题,这样就可以O(1)转,直接莫队吧

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
#define LL long long
int pos[50005];
typedef struct Que
{int l, r;int c, id;bool operator < (const Que &b) const{if(pos[l]<pos[b.l] || pos[l]==pos[b.l] && r<b.r)return 1;return 0;}
}Que;
Que s[200005];
int a[50005];
LL ans[50005], sl[50005], sr[50005];
int main(void)
{LL val;int B, cnt, n, q, i, l1, l2, r1, r2, L, R;scanf("%d", &n);for(i=1;i<=n;i++)scanf("%d", &a[i]);B = sqrt(1.0*n)+1, cnt = 0;scanf("%d", &q);for(i=1;i<=q;i++){scanf("%d%d%d%d", &l1, &r1, &l2, &r2);s[++cnt].id = i, s[cnt].c = 1, s[cnt].l = r1, s[cnt].r = r2;s[++cnt].id = i, s[cnt].c = 1, s[cnt].l = l1-1, s[cnt].r = l2-1;s[++cnt].id = i, s[cnt].c = -1, s[cnt].l = l1-1, s[cnt].r = r2;s[++cnt].id = i, s[cnt].c = -1, s[cnt].l = l2-1, s[cnt].r = r1;}R = 1, L = 0;for(i=1;i<=n;i++){L++;pos[i] = R;if(L==B)R++, L = 0;}val = L = R = 0;sort(s+1, s+cnt+1);for(i=1;i<=cnt;i++){while(L<s[i].l)val += sr[a[++L]], sl[a[L]]++;while(L>s[i].l)val -= sr[a[L]], sl[a[L--]]--;while(R<s[i].r)val += sl[a[++R]], sr[a[R]]++;while(R>s[i].r)val -= sl[a[R]], sr[a[R--]]--;ans[s[i].id] += val*s[i].c;}for(i=1;i<=q;i++)printf("%lld\n", ans[i]);return 0;
}
/*
5
1 1 1 1 1
7
1 5 1 5
2 2 1 1
2 4 3 5
1 3 2 4
1 3 3 5
1 4 2 5
1 5 5 5
*/

bzoj 5016: [Snoi2017]一个简单的询问(莫队)相关推荐

  1. 【bzoj5016】[Snoi2017]一个简单的询问 莫队算法

    题目描述 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出 get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次. 输入 第一行,一个数字N,表 ...

  2. [ NOIP提高组 2016]愤怒的小鸟(暴搜 + 状压DP)// [SNOI2017]一个简单的询问(莫队)

    一次性写两道题 T1:一个简单的询问 题目 题解 代码实现 T2:愤怒的小鸟 题目 暴搜题解 暴搜代码实现 状压DP题解 状压DP代码实现 T1:一个简单的询问 题目 给你一个长度为 N 的序列 ai ...

  3. P5268-[SNOI2017]一个简单的询问【莫队】

    正题 题目链接:https://www.luogu.com.cn/problem/P5268 题目大意 nnn个数的一个序列,定义get(l1,r1,x)get(l_1,r_1,x)get(l1​,r ...

  4. 【BZOJ3781】小B的询问 莫队

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  5. 【luogu1709】小B的询问 - 莫队

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  6. BZOJ 3781: 小B的询问 [莫队]

    求区间每种颜色出现次数平方和 写裸题练手 #include <iostream> #include <cstdio> #include <algorithm> #i ...

  7. P2709 小B的询问 莫队入门

    题目描述 小B 有一个长为 n 的整数序列 a,值域为 [1,k]. 他一共有 m 个询问,每个询问给定一个区间 [l,r],求: sigma(i=1-k)ci^2 其中 ci​ 表示数字 i 在 [ ...

  8. [BZOJ 3236] [Ahoi2013] 作业 [BZOJ 3809] 【莫队(+分块)】

    题目链接: BZOJ - 3236   BZOJ - 3809 算法一:莫队 首先,单纯的莫队算法是很好想的,就是用普通的第一关键字为 l 所在块,第二关键字为 r 的莫队. 这样每次端点移动添加或删 ...

  9. 牛客练习赛10 F-序列查询(莫队+链表)

    F-序列查询 v5zsq题解 假设数字xxx在区间[l,r]种出现y次,那么包含x的子区间个数为2r−l+1−y⋅(2y−1)2^{r-l+1-y}·(2^y-1)2r−l+1−y⋅(2y−1),因此 ...

最新文章

  1. Java的Redis连接池代码性能不错
  2. Linux中查看版本信息命令介绍
  3. Codeforces 848C. Goodbye Souvenir
  4. tensorflow2 tensorboard可视化使用
  5. mysql 8小时问题_Mysql经典的“8小时问题”
  6. Java LocalDate类| ofYearDay()方法与示例
  7. dedecms右侧悬浮_织梦dedecms网站上添加漂浮广告
  8. 诗与远方:无题(九十一)
  9. Redmi K30S更多细节曝光:骁龙865加持 提供多款配色
  10. 工具包:Safetype Config使用
  11. 如何帮助企业把风控做得更好?(续篇)
  12. IDEA 导入cordova3.5工程目录注意事项
  13. bzoj 2243: [SDOI2011]染色 线段树区间合并+树链剖分
  14. 阿里云服务器端口请求失败(在控制台把端口添加到服务器的安全组)
  15. maven创建web工程,完善目录结构时出现HttpServlet等类的找不到的bug
  16. html页面上传图片回显,html js 上传图片并回显
  17. 图像处理——matlab人脸识别(1)
  18. uploadify 302 php,jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
  19. 深度linux时间.年日调整,deepin深度商店中的Linux版应用体验分享(一)
  20. 利用shell遍历文件夹下所有文件

热门文章

  1. 简单python脚本实例-对Python实现简单的API接口实例讲解
  2. python入门先学什么-学习python需要什么基础
  3. 语音识别_qq语音识别_js语音识别 - 云+社区 - 腾讯云
  4. 润乾报表鼠标移动行、单元格变色
  5. xampp 支持pdo mysql_XAMPP PDO Mysql server连接配置
  6. vue(vue-cli+vue-router)+babel+webpack项目搭建入门(四)
  7. 【python笔记】python基础(注释,缩进,变量,表达式,运算符)
  8. Sublime Text3 Emmet用法
  9. 【软考】程序设计语言复习指南
  10. 【CCCC】L3-007 天梯地图 (30分),两次Dijkstra+路径打印(数据点2,4错因),90行最短题解