POJ 2892 树状数组+二分

第 4 课 树莓派5的换源与中文输入法 树莓派换源、中文输入法的安装 阅读详情
POJ2892树状数组+二分

Description

During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plain. Generally speaking, villages connected by tunnels lay in a line. Except the two at the ends, every village was directly connected with two neighboring ones.

Frequently the invaders launched attack on some of the villages and destroyed the parts of tunnels in them. The Eighth Route Army commanders requested the latest connection state of the tunnels and villages. If some villages are severely isolated, restoration of connection must be done immediately!

Input

The first line of the input contains two positive integers n and m (n, m ≤ 50,000) indicating the number of villages and events. Each of the next m lines describes an event.

There are three different events described in different format shown below:

  1. D x: The x-th village was destroyed.
  2. Q x: The Army commands requested the number of villages that x-th village was directly or indirectly connected with including itself.
  3. R: The village destroyed last was rebuilt.

Output

Output the answer to each of the Army commanders’ request in order on a separate line.

Sample Input

7 9
D 3
D 6
D 5
Q 4
Q 5
R
Q 4
R
Q 4

Sample Output

1
0
2
4

Hint

An illustration of the sample input:

OOOOOOO
D 3 OOXOOOO
D 6 OOXOOXO
D 5 OOXOXXO
R OOXOOXO
R OOXOOOO


#include<stdio.h>
#include<string.h>
#define M 50005
int lb[M],stack[M],a[M];
bool b[M];
int n,m;

int sum(int k)
{
    int ans=0;
    while(k>0)
    {
        ans+=a[k];
        k-=lb[k];
    }
    return ans;
}

void insert(int k,int p)
{
    while(k<=n)
    {
        a[k]+=p;
        k+=lb[k];
    }
}

int search(int t)
{
    int l=1,r=n+2;
    int mid,tt;
    while(l<r)
    {
        if(sum(l)==t)
            return l;
        mid=(l+r)/2;
        tt=sum(mid);
        if(t>tt)
            l=mid+1;
        else
            r=mid;
    }
    return l;
}

int main()
{
    int i,j,t,top;
    char s[20];
    for(i=0;i<M;i++)
    {
        lb[i]=i&(-i);
    }
    while(~scanf("%d%d",&n,&m))
    {
        memset(b,0,sizeof(b));
        memset(a,0,sizeof(a));
        top=0;
        insert(n+2,1);
        insert(1,1);
        while(m--)
        {
            scanf("%s",s);
            if(s[0]=='D')
            {
                scanf("%d",&t);
                t++;
                stack[top++]=t;
                b[t]=true;
                insert(t,1);
            }
            else if(s[0]=='R')
            {
                t=stack[--top];
                b[t]=false;
                insert(t,-1);
            }
            else
            {
                scanf("%d",&t);
                t++;
                if(b[t])
                {
                    printf("0\n");
                }
                else
                {
                    t=sum(t);
                    int r=search(t+1);
                    int l=search(t);
                    printf("%d\n",r-l-1);
                }
            }
        }
    }
    return 0;
}
OpenCV实战:高效检测与识别多类型条码与二维码 本文详细介绍了如何利用OpenCV的BarcodeDetector和QRCodeDetector模块,高效实现EAN-13条形码与常见二维码的检测与识别。内容涵盖从环境搭建、单码识别到处理多二维码的完整流程,并分享了提升识别率的图像预处理与性能优化等实战技巧,帮助开发者一站式解决视觉项目中的条码识别需求。 阅读详情

相关推荐

基于 Quest 摄像头数据开发的原理介绍【Unity Meta Quest MR 开发教程】

比如想在识别到的现实物体上叠加虚拟物体,需要知道这个现实物体在 Unity 的世界坐标下的哪个位置,是带有 x,y,z 三个轴的数据的。而 WebCamTexture 捕捉到的图像只是个 2D 的平面,没有三维世界的深度信息,我们通过物体识别算法识别到的物体坐标只是在这个 2D 平面上的一个屏幕坐标,可以理解为 Quest 拍摄了一张照片,我们识别到这张照片上的某个像素点为需要识别的现实物体的中心。是不是看起来比较复杂?Quest 的相机访问功能是在安卓的。

qq_46044366的博客 2106

Tunnel Warfare(线段树)

题目链接:Tunnel Warfare 大致题意 给定一个正整数n, 表示有n个点排成一列, 每个点与其相邻的两点是连通的. 接下来对于区间[1, n]有如下三种操作: ​ ①删除第x个点. ​ ②询问点x所处的最大连通区间的长度 ​ ③最后删除的点被恢复了 解题思路 线段树的单点修改和区间查询. 本题需要维护的量有三个, 当前区间的最大连通长度, 左侧最大连通长度, 右侧最大连通长度. 对于操作一和操作三而言, 我们只需要进行单点修改操作即可. 而对于操作二有如下两种情况: 为了方便书写, 以lmax表示

Fau的博客 1240

ISP调试工程师相关面试问题_001

Qualcomm、MTK等ISP pipeline的框架原理及算法原理,还有调试经验。

notgoodenouf的博客 3552

Tunnel Warfare HDU - 1540(区间线段树)

题目:Tunnel Warfare vjudge提交链接 题意: ——n和村庄,每个村庄都有一个隧道,除了两端的两个村庄外,每个村庄都与相邻的两个村庄直接相连。 输入:n和m,分别代表有n个村庄,m个操作。 接下来m行: D x代表村庄x被破坏。 Q x代表与村庄x直接或者间接相连的个数(算上自己)。 R表示恢复上次被破坏的村庄的隧道。 题解: 先考虑暴力,当询问一个村庄时,可以暴力向左找第一个被摧毁的点,再暴力向右寻找第一个被摧毁的点,两点之间的距离减1就是答案,直接暴力肯定超时。 用线段树来维护

Helinshan的博客 251

libfacedetection 框架阅读及扩展经验

libfacedetection 框架源码解析与扩展心得1. libfacedetection 框架简介2. 源码解析2.1 facedetectcnn.h2.2 facedetectcnn.cpp2.3 facedetectcnn-model.cpp3. 其他层的扩展--depthwise convolution 前段时间因为工作需要,对libfacedetection框架做了些扩展,在阅读源...

weixin_42616332的博客 1500

从URDF到仿真动画:基于Simulink、Simscape与S-Function的机械臂一体化建模与控制

本文详细介绍了从URDF文件到高保真仿真动画的一体化机械臂建模与控制流程。通过整合Simulink、Simscape与S-Function,构建了包含物理特性的虚拟机械臂模型,并实现了自适应滑模等高级控制算法的嵌入与验证。该流程打通了从机械设计到控制算法验证的闭环,为机器人开发提供了高效的仿真平台。

cnn8visionary的博客 700

HDU - 1540(Tunnel Warfare)二分+线段树

题目链接:Tunnel Warfare - HDU 1540 - Virtual Judge (ppsucxtt.cn) 摧毁村庄和重建村庄都比较容易,就是一个线段树的单点修改操作,关键是如何查询与一个村庄直接或间接相关的村庄数量。两个相邻村庄相关需要满足什么条件呢?条件就是他们都没有被摧毁,那么我们就可以类似得到 l,l+1,……,r这些村庄相关的条件就是他们的区间和等于r-l+1,于是我们就知道了如何判断一个区间的村庄是否相关,因此我们就可以二分判断一个村庄左边和右边与它相关的村庄数目,然后加起来减一

AC__dream的博客 251

Android车载多屏开发实战:从零搭建同显/异显Demo(附源码)

本文详细介绍了Android车载多屏开发的实战经验,从零搭建同显/异显Demo,涵盖多屏模拟、核心API调用、同显/异显架构实现及性能优化等关键环节。通过C++构建完整开发链路,帮助开发者快速掌握多屏同显和多屏异显技术,提升智能座舱系统的交互体验。附源码供参考。

weixin_29233857的博客 409

HDU-1540 Tunnel Warfare 题解 线段树特殊储存/set 集合容器红黑树的应用

题目链接:Tunnel Warfare 题目 题意 地~道战 嘿!地~道战 现在有一条地道,告诉你有 n 个出口,沿着地道是 1,2,3,,n 依次排列的 然后有 m 个操作: D x 表示摧毁一个出口 x,摧毁之后 x 这个出口两边的地道不再相连 Q x 是访问于 x 这个出口相连的能用的出口总共有几个,包括 x R 将上一个被摧毁的出口重建 解题思路 法一:从题意来看,就是一个单点更新和...

qq_37504214的博客 411

Redis 可视化工具 RedisInsight 的保姆级安装以及使用(最新)

Redis 可视化工具 RedisInsight 的保姆级安装以及使用(最新)

一名全栈小白的博客 1万+

YOLOv11 网络结构详解:一文看懂 Backbone、Head、C3k2、SPPF 和 Detect 检测头

在使用 YOLOv11 进行目标检测时,我们经常会接触到或这样的模型配置文件。backbone和head分别是什么意思?ConvC3k2SPPFC2PSA这些模块分别起什么作用?P3/8、P4/16、P5/32 代表什么?为什么最后 Detect 要同时接收 3 个不同尺度的特征图?YOLOv11n、YOLOv11s、YOLOv11m、YOLOv11l、YOLOv11x 的区别在哪里?

learnerYC的博客 1816

【poj 2892】Tunnel Warfare 题意&题解&代码(C++)

poj 二分+树状数组

曾经追梦的happy时光 948

为什么我的OpenClaw安装后无法启动?Gateway服务故障排查全攻略

OpenClaw是一款功能强大的自动化工具,但其安装和运行依赖于多个服务组件,其中Gateway服务是核心组件之一。如果Gateway服务无法启动,整个OpenClaw系统将无法正常运行。本文将详细介绍OpenClaw安装后无法启动的常见原因及故障排查方法,帮助你快速定位并解决问题。

一键难忘的博客 4633

POJ-2892: Tunnel Warfare 树状数组+二分做法

POJ-2892: Tunnel Warfare 树状数组+二分 主要参考了这篇博客 http://blog.jobbole.com/96430/ 比较详细地介绍了树状数组的各方面应用。 感觉比较难写的是二分,最好多加几个 Query 测试二分写对没有。 // Tunnel Warfare // http://poj.org/problem?id=2892 #include #inclu

cyz14的博客 400

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

poj2892 树状数组+二分

题意:求0所在位置两点连续0的个数,不断更新某个点,将这个点变成0或1 用数状数组维护这个表,变成0,1就更新某个点,这是树状数组的特长。查询的时候,对两边二分就行了 // // main.cpp // poj2892 // // Created by He Xilin on 12-4-30. // Copyright 2012年 UESTC,ZSC. All rights r

paul08colin 1379

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

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

【POJ 2892】 Tunnel Warfare(树状数组+二分)

【POJ 2892】 Tunnel Warfare(树状数组+二分) Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 7517   Accepted: 3104 Description During the War of Resistance Agai

ACMer' 2024

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【poj 2892】Tunnel Warfare 二分+树状数组

Tunnel Warfare Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 7576 Accepted: 3127DescriptionDuring the War of Resistance Against Japan, tunnel warfare was carried out extensivel

ATOD 1211

POJ-2892(树状数组 + 二分)

题目:http://poj.org/problem?id=2892 poj上1A,但是拿到hdoj1540上却WA了,看了discuss发现在hdoj需要考虑一个村庄被摧毁和恢复多次的情况 #include #include #define MAX 50005 int N, M; int c[MAX] = {0}, b[MAX]; bool a[MAX] = {0}; int s

还有多远 618

POJ 2892-Tunnel Warfare【树状数组+二分】

题意: 有几个村庄,D a表示a村庄被摧毁,R表示修复上一个村庄,Q a表示包含a的连续村庄有多少个,如果a被摧毁则输出0。 D x: Thex-th village was destroyed. 第x个村庄被摧毁 Q x: The Army commands requested the number of villages thatx-th village was directly ...

独钓门前月 381

poj 2892 Tunnel Warfare(树状数组+二分)

Tunnel Warfare Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 7707   Accepted: 3181 Description During the War of Resistance Against Japan, tunnel warfar

TUT我好菜啊 512

POJ 2892 树状数组 + 二分

Tunnel WarfareTime Limit: 1000MS Memory Limit: 131072KTotal Submissions: 9156 Accepted: 3782DescriptionDuring the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vas...

Unyielding will 229

POJ 2892 Tunnel Warfare (树状数组+二分)

题目大意: 三个操作 D pos  将pos位置摧毁,让它和周围不相连。 Q pos 问和pos 相连的有多少个村庄。 R 修复最近摧毁的村庄。 思路分析: 树状数组记录这个区间有多少个1。 如果  [s-e] 有e-s+1个1 的话。那么这个区间是相连的。 这样的话,我们就可以用二分的办法求出与某个位置最大相连的数量。 还有这里二分 while(l { i

Jinx Jinx again 865

poj 2892(二分+树状数组)

Tunnel Warfare Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 7749 Accepted: 3195 Description During the War of Resistance Against Japan, tunnel warfare ...

weixin_30493401的博客 117

POJ 2892 Tunnel Warfare(树状数组+二分)

题目链接 二分求上界和下界,树状数组。注意特殊情况。 1 #include <cstring> 2 #include <cstdio> 3 #include <string> 4 #include <iostream> 5 #include <algorithm> 6 #include <v...

weixin_30401605的博客 107

poj 2892 Tunnel Warfare(树状数组+二分)

#include #include #include #include #include using namespace std; #define N 55010 int c[N],a[N],v[N]; int lowbit(int x) { return x&(-x); } void add(int x,int d) { while(x<N) { c[x

但求心安的博客 389

POJ-2892/HDU-1540 Tunnel Warfare (树状数组+二分查找)

Tunnel Warfare Time Limit:1000MS Memory Limit:131072K Total Submissions:9766 Accepted:4048 Description During the War of Resistance Against Japan, tunnel warfare was carried ...

pxlsdz的博客 518
上一篇: POJ 2181
下一篇: POJ 2352 线段树
MakingMaker
博客等级 码龄15年 6粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值