首页 > 其他分享 >CF1746C(构造)

CF1746C(构造)

时间:2022-10-16 19:46:16浏览次数:76  
标签:CF1746C int rep 构造 long 操作 include define

CF1746C(构造)

https://codeforces.com/contest/1746/problem/c

题意

给一个排列,进行 \(n\) 次操作,第 \(i\) 次操作可以将任意指定长度的后缀加 \(i\)。问经过 \(n\) 次操作后,能使逆序最小的操作方案。

思路

首先可以发现,后面的数一定比前面的数有更多的增量,所以若干次操作不会让后缀产生新的逆序,每次操作只会让逆序数不增。于是,我们只需要考虑操作一次后和前缀的关系。

然后如果我们每次只考虑增量区间的端点,\(n\) 次操作可以构造出 \(n\) 个 \(n+1\) 。当然这是在不考虑区间加,仅考虑每次操作对端点的影响,但是又由于上面说的,每次操作不会对后缀产生新的逆序,于是忽略除端点外的区间是可行的。

于是,构造单点更新情况下的 \(n\) 个 \(n+1\)就可以得到答案。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<set>
#include<bitset>
#include<queue>
#include<map>
#include<stack>
#include<string>
#include<random>
#include<cassert>
#include<functional>
#include<iomanip>
#define inf 0x3f3f3f3f
#define linf 0x3f3f3f3f3f3f3f3fll
#define endl '\n'
#define ll long long
#define int long long
#define SZ(x) (int)x.size()
#define rep(i,a,n) for(int i = (a);i <= (n);i++)
#define dec(i,n,a) for(int i = (n);i >= (a);i--)
using namespace std;
using PII = array<int,2>;
mt19937 mrand(random_device{}());
int rnd(int x) { return mrand() % x;}
const int N =10 + 2e5 ,mod=1e9 + 7;

void solve() {
	int n; cin >> n;
    vector<int> a(n + 1); rep(i, 1, n) cin >> a[i];

    vector<int> ans(n + 1);
    rep(i, 1, n) {
        ans[n - a[i] + 1] = i;
    }

    rep(i, 1, n) cout << ans[i] << " \n"[i == n];
}

signed main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

    int T;cin>>T;
    while(T--)
        solve();

    return 0;
}

标签:CF1746C,int,rep,构造,long,操作,include,define
From: https://www.cnblogs.com/Mxrush/p/16796880.html

相关文章

  • Spring的依赖注入两种方式之二:构造器注入
     1.构造器注入引用类型第一步,在类的构造方法中调用引用类型,如下的构造方法:publicBookServiceImpl(BookDaobookDao1)JavaBeanpackagecom.oxygen.service.impl;......
  • Java基础(七)| 类、对象、封装和构造详解
    ⭐本专栏旨在对JAVA的基础语法及知识点进行全面且详细的讲解,完成从0到1的java学习,面向零基础及入门的学习者,通过专栏的学习可以熟练掌握JAVA编程,同时为后续的框架学习,进阶开......
  • Java中的构造器
    Java中的构造器构造器必须和类名相同Alt+insert选择第一个是创建构造器的快捷键无参数构造器publicPerson(){   }有参数构造器publicPerson(Stringnam......
  • 构造方法以及方法的调用
    构造方法先创建一个user类,里面我们定义了一些属性,还有跟user类名相同名字的方法,我们成为构造方法,每个类里面都有一个默认的无参构造方法,构造方法分有参和无参,默认的是无参......
  • 二维凸包构造
    凸多边形是指所有内角大小都在\([0,\pi]\)范围内的简单多边形在平面上能包含所有给定点的最小凸多边形叫做凸包。I.jarvis数学构造法现在平面上有这么多个点。......
  • Python爬虫之scrapy构造并发送请求
    scrapy数据建模与请求学习目标:应用在scrapy项目中进行建模应用构造Request对象,并发送请求应用利用meta参数在不同的解析函数中传递数据1.数据建模通常在做项目的过程中,......
  • 动手动脑--构造方法
    为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么?构造函数是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与ne......
  • 动手实验:继承条件下的构造方法调用
    -子类自动拥有父类声明为public和protected的成员,这就是继承特性的体现之一。-public:外界可自由访问-private:外界不可访问-protected:同一包中的子类都可以访问,另一包......
  • ASP构造大数据量的分页SQL语句
     1<%@Language = "VBScript" Codepage = "936"%> 2<% 3'分页sql语句生成代码 4Fun......
  • 有参无参构造器oppdemo2
    //java文件-->class文件publicclassPerson{//一个类即使什么都不写,它也会存在一个方法//显示的定义构造器Stringname;//实例化初始值//使用new关......