首页 > 其他分享 >P9286 [ROI 2018] Extraction of radium

P9286 [ROI 2018] Extraction of radium

时间:2023-06-07 18:22:23浏览次数:64  
标签:ROI 标记 int 最大值 vis 2018 ans P9286 include

来一发简单做法

题目链接:P9286 [ROI 2018] Extraction of radium

通过读题目,我们不难想到,找到既是横向最大值又是纵行最大值的位置,可以单独处理横向和纵向,满足一个方向的最大值就标记一次,那么标记两次的位置就是当前局面的一个可行点。这样静态操作就明晰了。

现在考虑动态操作,把一个点的值改的比之前大,如果之前这个点事可行的,改的更大之后一定依旧满足。如果之前不是可行点,可是现在比所在列的最大值大,或者比所在行的最大值大,那么就更新标记。

更新标记的操作无非就是把之前的标记抹去,添加新标记,用 \(x\) 数组储存每一行的最大值所在列,用 \(y\) 数组储存每一列的最大值所在行,更新一下 \(x\) 数组和 \(y\) 数组即可。

这里使用动态数组来实现,注意下标。

见代码:

#include<iostream>
#include<cstdio>
#include<queue>
#include<cmath>
#include<cstring>
#include<vector>
using namespace std;
int x[200001],y[200001];
vector<int>a[200001];
vector<int>vis[200001];
int main()
{
    int n, m, q, ans = 0;
    scanf("%d%d%d",&n, &m, &q);
    for(int i = 0;i <= n - 1; i++){
        a[i].resize(m,0);
        vis[i].resize(m,0);
        for(int j = 0;j <= m - 1; j++){
            scanf("%d",&a[i][j]);
            if(a[i][j] > a[i][x[i]]){
                x[i] = j;
            }
            if(a[i][j] > a[y[j]][j]){
                y[j] = i;
            }
        }
    }
    for(int i = 0;i <= n - 1; i++){
        vis[i][x[i]]++;
    }
    for(int j = 0;j <= m-1; j++){
        vis[y[j]][j]++;
    }
    for(int i = 0;i <= n - 1; i++){
        for(int j = 0;j <= m - 1; j++){
           if(vis[i][j] == 2) ans++; 
        }
    }
    for(int i, j, w, o = 1;o <= q; o++){
        scanf("%d%d%d",&i, &j, &w);
        i--;
        j--;
        a[i][j] = w;
        if(vis[i][j] == 2)
        {
            printf("%d\n",ans);
            continue;
        }
        if(a[i][j] > a[i][x[i]]){
            if(vis[i][x[i]] == 2){
                ans--;
            }
            vis[i][x[i]]--;
            x[i] = j;
            vis[i][x[i]]++;
            if(vis[i][x[i]] == 2){
                ans++;
            }
        }
        if(a[i][j] > a[y[j]][j]){
            if(vis[y[j]][j] == 2){
                ans--;
            }
            vis[y[j]][j]--;
            y[j] = i;
            vis[y[j]][j]++;
            if(vis[y[j]][j] == 2){
                ans++;
            }
        }
        printf("%d\n",ans);
    }
	return 0;
}

标签:ROI,标记,int,最大值,vis,2018,ans,P9286,include
From: https://www.cnblogs.com/iruiforever/p/17464212.html

相关文章

  • android-脱离AndroidStudio使用AVD
    android-脱离AndroidStudio使用AVD实际上,AVD不需要AndroidStudio图形界面也能独立运行。直接启动模拟器的方法是在终端中输入emulator-avd模拟器名称。默认情况下,emulator程序在C:\Users\users\AppData\Local\Android\Sdk\emulator\文件夹中。进入此文件夹,为emulator.exe......
  • Android获取当前连接的wifi名称
    首先AndroidMainfest.xml文件里加入权限: <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><!--获取WIFI信息状态的权限--><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><!--获取网络状态改......
  • Android开发 ViewDragHelper使用讲解
     前言  ViewDragHelper需要自定义ViewGroup实现,并且只是针对ViewGroup里的子View进行拖放,在拖放的过程中不能携带数据。也不能跨进程,甚至不能跨activity。所以ViewDragHelper本质上更像是一个ViewGroup里简单实现拖放效果的帮助类。 一个简单拖动的例子  快速了解一下,......
  • [BUUOJ]铁人三项(第五赛区)_2018_rop
    铁人三项(第五赛区)_2018_ropchecksec看到保护全关,进IDA分析就是很简单的一串逻辑,在第二个函数处看到了明显的溢出,但是题目里面没有直接提供shell相关操作,所以判断本题为ret2libc,题目中给到了write函数,所以考虑使用write函数来泄露关于write参数fd我找到了如下解释write()writesu......
  • Android音频收集和播放
    一、文章说明这篇文章主要讲述的是Android中使用AudioRecord类和AudioTrack类来进行语音采集和播放相关的知识,在这篇文章中首先介绍的是有关声音的一些概念性知识,然后介绍声音的采集,之后再讲述Android上回声消除的相关步骤,最后介绍的是声音的播放。二、概念性知识点在这里关于......
  • Citect 2018 R2报警弹窗的实现方法
    我在新浪博客发表过这一篇学习笔记,不过新浪博客审查机制一直把其作为私密状态,可能出发了某些敏感机制吧。我在这里再记录一遍,以免丢失。我们现场有一个变频器室,周末发生了变频器空调坏掉,温度高,变频器停机造成生产中断的情况。由于变频器室无人值守,领导希望把变频器室的温度接入控......
  • 2018年湖南省对口高考计算机应用类《网络》部分试题分析
    ......
  • 防止Android截屏
    一、背景介绍对于涉及用户个人隐私的应用,比如银行、支付、社交等应用,其界面中可能会涉及到用户的个人信息,比如手机号、身份证号码、交易记录等。如果这些信息被人截屏,就可能会造成用户个人隐私的泄露。另外一方面,一些企业和开发者可能会开发一些自己的知识产权应用,比如游戏、新......
  • android应用启动的时候添加图片,并设置跳过按钮
    要在显示图片时添加跳过按钮,可以使用AndroidSDK提供的splashscreen资源文件,并在布局文件中使用。以下是添加跳过按钮的一般步骤:1.在AndroidManifest.xml文件中的应用程序标签中添加以下行:android:splashScreen="res/drawable/splash_screen.png"这将指定使用spla......
  • iTOP-3588开发板Android12源码定制开发uboot开发
    uboot开发-Uboot源码是v2017.09版本。目前在该平台上已经支持RK所有主流在售芯片。支持的功能主要有:支持RKAndroid固件启动;支持AndroidAOSP固件启动;支持LinuxDistro固件启动;支持Rockchipminiloader和SPL/TPL两种Pre-loader引导;支持LVDS、EDP、MIP......