Educational Codeforces Round 67小结
已AC:C,D,E,F
很喜欢这场比赛的题目风格。而且也不难。
C.Vasya And Array
题目大意:
给你mmm条两类限制:区间[L,R][L,R][L,R]单调非降 / 区间[L,R][L,R][L,R]不符合单调非降.
问你是否能够找到一种符合所有限制的长度为nnn的序列aia_iai
n,m≤1000n,m \leq 1000n,m≤1000
题目思路:思维,贪心
我们考虑一个位置一个位置的填。然后从前往后考虑每对相邻的数(i,i+1)(i,i+1)(i,i+1).如果他们被完整的被包含在第一种条件限制中,那么这两个数必须要增。否则我们让他递减(贪心).因为我们是先满足条件1的限制,之后再暴力checkcheckcheck条件二.所以在满足条件1的情况下,我们想让序列尽量不增,这样好满足条件2.
想到这一点这题就很好做了.O(n2)O(n^2)O(n2)暴力搞即可。
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define pb push_back
#define mp make_pair
#define vi vector<int>
#define vl vector<ll>
const int maxn = 1000 + 5;
const int mod = 1e9 + 7;
int a[maxn];
struct No{int l , r;};
vector<No> t[2];
bool check (int l , int r)
{for (auto g : t[0])if (g.l <= l && r <= g.r) return true;return false;
}
int main()
{ios::sync_with_stdio(false);int n , m; cin >> n >> m;for (int i = 1 ; i <= m ; i++){int x , y , z; cin >> x >> y >> z;x = !x;t[x].pb({y , z});}a[1] = 1005;for (int i = 2 ; i <= n ; i++){if (check(i - 1 , i)) a[i] = a[i - 1] + 1;else a[i] = a[i - 1] - 1;}bool ok = true;for (auto g : t[1]){bool res = true;for (int i = g.l ; i < g.r && res; i++){if (a[i] > a[i + 1]) res = false;}if (res){ok = false;break;}}if (!ok){cout << "NO" << endl;return 0;}cout << "YES" << endl;for (int i = 1 ; i <= n ; i++){cout << a[i] << " ";}cout << endl;return 0;
}
进一步优化?
暴力check的部分我们用前缀最大值优化,复杂度降为O(n)O(n)O(n).
D. Subarray Sorting
题目大意:
给你两个数组a,ba,ba,b.你每次可以取aaa的一个子数组,对其进行排序。问你是否能够将其转化为bbb.
题目思路:
1.先判排序后a==ba==ba==b.
2.由于bbb的顺序不一定是严格升序。而且一旦对一段排完序之后 大的就不能移动到小的之前 了。所以我们尽量对相邻两个数之间排序。例如:
a = [7,6,5]
b = [5,7,6]
3.由于要每一个位置上的数相同。那么我们简单的考虑从左往右一个一个匹配。循环b数组1到i1到i1到i.ptrptrptr维护当前匹配到的aaa数组的位置.
我们需要知道每个数的从小到大的位置。这个对值域开队列即可。对于bib_ibi,我们在aaa找到离iii最近的位置rrr.那么这个数能够被挪动到位置iii的条件是:[i,r][i,r][i,r]内最小值=bi= b_i=bi.这个我们用线段树维护区间最小值.
挪动完之后,我们将ar:=1e9a_r:=1e9ar:=1e9。代表废除这个位置。ptrptrptr不变.
启示:
面对这种需要多次挪动数组的某个数到最前面的问题,不用真的移动,而是用一个指针维护当前数组位置+将这个数改成infinfinf(一个无效的数)来模拟这个问题。
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define pb push_back
#define mp make_pair
#define vi vector<int>
#define vl vector<ll>
#define tl (t << 1)
#define tr (t << 1 | 1)
#define mid ((l + r) >> 1)
const int maxn = 3e5 + 5;
const int mod = 1e9 + 7;
const int inf = 1e9;
int a[maxn] , b[maxn] , n;
int mi[maxn << 2];
void pushup(int t)
{mi[t] = min(mi[tl] , mi[tr]);
}
void build (int t , int l , int r)
{if (l == r) {mi[t] = a[l];return ;}build(tl , l , mid);build(tr , mid + 1 , r);pushup(t);return ;
}
int ask (int t , int l , int r , int L , int R)
{if (L <= l && r <= R) return mi[t];int ans = 1e9;if (L <= mid) ans = min(ans , ask(tl , l , mid , L , R));if (R > mid) ans = min(ans , ask(tr , mid + 1 , r , L , R));return ans;
}
void modify (int t , int l , int r , int p , int c)
{if (l == r){mi[t] = c;return ;}if (p <= mid) modify(tl , l , mid , p , c);else modify(tr , mid + 1 , r , p , c);pushup(t);return ;
}int tmp[2][maxn];
bool check ()
{for (int i = 1 ; i <= n ; i++) tmp[0][i] = a[i];for (int i = 1 ; i <= n ; i++) tmp[1][i] = b[i];sort(tmp[0] + 1 , tmp[0] + 1 + n);sort(tmp[1] + 1 , tmp[1] + 1 + n);for (int i = 1 ; i <= n ; i++) if (tmp[0][i] != tmp[1][i]) return false;return true;
}int main()
{ios::sync_with_stdio(false);int t; cin >> t;while (t--){cin >> n;set<int> s[n + 2];for (int i = 1 ; i <= n ; i++)cin >> a[i] , s[a[i]].insert(i);for (int i = 1 ; i <= n ; i++)cin >> b[i];if (!check()){cout << "NO" << endl;continue;}build(1 , 1 , n);bool ok = true;int ptr = 1;for (int i = 1 ; i <= n ; i++){while (a[ptr] == inf) ptr++;int now = a[ptr];if (b[i] == now) {s[now].erase(ptr);ptr++;continue;}int r = *s[b[i]].begin();if (ask(1 , 1 , n , ptr , r) != b[i]){ok = false;break;}modify(1 , 1 , n , r , inf);a[r] = inf;s[b[i]].erase(r);}cout << (ok ? "YES" : "NO") << endl;}return 0;
}
*/
E - Tree Painting,水题
题目大意:
让你确定一个根,使得各点深度之和相加最大.
题目思路:
换根计算即可.
F. Expected Square Beauty - 计数,期望
见:下一篇博客
Educational Codeforces Round 67小结相关推荐
- Educational Codeforces Round 67 (Rated for Div. 2)(D思维题 线段树/E树形dp(换根dp) 二次扫描与换根法)
心得 D写了个假算法被hack了wtcl- E据涛神说是二次扫描与换根法,看了看好像和树形dp差不多 F概率dp G费用流 回头再补 思路来源 马老师 归神 贤神等代码 http://www.mami ...
- Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)
Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...
- [Educational Codeforces Round 16]A. King Moves
[Educational Codeforces Round 16]A. King Moves 试题描述 The only king stands on the standard chess board ...
- Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...
- Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...
- Educational Codeforces Round 32
http://codeforces.com/contest/888 A Local Extrema[水] [题意]:计算极值点个数 [分析]:除了第一个最后一个外,遇到极值点ans++,包括极大和极小 ...
- Educational Codeforces Round 37 (Rated for Div. 2) 1
Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...
- Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)
Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...
- Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs
传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...
最新文章
- CentOS压缩命令zip
- 解决SwipeRefreshLayout左右滑动事件冲突的问题
- mysql zip 安装
- 远程抄表系统(AMR/AMI)中无线模块选型指南
- L1/L2/smooth_l1_loss/center_loss+Dice Loss+focal loss+各种IOU loss+kl散度
- 国内一些大公司的开源项目
- 卡巴斯基安全浏览器_一年三番五次修,卡巴斯基为何依然无法完美修复杀毒软件中的这些洞 (技术详情)?...
- 华为P50系列开始量产:Pro+版或进一步延期
- 最新美团JS逆向分析(_token参数)
- 浏览器中打开IOS应用并传参
- POJ 1183 反正切函数的应用
- PHP_CodeSniffer HG 服务端部署篇
- Feature Statistics Mixing Regularization for Generative Adversarial Networks
- w10系统服务器管理器,Win10如何打开服务管理器
- 机器学习流程及详细内容(4)
- 数据库系统原理与应用教程(042)—— MySQL 查询(四):使用通配符构造查询条件
- Python修改文件名
- 生猪出售 matlab,数学建模论文-肥猪最佳销售时机问题.doc
- TCP/ip 协议端口范围 详解
- python图形化编程wx_慢步python,图形用户界面库:wxPython库 初体验,先建一个窗体...
热门文章
- 华为鸿蒙系统研发多久了,华为系统公测到正式版需要多久
- 源码阅读(32):Java中线程安全的Queue、Deque结构——ArrayBlockingQueue(2)
- uin-app微信小程序开发
- 台式计算机硬盘1t,总结:4款1TB台式机硬盘如何选?_硬盘_内存硬盘评测-中关村在线...
- MP3自动播放,并且顺序播放
- 1042: 小丑排序
- 1508-张晨曦总结《2016年-11月-2日》【连续12天总结】
- linux运维高薪就业指导(新手获得高薪必备)
- 计算机机房交接班记录,监控室值班交接班制度
- Redis实战 - 2.list、set和Sorted Set