首页 > 其他分享 >Collecting Numbers II

Collecting Numbers II

时间:2024-07-31 20:38:55浏览次数:12  
标签:Collecting loc cout int II Numbers && ans swap

原题链接

题解

首先,对于数字 i 如果location[ i ] < location[ i -1 ] 那么遍历次数需要+1,否则不变。

因此,对于交换的数字 x , y 而言,他们只能影响 x-1 , x+1 , y-1 , y+1 的遍历次数,只需要考虑有限的几种情况即可(需要特判 abs(x-y)==1 的情况)。

code

 

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,m,a[N],loc[N],ans=1;

void solve(int x,int y){
    if (a[x]>1 && loc[a[x]-1]>loc[a[x]] && loc[a[x]-1]<=y) ans--;
    if (a[x]<n && loc[a[x]+1]>loc[a[x]] && loc[a[x]+1]<=y) ans++;
    
    
    if (a[y]>1 && loc[a[y]-1]<loc[a[y]] && loc[a[y]-1]>=x) ans++;
    if (a[y]<n && loc[a[y]+1]<loc[a[y]] && loc[a[y]+1]>=x) ans--;

    if (a[x]-a[y]==1) ans++;
    if (a[y]-a[x]==1) ans--;
}

int main(){
    cin>>n>>m;
    for (int i=1;i<=n;i++){
        cin>>a[i];
        loc[a[i]]=i;
    }
    for (int i=2;i<=n;i++){
        ans+=loc[i]>loc[i-1] ? 0 : 1;
    }
//    cout<<ans<<endl;
    
    int x,y;
    while (m--){
        cin>>x>>y;
        if (x>y) swap(x,y);
        
        solve(x,y);
        
        swap(loc[a[x]],loc[a[y]]);
        swap(a[x],a[y]);
        cout<<ans<<endl;
    }
    return 0;
}

 

标签:Collecting,loc,cout,int,II,Numbers,&&,ans,swap
From: https://www.cnblogs.com/purple123/p/18335427

相关文章

  • 代码随想录训练第三十一天|LeetCode1049.最后一块石头的重量II、LeetCode494.目标和、
    文章目录1049.最后一块石头的重量II思路一维数组二维数组494.目标和思路一维数组解法二维数组解法474.一和零思路1049.最后一块石头的重量II有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一......
  • 代码随想录训练第三十二天|完全背包理论基础、LeetCode518.零钱兑换II、LeetCode377.
    文章目录完全背包理论基础完全背包总结518.零钱兑换II思路一维数组二维数组377.组合总和Ⅳ思路卡码网70.爬楼梯(进阶版)思路完全背包理论基础完全背包有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品都有无......
  • IIS6.1+ASP+ACCESS网站迁移
    1.首先在源web服务器IIS管理器中将要迁移的网站停止,然后将要迁移的网站整个目录拷贝到目标服务器相同目录下;2.通过cmd命令进到源web服务器inetsrv目录:cd/dc:\windows\system32\inetsrv3.使用以下命令将源web服务器中IIS应用程序池配置信息导出:appcmdlistapppool/config/......
  • 第五十六天 第十一章:图论part06 108.冗余连接 109. 冗余连接II
    108.冗余连接继续使用查并集的方法,如果两个元素是在一个集合,那么我们就输出,反之加入集合。#include<iostream>#include<vector>usingnamespacestd;intN;vector<int>father=vector<int>(1001,0);voidinit(){for(inti=0;i<=N;i++){father[i]=i;......
  • Collecting Numbers II
    原题链接题解如果一个\(k\),其前面没有出现过\(k-1\),那么回合数+1,我们令这样的数叫做断点因此交换两个数\(l,r\)不会影响\([1,l-1],[r+1,n]\)内的断点code#include<bits/stdc++.h>#definelllonglong#definelowbit(x)((x)&(-x))usingnamespacestd;constll......
  • 文件解析漏洞总结(IIS,NGINX,APACHE)
    目录一、IIS解析漏洞IIS6.X方式一:目录解析方式二:畸形文件解析IIS7.X利用条件环境配置下载链接:二、Nginx解析漏洞2.1:nginx_parsing利用条件利用姿势2.2:CVE-2013-4547影响版本利用姿势三、Apache解析漏洞3.1:apache_parsing利用姿势3.2:CVE-2017-15715影响版......
  • UCOSIII的中断和时间管理
    前言UCOSIII(也称为µC/OS-III)的中断管理是其实时操作系统(RTOS)功能的重要组成部分。中断是CPU的一种常见特性,用于向CPU通知异步事件的发生,使得CPU能够暂停当前正在执行的程序,转而执行中断服务程序(ISR)。在UCOSIII中,中断管理涉及多个方面,包括中断嵌套、中断服务程序的编写、临界......
  • Bracket Sequences II
    原题链接题解一个合法的括号序列,满足长度为偶数前缀和处处不小于0左括号等于右括号数量code#include<bits/stdc++.h>#definelllonglong#definelowbit(x)((x)&(-x))usingnamespacestd;constllinf=1e18;constllmod=1e9+7;llqpow(lla,lln){......
  • LeetCode - #107 二叉树的层序遍历 II
    文章目录前言1.描述2.示例3.答案关于我们前言我们社区陆续会将顾毅(Netflix增长黑客,《iOS面试之道》作者,ACE职业健身教练。)的Swift算法题题解整理为文字版以方便大家学习与阅读。LeetCode算法到目前我们已经更新到105期,我们会保持更新时间和进度(周一、......
  • 字符串——1.反转字符串II
    力扣题目链接给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k个字符中的前k个字符。如果剩余字符少于k个,则将剩余字符全部反转。如果剩余字符小于2k但大于或等于k个,则反转前k个字符,其余字符保持原样。示例:输入:s="abcdefg",k=......