[洛谷P3948]数据结构

Description

最开始的数组每个元素都是0

给出n,opt ,min,max,mod 在int范围内

A: L ,R ,X 表示把[l,R] 这个区间加上X(数组的从L到R的每个元素都加上X)

Q : L ,R 表示询问[L,R] 这个区间中元素T满足 min<=(T∗i %mod)<=max 的 T这样的数的个数(i是数组下标)(元素的值*数组下标%mod在min到max范围内)

由于 edt 请来了一位非三次元的仓鼠,他帮你用延后了部分问题,将这些询问打入了混乱时空,你的询问操作>不会超过1000次,不幸的是,对于延后的询问操作可能有很多次(小于1e7次),但是保证这些延后的询问操作之后不会再次有修改操作(就是在最后会有很多次询问,但不会进行修改)

输入格式:

给出n,opt,mod,min,max表示序列大小,操作次数,取膜,最小值,最大值

下面opt行,给出

A : L ,R ,X 表示区间加,保证X在int范围内(<2147483647)

Q :L ,R 表示区间查询满足条件的个数

再给出一个Final 值,表示后面有Final 个询问

下面Final 行,给出

L,R 表示询问区间[L,R]之间满足条件的个数

输出格式:

每行对于每个Q 操作输出Q 个数表示每次询问的值,

下面Final 行表示Final个询问的值

Solution

1.首先因为前半部分以区间修改为主,所以我们采用差分的方法使该操作变为O(1),即对于每个L,R,X,令num[L]+=X,num[R+1]-=X;

2.由于前半部分寻问非常少(小于1000次)每次都计算一遍当前数组的各个数字,O(n)处理就好;

3.对于final部分的寻问,因为没有修改,我们考虑离线处理,先进行预处理,用一个数组ok[i]记录i即其以前的元素符合条件的个数,再对于每一个询问L,R,输出ok[R]-ok[L-1]的值即可(因为ok[R]统计的是R及其以前的符合条件的元素个数,减去不在区间[L,R]内的部分,即ok[L-1]就是区间内符合要求的元素个数);

Code

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std; long long num[100100],n,m,i,j,k,minn,maxn,mod,l,r,x,t,ok[100100];
char c; inline long long rd(){
long long x=0;
bool f=true;
char c;
c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=false;
c=getchar();
}
while(c>='0'&&c<='9'){
x=(x<<1)+(x<<3)+(c^48);
c=getchar();
}
return f?x:-x;
} inline char getc()
{
char c=getchar();
while(c<'A'||c>'Z')c=getchar();
return c;
} void modify(){
l=rd();
r=rd();
x=rd();
num[l]+=x;
num[r+1]-=x;
} void count(){
l=rd();
r=rd();
long long ans=0;
x=0;
for(i=1;i<=r;++i){
x+=num[i];
if(i>=l&&((x*i)%mod>=minn)&&((x*i)%mod<=maxn)) ++ans;
}
printf("%lld\n",ans);
} int main(){
memset(ok,0,sizeof(ok));
memset(num,0,sizeof(num));
n=rd();
t=rd();
mod=rd();
minn=rd();
maxn=rd();
for(k=1;k<=t;++k){
c=getc();
if(c=='A') modify();
else count();
}
t=rd();
x=0;
for(i=1;i<=n;++i){
x+=num[i];
ok[i]=ok[i-1];
if(((x*i)%mod>=minn)&&((x*i)%mod<=maxn))++ok[i];
}
for(i=1;i<=t;++i){
l=rd();
r=rd();
printf("%lld\n",ok[r]-ok[l-1]);
}
return 0;
}

差分数组的基础参考以前的随笔:http://www.cnblogs.com/COLIN-LIGHTNING/p/8436624.html

[洛谷P3948]数据结构 题解(差分)的更多相关文章

  1. 洛谷P3948 数据结构——题解

    题目传送 感觉这道题秀了我一地的智商... 审题没审好,没确定带修改的操作中询问的次数<=1000,且max和min都是事先给好.不变的.想了半天线段树.分块,却忘了最基础的暴力. 写不出题时先 ...

  2. [洛谷P3948]数据结构

    题目大意:有n个数,opt个操作,并给你md.min.max. 每种操作有以下两种:1.给一段区间加一个固定值.2.询问一段区间内满足$min\leq T*i\ mod\ md\leq max$(T是 ...

  3. 洛谷NOIp热身赛题解

    洛谷NOIp热身赛题解 A 最大差值 简单树状数组,维护区间和.区间平方和,方差按照给的公式算就行了 #include<bits/stdc++.h> #define il inline # ...

  4. 洛谷P2827 蚯蚓 题解

    洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...

  5. 洛谷P1816 忠诚 题解

    洛谷P1816 忠诚 题解 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人 ...

  6. [POI 2008&洛谷P3467]PLA-Postering 题解(单调栈)

    [POI 2008&洛谷P3467]PLA-Postering Description Byteburg市东边的建筑都是以旧结构形式建造的:建筑互相紧挨着,之间没有空间.它们共同形成了一条长长 ...

  7. [NOI 2020 Online] 入门组T1 文具采购(洛谷 P6188)题解

    原题传送门 题目部分:(来自于考试题面,经整理) [题目描述] 小明的班上共有 n 元班费,同学们准备使用班费集体购买 3 种物品: 1.圆规,每个 7 元. 2.笔,每支 4 元. 3.笔记本,每本 ...

  8. [CodePlus 2017 11月赛&洛谷P4058]木材 题解(二分答案)

    [CodePlus 2017 11月赛&洛谷P4058]木材 Description 有 n棵树,初始时每棵树的高度为 Hi ,第 i棵树每月都会长高 Ai.现在有个木料长度总量为 S的订单, ...

  9. 洛谷P1189 SEARCH 题解 迭代加深

    题目链接:https://www.luogu.com.cn/problem/P1189 题目大意: 给你一个 \(n \times m\) 的矩阵,其中有一些格子可以走,一些各自不能走,然后有一个点是 ...

随机推荐

  1. 学习笔记之form表单

    form表单提交的数据 是字典类型 这样 方便在create时候 直接解压

  2. yield与递归的组合运用

  3. 使用TortoiseSVN创建版本库

    1. 使用TortoiseSVN创建版本库 在SVN中,为了便于创建分支和标签,我们习惯于将Repository版本库的结构布置为:/branches,/tags,/trunk.分别代表分支,标签以及 ...

  4. BZOJ5343[Ctsc2018]混合果汁——主席树+二分答案

    题目链接: CTSC2018混合果汁 显然如果美味度高的合法那么美味度低的一定合法,因为美味度低的可选方案包含美味度高的可选方案. 那么我们二分一个美味度作为答案然后考虑如何验证? 选择时显然要贪心的 ...

  5. BZOJ3322[Scoi2013]摩托车交易——最大生成树+贪心+倍增

    题目描述 mzry1992 在打完吊针出院之后,买了辆新摩托车,开始了在周边城市的黄金运送生意.在mzry1992 生活的地方,城市之间是用双向高速公路连接的.另外,每条高速公路有一个载重上限,即在不 ...

  6. LOJ2540 [PKUWC2018] 随机算法 【状压DP】

    题目分析: 听说这题考场上能被$ O(4^n) $的暴力水过,难不成出题人是毕姥爷? 首先思考一个显而易见的$ O(n^2*2^n) $的暴力DP.一般的DP都是考虑最近的加入了哪个点,然后删除后递归 ...

  7. day21 正则表达式

    正则表达式 简单的范围的字符组 0-9 匹配所有的数字 a-z 匹配所有的小写字母 A-Z 匹配所有的大写字母 A-Za-z 匹配所有的字母 字符 . 换行符以外的任意字符 \w word 匹配数字, ...

  8. 【转载】LCT

    原标题:LCT(Link-Cut Tree)详解(蒟蒻自留地) 出处:https://blog.csdn.net/saramanda/article/details/55253627 如果你还没有接触 ...

  9. 在kubernetes集群上用helm安装Datadog(Monitoring)

    Datadog is a monitoring service that gathers monitoring data from your containers within your Azure ...

  10. 【模板】K短路 A-star

    引理:当一个状态对应的节点第K次从堆中取出时,该状态对应的当前代价是从起点到该点的第K优解. 代码如下 /* POJ2449 */ #include <cstdio> #include & ...