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\) 个. 莫队 要 ...
随机推荐
- IT职场: 选择外企利与弊
前几天有个同学打电话问我选择国内企业与外企的利弊,很可笑的是他是学机械的:既然和我完全不在一个行业,因此我只是说了我们IT外企的利与弊,毕竟隔行如隔山. 首先简单自我介绍一下,我所在的公司是美资500 ...
- C++ Primer 有感(复制控制)
1.不管类是否定义了自己的析构函数,编译器都 自动执行类中非static数据成员的析构函数. 2.如果我们没有定义复制构造函数,编译器就会为我们合成一个.合成复制构造函数的行为是,执行逐个成员初始化, ...
- C语言中的sizeof解析
1. 定义:sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数.返回 值类型为size_t,在头文件stddef.h中定义.这是一个依赖于编译系统 ...
- Linux--缺页中断和交换技术
1.请求调页中断:进程线性地址空间里的页面不必常驻内存,例如进程的分配请求被理解满足,空间仅仅保留vm_area_struct的空间,页面可能被交换到后援存储器,或者写一个只读页面(COW).Linu ...
- 江湖问题研究-- intent传递有没有大小限制,是多少?
出门一步,便是江湖,江湖上有许多流言. 比如这条: intent传递是有大小限制的,具体在40KB左右. 当然也有传言说是1M左右. 数百头母驴为何半夜惨叫? 小卖部安全套为何屡遭黑手? 女生宿舍内裤 ...
- Mahout 系列之--canopy 算法
Canopy 算法,流程简单,容易实现,一下是算法 (1)设样本集合为S,确定两个阈值t1和t2,且t1>t2. (2)任取一个样本点p属于S,作为一个Canopy,记为C,从S中移除p. (3 ...
- 【Linux 操作系统】vim编辑器配置及常用命令
最近工作不安分, 没有了刚入行时候的锐气, 不知道什么时候开始懈怠起来, 周末在电脑旁边看新闻, 搞笑图片, 追美剧, 一坐就是一天, 很是空虚. 我需要摆脱这种状态, 正好想学习一下安卓底层, An ...
- 苹果新的编程语言 Swift 语言进阶(四)--字符串和收集类型
一.字符串( String )和字符类型(Character) 字符串是一种字符的带次序的收集类型(相当于数组),字符是字符串中的元素. 在Swift 语言中,字符串是编码独立的Unicode字符的 ...
- 关于NSKeyedArchiver的编码格式
NSKeyedArchiver在linux的实现默认的格式是二进制: NSArray *ary = @[@"hello",@"world",@"!!! ...
- LeetCode(50)-Word Pattern
题目: Given a pattern and a string str, find if str follows the same pattern. Here follow means a full ...