poj 2887 块状数组/线段树

Debian安装与基本使用:详细指南及常见问题解析 示例: 使用parted创建分区(假设设备名为sda)bash。 阅读详情

Big String
Time Limit: 1000MS Memory Limit: 131072K
Total Submissions: 5952 Accepted: 1405

Description

You are given a string and supposed to do some string manipulations.

Input

The first line of the input contains the initial string. You can assume that it is non-empty and its length does not exceed 1,000,000.

The second line contains the number of manipulation commands N (0 < N ≤ 2,000). The following N lines describe a command each. The commands are in one of the two formats below:

  1. I ch p: Insert a character ch before the p-th character of the current string. If p is larger than the length of the string, the character is appended to the end of the string.
  2. Q p: Query the p-th character of the current string. The input ensures that the p-th character exists.

All characters in the input are digits or lowercase letters of the English alphabet.

Output

For each Q command output one line containing only the single character queried.

Sample Input

ab
7
Q 1
I c 2
I d 4
I e 2
Q 5
I f 1
Q 3

Sample Output

a
d
e

Source

字符串总长度不超过10^6,插入操作不超过2000次。可以用块状数组存储字符串,比如10^6分成1000行存,每行1000个,并用len[]数组记录每行的字符串长度。插入第k个就找到第k个字符应该属于哪一行,直接插入,操作次数也不超过改行字符串长度也就是几千。

块状数组思想是平方分割法,将长度为n的数组分sqrt(n)块,每个长度为n/sqrt(n)=sqrt(n),对每个区间进行操作只需要O(sqrt(n))的复杂度。

这题是插入和查询第k个点,一般还可以用线段树离线输出结果。先把所有的查询和插入都进来,倒叙模拟插入,用线段树更新和统计区间和。


#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>

using namespace std;

#define maxn 1001

char s[maxn*maxn];
char a[maxn][maxn*3]; //插入最多2000次,每行最多3000个
int len[maxn];  //记录每一行字符个数
const int b = 1000; //默认分成最多1000行
int row; //共几行

char query(int k) //查询第k个
{
    int cnt = 0;
    for(int i = 0; i < row; i++){
        if(cnt+len[i]>= k){
            return a[i][k-cnt-1];
        }
        cnt+=len[i];
    }
}

void add(char ch, int k) //插入到第k个
{
    int cnt = 0;
    int r;
    for(int i = 0; i < row; i++){
        if(cnt+len[i] >= k){
            r = i;
            break;
        }
        if(i == row-1) {r = row-1; break;}
        cnt+=len[i];
    }

    int pos = k-cnt-1;
    if(pos >= len[r]) pos = len[r];
    for(int i = len[r]; i >= pos+1; i--)
        a[r][i] = a[r][i-1];
    a[r][pos] = ch;
    len[r]++;

}

int main()
{
    while(scanf("%s", s)==1){
             memset(len, 0, sizeof(len));
            int slen = strlen(s);
            int perl = (slen+b-1)/b; //每行保存的字符个数

            row = (slen-1)/perl+1; //共多少行
            for(int i = 0; i < row; i++) len[i] = perl;
            for(int i = 0; i < slen; i++)
                a[i/perl][i%perl] = s[i];
            len[row-1] = (slen-1)%perl+1;

            int n;
            scanf("%d", &n);
            while(n--){
                char op[3];
                int k;

                scanf("%s", op);
                if(op[0] == 'Q'){
                    scanf("%d", &k);
                    printf("%c\n", query(k));
                }
                else{
                    scanf("%s %d", op, &k);
                    add(op[0], k);
                }
            }
    }
    return 0;
}



(五)Debian系统--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目> Debian GNU/Linux 是 Linux 操作系统的一个特定发行版,以及在其上运行的众多软件包。Debian项目由 Ian Murdock 于 1993 年发起,是在Linux发行版的概念还很新的时候获得广泛认可的首批自由软件项目之一。Debian 这个名字——发音为 deb-EE-uhn——是一个合成词,它混合了创建者的名字 Ian 和他妻子 Debra 的名字。 阅读详情

相关推荐

Debian操作系统常用命令

本文详细介绍了Debian操作系统中常用的命令,涵盖了文件和目录操作、文本处理、系统管理、软件包管理、网络管理等多个方面。掌握这些命令,将有助于读者更好地使用和管理Debian系统,提高工作效率。在实际工作中,读者可以根据需要灵活运用这些命令,解决各种问题和任务。

u013558123的博客 5452

linux debian教程,Debian安装全攻略

工作需要,重新安装Debian6.06 ,由于Debian 是比较纯洁的系统(相比Ubuntu,呵呵),所以绝大多数都需要手动修改!下面详述新装Debian系统需要做的工作:一、修改源# su 进入root模式# vim /etc/apt/sources.list 打开源文件下面是我使用的源:deb http://mirrors.163.com/debian squeeze main cont...

weixin_28930803的博客 2万+

【白话系列】倍增算法

【序言】         我认为吧,所有能够优化复杂度的算法都是神奇的,所有能够化繁琐为形象的文字都是伟大的。一直觉得倍增算法是个很神奇的东西,所以决定写点东西纪念一下它。但是作为一个非常不称职的OIER,我非常讨厌在看别人的算法解析时整版的i,j,k等我看到鼠标就惯性移到右上角的符号语言,所以我想用最形象的方式来纪念它。 【一】         从前,有一只可爱得不得了的小白兔,它想从

JarjingX 3万+

CentOS、Ubuntu、Debian三个linux比较异同

Linux有非常多的发行版本,从性质上划分,大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本。 商业版本以Redhat为代表,开源社区版本则以debian为代表。这些版本各有不同的特点,在不同的应用领域发挥着不同的作用,不能一概而论。而绝大多数VPS上只提供开源社区维护的发行版本。下面就这些不同的Linux发行版进行简单的分析。 Ubuntu Ubuntu近

鲵之风采的专栏 3万+

夜间灯光遥感数据介绍及下载汇总

夜间灯光遥感数据介绍及下载汇总

qq_43874102的博客 1万+

从零到一:Ubuntu22.04下VSCode与中文输入法的深度整合指南

本文详细介绍了在Ubuntu22.04系统中如何深度整合VSCode与中文输入法,包括环境准备、安装方案对比、输入法配置及常见问题解决方案。通过fcitx框架优化中文输入体验,提供从基础设置到高级调试的全方位指南,帮助开发者提升在Linux环境下的开发效率。

weixin_29158047的博客 477

Debian是什么?有哪些常用命令

Debian是什么?与CentOS的区别,它们的优缺点是什么?有哪些不同的运用场景?

软件行业技术文化交流。 6924

IEC61850 通信协议测试验证实战指南:从理论到实践

本文提供了一份IEC61850通信协议从理论到实践的完整测试验证实战指南。针对MMS、GOOSE、SV三大核心协议,详细阐述了测试环境搭建、自动化脚本编写、性能与异常测试方法,并分享了常见避坑经验,旨在帮助工程师通过系统化的测试验证,确保电力自动化设备在现场的互联互通与稳定可靠运行。

neovim7hacker的博客 155

debian安装和基本使用

本文旨在全面介绍Debian系统的安装与基本使用方法,帮助读者了解并熟悉这一强大的Linux发行版。首先,文章概述了Debian系统的特点及其与其他Linux发行版的区别,强调了Debian的稳定性和广泛的软件支持。 在安装部分,文章详细描述了Debian的安装过程。接下来,文章介绍了Debian的基本使用方法,包括登录与注销、桌面环境介绍、文件管理、软件包管理以及系统设置与配置等方面。

博客虽小,世界尽在其中 1万+

【自动驾驶端到端5:VADv2: End-to-End Vectorized Autonomous Driving via Probabilistic Planning】

从大规模人类驾驶演示中学习类人驾驶策略是有希望的。但是,规划的不确定性使得从驾驶演示中提取驾驶知识是有挑战性的。从统计学习的角度来看,动作(包括实际和速度)是高度随机的,受许多无法建模的潜在因素影响。

weixin_40000560的博客 1404

Ubuntu 系统下安装 OpenClaw(原 Clawdbot)的详细指南

Ubuntu 系统下安装 OpenClaw(原 Clawdbot)的详细指南

Science prince的博客 3535

初识块状数组/块状链表(讲解+ 例题)

As we all known.数组定位的复杂度为O(1),插入删除的复杂度是O(n) 链表定位的复杂度是O(n),插入删除的复杂度是O(1) 块状数组结合了链表和数组的优点,使得所有操作的复杂度均为O(√n) 代码:#include #include #include #include #include #include #define ll long long using n

AI_xue 6093

数学建模学习(120):使用Python实现基于AHP的供应商选择分析

使用Python实现基于AHP的供应商选择分析

全栈川川 911

poj 2887 块状数组

Big String Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 7116   Accepted: 1701 Description You are given a string and supposed to do some string manipul

菜鸟的进阶之路 466

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

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

深入了解 Debian:强大功能的秘密与常用命令的魔法

在工作中,掌握一些 Debian 常用命令可是至关重要的哦~最近,我手头的项目需要搭建一批 Debian 系统做服务器,所以呢,我就抽空整理了一套 Debian 常用命令,希望能帮到大家!这些命令可以帮你轻松管理系统、安装软件、配置网络等。在使用这些命令之前,建议你先了解一下它们的基本语法和参数哦!希望这篇文章能帮你更好地掌握 Debian 常用命令,提高工作效率!

qq_57930963的博客 5498

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Debian系统详解

◦ 稳定版:如 Bullseye(11)(2021 年)、Bookworm(12)(2023 年)、Trixie(13)(预计 2025 年)。◦ x86-64(amd64)、x86(i386)、ARM64(aarch64)、ARMhf(armhf,用于树莓派等)。• 兼容性:可运行在物理机、虚拟机(VMware/VirtualBox)、容器(Docker)及云平台(AWS/GCP)。稳定版(Stable) 经过严格测试,更新周期长(约 2-3 年),软件版本保守但兼容性极佳。服务器、生产环境、桌面。

bulita great world 3894

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

debian11 debian12 安装图解 服务器+桌面

debian11、12图解安装,详细,服务器和桌面都有

ziqibit的博客 3万+

【学习整理】Debian12 系统安装

若你想要适配exsi服务器,可选择exsi7.0等进行适配。

Huajipu的博客 6330

Debian VS Ubantu

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

weixin_63021261的博客 1275

Linux最复杂的命令-find命令

find 在指定目录下查找文件 补充说明 find命令 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 语法 find(选项)(参数) 选项 -amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算; -anewer&l...

DoubleJing的博客 2415

Debian与Ubuntu到底有什么不同,应该如何选择?

镜像下载、域名解析、时间同步请点击 阿里云开源镜像站 在CentOS转向CentOS Stream之后,这意味着它将变得不可靠。 但是幸好,仍然有非常优秀的Linux发行版本在等我们。其中比较有知名度的是Ubuntu以及Debian。 我们经常听到的一句话是: Ubuntu is based on Deibian 那它们究竟有什么区别,如果让你来选择,你要如何选择? 这篇文章中,我将简单的说明一下Ubuntu与Debian究竟有什么不同,它们两者究竟是个什么关系,也许能有助于你做出更好的选择。 1. Ubu

m0_60028455的博客 1万+

Debian项目实战——环境搭建篇

1、:根据自己的需要选择合适的版本格式:x86 / arm 架构 | 最好下载离线安装版本 |2、3、系统媒介:16G以上U盘最佳。

ningsheng的博客 1799

Debian和Ubuntu啥区别

Debian和Ubuntu啥区别

xie__jin__cheng的博客 3588
上一篇: hdu 4986 Arc of Dream 矩阵快速幂求递推式
下一篇: hdu 4819 二维线段树,单点修改区间查询
HuanTongH
博客等级 码龄12年 7粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值