题解 教主的魔法(分块学习记录)

NOIP2016 普及组第四题 魔法阵magic 题解 NOIP2016 普及组第四题 魔法阵magic 题解 NOIP2016 普及组第四题 魔法阵magic 题解 题目描述六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量。大魔法师有m个魔法物品,编号分别为1,2,…,m。每个物品具有一个魔法值,我们用Xi表示编号为i的物品的魔法值。每个魔法值Xi是不超过n的正 阅读详情

@luogu

看到询问个数少,分块的复杂度能过,于是人生第一次打了分块,居然A了。据说也有线段树瞎搞的,不过我不会写。

总之,边角暴力,块内二分,受影响的块直接重新排序。一切都是那么暴力。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
#define N 1001000
#define ll long long
#define max(x,y) ((x)>(y) ? (x) : (y))
#define min(x,y) ((x)<(y) ? (x) : (y))
using namespace std;

inline int getint() {
    int t=0,p;
    char ch=getchar();
    for(;ch!='-' && !(ch>='0' && ch<='9');ch=getchar());
    if(ch=='-') p=-1,ch=getchar();
    else p=1;
    for(;ch>='0' && ch<='9';ch=getchar()) {
        t=t*10+ch-48;
    }
    return t*p;
}

int n,q,a[N],b[N],c[N],x,y,z;

int main() {
//  freopen("magic.in","r",stdin);
//  freopen("magic.out","w",stdout);
    n=getint();q=getint();
    register int m=int(sqrt(n));
    for(int i=1;i<=n;i++) {
        b[i]=a[i]=getint();
    }
    for(int i=1;i+m<=n;i+=m+1) {
        sort(b+i,b+i+m+1);         //b数组表示对每个块排序的a数组
    }
    memset(c,0,sizeof c);
    while(q--) {
        char ch=getchar();
        for(;ch!='A' && ch!='M';ch=getchar());
        x=getint(),y=getint(),z=getint();
        if(ch=='M') {
            register int i=x;
            int l=(m+1)*((x+m)/(m+1))-m;
            int r=(m+1)*((x+m)/(m+1));
            l=min(l,n);
            r=min(r,n);
            for(;i<=y && (i+m)%(m+1)!=0;i++) {
                a[i]+=z;                //边角暴力
            }
            if(r-l==m) {    
                for(int j=l;j<=r;j++) {
                    b[j]=a[j];
                }
                sort(b+l,b+r+1);     //强行排序
            }
            for(;i+m<=y;i+=m+1) {
                c[(i+m)/(m+1)]+=z;    //块上统计
            }
            l=(m+1)*((i+m)/(m+1))-m;
            r=(m+1)*((i+m)/(m+1));
            l=min(l,n);
            r=min(r,n);
            for(;i<=y;i++) {
                a[i]+=z;             //边角暴力
            }
            if(r-l==m) {
                for(int j=l;j<=r;j++) {
                    b[j]=a[j];
                }
                sort(b+l,b+r+1);
            }
        } else {
            int acht=0;
            register int i=x;
            for(;i<=y && (i+m)%(m+1)!=0;i++) {
                if(a[i]+c[(i+m)/(m+1)]>=z) acht++; //边角暴力
            }
            for(;i+m<=y;i+=m+1) {
                acht+=(i+m+1-(lower_bound(b+i,b+i+m+1,z-c[(i+m)/(m+1)])-b));  //块内二分
            }
            for(;i<=y;i++) {
                if(a[i]+c[(i+m)/(m+1)]>=z) acht++; //边角暴力
            }
            printf("%d\n",acht);
        }
    }
    return 0;
}
【统计】NOIP2016普及组[魔法阵]题解 NOIP2016T4题解。 阅读详情

相关推荐

【菜鸟进阶之路】 P4924 [1007]魔法少女小Scarlet - 洛谷

一、题目部分 选自洛谷: P4924 [1007]魔法少女小Scarlet 二、解题过程 思路 见“提交AC答案”部分给出的注释 提交AC答案 #include<bits/stdc++.h> using namespace std; int n,m;//n和m分别表示方阵大小和魔法施放次数 int x[501],y[501],r[501],z[501]; //把以第x行第y列为中心的2r+1阶矩阵按照某种时针方向旋转 //z=0表示顺时针,z=1表示逆时针 int a[501][501]

HeyRena的博客 595

9.23 noip模拟试题

Problem 1 抓牛(catchcow.cpp/c/pas) 【题目描述】 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N≤100000)处,奶牛在K(O≤K≤100000)处.约翰有两种办法移动,步行和瞬移:步行每秒种可以让约翰从x处走到x+l或x-l处;而瞬移则可让他在1秒内从x处消失,在2x处...

weixin_30551947的博客 216

深入解析西门子S7通信协议:从抓包到实战应用

本文深入解析西门子S7通信协议,从环境搭建、抓包分析到实战应用,提供了一套完整的协议分析方法。通过Wireshark工具进行抓包分析,详细拆解了S7协议各层结构,并结合真实案例,展示了如何利用抓包技术解决通信故障、优化性能及进行安全审计,是掌握工业通信底层原理的实用指南。

weixin_29224529的博客 281

(分块)洛谷 P2801 教主的魔法 题解

之前学过 莫队 算法,其运用了分块思想;但是我居然是第一次写纯种的分块题目。

m0_60506105的博客 999

永磁同步电机矢量控制——从三相静止坐标系到d-q坐标系的数学转换

本文深入解析了永磁同步电机矢量控制的核心——从三相静止坐标系到d-q旋转坐标系的数学转换。通过Clark变换和Park变换,将复杂的三相交流系统解耦为易于控制的直流量,从而实现对电机转矩和磁场的独立、精准控制。文章结合物理图像与工程实践,详细阐述了坐标变换的原理、公式推导及其在磁场定向控制(FOC)中的关键作用。

weixin_29294395的博客 117

CentOS Stream 9中安装MySQL的详细步骤

本文详细介绍了在CentOS Stream 9系统中如何进行MySQL的在线安装、离线安装以及忘记密码的恢复操作。通过阅读本文,您将能够了解并掌握在CentOS Stream 9上安装MySQL的步骤,以及在遇到忘记密码的情况下的解决方案。

小白典的博客 7258

Luogu P2801 教主的魔法 题解

注意 Python 的输入输出效率。

vday8cV50的博客 186

Wi-Fi物理帧间隔概念简介

物理帧间隔概念简介。

1042484520@qq.com(邮箱) 1778

【BZOJ-3343】教主的魔法 分块

3343: 教主的魔法 Time Limit: 10 SecMemory Limit: 256 MBSubmit: 950Solved: 414[Submit][Status][Discuss] Description 教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1、2...

weixin_30451709的博客 82

15、z/OS 优化配置与迁移实践

本文详细探讨了z/OS环境的优化配置与迁移实践,涵盖DASD存储库管理、用户目录更新、环境更新意义以及不同场景下的迁移案例。通过单笔记本系统和服务器级机器的实例,展示了迁移流程和关键要点,包括DASD文件创建、设备映射更新、系统重启初始化以及数据备份等步骤。文章还总结了迁移过程中的注意事项,并展望了未来z/OS优化的发展趋势,为z/OS系统的稳定运行和高效管理提供了实用指导。

zzz56的博客 129

如何使用 Python 爬虫获取猫眼电影数据:电影评分与评论分析

随着互联网的快速发展,越来越多的人开始使用各种在线平台来了解电影信息,猫眼电影作为一个非常流行的在线电影票务平台,提供了详细的电影评分、评论和票房数据。本篇博客将详细介绍如何使用 Python 爬虫技术获取猫眼电影平台上的电影数据,重点关注电影评分和用户评论的爬取,分析其背后的数据处理和反爬虫技术。如果你对数据分析、电影评论分析等话题感兴趣,可以根据本文的示例进一步深入挖掘更多的数据,为决策提供支持,或为电影产业的相关研究提供有价值的分析依据。有些猫眼电影的页面数据是动态加载的,使用。

2201_76125261的博客 1623

洛谷P2119 [NOIP 2016 普及组] 魔法阵【题解】【前缀和优化】

给定正整数nm,有m个魔术物品,魔术值为Xi​Xi​∈1n])。定义魔法阵为:含四个魔术值Xa​Xb​Xc​Xd​Xa​Xb​Xc​Xd​Xb​−Xa​2×Xd​−Xc​Xb​−Xa​Xc​−Xb​÷3则称四个魔术物品分别为A物品,B物品,C物品,D物品。求出每个魔术物品作为ABCD的次数。

MorningLa的博客 1174

联想开天N70z/N79Z G1d笔记本Win驱动下载

本文介绍了联想开天N70Z/N79Z G1d笔记本在Win11系统下的驱动安装方法。提供了WiFi网卡驱动(RealtekWlan)和显卡驱动(ZX C960 GPU)的详细安装步骤,包括手动更新驱动和卸载流程。驱动安装后成功支持5G WiFi连接并正确识别显卡型号。文中附有系统信息和安装效果截图,同时提供了官方驱动下载地址及备用下载链接。该指南适用于需要为联想开天N70Z/N79Z G1d笔记本安装Win11驱动的用户参考。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 3874

洛谷题解 P1583 【魔法照片】

洛谷题解 P1583 【魔法照片】 题目描述 一共有n(n≤20000)个人(以1–n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人。佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i]。然后将初始权值从大到小进行排序,每人就有了一个序号D[i](取值同样是1–n)。按照这个序号对10取模的值将这些人分为10类。也就是说定义每个人的类别序号C[i]的值为(D[i]-1) mod 1...

qq_29042389的博客 591

【同等学力】2005-数学⭐✨

有r个正方形排成一行,今用红、黄、白、蓝四种颜色给这个r个正方形染色,每个正方形只能染一种颜色,如果要求染红、黄、白色的正方形分别至少出现一个,问有多少种不同的染法?3、(4分)设G是一个有n个结点m条边的连通简单平面图,若n≥3,则m≤3n-6.4、(4分)证明:任何连通简单平面图至少有一个结点的度数不超过5

super_mochi1 306

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

题解 【NOIP2016】魔法阵

【NOIP2016】魔法阵 Description 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法量。 大魔法师有m个魔法物品,编号分别为1,2,...,m。每个物品具有一个魔法值,我们用xi表示编号为i的物品的魔法值。每个魔法值xi是不超过n的正整数,可能有多个物品的魔法值相同。 他称这四个魔法物品分别为这个魔法阵的A物品,B物品,C物品,D物...

weixin_30855761的博客 995

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【题解】【洛谷P4924】【模拟】—— [1007] 魔法少女小Scarlet

本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。Scarlet 既不会什么分块特技,也不会什么 Splay 套 Splay,她现在提供给你她的魔法执行顺序,想让你来告诉她魔法按次执行完毕后的二维数组。的正整数按照从左往右,从上至下的顺序填入初始的二维数组中,然后她会施放一些简易的魔法。接下来就是找规律了,对于这种题目,可以画一张图来辅助理解,奉上!,表示方阵大小和魔法施放次数。

Pantheraonca的博客 898

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

P2119 魔法阵

P2119 魔法阵 理解题意 一个无聊的人拿四个物品制造魔法阵,这四个物品满足题目给出的三个式子,输出一个矩阵,记录每个物品作为魔法阵中A,B,C,D物品的次数 稳定情绪 莫得慌,博 主 是 一 个 极 其不负 责 任 的 歪 星 人 题解 Part 1 5...

weixin_30836759的博客 187

6743. 大魔法师

今天做到了这个题感觉很巧妙,赛时没想到但是,初三都过了,水写一篇博客记录一下。

fzyyyyyyyy的博客 992

洛谷 P1822 魔法指纹 题解

题目传送门 题目大意: 我觉得他说的很清楚丫那我就不复述了qwq 正解 前置芝士: 暴力做法 这个没有人不会的吧。 进阶 考虑神奇的分块~ 回想以前分块统计答案的方法:将区间头尾部分的渣渣暴力求解,然后将中间的块们扫一遍,每次O(1)O(1)O(1)提取这一整块的答案。 然而我们现在只能做到第一部分——求解渣渣。 那么精华来了,如何搞中间的块的答案呢? 线下暴力求解即可。 求出来之后,将他们一块一...

a_forever_dream的博客 376

2016NOIP普及组真题 4. 魔法阵

把对公式③ $ x_b - x_a < (x_c - x_b)/3 $ 的利用,从条件判断改为直接赋值给ci的范围。另外,由于魔法球的魔法数值可能相同,所以在计算每一个数字的出现次数时,要考虑其他数字的。同时,由于1个abc只能对应1个d,如果找到了符合条件的d,就退出最内层的循环。● ci 的左边界可以推断出 = ai + 8k + 1,从左边界向右枚举即可。由于魔法值 n 不超过 15000,但魔法球的数量 m 可达到40000。● di 可直接推断出为 = ci+k = ai + 9k + 1。

weixin_40252159的博客 2424

[题解]bzoj3669(NOI2014)魔法森林

Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士。魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M。初始时小E同学在号节点1,隐士则住在号节点N。小E需要通过这一片魔法森林,才能够拜访到隐士。 魔法森林中居住了一些妖怪。每当有人经过一条边的时候,这条边上的妖怪就会对其发起攻击。幸运的是,在号节点住着两种守护精灵

Saramanda的博客 1300

P1875佳佳的魔法药水题解

这是一道很好的最短路的。

adidde 221

NOIP2016普及组T4(魔法阵)题解

题目信息 题目传送门 解题思路 在此图中,A表示xa,B表示xb,C表示xc,D表示xd,那么这四个点就能组成一个魔法阵。 令k = xd - xc。 根据题目条件可得: xb - xa = 2k xc - xb > 6k 综上,可求出: 1 ≤ k ≤ n / 9 所以我们可以枚举k和d的位置,这样就可以确定C和D的值了。 定义sumi为第i中方案数(算完了记录后马上改变),那么: sumd = suma * sumb * sumc sumc = suma * sumb * sumd 同理

风斯在下 1151

暗黑破坏神【题解】

暗黑破坏神【题解】

Phrvth的博客 462

【leetcode 2171. 拿出最少数目的魔法豆】没有数学,全是思路

leetcode第2171题如何解决?只能通过数学推理吗?有没有其他更加容易理解的方法?这篇文章就详细介绍了不用数学的详细解决过程,没有数学,全是思路

csdnofhaner的博客 1066
上一篇: 题解 Mayan游戏
下一篇: 题解 引水入城
Ansicht
博客等级 码龄9年 6粉丝 29原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值