学军NOIP2016模拟赛1
GTMD这么水的一套题没有AK
T1:妥妥的二分答案,贪心check。
T2:问题可以转化为最长上升(还是下降我记不住了)子序列。
T3:发现点被覆盖上的顺序是一定的。求出这个顺序,第一个操作在线段树上二分,第二个操作是找到这个点最上面那个有人的点,把他的状态变为没人。
P.S.常数这么大也能过。。。
然而一开始260为什么呢。。
anc开的maxv*20还TMfor到了20。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define maxn 100500
#define eps 1e-6
#define inf 0x7f7f7f7f7f7f7f7fLL
using namespace std;
long long n,h,x;
double l=,r=,ans;
vector <long long> v[maxn];
bool check(double x)
{
double ret=;
for (long long i=;i<=n;i++)
{
double mx=-inf;
for (long long j=;j<=h;j++)
mx=max(mx,(double)v[i][j]-x*j);
ret+=mx;
}
if (ret>=) return true;
return false;
}
int main()
{
scanf("%lld%lld",&n,&h);
for (long long i=;i<=n;i++)
{
v[i].push_back();
for (long long j=;j<=h;j++)
{
scanf("%lld",&x);
v[i].push_back(v[i][j-]+x);
}
}
while (r-l>=eps)
{
double mid=(l+r)/;
if (check(mid)) {ans=l=mid;}
else r=mid;
}
printf("%.4lf\n",ans);
return ;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100500
using namespace std;
int n,a[maxn],b[maxn],x,t[maxn],ans=,ret=;
int lowbit(int x) {return (x&(-x));}
void modify(int x,int val)
{
for (int i=x;i<=n;i+=lowbit(i))
t[i]=max(t[i],val);
}
int ask(int x)
{
int ret=;
for (int i=x;i>=;i-=lowbit(i))
ret=max(ret,t[i]);
return ret;
}
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%d",&a[i]);
for (int i=;i<=n;i++)
{
scanf("%d",&x);
b[x]=i;
}
for (int i=;i<=n;i++)
{
ret=ask(n-b[a[i]]+);
ans=max(ans,ret+);
modify(n-b[a[i]]+,ret+);
}
printf("%d\n",ans);
return ;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define maxv 100500
using namespace std;
int n,m,x,y,g[maxv],nume=,op,dfn[maxv],fdfn[maxv],times=,dis[maxv],anc[maxv][];
int root,tot=,ls[maxv<<],rs[maxv<<],sum[maxv<<],lazy[maxv<<];
vector <int> v[maxv];
void dfs(int x,int fath)
{
for (int i=;i<v[x].size();i++)
{
int pos=v[x][i];
if (pos==fath) continue;
anc[pos][]=x;dis[pos]=dis[x]+;
dfs(pos,x);
}
dfn[x]=++times;fdfn[times]=x;
}
void get_table()
{
for (int i=;i<=;i++)
for (int j=;j<=n;j++)
anc[j][i]=anc[anc[j][i-]][i-];
}
void build(int &now,int left,int right)
{
now=++tot;sum[now]=right-left+;lazy[now]=;
if (left==right) return;
int mid=left+right>>;
build(ls[now],left,mid);
build(rs[now],mid+,right);
}
void pushdown(int now)
{
if (!lazy[now]) return;
lazy[ls[now]]=lazy[rs[now]]=lazy[now];
sum[ls[now]]=sum[rs[now]]=;lazy[now]=;
}
void pushup(int now)
{
sum[now]=sum[ls[now]]+sum[rs[now]];
}
int ask1(int now,int left,int right,int x)
{
pushdown(now);
if (left==right) return left;
int mid=left+right>>,k=sum[ls[now]];
if (x<=k) return ask1(ls[now],left,mid,x);
else return ask1(rs[now],mid+,right,x-k);
}
void modify1(int now,int left,int right,int l,int r)
{
if ((left==l) && (right==r))
{
lazy[now]=;sum[now]=;
return;
}
int mid=left+right>>;
if (r<=mid) modify1(ls[now],left,mid,l,r);
else if (l>=mid+) modify1(rs[now],mid+,right,l,r);
else
{
modify1(ls[now],left,mid,l,mid);
modify1(rs[now],mid+,right,mid+,r);
}
pushup(now);
}
int ask2(int now,int left,int right,int pos)
{
pushdown(now);
if (left==right) return sum[now];
int mid=left+right>>;
if (pos<=mid) return ask2(ls[now],left,mid,pos);
else return ask2(rs[now],mid+,right,pos);
}
void modify2(int now,int left,int right,int pos)
{
pushdown(now);
if (left==right) {sum[now]=;return;}
int mid=left+right>>;
if (pos<=mid) modify2(ls[now],left,mid,pos);
else modify2(rs[now],mid+,right,pos);
pushup(now);
}
void work1()
{
int pos=ask1(root,,n,x);
printf("%d\n",fdfn[pos]);
modify1(root,,n,,pos);
}
void work2()
{
int ret=x;
for (int i=;i>=;i--)
{
if (!anc[ret][i]) continue;
if (!ask2(root,,n,dfn[anc[ret][i]])) ret=anc[ret][i];
}
printf("%d\n",dis[x]-dis[ret]);
modify2(root,,n,dfn[ret]);
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n-;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);v[y].push_back(x);
}
for (int i=;i<=n;i++) sort(v[i].begin(),v[i].end());
dfs(,);get_table();
build(root,,n);
for (int i=;i<=m;i++)
{
scanf("%d%d",&op,&x);
if (op==) work1();
else work2();
}
return ;
}
学军NOIP2016模拟赛1的更多相关文章
- ATP学姐的模拟赛
ATPの水题大赛 声明:不是我觉得这题水,这就是本场模拟赛的名称. T1:求所有的$n$位数中有几个数满足:每一位要么是$A$要么是$B$,并且这个$n$位数的每一位加起来是$A$或$B$的倍数. $ ...
- 串门赛: NOIP2016模拟赛——By Marvolo 丢脸记
前几天liu_runda来机房颓废,顺便扔给我们一个网址,说这上面有模拟赛,让我们感兴趣的去打一打.一开始还是没打算去看一下的,但是听std说好多人都打,想了一下,还是打一打吧,打着玩,然后就丢脸了. ...
- NOIP2016 模拟赛
7.10 T1:求出一个矩阵中平均数大于0的子矩阵的最大面积. T2:给出一个N行的,第I行有n+1-i的倒三角形,从中选取m个数,只有当前数的左上角和右上角都被选是才能选当前数,求选的数字的最大和 ...
- NOIP2016模拟赛三 Problem B: 神奇的树
题面 Description 有一棵神奇的树.这棵树有N个节点,在每个节点上都有宝藏,每个宝藏价值V[i]金币:对于每条边,每经过一次都要花费C[i]金币. 值得注意的是,每个宝藏只能领取一次(也可以 ...
- NOIP2016模拟赛三 Problem C: 不虚就是要AK
题目大意 给定一棵带有边权的树, 问你在树上随机选两个点, 它们最短路径上的边权之和为\(4\)的倍数的概率为多少. Solution 树分治. 没什么好讲的. #include <cstdio ...
- NOIP 模拟赛 那些年,我们学过的文化课 --致已退役的fqk神犇.
/* 这大概是我第一次整理模拟赛吧. 唉. T2打了很长时间. 一开始读错题了中间都能缩合了. 真心对不起生物老师hhh. 这种状态判重的题目还是做的太少! */ 背单词 [题目描述] fqk 退役后 ...
- 『2019/4/9 TGDay2模拟赛 反思与总结』
2019/4/9 TGDay2模拟赛 今天是\(TG\)模拟赛的第二天了,试题难度也是相应地增加了一些,老师也说过,这就是提高组的难度了.刚开始学难的内容,一道正解也没想出来,不过基本的思路也都是对了 ...
- 『2019/4/8 TGDay1模拟赛 反思与总结』
2019/4/8 TGDay1模拟赛 这次是和高一的学长学姐们一起参加的\(TG\)模拟考,虽然说是\(Day1\),但是难度还是很大的,感觉比\(18\)年的\(Day1\)难多了. 还是看一下试题 ...
- NOIP模拟赛-2018.10.22
模拟赛 今天第一节课是历史,当然是不可能上的,一来到机房发现今天高二考试... 老师说以后可能还要给高一考...那还不如现在跟着做好了,毕竟在学长学姐中垫底显得没那么丢人 这套题风格挺奇怪的...为什 ...
随机推荐
- CentOS安装vim
VMware下CentOS安装成功后,默认自带vi,但vi功能没vim丰富.以下为CentOS中安装vim: 用yum产看源中的vim安装包: [xi@localhost ~]$ yum search ...
- js中event.target,this
event.target这是注册事件时的对象,或者它的子元素.通常用于比较 event.target 和 this 来确定事件是不是由于冒泡而触发的.经常用于事件冒泡时处理事件委托. 1.this和e ...
- 【MYSQL】创建虚表来辅助数据库查询
在进行数据库查询时,有时需要用到对既有的数据表进行多表查询得出的临时条件的数据表,就可以暂时创建成为虚表,并赋予简单明了的字段名以及临时表名. 例题a:查询出每门课程低于平均成绩的学生姓名.课程名称. ...
- js一些题目
假期在家,看到的,昨天看了下: 原文链接:http://wwwcqamin.duapp.com/?p=102#comment-7 请说出下面程序的输出结果 第一题: 1 2 3 4 5 6 7 8 9 ...
- HTML5自学笔记[ 14 ]canvas绘图基础2
canvas绘制路径不仅可以绘制直线和多边形,还提供了绘制曲线的方法,利用这些方法可以画出多种曲线效果. 方法1:arc(x,y,r,起始弧度,结束弧度,绘制方向);其中(x,y)为圆心坐标,r为半径 ...
- hdu----(3118)Arbiter(构造二分图)
Arbiter Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total S ...
- 理解模数转换器的噪声、ENOB和有效分辨率
ADC的主要趋势之一是分辨率越来越高.这一趋势影响各种应用,包括工厂自动化.温度检测和数据采集.对更高分辨率的需求正促使设计者从传统的12位逐次逼近寄存器(SAR)ADC转至分辨率高达24位的Δ-ΣA ...
- DataTable常用操作
添加列和行的三种方法(转载) 原文地址:http://www.cnblogs.com/jRoger/articles/1887581.html DataTable tblDatas =new Data ...
- MVC中使用HTML Helper类扩展HTML控件
文章摘自:http://www.cnblogs.com/zhangziqiu/archive/2009/03/18/1415005.html MVC在view页面,经常需要用到很多封装好的HTML控件 ...
- ACTIVITI 源码研究之命令模式执行
ACTIVITI 是一个优秀开源软件,通过阅读源码,我们不但可以了解工作流引擎执行的原理还可以增加个人的编码功力. ACTIVITI 所有执行过程都是采用命令模式进行执行. 本文主要描述流程引擎数据保 ...