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\) 的排列*的冒泡排序. 下面是对冒泡排 ...
随机推荐
- POJ 1276 Cash Machine(单调队列优化多重背包)
Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38986 Accepted: 14186 De ...
- Oracle RMAN 学习
Oracle RMAN 学习:三思笔记 1 进入rman Rman--物理备份(结构/数据) 1 本地db Cmd set oracle_sid=orcl 1 rman target / Rman&g ...
- java中try{}catch{}和finally{}的执行顺序问题
今天我给大家讲解一下java的的错误和异常处理机制以及相关异常的执行顺序问题.如有不足的地方,欢迎批评指正~ 1.首相简单介绍一下java中的错误(Error)和异常(Exception) 错误和异 ...
- spring学习十二 application/x-www-form-urlencoded还是application/json
application/x-www-form-urlencoded还是application/json get. POST 用哪种格式? 后台如何得到这些值? 如何用ajax 或者是 postman ...
- PowerDesigner中批量替换name和code的脚本
无论是cdm还是pdm都可以批量替换.处理.可在Tool-Execute commands-Edit/Run script中编辑运行脚本: 下面的脚本是批量将CDM中实体的用Code替换掉Name O ...
- 问题:C#属性;结果:c# 属性
c# 属性 属性:get { //读属性代码 } set { //写属性代码 } public class Person{private string name;public string Name{ ...
- oracle错误-ORA-12519, TNS:no appropriate service handler found
转自:https://blog.csdn.net/u013147600/article/details/48380841
- DAY19-Django之form组件补充
问题1:注册页面输入为空,报错:keyError:找不到password def clean(self): print("---" ,self.cleaned_data) # if ...
- OpenCV 官方工程报错(1) Couldn't load mixed_sample from loader
openCV/OpenCV-android-sdk/samples/tutorial-2-mixedprocessing 工程 - ::): Trying to get library list - ...
- sg值的求解(NIM)
硬币游戏2 挑战程序设计竞赛P315 1堆的情况: #include<bits/stdc++.h> ,grundy[],k=,A[]={,},n=; using namespace std ...