bzoj 5016: [Snoi2017]一个简单的询问(莫队)
5016: [Snoi2017]一个简单的询问
Time Limit: 30 Sec Memory Limit: 512 MB
Submit: 87 Solved: 64
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
把每个问题拆成四个问题,这样就可以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]一个简单的询问(莫队)相关推荐
- 【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
题目描述 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出 get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次. 输入 第一行,一个数字N,表 ...
- [ NOIP提高组 2016]愤怒的小鸟(暴搜 + 状压DP)// [SNOI2017]一个简单的询问(莫队)
一次性写两道题 T1:一个简单的询问 题目 题解 代码实现 T2:愤怒的小鸟 题目 暴搜题解 暴搜代码实现 状压DP题解 状压DP代码实现 T1:一个简单的询问 题目 给你一个长度为 N 的序列 ai ...
- P5268-[SNOI2017]一个简单的询问【莫队】
正题 题目链接:https://www.luogu.com.cn/problem/P5268 题目大意 nnn个数的一个序列,定义get(l1,r1,x)get(l_1,r_1,x)get(l1,r ...
- 【BZOJ3781】小B的询问 莫队
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- 【luogu1709】小B的询问 - 莫队
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- BZOJ 3781: 小B的询问 [莫队]
求区间每种颜色出现次数平方和 写裸题练手 #include <iostream> #include <cstdio> #include <algorithm> #i ...
- P2709 小B的询问 莫队入门
题目描述 小B 有一个长为 n 的整数序列 a,值域为 [1,k]. 他一共有 m 个询问,每个询问给定一个区间 [l,r],求: sigma(i=1-k)ci^2 其中 ci 表示数字 i 在 [ ...
- [BZOJ 3236] [Ahoi2013] 作业 [BZOJ 3809] 【莫队(+分块)】
题目链接: BZOJ - 3236 BZOJ - 3809 算法一:莫队 首先,单纯的莫队算法是很好想的,就是用普通的第一关键字为 l 所在块,第二关键字为 r 的莫队. 这样每次端点移动添加或删 ...
- 牛客练习赛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),因此 ...
最新文章
- Java的Redis连接池代码性能不错
- Linux中查看版本信息命令介绍
- Codeforces 848C. Goodbye Souvenir
- tensorflow2 tensorboard可视化使用
- mysql 8小时问题_Mysql经典的“8小时问题”
- Java LocalDate类| ofYearDay()方法与示例
- dedecms右侧悬浮_织梦dedecms网站上添加漂浮广告
- 诗与远方:无题(九十一)
- Redmi K30S更多细节曝光:骁龙865加持 提供多款配色
- 工具包:Safetype Config使用
- 如何帮助企业把风控做得更好?(续篇)
- IDEA 导入cordova3.5工程目录注意事项
- bzoj 2243: [SDOI2011]染色 线段树区间合并+树链剖分
- 阿里云服务器端口请求失败(在控制台把端口添加到服务器的安全组)
- maven创建web工程,完善目录结构时出现HttpServlet等类的找不到的bug
- html页面上传图片回显,html js 上传图片并回显
- 图像处理——matlab人脸识别(1)
- uploadify 302 php,jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
- 深度linux时间.年日调整,deepin深度商店中的Linux版应用体验分享(一)
- 利用shell遍历文件夹下所有文件
热门文章
- 简单python脚本实例-对Python实现简单的API接口实例讲解
- python入门先学什么-学习python需要什么基础
- 语音识别_qq语音识别_js语音识别 - 云+社区 - 腾讯云
- 润乾报表鼠标移动行、单元格变色
- xampp 支持pdo mysql_XAMPP PDO Mysql server连接配置
- vue(vue-cli+vue-router)+babel+webpack项目搭建入门(四)
- 【python笔记】python基础(注释,缩进,变量,表达式,运算符)
- Sublime Text3 Emmet用法
- 【软考】程序设计语言复习指南
- 【CCCC】L3-007 天梯地图 (30分),两次Dijkstra+路径打印(数据点2,4错因),90行最短题解