CF877F
题目大意:给定n个数有正有负,有Q次询问,每次询问区间[l,r]中有几个子区间满足和为k
做法:显然的莫队
每次用map记录一下当前区间[l,r]中的前缀和的值的个数
然后r的话找sum[r]-k的,l找sum[l]+k即可
不过是一道卡常题,不能用map要用unordered_map才能过
代码:
#pragma GCC optimize(3)
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include<bits/stdc++.h>
#define N 100005
#define ll long long
#include <tr1/unordered_map>
using namespace std;
int n,k,opt[N],Q;ll a[N],ans[N];
struct Node{int l,r,id;}q[N];
tr1::unordered_map<ll,ll> mp;
inline int gt(int x){return (x-1)/610+1;}
inline bool cmp(Node aa,Node bb){if (gt(aa.l)==gt(bb.l)) return aa.r<bb.r;else return gt(aa.l)<gt(bb.l);}
inline void solve(){
int l=1,r=0;ll ans1=0;mp[0]++;
for (int i=1;i<=Q;i++){
while (l>q[i].l){l--;ans1=ans1+mp[a[l-1]+k];mp[a[l-1]]++;}
while (r<q[i].r){r++;ans1=ans1+mp[a[r]-k];mp[a[r]]++;}
while (l<q[i].l){mp[a[l-1]]--;ans1=ans1-mp[a[l-1]+k];l++;}
while (r>q[i].r){mp[a[r]]--;ans1=ans1-mp[a[r]-k];r--;}
ans[q[i].id]=ans1;
}
}
inline int read(){
char ch;int f=1,w=0;
for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=getchar()) w=w*10+ch-'0';
return w*f;
}
int main(){
n=read();k=read();
for (int i=1;i<=n;i++) opt[i]=read();
for (int i=1;i<=n;i++){
scanf("%lld",&a[i]);
if (opt[i]==2) a[i]=-a[i];
}a[0]=0;
for (int i=1;i<=n;i++) a[i]+=a[i-1];
Q=read();
for (int i=1;i<=Q;i++) q[i].l=read(),q[i].r=read(),q[i].id=i;
sort(q+1,q+Q+1,cmp);
solve();
for (int i=1;i<=Q;i++) printf("%lld\n",ans[i]);
return 0;
}
CF877F的更多相关文章
- [CF877F]Ann and Books
题目大意: 有$n(n\le10^5)$个数$w_{1\sim n}(|w_i|\le10^9)$,并给定一个数$k(|k|\le10^9)$.$q(q\le10^5)$次询问,每次询问区间$[l,r ...
- CF877F题解
题目大意 有一个序列,每个位置上有 \(1\) 或 \(2\) 两种元素若干,每次询问一个区间,求这个区间有多少个子区间满足 \(1\) 类元素恰好比 \(2\) 类元素多 \(k\) 个. 莫队 要 ...
随机推荐
- [Asp.Net]Understanding Built-In User and Group Accounts in IIS
昨天把程序IIS6迁移到IIS7,出现异常 解决办法:文件夹选项权限增加IIS_IUSER 资料来源: http://www.iis.net/learn/get-started/planning-fo ...
- 【一天一道LeetCode】#52. N-Queens II
一天一道LeetCode系列 (一)题目 Follow up for N-Queens problem. Now, instead outputting board configurations, r ...
- 被final关键字坑了
一直都傻傻的以为用final关键字定义的都是不可变的.没想到的是对基本类型来说,这是一直成立的. 但是对于final修饰的对象,仍然可以修改对象里面的对象和成员变量.不变的只是当前对象的地址. 昨天我 ...
- Python学习笔记 - 高阶函数
高阶函数英文叫Higher-order function.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. 变量可以指向函数 以Python内置的求绝对值的函数abs()为例,调用该函数用以下 ...
- APPCORE Routine APIs
Introduction to APPCORE Routine APIs This chapter provides you with specifications for calling many ...
- 一个简单的多机器人编队算法实现--PID
用PID进行领航跟随法机器人编队控制 课题2:多机器人编队控制研究对象:两轮差动的移动机器人或车式移动机器人研究内容:平坦地形,编队的保持和避障,以及避障和队形切换算法等:起伏地形,还要考虑地形情况对 ...
- 【一天一道LeetCode】#4 Median of Two Sorted Arrays
一天一道LeetCode (一)题目 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find th ...
- java注解及在butternife中的实践和原理
1. 背景 之前去一个公司,说到了java的注解,问java的注解有几种方式,然后我提到了android中的butternife和afinal注解工具,我们知道butternife在6.1版本的时候 ...
- 虚拟机linux挂载光盘显示:mount: you must specify the filesystem type
虚拟机内 linux 挂载光盘显示:mount: you must specify the filesystem type 今天在虚拟机上挂载镜像文件时提示: 初步断定原因有2: 1.在卸载光盘时使用 ...
- JQuery UI - resizable
·概述 resizable插件可以让选中的元素具有改变尺寸的功能. 官方示例地址:http://jqueryui.com/demos/resizable/ 所有的事件回调函数都有两个参数:eve ...