洛谷P3948 数据结构——题解








感觉这道题秀了我一地的智商。。。
审题没审好,没确定带修改的操作中询问的次数<=1000,且max和min都是事先给好、不变的。想了半天线段树、分块,却忘了最基础的暴力。
写不出题时先写暴力。
先考虑在线的部分的做法:
因为修改的次数多,询问的次数少,而且询问很难在在线的情况下优化了,又发现数据随机,如果询问暴力处理的话最差复杂度也只有O(1000*n),在随机数据下复杂度远比此低。于是可以用差分优化区间加,询问暴力做就行。
离线部分:
显然不能暴力处理询问了,但是没有修改,又是区间询问个数,自然要想到前缀和优化了。设sum[i]为前i位满足条件的个数,扫一遍就能处理出sum,这是就能O(1)做询问了。
代码:
#include<iostream>
#include<cstdio> using namespace std; const int N=; int n,opt,minn,maxx,fin,X;
int x,sum[N]; long long d[N],now,t,mod; char ch; bool f; inline int read()
{
x=;
f=;
ch=getchar();
while(!isdigit(ch)) f|=(ch=='-'),ch=getchar();
while(isdigit(ch)) x=(x<<)+(x<<)+(ch^),ch=getchar();
return f?-x:x;
} inline char mygetchar()
{
ch=getchar();
while(ch!='A'&&ch!='Q')
ch=getchar();
return ch;
} void print(int a)
{
if(a>)
print(a/);
putchar(a%+'');
} int main()
{
// freopen("my.out","w",stdout);
n=read(),opt=read(),mod=read(),minn=read(),maxx=read();
char cao;
int l,r;
for(int i=;i<=opt;++i)
{
cao=mygetchar();
if(cao=='A')
{
l=read(),r=read(),X=read();
d[l]+=X;
d[r+]-=X;
}
else
{
l=read(),r=read();
int ans=,j;
now=;
for(j=;j<l;++j)
now+=d[j];
for(j=l;j<=r;++j)
{
now+=d[j];
t=now%mod*j%mod;
if(t>=minn&&t<=maxx)
ans++;
}
print(ans);
putchar('\n');
}
}
fin=read();
now=;
for(int i=;i<=n;++i)
{
now+=d[i];
t=now%mod*i%mod;
sum[i]=sum[i-]+(t>=minn&t<=maxx);
}
for(int i=;i<=fin;++i)
{
l=read(),r=read();
print(sum[r]-sum[l-]);
putchar('\n');
}
return ;
}
总结:写不出题想想暴力(没准就是正解呢)
差分多用于优化离线的区间修改。
前缀和多用于离线的区间查询。
洛谷P3948 数据结构——题解的更多相关文章
- [洛谷P3948]数据结构 题解(差分)
[洛谷P3948]数据结构 Description 最开始的数组每个元素都是0 给出n,opt ,min,max,mod 在int范围内 A: L ,R ,X 表示把[l,R] 这个区间加上X(数组的 ...
- [洛谷P3948]数据结构
题目大意:有n个数,opt个操作,并给你md.min.max. 每种操作有以下两种:1.给一段区间加一个固定值.2.询问一段区间内满足$min\leq T*i\ mod\ md\leq max$(T是 ...
- 洛谷NOIp热身赛题解
洛谷NOIp热身赛题解 A 最大差值 简单树状数组,维护区间和.区间平方和,方差按照给的公式算就行了 #include<bits/stdc++.h> #define il inline # ...
- 洛谷P2827 蚯蚓 题解
洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...
- 洛谷P1816 忠诚 题解
洛谷P1816 忠诚 题解 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人 ...
- [POI 2008&洛谷P3467]PLA-Postering 题解(单调栈)
[POI 2008&洛谷P3467]PLA-Postering Description Byteburg市东边的建筑都是以旧结构形式建造的:建筑互相紧挨着,之间没有空间.它们共同形成了一条长长 ...
- [NOI 2020 Online] 入门组T1 文具采购(洛谷 P6188)题解
原题传送门 题目部分:(来自于考试题面,经整理) [题目描述] 小明的班上共有 n 元班费,同学们准备使用班费集体购买 3 种物品: 1.圆规,每个 7 元. 2.笔,每支 4 元. 3.笔记本,每本 ...
- [CodePlus 2017 11月赛&洛谷P4058]木材 题解(二分答案)
[CodePlus 2017 11月赛&洛谷P4058]木材 Description 有 n棵树,初始时每棵树的高度为 Hi ,第 i棵树每月都会长高 Ai.现在有个木料长度总量为 S的订单, ...
- 洛谷P1189 SEARCH 题解 迭代加深
题目链接:https://www.luogu.com.cn/problem/P1189 题目大意: 给你一个 \(n \times m\) 的矩阵,其中有一些格子可以走,一些各自不能走,然后有一个点是 ...
随机推荐
- 第七周课程总结&实验报考(五)
第七周课程总结&实验报考(五) 实验四 类的继承 实验目的: 1.理解抽象类与接口的使用: 2.了解包的作用,掌握包的设计方法. 实验要求: 1.掌握使用抽象类的方法. 2.掌握使用系统接口的 ...
- 使用new关键字创建对象数组(C#,C++,Java)
今天遇到一个题目 分析下面的代码,判断代码是否有误. using System; namespace Test1 { class Point { public int x; public int y; ...
- http 中指定head中Content-Encoding属性为gzip 转换过程中的一些问题
项目环境: 对接的服务放在微服务中 提供接口给应用层调用 ,微服务放需要 接受参数 并且转换成压缩格式给 第三方服务 本来以为需要自己压缩,httpclint 中已经封装好了GzipCompressi ...
- [转帖]oracle 00600 4194 4193 问题的处理
oracle断电重启之ORA-00600[4194] https://www.cnblogs.com/xwdreamer/p/3778383.html 部门的机器出现异常 断电导致的 错误 从网上学了 ...
- 【6.18校内test】T3细胞分裂
尽管T1T2很简单,但还是阻止不了我T3wa一片 细胞分裂[题目链接] xcg同学有一个80pts的代码 他说他的代码和我的很像,可惜我比较笨,只有30pts 其实这道题考场上是想到要分解质因数了,然 ...
- python之代码规范
第一章 为什么要有规范化目录 真正的后端开发的项目,系统等,少则几万行代码,多则十几万,几十万行代码 软件开发,规范你的项目目录结构,代码规范,遵循PEP8规范等等,让你更加清晰,合理开发. 1.代码 ...
- UDP协议&socketserver模块
UDP协议&socketserver模块 一.UDP协议 1.1 UDP实现简单通信 服务器 ------------------------------------------------- ...
- 08.AutoMapper 之嵌套映射(Nested Mappings)
https://www.jianshu.com/p/013715d2352d 嵌套映射(Nested Mappings) 当映射引擎执行映射时,它可以使用各种方法之一来解析目标成员值.其中一种方法 ...
- NoSQL与其常见的产品
一. 什么是NoSQL NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",它是一种非关系型数据库. 二. 为什么要有NoSQL 在现代的计算系统上每 ...
- 4、MySQL 申明变量给查询数据编号
摘自: https://www.cnblogs.com/qixuejia/archive/2010/12/21/1913203.html https://blog.csdn.net/arbben/ar ...