LuoguP3948 数据结构
题目地址
题解
以为这题虽然是数据随机也不至于那么水吧...
于是秉着先打部分分和暴力的原则先写了暴力和min,max为-inf和inf的特殊点,对于暴力搞了个小优化,延后的操作直接前缀和答案就好...
然后感觉数据随机的话能过\(n<=5000\)
交了发现跑的飞快,有了一点奇奇怪怪的想法,直接交暴力试试?
然后就过了。7000+ms...
效率是\(O(opt*n+final)\)的,因为数据随机所以其实也不用卡就能过去了...
我以为他的随机至少有部分构造数据来着...
然后看了官方题解居然也只是对暴力操作差分优化了一下...这个的效率也不对的其实...如果数据出到上界是过不去的...
(当时有想到这个但是算了效率是不对的于是cut掉了这个想法。还以为这题正解多高明233333)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 200010
int n, opt, mod, Min, Max, fin;
ll a[N], sum[N];
namespace pts_1 {
void solve() {
int l, r, x;
for(int i = 1; i <= opt; i ++) {
char ch[10];
scanf("%s%d%d", ch, &l, &r);
if(ch[0] == 'A') {scanf("%d", &x); continue;}
printf("%d\n", r - l + 1);
}
scanf("%d", &fin);
for(int i = 1; i <= fin; i ++) {
scanf("%d%d", &l, &r);
printf("%d\n", r - l + 1);
}
}
}
namespace pts_2 {
void solve() {
int l, r, x;
for(int i = 1; i <= opt; i ++) {
char ch[10];
scanf("%s%d%d", ch, &l, &r);
if(ch[0] == 'A') {
scanf("%d", &x);
for(int i = l; i <= r; i ++) a[i] += x;
} else {
ll ans = 0;
for(int i = l; i <= r; i ++) {
ans += a[i] * i % mod >= Min && a[i] * i % mod <= Max;
}
printf("%lld\n", ans);
}
}
for(int i = 1; i <= n; i ++) {
sum[i] = sum[i - 1] + (a[i] * i % mod >= Min && a[i] * i % mod <= Max);
}
scanf("%d", &fin);
while(fin--) {
scanf("%d%d", &l, &r);
printf("%lld\n", sum[r] - sum[l - 1]);
}
}
}
int main() {
scanf("%d%d%d%d%d", &n, &opt, &mod, &Min, &Max);
if(Min <= -inf && Max >= inf) {pts_1::solve(); return 0;}
else {
if(n <= 5000) {pts_2::solve(); return 0;}
pts_2::solve(); return 0;
}
}
LuoguP3948 数据结构的更多相关文章
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- 深入浅出Redis-redis底层数据结构(上)
1.概述 相信使用过Redis 的各位同学都很清楚,Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-valu ...
- 算法与数据结构(十五) 归并排序(Swift 3.0版)
上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找
今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...
- 算法与数据结构(八) AOV网的关键路径
上篇博客我们介绍了AOV网的拓扑序列,请参考<数据结构(七) AOV网的拓扑排序(Swift面向对象版)>.拓扑序列中包括项目的每个结点,沿着拓扑序列将项目进行下去是肯定可以将项目完成的, ...
- 算法与数据结构(七) AOV网的拓扑排序
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...
- 掌握javascript中的最基础数据结构-----数组
这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...
随机推荐
- SNMP 安装及使用
一.SNMP的安装 1.安装 snmp服务,python扩展等 参考:http://lihuipeng.blog.51cto.com/3064864/915965 [root@localhost] y ...
- Rpgmakermv(16) YEP MainmenuManager
---------------------------------------------------------------------------------------------------- ...
- numpy高级索引
布尔值索引 name_arr = np.array(["bob","joe","will","bob","jo ...
- 20165316 预备作业3 Linux安装及学习
Linux安装 我下载的是VirtualBox 5.2.6和Ubuntu 17.10.1,感觉这两个版本的兼容性不是太好,因为我在Oracle的官网社区中看到不少新版本的问题没有得到解决,而老版本(V ...
- 调查显示数据分析已取代Web开发成为第一用例
一项关于Python的开发者调查显示,编程语言现在主要用于数据分析,取代了之前的第一个用例Web开发. 去年秋天,由Python软件基金会和开发人员工具供应商JetBrains进行,2018 Pyth ...
- php_study progress(1)
PHP是一种语法简单.功能强大的网络编程语言.在语法格式上,PHP借鉴了广泛流行的C.Java和Perl等编程语言的特点,非常类似于C语言,但比C语言更简单,易学和易用,因此特别适合于学习过C语言,有 ...
- Kali linux创建和删除用户
#创建用户 图形界面如此友好,直接点用户——添加用户——设置密码即可,如果切换帐号,同样点用户——切换用户——输入密码即可. #删除用户的指令比较复杂一些,这里我们找到了特别好的资源,简明有效. ht ...
- 为什么List.add()所增加的数据都是一样的
1. 先上代码: List<Person> list = new ArrayList<>(); Person p = new Person(); try { Class.for ...
- 每日linux命令学习-引用符号(反斜杠\,单引号'',双引号"")
引用符号在解析器中保护特殊元字符和参数扩展,其使用方法有3种:反斜杠(\),单引号(’‘),双引号(“”). 单引号和双引号必须匹配使用,均可在解析器中保护特殊元字符和通配符,但是单引号(硬转义)主要 ...
- oracle之存储过程和存储函数的使用和区别
#存储过程:封装在服务器上一段sql片段,已经编译好了的代码. 1.客户端调存储过程,执行效率就会非常高效. 语法: create [or replace] procedure 存储过程名称 (参数名 ...