当前位置: 首页 > wzjs >正文

广州网站建设信科便宜鹤壁搜索引擎优化

广州网站建设信科便宜,鹤壁搜索引擎优化,seo自动优化软件,北京微信网站搭建多少钱题目背景 XLk 觉得《上帝造题的七分钟》不太过瘾,于是有了第二部。 题目描述 "第一分钟,X 说,要有数列,于是便给定了一个正整数数列。 第二分钟,L 说,要能修改,于是便有了对一段数中每…

题目背景

XLk 觉得《上帝造题的七分钟》不太过瘾,于是有了第二部。

题目描述

"第一分钟,X 说,要有数列,于是便给定了一个正整数数列。

第二分钟,L 说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作。

第三分钟,k 说,要能查询,于是便有了求一段数的和的操作。

第四分钟,彩虹喵说,要是 noip 难度,于是便有了数据范围。

第五分钟,诗人说,要有韵律,于是便有了时间限制和内存限制。

第六分钟,和雪说,要省点事,于是便有了保证运算过程中及最终结果均不超过 64 位有符号整数类型的表示范围的限制。

第七分钟,这道题终于造完了,然而,造题的神牛们再也不想写这道题的程序了。"

——《上帝造题的七分钟·第二部》

所以这个神圣的任务就交给你了。

输入格式

第一行一个整数 n,代表数列中数的个数。

第二行 n 个正整数,表示初始状态下数列中的数。

第三行一个整数 m,表示有 m 次操作。

接下来 m 行每行三个整数 k l r

  • k=0 表示给 [l,r] 中的每个数开平方(下取整)。

  • k=1 表示询问 [l,r] 中各个数的和。

数据中有可能 l>r,所以遇到这种情况请交换 l 和 r。

输出格式

对于询问操作,每行输出一个回答。

输入输出样例

输入 #1复制

10
1 2 3 4 5 6 7 8 9 10
5
0 1 10
1 1 10
1 1 5
0 5 8
1 4 8

输出 #1复制

19
7
6

说明/提示

对于 30% 的数据,1≤n,m≤103,数列中的数不超过 32767。

对于 100% 的数据,1≤n,m≤105,1≤l,r≤n,数列中的数大于 0,且不超过 1012。

代码实现:

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

typedef long long ll;
const int MAXN = 1e5 + 10;

// 线段树节点结构
struct Node {
    int l, r;
    ll sum;
    ll max_val; // 区间内最大值,用于判断是否需要继续开平方
} tree[MAXN << 2];

ll arr[MAXN]; // 原始数组

// 构建线段树
void build(int node, int l, int r) {
    tree[node].l = l;
    tree[node].r = r;
    if (l == r) {
        tree[node].sum = arr[l];
        tree[node].max_val = arr[l];
        return;
    }
    int mid = (l + r) >> 1;
    build(node << 1, l, mid);
    build(node << 1 | 1, mid + 1, r);
    tree[node].sum = tree[node << 1].sum + tree[node << 1 | 1].sum;
    tree[node].max_val = max(tree[node << 1].max_val, tree[node << 1 | 1].max_val);
}

// 区间开平方操作
void update(int node, int l, int r) {
    // 如果当前区间与目标区间无交集或区间最大值为1(无需再开平方),直接返回
    if (tree[node].r < l || tree[node].l > r || tree[node].max_val == 1) {
        return;
    }
    // 如果当前区间完全包含在目标区间内且是叶子节点
    if (tree[node].l == tree[node].r) {
        tree[node].sum = (ll)sqrt(tree[node].sum);
        tree[node].max_val = tree[node].sum;
        return;
    }
    // 递归更新左右子树
    update(node << 1, l, r);
    update(node << 1 | 1, l, r);
    // 更新当前节点的和与最大值
    tree[node].sum = tree[node << 1].sum + tree[node << 1 | 1].sum;
    tree[node].max_val = max(tree[node << 1].max_val, tree[node << 1 | 1].max_val);
}

// 区间求和查询
ll query(int node, int l, int r) {
    // 如果当前区间与目标区间无交集,返回0
    if (tree[node].r < l || tree[node].l > r) {
        return 0;
    }
    // 如果当前区间完全包含在目标区间内,返回当前区间和
    if (l <= tree[node].l && tree[node].r <= r) {
        return tree[node].sum;
    }
    // 递归查询左右子树并求和
    return query(node << 1, l, r) + query(node << 1 | 1, l, r);
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> arr[i];
    }
    
    // 构建线段树
    build(1, 1, n);
    
    int m;
    cin >> m;
    while (m--) {
        int k, l, r;
        cin >> k >> l >> r;
        if (l > r) swap(l, r); // 处理l>r的情况
        
        if (k == 0) {
            // 开平方操作
            update(1, l, r);
        } else {
            // 求和查询
            cout << query(1, l, r) << endl;
        }
    }
    
    return 0;
}

http://www.dtcms.com/wzjs/28267.html

相关文章:

  • 毕业设计h5网站制作最新的疫情情况
  • 做科技公司的网站公司今天发生的重大新闻
  • 东莞公司网站建设小知识今天全国疫情最新消息
  • 北京网络公司有哪些seo数据统计分析工具有哪些
  • 网站建设色系搭配公司做个网站多少钱
  • 化妆品网站建设思路东莞网站自动化推广
  • 设计网站公司 生活湖南岚鸿搜索引擎分哪三类
  • 网站建设的目的是什么域名解析查询工具
  • b2b网站开发合同商务网站建设
  • 焦作建设网站的公司网站在线制作
  • 做网站定金是多少钱网站快速优化排名排名
  • 网站地图模板下载怎样在百度答题赚钱
  • 旅游电子商务网站的建设淘宝搜索关键词排名查询工具
  • dede单本小说网站源码关键词投放
  • 福州网站建设网络公司南宁seo公司哪家好
  • 免费的发帖收录网站在哪里做推广效果好
  • 企业还有人做网站么网站超级外链
  • app是如何开发出来的杭州seo按天计费
  • p2p网站建设公司排名各种推广平台
  • 网站建设的成功之处有哪些站长之家网站介绍
  • 文字做图网站网站查询ip地址查询
  • 网页制作与网站建设试题线上广告推广
  • 义乌网站建设电话企业网站优化排名
  • 济南手机网站定制费用seo推广灰色词
  • 榆林网站开发百度应用
  • 东莞建设培训中心网站百度搜索广告怎么收费
  • 攻击wordpress东莞整站优化
  • 唐山疫情最新消息seo培训网的优点是
  • Wordpress报价主题seo 优化思路
  • 网站建设推广专家西安seo公司