stk

20191014

瘦欲@ 提交于 2019-12-01 08:54:30
前言 昨天吉就挂了今天大吉……真准啊。 继续连挂。 T2一个很明显的性质没发现,T3白扔20分。 消极消极。 T1 模拟题。 跪求B哥轻虐 #include<cstdio> #include<iostream> using namespace std; int const N=9; int n,m,tp; int a[N][N]; int stk[N],t,q[N],e; pair<int,int>b[N*N]; long long ans; inline int read(){ int ss(0);char bb(getchar()); while(bb<48||bb>57)bb=getchar(); while(bb>=48&&bb<=57)ss=(ss<<1)+(ss<<3)+(bb^48),bb=getchar(); return ss; } inline void up(){ for(register int i=1;i<=n;++i){ t=e=0; for(register int j=n;j;--j) if(a[j][i])stk[++t]=a[j][i]; if(!t)continue; q[e=1]=stk[t]; for(register int j=t-1,la=stk[t];j;--j) if(stk[j]==la)q[e]<<=1,ans+=q[e]

1008 模拟赛

◇◆丶佛笑我妖孽 提交于 2019-12-01 07:12:30
写在前面 \(Day1\) ,这场考试难度适中,我觉得海星 \(T1\) 有理树 \((SBT)\) 链接 \(Idea\) \(Stern-Brocot\ Tree \to SBT\) 容易发现在每一行都存在 \(\displaystyle \frac{m}{n} \lt \frac{m+m'}{n+n'} \lt \frac{m'}{n'}\) 根据图还发现,当 \(\displaystyle\frac{a}{b}\) 小于当前节点时,向左走 \((L)\) ;大于当前节点时,向右走 \((R)\) 并且发现题目中不存在向下走的情况,去掉多余点后,发现这是一颗完全二叉树(然而并没有什么卵用 ,请忽略这行话 设当前节点为 \(\displaystyle \frac{m}{n}\) ,则 当 \(\displaystyle \frac{a}{b} \gt \frac{m}{n}\) 时, \(a \times n>b \times m\) ; 当 \(\displaystyle \frac{a}{b}<\frac{m}{n}\) 时, \(a \times n<b \times m\) ; 根据这个条件进行判断 什么时候结束呢? 当 \(a \times n=b \times m\) 时。原因很简单 结束时 \(\displaystyle \frac{m}{n} = \frac{

uC/OS-III 任务详解(四)

放肆的年华 提交于 2019-11-30 19:42:29
uC/OS系统的任务一般都放在最开始介绍,我放在第四章主要是对模糊的概念作清晰的讲解。 从用户的角度来看,uC/OS-III 中的任务可以分为5 种状态,分别是 休眠态、就绪态、运行态、挂起态和中断态 ,如下表所示。 任务状态之间的具体切换情况如下图所示。 也就是说,任务有五个状态,分别是休眠态、就绪态、运行态、等待态、中断服务态。即任务还没使用函数OSTaskCreate()创建时就是属于休眠态,而一但使用函数OSTaskCreate()创建了任务,并且函数OSStart()之前已经被执行的话,那么任务就属于就绪态了。然后系统会根据就绪表里任务的优先级来只执行最高的任务,而这个被执行的任务也从就绪态变为运行态,这个时刻就是这个优先级最高的任务的CPU独享moment(也就是独自拥有CPU的使用权),直到这个任务被被切换成其他状态(使用OSTimeDly()、OSSemPend()等函数 能将运行态的函数变为等待态),那么就绪表里优先级最高的任务就会得到CPU的使用权执行任务,依次循环。 所以我这么分类,如果一个正在执行的任务M(即正在执行优先级最高的任务),它就只有两种情况,A.一直循环执行下去 B.改变自己任务状态。 改变状态也分为 b1.自己任务调用延时类函数或者等待信号值类函数的主动改变; b2.被一个优先级更高的就绪任务H打断的被动改变(也就是只要有优先级更高的就绪任务

解析表达式语法

牧云@^-^@ 提交于 2019-11-30 14:31:34
解析表达式语法 $ made by Ameiyo $ 说白了就是暴力。 A: CF778B - Bitwise Formula B: CF552E - Vanya and Brackets C: CF39A - C*++ Calculations D: CF89B - Widget Library E: CF7E - Defining Macros F: CF217C - Formurosa G: CF172E - BHTML+BCSS H: CF115D - Unambiguous Arithmetic Expression I: CF582E - Boolean Function A 每一位都是独立的,对每一位单独考虑。枚举问号是 0 或 1,按顺序模拟得到两个情况下 1 的个数,分情况给两个答案赋值即可。 重点还是在模拟。 #include <cstdio> #include <cctype> #include <map> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define ll long long #define reg register #define rep(i, a, b) for (reg int i = (a), i##end = (b);

POJ 2201 Cartesian Tree 笛卡尔树裸题加讲解

扶醉桌前 提交于 2019-11-30 10:01:43
题目: http://poj.org/problem?id=2201 题意: 给出一个n,在给出n对数(且命名为x,y),构建一棵树,满足以下条件: 对树上任意一个节点,有x > leftson_x 且x > rigthson_x 对树上任意一个节点,有y > father_y 构建完成后,输出每个点的父节点,左子节点,右子节点,没有的以0代替 思路: 笛卡尔树模板题。笛卡尔树每个节点有两个值,且称为val和pri,满足以下条件: 满足任意节点的val,大于其左子节点的val,小于其右子节点的val。 满足任意节点的pri,要么全部小于其父节点的pri,要么全部大于其父节点的pri,视题目有所不同,此题是第二种情况。 可以在O(n)的时间内构建一颗笛卡尔树(此处按pri的第二种情况建树)。首先对所有节点按val从小到大排序,然后维护一个单调栈,栈中元素的pri从栈底到栈顶依次递增,这个栈实际上维护的是树的最右链,每次有新元素加入时,从栈顶向栈底遍历,栈中元素的pri大于新元素的pri的话,就直接出栈,直到遇到栈中一个元素的pri小于新元素的pri,那么把这个新元素挂到这个栈中元素的右儿子上,把刚刚出栈的最后一个元素挂到新元素的左儿子上,可以发现这样是满足建树的条件1。就这样一直进行下去,到最后,栈底的元素就是笛卡尔树的树根。 此题用treap会TLE #include

POJ-2201-Cartesian Tree(笛卡尔树)

坚强是说给别人听的谎言 提交于 2019-11-30 10:00:40
Description Let us consider a special type of a binary search tree, called a cartesian tree. Recall that a binary search tree is a rooted ordered binary tree, such that for its every node x the following condition is satisfied: each node in its left subtree has the key less then the key of x, and each node in its right subtree has the key greater then the key of x. That is, if we denote left subtree of the node x by L(x), its right subtree by R(x) and its key by kx then for each node x we have if y ∈ L(x) then ky < kx if z ∈ R(x) then kz > kx The binary search tree is called cartesian if its

@atcoder - ARC066F@ Contest with Drinks Hard

扶醉桌前 提交于 2019-11-28 12:38:15
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定序列 T1, T2, ... TN,你可以从中选择一些 Ti,可以选择 0 个(即不选)。 定义你选择的权值 = (满足 T[L...R] 都被选择的区间 [L, R] 的数量)-(你选择的 Ti 之和),你希望这个权值尽量大。 现在有 M 次询问,每次询问假如将 T[Pi] 修改成 Xi,你所能选出的最大权值。 Constraints 1 <= N, M <= 3*10^5,1 <= Ti <= 10^9 且所有 Ti 总和 <= 10^12。 对于每组询问,满足 1 <= Pi <= N,1 <= Xi <= 10^9。 Input 输入形式如下: N T1 T2 … TN M P1 X1 P2 X2 : PM XM Output 对于每组询问,输出其答案。 Sample Input 1 5 1 1 4 1 1 2 3 2 3 10 Sample Output 1 9 2 @solution@ 考虑在修改 T[Pi] 为 Xi 后,最后的选择方案要么包含 Pi 要么不包含。 假如不包含,则只需要在 1 ... Pi - 1 与 Pi + 1 ... N 中选择得到最大值。 假如包含,我们需要预处理包含 Pi 的最优解,然后用这个最优解 +

POJ 3348 Cows (凸包面积)

谁说我不能喝 提交于 2019-11-27 16:46:24
题目链接: POJ 1113 Description Your friend to the south is interested in building fences and turning plowshares into swords. In order to help with his overseas adventure, they are forced to save money on buying fence posts by using trees as fence posts wherever possible. Given the locations of some trees, you are to help farmers try to create the largest pasture that is possible. Not all the trees will need to be used. However, because you will oversee the construction of the pasture yourself, all the farmers want to know is how many cows they can put in the pasture. It is well known that a cow

POJ 1113 Wall (凸包)

本小妞迷上赌 提交于 2019-11-27 16:46:14
题目链接: POJ 1113 Description Once upon a time there was a greedy King who ordered his chief Architect to build a wall around the King's castle. The King was so greedy, that he would not listen to his Architect's proposals to build a beautiful brick wall with a perfect shape and nice tall towers. Instead, he ordered to build the wall around the whole castle using the least amount of stone and labor, but demanded that the wall should not come closer to the castle than a certain distance. If the King finds that the Architect has used more resources to build the wall than it was absolutely necessary

BZOJ2726任务安排 CDQ分治维护凸包

删除回忆录丶 提交于 2019-11-27 11:55:37
好像不是很难,就是普通的CDQ分治,每次统计左边对右边的贡献 /* @Date : 2019-08-15 20:38:48 @Author : Adscn (adscn@qq.com) @Link : https://www.cnblogs.com/LLCSBlog */ #include<bits/stdc++.h> using namespace std; #define int long long #define IL inline #define RG register #define gi getint() #define gc getchar() #define File(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout) IL int getint() { RG int xi=0; RG char ch=gc; bool f=0; while(ch<'0'||ch>'9')ch=='-'?f=1:f,ch=gc; while(ch>='0'&&ch<='9')xi=(xi<<1)+(xi<<3)+ch-48,ch=gc; return f?-xi:xi; } template<typename T> IL void pi(T k,char ch=0) { if(k<0)k=-k,putchar('-');