1.random
Description
  给定4个参数A0,N,c,p,你需要按下式构造A1~AN:
    A[i]=(A[i-1]2+c)mod p
  之后,你需要求出A1~AN中,第K大的数值。
Input
  一行五个正整数A0,N,c,p,K。
Output
  一行一个整数,描述答案。
Sample Input
  123 10 435 3451 5
Sample Output
  2936
Range
测试点       范围
1~3          K<=N<=105
4~10         K<=N<=5*106

直接stl

 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std; typedef long long LL; #define N 5000010 LL n,c,p,k; LL a[N]; bool cmp(const int & a,const int & b)
{
  return a>b;
} int main()
{
  freopen("random.in","r",stdin);freopen("random.out","w",stdout);
  scanf("%lld%lld%lld%lld%lld",&a[],&n,&c,&p,&k);
  for (LL i=;i<=n;i++)
    a[i]=((a[i-]*a[i-])%p+c%p)%p;
  nth_element(a+,a+k,a+n+,cmp);
  printf("%I64d",a[k]);
  return ;
}

2.sequence

Description

  给一个长度为n的序列a,以及q个询问。每次询问给出两个参数l,r,你需要输出子 序列al~ar的最大连续字段和。

Input 

  第一行两个正整数n,q。

`  接下来一行n个整数,描述序列a。

  接下来q行,每行两个参数l,r,描述一个询问。

Output

对于每个询问,输出一行一个整数,描述答案。

Sample Input

  4 3

  1 -2 3 2

  1 4

  1 2

  2 2

Sample Output

  5

  1

  0

Range

  测试点      范围

  1~3     N,Q<=1000

  4~7     N,Q<=105

  8~10     N<=105,Q<=106

线段树维护。

 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std; #define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout);
#define maxn 100010
#define IN inline
#define RE register typedef long long llg; int n,m,zhi[maxn*],now=maxn*-,ll,rr,D;
int sumv[maxn*],le[maxn*],ri[maxn*]; IN int getint()
{
int w=,q=;
char c=getchar();
while((c<''||c>'')&&c!='-') c=getchar();
if(c=='-') q=,c=getchar();
while(c>=''&&c<='') w=w*+c-'',c=getchar();
return q?-w:w;
} IN void update(int u,int lc,int lv)
{
sumv[u]=sumv[lc]+sumv[lv];
le[u]=max(le[lc],sumv[lc]+le[lv]);
ri[u]=max(ri[lv],sumv[lv]+ri[lc]);
zhi[u]=max(zhi[lc],zhi[lv]);
zhi[u]=max(zhi[u],ri[lc]+le[lv]);
} IN void build(int u,int l,int r)
{
int lc=u<<,lv=u<<|,mid=l+r>>;
if (l==r)
{
sumv[u]=getint();
if (sumv[u]>)
zhi[u]=le[u]=ri[u]=sumv[u];
return;
}
build(lc,l,mid);
build(lv,mid+,r);
update(u,lc,lv);
} IN void query(int u,int l,int r)
{
int lc=u<<,lv=u<<|,mid=l+r>>;
if (l>=ll && r<=rr)
{
if (!D)
{
zhi[now]=zhi[u];sumv[now]=sumv[u];
le[now]=le[u];ri[now]=ri[u];D++;
}
else
{
now^=;
update(now,now^,u);
}
return;
}
if (ll<=mid)
query(lc,l,mid);
if (rr>mid)
query(lv,mid+,r);
} int main(){
File("sequence");
n=getint();m=getint();
build(,,n);
while(m--)
{
ll=getint();rr=getint();
D=;query(,,n);
printf("%d\n",zhi[now]);
}
}

3.tree

Description

  给一棵n个节点的无根树,求路径长度=K的简单路径数。

Input

  第一行两个正整数n,K。

  接下来n-1行,每行两个正整数x,y,描述一条边(x,y)。

Output

  一行一个整数,描述答案。

Sample Input

  4 2

  1 2

  2 3

  2 4

Sample Output

  3

Range

  测试点        范围

  1~3           2<=K<=N<=1000

  4~10      2<=K<=N<=105

 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std; #define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout);
#define maxn 100010 typedef long long llg; int head[maxn],next[maxn<<],to[maxn<<],tt,n,ans,D;
int a[maxn],c1[maxn],c2[maxn],siz[maxn],val[maxn];
bool w[maxn]; void link()
{
int x,y;
scanf("%d%d",&x,&y);
to[++tt]=y;next[tt]=head[x];head[x]=tt;
to[++tt]=x;next[tt]=head[y];head[y]=tt;
} void dfs1(int u,int fa)
{
siz[u]=;a[++tt]=u;val[u]=;
for (int i=head[u],v;v=to[i],i;i=next[i])
if (v!=fa && !w[v])
{
dfs1(v,u);siz[u]+=siz[v];
val[u]=max(val[u],siz[v]);
}
} void dfs2(int u,int fa,int now){
c1[now]++;
if (now>=D)
return;
for (int i=head[u],v;v=to[i],i;i=next[i])
if (v!=fa && !w[v])
dfs2(v,u,now+);
} void solve(int u)
{
int x=u;tt=;
dfs1(u,);
for (int i=;i<=tt;i++)
{
val[a[i]]=max(val[a[i]],siz[u]-siz[a[i]]);
if (val[a[i]]<val[x])
x=a[i];
}
w[x]=;
for (int i=head[x],v;v=to[i],i;i=next[i])
if (!w[v])
{
dfs2(v,,);
ans+=c1[D];
for (int j=;c1[j];j++)
ans+=c2[D-j]*c1[j];
for (int j=;c1[j];j++)
c2[j]+=c1[j],c1[j]=;
}
for (int i=;c2[i];i++)
c2[i]=;
for (int i=head[x],v;v=to[i],i;i=next[i])
if (!w[v])
solve(v);
} int main()
{
File("tree");
scanf("%d%d",&n,&D);
for(int i=;i<n;i++)
link();
solve();
printf("%d",ans);
}

【Noip模拟By yxj】的更多相关文章

  1. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  2. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  3. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  4. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  5. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  6. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  7. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  8. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  9. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

随机推荐

  1. C++解决大数组问题

    今天写一个C++小程序,竟然出现:"VS 未经处理的异常: 0xC00000FD: Stack overflow" 查了一下,普通数组变量是在堆栈中保存的,而堆栈空间有限,故出此错 ...

  2. vim 编辑器使用法则

    vim 编辑器使用法则 Vi编辑器有3种使用模式:一般模式.编辑模式和命令模式. $SHELL:查看当前默认shell类型  $BASH_VERSION:查看当前shell版本 3.一般模式: 光标移 ...

  3. allegro中出光绘文件遇到问题的解决办法

    一:设置好光绘文件参数后,选择check dabase before artwork后,点击生成光绘时出现错误告警信息:    database has errors:artwork generati ...

  4. Qt 安装与配置记录

    一 安装的时候得选一个Qt安装啊!!不要忘了展开这一项,而只安装Qt creator 展开之后会发现有很多版本,为了方便,选自带编译器mingw,就不需要麻烦的配置了 二 打开Qt creator 后 ...

  5. 乱记结论之OI常用四大数列

    一.斐波那契数列 $f(0)=1,f(1)=1,f(i)=f(i-1)+f(i-2) \ \ \ \ (i>=2)$ 经典的解释是兔子生小孩,第0年一对兔子,一对兔子需要一年长大,后面每年都生小 ...

  6. linux 磁盘阵列

    1.独立磁盘冗余阵列 (RAID) 2.RAID级别: raid0 扩展卷 (条带卷) 至少一块硬盘 具有较高的存储性能 数据请求多块硬盘并行应答 连续数据分散到多个磁盘存储 ,一块磁盘坏掉所有文件就 ...

  7. kibana启动--nohup在关闭终端后无效&&守护进程详解

    https://blog.csdn.net/ty_0930/article/details/70184705 https://blog.csdn.net/Dream_Flying_BJ/article ...

  8. 找宝箱 (bfs)

    Problem Description 作为一个强迫症患者,小 Y 在走游戏里的迷宫时一定要把所有的宝箱收集齐才肯罢休.现在给你一个 N *M 的迷宫,里面有障碍.空地和宝箱,小 Y 在某个起始点,每 ...

  9. DELPHI IDFTP

    FTP是一个标准协议,它是在计算机和网络之间交换文件的最简单的方法. FTP也是应用TCP/IP协议的应用协议标准.FTP通常于将作者的文件上传至服务器,或从服务器上下传文件的一种普遍的使用方式作为用 ...

  10. Servlet开发(2)

    Jsp&Servlet用户登录功能实现(采用MVC模式) 我们使用Jsp&Servlet开发一个用户登录功能的小项目(麻雀大小,但是五脏俱全呦,关键是技术问题!). 数据库:mysql ...