这道题,神仙贪心题。。。

题意就是我给出数的顺序,并给出多个交换,每个只能用于相邻交换,问最后一个元素,最多能往前交换多少步。

我们考虑这样一个问题,如果一个这数和a[n]发生交换,那么这个数作为后面的数能和前交换的数已经没有任何效果了。

但是这个数如果没有往后,他将在想要被交换那个数的前面,就算,前面的数找到满足了,也必须要把这个数往前放,并把这个数往后放,才行。

我们交换只能考虑这种情况。

4 3 2 1

我们有

4 3

4 2

4 1

那么整体往前移动,4移动到最后。

而且我们这样考虑,为什么是n-i-ans==cnt(a[i])

这是因为,cnt(a[i])记录的都是a[n](可能已经交换)左边的数(和a[n]没有发生交换)并能和a[i]发生交换

如果这个数的个数是等于a[n]位置(可能不在n)和当前位置的差值,那么我们一定可以把这个数往前移动一位,并把a[i]往后放。

如上面的例子。

这样的神仙贪心,就搞定这道题了。

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
using namespace std;
const int maxx = 3e5+;
vector<int>G[maxx];
int cnt[maxx];
int a[maxx];
int main(){
int n,m;
int u,v;
while(~scanf("%d%d",&n,&m)){
for (int i=;i<=n;i++){
scanf("%d",&a[i]);
}
while(m--){
scanf("%d%d",&u,&v);
G[v].push_back(u);//存入这个节点如果可以交换的前一个节点
}
for (int i=;i<G[a[n]].size();i++){
cnt[G[a[n]][i]]++;//把a[n]可能会交换的前面节点都加+1
}
int ans=;
for (int i=n-;i>=;i--){
cout<<n-i-ans<<" "<<cnt[a[i]]<<endl;
if (n-i-ans==cnt[a[i]])ans++;//如果这个节点是可以通过变换得到的,那么这个节点会往后,对前面不产生作用
else {
for (int j=;j<G[a[i]].size();j++){//否则就把这个节点可能交换的节点更新
cnt[G[a[i]][j]]++;
}
}
}
printf("%d\n",ans);
}
return ;
}
/*
4 3
5 4 2 1
5 1
5 2
2 1 */
if (n-i-ans==cnt[a[i]])ans++;

Codeforces Round #546 (Div. 2)-D - Nastya Is Buying Lunch的更多相关文章

  1. Codeforces Round #546 (Div. 2) C. Nastya Is Transposing Matrices

    C. Nastya Is Transposing Matrices time limit per test 1 second memory limit per test 256 megabytes i ...

  2. Codeforces Round #546 (Div. 2) B. Nastya Is Playing Computer Games

    链接:https://codeforces.com/contest/1136/problem/B 题意: 有n个井盖,每个井盖上有一个小石头. 给出n和k,k表示刚开始在第k个井盖上方. 有三种操作, ...

  3. Codeforces Round #546 (Div. 2) A. Nastya Is Reading a Book

    链接:https://codeforces.com/contest/1136/problem/A 题意: 给n个区间,每个区间范围不超过100,n不超过100. 给一个位置k,1-(k-1)是遍历过的 ...

  4. Codeforces Round #546 (Div. 2) E - Nastya Hasn't Written a Legend

    这题是一个贼搞人的线段树 线段树维护的是 区间和a[i - j] 首先对于update的位置可以二分查找 其次update时候的lazy比较技巧 比如更新的是 l-r段,增加的是c 那么这段的值为: ...

  5. Codeforces Round #546 (Div. 2) 题解

    Codeforces Round #546 (Div. 2) 题目链接:https://codeforces.com/contest/1136 A. Nastya Is Reading a Book ...

  6. Nastya Hasn't Written a Legend(Codeforces Round #546 (Div. 2)E+线段树)

    题目链接 传送门 题面 题意 给你一个\(a\)数组和一个\(k\)数组,进行\(q\)次操作,操作分为两种: 将\(a_i\)增加\(x\),此时如果\(a_{i+1}<a_i+k_i\),那 ...

  7. Codeforces Round #546 (Div. 2)

    http://codeforces.com/contest/1136 A #include <bits/stdc++.h> using namespace std; ; int N, K; ...

  8. Codeforces Round #546 (Div. 2) E 推公式 + 线段树

    https://codeforces.com/contest/1136/problem/E 题意 给你一个有n个数字的a数组,一个有n-1个数字的k数组,两种操作: 1.将a[i]+x,假如a[i]+ ...

  9. Codeforces Round #546 (Div. 2) D 贪心 + 思维

    https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...

随机推荐

  1. 产品炼成记·hostingranking.cn·基于ghost的轻量技术架构整理

    本篇纯粹只讲hostingranking.cn网站的技术架构,也就是怎么做到的,达到什么效果.至于它是什么,为什么要做暂且不说,另篇会分享. 技术组成 首先hostingranking.cn是基于gh ...

  2. js三部曲---预编译

    函数内:1,创建AO对象//Activation Object 2,找函数内形参和变量声明,将其作为AO对象的属性名,值为undefined. 3,实参赋到AO对象 形参名里 4,在函数体里找函数声明 ...

  3. JSON字符串反序列化成对象_部分属性值反序列化失败

    简介:本人在开发webapi接口时遇到了:一个复杂的Json字符串在反序列化为对象时报,无法发序列化其中的一个属性对象? 使用方法: InternalRecommendRequestFormModel ...

  4. Java开发笔记(七十七)使用Optional规避空指针异常

    前面在介绍清单用法的时候,讲到了既能使用for循环遍历清单,也能通过stream流式加工清单.譬如从一个苹果清单中挑选出红苹果清单,采取for循环和流式处理都可以实现.下面是通过for循环挑出红苹果清 ...

  5. Android开发——使用intent传递对象

    intent传递对象有两种方法: 方式一:Serializable 方式 方式二:Parcelable方式 在这里不多介绍了,这一篇就是快速上手使用教程,至于详细原理介绍的,请看这一篇http://w ...

  6. Python中文词频统计

    以下是关于小说的中文词频统计 这里有三个文件,分别为novel.txt.punctuation.txt.meaningless.txt. 这三个是小说文本.特殊符号和无意义词 Python代码统计词频 ...

  7. 利用Azure虚拟机安装Dynamics CRM 2016实例

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复181或者20151215可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! Dynamics CRM Ser ...

  8. android 仿微信表情雨下落!

    文章链接:https://mp.weixin.qq.com/s/yQXn-YjEFSW1X7A7CcuaVg 众所周知,微信聊天中我们输入一些关键词会有表情雨下落,比如输入「生日快乐」「么么哒」会有相 ...

  9. 解决jest处理es模块

    解决jest处理es模块 问题场景 项目使用jest进行测试时, 当引入外部库是es模块时, jest无法处理导致报错. Test suite failed to run Jest encounter ...

  10. vue.js的手脚架vue-cli项目搭建的步骤

    手脚架是什么? 众所周知,现在的前端项目发展得越渐越大,我们前端程序员要从0开始去搭建一套完整的项目很费时,所以这时候前端工程的手脚架就出现了. 我用得vue-cli也是其中之一,还有其他的我也说不清 ...