栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Codeforces Round #805 (Div. 3) C. Train and Queries

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Codeforces Round #805 (Div. 3) C. Train and Queries

题意:给出一个长度为n的序列u,序列中的 ui 能到达其右侧的任意一个uj(i

分析:易知对于a若想到达b,那么a必须在b的左侧。在序列 u 中,ui可以出现若干次,故我们可以用map 储存 u 中 ui 出现的最大区间 ,然后根据该区间判断 a 是否能够到达 b。

#include

using namespace std;

const int N=2e5+10;

int a[N];

int main(){
    ios::sync_with_stdio(false);cin.tie(0);cin.tie(0);
    int t;
    cin >> t;
    while(t--){
    map> mp;
    int n,q;
    cin >> n >> q;
    for(int i=1;i<=n;i++){
        cin >> a[i];
        if(mp[a[i]].first==0)
            mp[a[i]].first=i;
        else
            mp[a[i]].first=min(i,mp[a[i]].first);// first 记录 a[i] 区间的左端点
        mp[a[i]].second=max(i,mp[a[i]].second); // second 记录 a[i] 区间的右端点
    }
    while(q--){
        int l,r;
        cin >> l >> r;
        if(mp[l].first==0 || mp[r].first==0){
            cout << "NO" << endl; // 若 l,r 的端点为0,说明l或r不在序列a中,故NO
            continue;
        }
        if(mp[l].first>mp[r].second) cout << "NO" << endl; // 若 l的左端点 大于 r的右端点 无法从l—>r 故NO
        else cout << "YES" << endl;
      }
   }
 return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012112.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号