loj #2254. 「SNOI2017」一个简单的询问
#2254. 「SNOI2017」一个简单的询问
题目描述
给你一个长度为 NNN 的序列 aia_iai,1≤i≤N1\leq i\leq N1≤i≤N,和 qqq 组询问,每组询问读入 l1,r1,l2,r2l_1,r_1,l_2,r_2l1,r1,l2,r2,需输出
∑x=0∞get(l1,r1,x)⋅get(l2,r2,x) \sum\limits_{x=0}^\infty \text{get}(l_1,r_1,x)\cdot \text{get}(l_2,r_2,x)x=0∑∞get(l1,r1,x)⋅get(l2,r2,x)
get(l,r,x) \text{get}(l,r,x)get(l,r,x) 表示计算区间 [l,r][l,r][l,r] 中,数字 xxx 出现了多少次。
输入格式
第一行,一个数字 NNN,表示序列长度。
第二行,NNN 个数字,表示 a1∼aNa_1\sim a_Na1∼aN。
第三行,一个数字 QQQ,表示询问个数。
第 4∼Q+34\sim Q+34∼Q+3 行,每行四个数字 l1,r1,l2,r2l_1,r_1,l_2,r_2l1,r1,l2,r2,表示询问。
输出格式
对于每组询问,输出一行一个数字,表示答案。
样例
样例输入
5
1 1 1 1 1
2
1 2 3 4
1 1 4 4
样例输出
4
1
数据范围与提示
对于 20%20\%20% 的数据,1≤N,Q≤10001\leq N,Q\leq 10001≤N,Q≤1000;
对于另外 30%30\%30% 的数据,1≤ai≤501\leq a_i\leq 501≤ai≤50;
对于 100%100\%100% 的数据,N,Q≤50000N,Q\leq 50000N,Q≤50000,1≤ai≤N1\leq a_i\leq N1≤ai≤N,1≤l1≤r1≤N1\leq l_1\leq r_1\leq N1≤l1≤r1≤N,1≤l2≤r2≤N1\leq l_2\leq r_2\leq N1≤l2≤r2≤N。
数据范围与原题相同,但测试数据由本站会员自制,并非原数据。
时限已按照评测机速度调整,原题时限为 2000 ms,省选评测时调整为 4000 ms,这里按 4000 ms 调整。
注意:答案有可能超过 int 的最大值。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 50010
using namespace std;
int n,a[maxn],b[maxn],l1,r1,l2,r2,mx,cnt[maxn][],num;
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) {
scanf("%d",&a[i]);
b[i]=a[i];
}
sort(b+,b+n+);
num=unique(b+,b+n+)-b-;
for(int i=;i<=n;i++)
a[i]=lower_bound(b+,b+num+,a[i])-b;
int T;scanf("%d",&T);
while(T--){
scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
memset(cnt,,sizeof(cnt));
for(int i=l1;i<=r1;i++)cnt[a[i]][]++;
for(int i=l2;i<=r2;i++)cnt[a[i]][]++;
long long ans=;
for(int i=;i<=num;i++)ans+=1LL*cnt[i][]*cnt[i][];
cout<<ans<<endl;
}
return ;
}
80分 暴力
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define maxn 50010
using namespace std;
int n,block[maxn],sz,a[maxn],num1[maxn],num2[maxn],m,tot,L,R;
long long res=,Ans[maxn];
struct node{
int l,r,id,ad;
bool operator < (const node &b)const{
if(block[l]==block[b.l])return r<b.r;
return l<b.l;
}
}q[maxn*];
int main(){
scanf("%d",&n);sz=sqrt(n);
for(int i=;i<=n;i++)block[i]=(i-)/sz+;
for(int i=;i<=n;i++)scanf("%d",&a[i]);
scanf("%d",&m);
int l1,l2,r1,r2;
for(int i=;i<=m;i++){
scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
q[++tot]=(node){r1,r2,i,};
q[++tot]=(node){r1,l2-,i,-};
q[++tot]=(node){l1-,r2,i,-};
q[++tot]=(node){l1-,l2-,i,};
}
sort(q+,q+tot+);
for(int i=;i<=tot;i++){
while(L<q[i].l)L++,res+=num2[a[L]],++num1[a[L]];
while(L>q[i].l)res-=num2[a[L]],--num1[a[L]],--L;
while(R<q[i].r)++R,res+=num1[a[R]],++num2[a[R]];
while(R>q[i].r)res-=num1[a[R]],--num2[a[R]],--R;
Ans[q[i].id]+=q[i].ad*res;
}
for(int i=;i<=m;i++)cout<<Ans[i]<<endl;
return ;
}
100分 莫队
loj #2254. 「SNOI2017」一个简单的询问的更多相关文章
- 「SNOI2017」一个简单的询问
「SNOI2017」一个简单的询问 简单的解法 显然可以差分一下. \[get(l,r,x)\times get(l1,r1,x)=get(1,r,x) \times get(1,r1,x)-get( ...
- loj2254 「SNOI2017」一个简单的询问
ref #include <algorithm> #include <iostream> #include <cstdio> #include <cmath& ...
- loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点
loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点 链接 loj 思路 用交错关系建出图来,发现可以直接缩点,拓扑统计. 完了吗,不,瓶颈在于边数太多了,线段树优化建图. 细节 ...
- loj #2255. 「SNOI2017」炸弹
#2255. 「SNOI2017」炸弹 题目描述 在一条直线上有 NNN 个炸弹,每个炸弹的坐标是 XiX_iXi,爆炸半径是 RiR_iRi,当一个炸弹爆炸时,如果另一个炸弹所在位置 X ...
- LOJ——#2256. 「SNOI2017」英雄联盟
https://loj.ac/problem/2256 题目描述 正在上大学的小皮球热爱英雄联盟这款游戏,而且打的很菜,被网友们戏称为「小学生」.现在,小皮球终于受不了网友们的嘲讽,决定变强了,他变强 ...
- Loj #2256. 「SNOI2017」英雄联盟
题目 我就是个丝薄 如果要用\(dp_i\)表示凑出\(i\)的最小花费显然不可能的 之后大力猜想能凑出来的状态不会很多,我的暴力也告诉我不是很多,好像也确实不多的样子,大概\(4e4\)左右 但是我 ...
- Loj #3057. 「HNOI2019」校园旅行
Loj #3057. 「HNOI2019」校园旅行 某学校的每个建筑都有一个独特的编号.一天你在校园里无聊,决定在校园内随意地漫步. 你已经在校园里呆过一段时间,对校园内每个建筑的编号非常熟悉,于是你 ...
- LOJ#2230. 「BJOI2014」大融合
LOJ#2230. 「BJOI2014」大融合 题目描述 小强要在$N$个孤立的星球上建立起一套通信系统.这套通信系统就是连接$N$个点的一个树.这个树的边是一条一条添加上去的. 在某个时刻,一条边的 ...
- Loj #2719. 「NOI2018」冒泡排序
Loj #2719. 「NOI2018」冒泡排序 题目描述 最近,小 S 对冒泡排序产生了浓厚的兴趣.为了问题简单,小 S 只研究对 *\(1\) 到 \(n\) 的排列*的冒泡排序. 下面是对冒泡排 ...
随机推荐
- Spark on yarn的两种模式 yarn-cluster 和 yarn-client
从深层次的含义讲,yarn-cluster和yarn-client模式的区别其实就是Application Master进程的区别,yarn-cluster模式下,driver运行在AM(Applic ...
- 使用spring-boot-starter-amqp开发生产者应用
上一篇我们介绍了如何使用spring AMQP和RabbitMQ结合,开发消费者应用程序,使用的是Xml配置的Spring框架. 本篇我们仍然使用Spring AMQP开发生产者应用,不过我们使用零 ...
- 愿天下有情人都是失散多年的兄妹(bfs)
L2-016. 愿天下有情人都是失散多年的兄妹 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 呵呵.大家都知道五服以内不得通婚 ...
- pa14-30条职场经验
可以说是很多本厚厚的职场经验书籍的精华部分,掌握了这30条可以说是天下无敌了,但真要掌握这30条经验可不是什么容易的事情,他们都是环环相 扣的,一条做不好可能有些能做好的项目就会落空,耐下性子,看看你 ...
- redis学习五 集群配置
redis集群配置 0,整体概述 整体来说就是: 1,安装redis 2,配置多个redis实例 3,安装 ruby和rubygems 4,启动red ...
- Spring MVC F5刷新问题
转自:https://bbs.csdn.net/topics/390771056 post操作成功后重定向到B,这样浏览器里F5的时候就不会让提交A了
- jquery ajax中error返回错误解决办法
转自:https://www.jb51.net/article/72198.htm 进入百度搜索此问题,发现有人这么说了一句 Jquery中的Ajax的async默认是true(异步请求),如果想一个 ...
- 利用JavaScriptCore实现简单的功能(阶乘)
#import "RootViewController.h" #import <JavaScriptCore/JavaScriptCore.h> @interface ...
- c语言学习笔记 const变量
在c语言的编程过程中经常会遇到有常数参加运算的运算,比如这种. int a=100*b; 这个100我们叫常数或者叫常量,但是程序中我们不推荐这种直接写常数的方法,有两个缺点. 第一是程序可读性差. ...
- Netty服务端的业务流程分析
Netty的服务端怎么和java NIO联系起来的,一直很好奇这块内容,这里跟下代码,下篇文章看下Channel相关的知识. finalChannelFuture initAndRegister(){ ...