洛谷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\) 的矩阵,其中有一些格子可以走,一些各自不能走,然后有一个点是 ...
随机推荐
- HDU1846 Brave Game 题解
题面 本题是一道有向图博弈问题: 该题便是著名的巴什博弈: 我们可以发现,当n=0的时候后手必胜(设其为P态),n=1~m这几种状态由于先手可以一次全部取完导致先手必胜(设其为N态). 接着当n=m+ ...
- hibernate-HQL连接查询 转载sincoolvip
和SQL查询一样,HQL也支持各种各样的连接查询,如内连接.外连接 连接类型 HQL语法内连接 inner join 或者join迫切内连接 inner join fetch 或join fetch左 ...
- “laravel.log” could not be opened: failed to open stream
百度了一下,说是要赋权限,按照操作赋了权限也还是报错,其实只要执行第一个就好,但为了保险起见,我都执行了,还是不行 chmod -R /storage chmod -R /storage/logs c ...
- [LeetCode] 227. 基本计算器 II
题目链接: https://leetcode-cn.com/problems/basic-calculator-ii 难度:中等 通过率:33.2% 题目描述: 实现一个基本的计算器来计算一个简单的字 ...
- sys模块&json模块&pickle模块
sys模块&json模块&pickle模块 sys模块 一.导入方式 import sys 二.作用 与Python解释器交互 三.模块功能 3.1 经常使用 sys.path #返回 ...
- docker安装应用
1.docker安装oracle docker search oracle docker pull wnameless/oracle-xe-11g docker run -d -p 9090:8080 ...
- Jade学习(二)之语法规则上
语法 ⚠️实例均结合node jade缩进代表层级 html <html></html> html <html> head <head> style & ...
- 国内高速下载Docker
一般情况下,我们可以从Docker官网下载docker安装文件,但是官方网站由于众所周知的原因,不是访问慢,就是下载慢.下载docker安装包动不动就要个把小时,真是极大的影响工作效率. 在这里推荐一 ...
- python-文件操作2(读写文件的详细操作)
python-文件操作2(读写文件的详细操作) 1.读取文件的前6行数据 f = open ("my-hert2","r") #encoding="u ...
- Linux 学习 (一)
最常用的7个Linux命令: cd:切换目录. pwd:查看当前所在目录. ls:查看目录下的文件. touch:没有文件则创建文件. mkdir:创建目录. mr:remove删除. ...