题目传送

感觉这道题秀了我一地的智商。。。

审题没审好,没确定带修改的操作中询问的次数<=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 数据结构——题解的更多相关文章

  1. [洛谷P3948]数据结构 题解(差分)

    [洛谷P3948]数据结构 Description 最开始的数组每个元素都是0 给出n,opt ,min,max,mod 在int范围内 A: L ,R ,X 表示把[l,R] 这个区间加上X(数组的 ...

  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. etcd常用命令-增删改查

    增删改查key-values 插入数据测试 # etcdctl put name1 james# etcdctl put name11 alice# etcdctl put name12 seli # ...

  2. Flink初探-为什么选择Flink

    本文主要记录一些关于Flink与storm,spark的区别, 优势, 劣势, 以及为什么这么多公司都转向Flink. What Is Flink 一个通俗易懂的概念: Apache Flink 是近 ...

  3. 小记---------Elasticsear搭建

    Elasticsear搭建 创建用户: useradd elasticsearch passwd elasticsearch   1.解压 tar -zxvf elasticsearch-5.5.2. ...

  4. Luogu P2839 [国家集训队]middle

    题目 首先我们考虑解决中位数一类问题的常用手段:二分\(mid\),将大于等于它的设为\(1\),小于它的设为\(−1\),判断区间和是否\(\ge0\). 对于询问\(a,b,c,d\),二分完\( ...

  5. HTTPS为什么是安全的?

    学习自https://www.cnblogs.com/zhangsanfeng/p/9125732.html,感谢博主 超文本传输协议HTTP被用于在web浏览器和网站服务器之间传递信息,但以明文方式 ...

  6. Ehcache 入门详解 (转)

    一:目录 EhCache 简介 Hello World 示例 Spring 整合 二: 简介 2.1.基本介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hiberna ...

  7. css3弹性伸缩布局(一)—————flex布局

    CSS3弹性伸缩布局简介 2009年,W3C提出了一种崭新的方案—-Flex布局(即弹性伸缩布局),它可以简便.完整.响应式地实现各种页面布局,包括一直让人很头疼的垂直水平居中也变得很简单地就迎刃而解 ...

  8. node.js使用swig模块

    1.安装swig npm install swig --save 2.创建app.js文件 /*应用程序入口文件*/ /*加载express模块*/ var express = require('ex ...

  9. vue中如何开发插件

    1.vue中提供了install方法用来开发插件 官方:Vue.js 的插件应该有一个公开方法 install.这个方法的第一个参数是 Vue 构造器,第二个参数是一个可选的选项对象. 2.我的插件目 ...

  10. how to create a flask server

    1. use database 2. use redis 3. inport/export excel2007 version+ from flask import send_from_directo ...