首页 > 其他分享 >P2801 教主的魔法

P2801 教主的魔法

时间:2023-06-22 15:33:07浏览次数:19  
标签:cnt return int P2801 魔法 pos len mid 教主

include

include

include

using namespace std;
const int N = 1000010;
int n,m;
int a[N],b[N];
int L[N],R[N],pos[N];
int add[N];
void modify (int l,int r,int x) {
int p = pos[l],q = pos[r];
if (p == q) {
for (int i = l;i <= r;i++) a[i] += x;
for (int i = L[p];i <= R[p];i++) b[i] = a[i];
sort (b + L[p],b + R[p] + 1);
return ;
}
for (int i = p + 1;i <= q - 1;i++) add[i] += x;
for (int i = l;i <= R[p];i++) a[i] += x;
for (int i = L[p];i <= R[p];i++) b[i] = a[i];
sort (b + L[p],b + R[p] + 1); //注意左闭右开
for (int i = L[q];i <= r;i++) a[i] += x;
for (int i = L[q];i <= R[q];i++) b[i] = a[i];
sort (b + L[q],b + R[q] + 1);
}
int query (int l,int r,int x) {
int p = pos[l],q = pos[r];
if (p == q) {
int cnt = 0;
for (int i = l;i <= r;i++) cnt += a[i] + add[p] >= x;
return cnt;
}
int cnt = 0;
for (int i = p + 1;i <= q - 1;i++) {
int l = L[i],r = R[i];
while (l < r) {
int mid = l + r >> 1;
if (b[mid] + add[i] >= x) r = mid;
else l = mid + 1;
}
if (b[l] + add[i] >= x) cnt += R[i] - l + 1; // 注意
}
for (int i = l;i <= R[p];i++) cnt += a[i] + add[p] >= x;
for (int i = L[q];i <= r;i++) cnt += a[i] + add[q] >= x;
return cnt;
}
int main () {
scanf ("%d%d",&n,&m);
for (int i = 1;i <= n;i++) scanf ("%d",&a[i]),b[i] = a[i];
int len = sqrt (n);
for (int i = 1;i <= len;i++) L[i] = (i - 1) * len + 1,R[i] = i * len;
if (R[len] < n) len++,L[len] = R[len - 1] + 1,R[len] = n;
for (int i = 1;i <= len;i++) {
for (int j = L[i];j <= R[i];j++) pos[j] = i;
}
/*
不能写成这样:
for (int i = 1;i <= n;i++) pos[i] = (i - 1) / n + 1;
/
for (int i = 1;i <= len;i++) sort (b + L[i],b + R[i] + 1);
while (m--) {
char op[2];
int l,r,x;
scanf ("%s%d%d%d",op,&l,&r,&x);
if (
op == 'M') modify (l,r,x);
else printf ("%d\n",query (l,r,x));
}
return 0;
}

标签:cnt,return,int,P2801,魔法,pos,len,mid,教主
From: https://www.cnblogs.com/incra/p/17497897.html

相关文章

  • P2801 教主的魔法 题解
    一、题目描述:给你一个长度为$n$的序列$a$,你需要进行$m$次操作。$类型\1\:将区间\l\到\r\的数加\x\。$$类型\2\:求区间\l\到\r\中有多少个数大于等于\x\。$数据范围:$1\len\le1\times10^6,m\le3\times10^3$ 二、解题思路:......
  • LonLife-ACM 1129 - 喵哈哈村的战斗魔法师丶坏坏い月
    原题链接1129-喵哈哈村的战斗魔法师丶坏坏い月TimeLimit:3s MemoryLimit:256MByteSolved:85DESCRIPTION坏坏い月是月大叔的ID,他是一个掌握者772002种魔法的物理系战士,最擅长的技能就是搞事。今天他又要开始搞事了。nn个数,你需要实现一下操作:lrv,在[l,r]......
  • 算法刷题记录:P4924 [1007]魔法少女小Scarlet
    题目链接https://www.luogu.com.cn/problem/P4924题目分析题意为将以[x,y]为中心某个矩阵,逆时针/顺时针旋转。所以其本质就是矩阵的旋转,所以找出通项公式即可。通项公式:顺时针:x后=x+y-y原,y后=y-x+x原逆时针:x后=x-y+y原,y后=x+y-x原AC代码//Problem:P4924[1007]魔法少......
  • 题解 BZOJ4399 魔法少女LJJ
    前言XXX:你瞅你长得那个B样,俺老孙就(氧化钙)......这魔法(J8)少女能不能去死啊啊啊啊啊啊啊啊啊啊......正文"LJJ你是来搞笑的吧"你说得对,但是这数据就是骗人的.首先看题面:然后看样例:最后看数据范围:我惊奇的发现\(c\le7\)!家人们我真难绷qaq...问题分析显......
  • 14dayPythonTask7-类与对象+魔法函数
    目录类与对象1.对象=属性+方法2.self是什么?3.Python的魔法方法4.公有和私有5.继承6.组合7.类、类对象和实例对象8.什么是绑定?9.一些相关的内置函数(BIF)练习题魔法方法1.基本的魔法方法2.算术运算符3.反算术运算符4.增量赋值运算符5.一元运算符6.属性访问7.描......
  • 魔法少女LJJ
    魔法少女LJJ题目描述:在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ已经觉得自己见过世界上的所有稀奇古怪的事情了LJJ感叹道“这里真是个迷人的绿色世界,空气清新、淡雅,到处散发着醉人的奶浆味;小猴在枝头悠来荡去,好不自在;各式各样的鲜花争相开放,各种树枝的......
  • bzoj4399: 魔法少女LJJ
    bzoj4399:魔法少女LJJ题目描述在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ已经觉得自己见过世界上的所有稀奇古怪的事情了LJJ感叹道“这里真是个迷人的绿色世界,空气清新、淡雅,到处散发着醉人的奶浆味;小猴在枝头悠来荡去,好不自在;各式各样的鲜花争相开放,......
  • 【2023 · CANN训练营第一季】——Ascend C算子背后的魔法
    前言:TIKC++,2023年CANN的一个神奇魔法,得益于TIKC++算子的孪生调试技术,我们可以了解到更多的技术细节,本文试图对隐藏在多核并行,流水计算、dobulebuffer背后的CANNAscendC算子魔法进行摸索和理解,是什么样的技术让用户编写的简单代码可以先实现上述神奇的功能。本文没有请专业人士......
  • 黑色魔法- Method Swizzling
    开发需求如果产品经理突然说:”在所有页面添加统计功能,也就是用户进入这个页面就统计一次”。我们会想到下面的一些方法:-手动添加直接简单粗暴的在每个控制器中加入统计,复制、粘贴、复制、粘贴…上面这种方法太Low了,消耗时间而且以后非常难以维护,会让后面的开发人员骂死的。-继承......
  • P2801 教主的魔法
    点击查看代码#include<bits/stdc++.h>#definels(k<<1)#definers(k<<1|1)#definemid(l+r>>1)#defineintlonglongusingnamespacestd;intn,m;charopt;constintN=1e6+7;ints[N<<2],a[N],lazy[N<<2];intmaxx[N<<2......