洛谷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\) 的矩阵,其中有一些格子可以走,一些各自不能走,然后有一个点是 ...
随机推荐
- Educational Codeforces Round 64 -B(贪心)
题目链接:https://codeforces.com/contest/1156/problem/B 题意:给一段字符串,通过变换顺序使得该字符串不包含为位置上相邻且在字母表上也相邻的情况,并输出. ...
- AtCoder Beginner Contest 072
这应该是我第二次打AtCoder, 题目其实并不难,就是自己经验不足想复杂了,再加上自己很笨,愣是做了97分钟才全做出来(最后三分钟,有点小激动..),看着前面大牛半个小时都搞完了,真心膜拜一下,代码 ...
- 【转载】Django自带的注册登陆功能
1.登陆 知识点: a.auth.authenticate(username=name值, password=password值) 验证用户名和密码 b.auth.login(request, use ...
- 什么是RESTful API、WSGI、pecan
RESTful API REST的全称是Representational State Transfer(表征状态转移), 是Roy Fielding在他的博士论文Architectural Style ...
- _proto_和prototype的区别
1. _proto_和prototype prototype属性是一个静态属性, _proto_属性是一个实例属性. prototype表示类的原型对象,_proto_表示原型对象中定义的内部属性[p ...
- spring boot引入thymeleaf导致中文乱码
加上下面这句代码 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" / ...
- JS Unicode转中文,中文转Unicode,ASCII转Unicode,Unicode转ASCII
在线转换工具https://oktools.net/unicode Unicode转中文 function decodeUnicode(str) { return unescape(str.repla ...
- 单调队列优化DP || [SCOI2010]股票交易 || BZOJ 1855 || Luogu P2569
题面:P2569 [SCOI2010]股票交易 题解: F[i][j]表示前i天,目前手中有j股的最大收入Case 1:第i天是第一次购买股票F[i][j]=-j*AP[i]; (1<=j< ...
- Android仿支付宝扣款顺序,动态改变ListView各Item次序
前言:今天遇到个需求,需要让用户动态选择语音传输方式的次序,突然想起支付宝选择扣款顺序的功能,恰好能满足需要,就花了点时间写了个demo,在此权当学习记录 先上效果图 支付宝的效果 demo的效果 思 ...
- 校内题目T2695 桶哥的问题——吃桶
同T2一样外校蒟蒻可能没看过: 题目描述: 题目背景 @桶哥 桶哥的桶没有送完. 题目描述 桶哥的桶没有送完,他还有n个桶.他决定把这些桶吃掉.他的每一个桶两个属性:种类aia_iai和美味值bib ...