• 题意:给出一个长度为\(n\)的序列\(a\),根据\(a\)构造一个序列\(b\),要求:

    ​ 1.\(b_{1}=0\)

    ​ 2.对于\(i,j(i\le i,j \le n)\),若\(a_{i}=a_{j}\),则\(b_{i}=b_{j}\)

    ​ 3.对于\(i\in [1,n-1]\),有\(b_{i+1}=b_{i}\)或\(b_{i+1}=b_{i}+1\)

    求有多少可能的\(b\),答案对\(998244353\)取模.

  • 题解:由第二个条件能知道,对于所有\(a_{i}=a_{j}\)相交的区间,区间内的所有元素都必须相等,因为如果这个区间内某个元素\(b_{i+1}=b_{i}+1\),那么对于第二个条件\(b_{i}=b_{j}\)也就不满足了,这样的话,因为第一个区间的值只能为\(0\),假设不相交的区间个数为\(m\),那么答案就是\(2^m-1\).我们反着遍历,记录每个数能达到的最远位置,然后再正着遍历,维护当前区间的右边界,如果达到右边界了,就更新答案.记得忽略掉最后一个区间,而不能全部遍历后再\(/2\),因为要对答案取模,会出现问题.

  • 代码:

    int n;
    int a[N];
    map<int,int> pos;
    int last[N]; int main() {
    //ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    n=read();
    for(int i=1;i<=n;++i){
    a[i]=read();
    }
    for(int i=n;i>=1;--i){
    if(!pos.count(a[i])){
    pos[a[i]]=i;
    }
    last[i]=pos[a[i]];
    }
    ll res=1;
    int mx=0;
    for(int i=1;i<n;++i){
    mx=max(mx,last[i]);
    if(mx==i) res=(2*res)%mod;
    } printf("%lld\n",res); return 0;
    }

Codeforces Round #531 (Div. 3) E. Monotonic Renumeration (构造)的更多相关文章

  1. Codeforces Round #531 (Div. 3) ABCDEF题解

    Codeforces Round #531 (Div. 3) 题目总链接:https://codeforces.com/contest/1102 A. Integer Sequence Dividin ...

  2. Codeforces Round #275 (Div. 1)A. Diverse Permutation 构造

    Codeforces Round #275 (Div. 1)A. Diverse Permutation Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 ht ...

  3. Codeforces Round #531 (Div. 3) F. Elongated Matrix(状压DP)

    F. Elongated Matrix 题目链接:https://codeforces.com/contest/1102/problem/F 题意: 给出一个n*m的矩阵,现在可以随意交换任意的两行, ...

  4. Codeforces Round #531 (Div. 3)

    A:瞎猜. #include <bits/stdc++.h> using namespace std; int main(){ ios::sync_with_stdio(false); i ...

  5. Codeforces Round #531 (Div. 3) D. Balanced Ternary String (贪心)

    题意:给你一个长度为\(3*n\)的字符串,要求修改最少的次数,使得字符串中\(0,1,2\)的个数相同,并且在最少次数的情况下使字典序最小. 题解:贪心,\(0\)一定放在前面,\(1\)和\(2\ ...

  6. Codeforces Round #531 (Div. 3) C. Doors Breaking and Repairing (博弈)

    题意:有\(n\)扇门,你每次可以攻击某个门,使其hp减少\(x\)(\(\le 0\)后就不可修复了),之后警察会修复某个门,使其hp增加\(y\),问你最多可以破坏多少扇门? 题解:首先如果\(x ...

  7. Codeforces Round #531 (Div. 3) B. Array K-Coloring (结构体排序)

    题意:给你\(n\)个数字,用\(k\)种颜色给他们涂色,要求每个数字都要涂,每种颜色都要用,相同的数字不能涂一样的颜色. 题解:用结构体读入每个数字和它的位置,然后用桶记录每个数字出现的次数,判断是 ...

  8. Codeforces Round #342 (Div. 2) C. K-special Tables 构造

    C. K-special Tables 题目连接: http://www.codeforces.com/contest/625/problem/C Description People do many ...

  9. Codeforces Round #140 (Div. 1) D. The table 构造

    D. The table 题目连接: http://www.codeforces.com/contest/226/problem/D Description Harry Potter has a di ...

随机推荐

  1. python学习笔记 | 猜拳游戏

    ''' @author: 人人都爱小雀斑 @time: 2020/3/6 18:52 @desc: 实验结果心得: 1.难点主要在判断谁输谁赢 2.挺好的 ''' import random d={1 ...

  2. CentOS | python3.7安装指南

    前言: centos系统本身默认安装有python2.x,版本x根据不同版本系统有所不同 可通过 python --V 或 python --version 查看系统自带的python版本 有一些系统 ...

  3. requests +httprunne r

    1.get 请求和 post 请求的区别是什么?  2.requests 模拟 get 请求时,有哪两种方式让响应的结果不是乱码?(直接代码描述)  3.requests 库中的 post 方法,参数 ...

  4. char什么时候会用空格进行填充?

    char什么时候会用空格进行填充?

  5. 【EXP】Oracle多表导出问题

    有些时候,需要导入某个用户的一些相关表.但是不知道用户的用户名和密码.这样就很尴尬 但是如果手上有dba权限的用户的话,就很方便的能导出了 先要知道多表导出的语句 exp system/123456 ...

  6. ctfhub技能树—sql注入—过滤空格

    手注 查询数据库 -1/**/union/**/select/**/database(),2 查询表名 -1/**/union/**/select/**/group_concat(table_name ...

  7. 什么是xss攻击

    概述: XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列 表,然后向联 ...

  8. wmic process进程管理

    process    进程管理工具 示例:1.列举当前的进程.进程路径.命令行.进程ID.父进程ID.线程数,内存使用::wmic process get name,executablepath,co ...

  9. 2021年首届.NET线下沙龙上海站 - 2021 .NET Meetup in Shanghai

    .NET Conf 2020 刚刚在苏州落下帷幕, .NET 开发者们的热情不减,来自五湖四海的朋友一起参加疫情之下的 .NET 盛会. 2021年上海第一场线下活动就要来了,快来加入我们一起学习.N ...

  10. Python小度

    这只是一个对话器!还不能听歌(反正我也没在UNIT平台配置听歌的功能)! 反正最近也不知怎么的,就想做一个AI对话器语音识别和语音输出都不要,input()和print()就行本来准备用小爱的,但要实 ...