现在才来填坑,之后还要陆续补其他几天的,可能前几天真的太颓了


T1:

题目大意:给定一个长度为n的序列,m次询问每次询问给出l,r,询问区间l到r的元素在模k意义下的最大值

数据范围当然是你暴力写不过的...

老实说我考场敲了主席树,不幸的是只拿到了暴力的分

考虑正解?我们分块。预处理出每一块在模k意义下的最大值,多余部分暴力计算就好

上面一句话显然是废话,我么怎么预处理出每一块在模任意k意义下的最大值呢?

显然在$[ak,(a+1)k)$这一段值域中,数值最大值一定是最优的,我们可以开个表记录当前块中小于等于当前数字的最大的元素的大小,预处理统计一段的答案时就是取小于等于$(a+1)k-1$的最大值就好了

发现$[ak,(a+1)k)$的区间一共有$klnk$个,其实我也不知道怎么得到的,这样时间复杂度好像就对了,实测卡过去是比较轻松的

#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std; const int N=1e5;
const int M=1e2;
int n,m;
int a[N+],lst[N+],ans[M][N+];
inline int read()
{
char ch=getchar();
int s=,f=;
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') {s=(s<<)+(s<<)+ch-'';ch=getchar();}
return s*f;
}
int main()
{
// freopen("flower.in","r",stdin);
// freopen("flower.out","w",stdout);
int B=;
n=read();m=read();
for (int i=;i<=n;i++) a[i]=read();
int siz=(n-)/B;
for (int i=;i<=siz;i++)
{
memset(lst,,sizeof(lst));
int l=i*B+,r=min(n,(i+)*B);
for (int j=l;j<=r;j++) lst[a[j]]=a[j];
for (int j=;j<=N;j++) lst[j]=max(lst[j],lst[j-]);
for (int j=;j<=N;j++) for (int k=;k<=N;k+=j) ans[i][j]=max(ans[i][j],lst[min(N,k+j-)]-k);
}
while (m--)
{
int l=read(),r=read(),k=read();
int L=(l-)/B,R=(r-)/B,re=;
for (int i=L+;i<R;i++) re=max(re,ans[i][k]);
for (int i=l;i<=min((L+)*B,r);i++) re=max(re,a[i]%k);
for (int i=max(l,R*B+);i<=r;i++) re=max(re,a[i]%k);
printf("%d\n",re);
}
return ;
}

T2:

emm这题出题人很坑啊,像笔者这样的蒟蒻在看到条件1的时候就直接按y排序了,出题人的意思是这样不好优化,笔者在考场上好像也许可能大概刚出了时间复杂度正确的前缀和优化,无奈死在了128MB的空间上

正解是按x排序,$dp_{i,0/1}$表示以第i个点为顶端的向左和向右的方案数。注意到当前点的x值是最大的,那么显然只能在前i个点中只能作为折线的第一个点或第二个点

那么有两种转移方法

$dp_{j,1}->dp_{i,0}$  $y_j<y_i$

$dp_{k,1}->dp_{j,1}$ $y_j>y_i,y_k<y_i,x_k>x_j$

以上显然都有$x_i>x_j,x_i>x_k$

发现第二种转移可以前缀和优化一下

#include<algorithm>
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll; const int N=6e3+;
const int mod=1e9+;
int n;
ll dp[N][];
struct node
{
ll x,y;
}e[N];
inline ll read()
{
char ch=getchar();
ll s=,f=;
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') {s=(s<<)+(s<<)+ch-'';ch=getchar();}
return s*f;
}
bool cmp(node a,node b) {return a.x<b.x;}
int main()
{
//freopen("refract.in", "r", stdin);
//freopen("refract.out", "w", stdout);
n=read();
for (int i=;i<=n;i++) {e[i].x=read();e[i].y=read();}
sort(e+,e++n,cmp);
for (int i=;i<=n;i++)
{
dp[i][]=dp[i][]=;
for (int j=i-;j>=;j--)
if (e[j].y<e[i].y) (dp[i][]+=dp[j][])%=mod;
else (dp[j][]+=dp[i][])%=mod;
}
ll ans=mod-n;//dp[i][0]和dp[i][1]算重了
for (int i=;i<=n;i++) (ans+=dp[i][]+dp[i][])%=mod;
printf("%lld\n",ans);
return ;
}

T3:

待填

[雅礼NOIP2018集训 day1]的更多相关文章

  1. [雅礼NOIP2018集训] day6

    打满暴力好像是一种挑战,已经连续几天考试最后一个小时自闭了,因为自以为打完了暴力,然而,结果往往差强人意 大概是考试的策略有些问题 T1: 我们设$g[x]$为在x时取小于等于m个物品的最大价值,下面 ...

  2. [雅礼NOIP2018集训 day4]

    感觉状态极差啊,今天居然爆零了 主要是以下原因: 1.又是T1看错题肝了两个小时,发现题意理解错误瞬间心态爆炸 2.T2交错了文件名 3.T3暴力子任务和正解(假的)混在一起,输出了两个答案 都想为自 ...

  3. [雅礼NOIP2018集训 day3]

    考试的时候刚了T1两个小时线段树写了三个子任务结果发现看错了题目,于是接下来一个半小时我自闭了 result=历史新低 这告诉我们,打暴力要端正态度,尤其是在发现自己之前出锅的情况下要保持心态的平和, ...

  4. 雅礼 noip2018 模拟赛 day3 T3

    典型树形dp 这里,我们应该看到一些基本性质: ①:如果这个边不能改(不是没有必要改),我们就不改,因为就算改过去还要改回来,显然不是最优的 注意:"不能改"是指边的性质和要求的相 ...

  5. 雅礼 noip2018 模拟赛day3 T2

    典型的状压思想 设0表示黑球,1表示白球,用一串01序列代表剩下的球的状态,记f[i]表示在i状态下取球的最大期望 那么可以利用记忆化搜索更新,每一层枚举可能拿走的球然后向下搜索,同时记忆化即可 在状 ...

  6. 【loj6307】「雅礼国庆 2017 Day1」Clique 贪心

    题目描述 数轴上有 $n$ 个点,第 $i$ 个点的坐标为 $x_i$ 权值为 $w_i$ .两个点 $i,j$ 之间存在一条边当且仅当 $|x_i−x_j|\le w_i+w_j$ . 你需要求出这 ...

  7. Loj #6307. 「雅礼国庆 2017 Day1」Clique

    link: https://loj.ac/problem/6307 最大团转补图的独立集,这样的话只有r[x]<l[y]或者r[y]<l[x],x和y才能连边,所以排序之后乱搞就行了. 需 ...

  8. [雅礼NOIP集训 2017] number 解题报告 (组合数+二分)

    题解: 令$S(i)={i+1,i+2,...,i<<1}$,f(i,k)表示S(i)中在二进制下恰好有k个1的数的个数 那么我们有$f(i,k)=\sum_{x=1}^{min(k,p) ...

  9. 【NOIP2016提高A组模拟8.17】(雅礼联考day1)总结

    考的还ok,暴力分很多,但有点意外的错误. 第一题找规律的题目,推了好久.100分 第二题dp,没想到. 第三题树状数组.比赛上打了个分段,准备拿60分,因为时间不够,没有对拍,其中有分段的20分莫名 ...

随机推荐

  1. 根据EXCEL模板填充数据

    string OutFileName = typeName+"重点源达标率" + DateTime.Now.ToString("yyyy-MM-dd");    ...

  2. mysqli的简单工具包

    mysqli的简单工具包 <?php /** * 连接 * @param string $host * @param string $user * @param string $password ...

  3. USACO 2.2 Runaround Numbers

    Runaround Numbers Runaround numbers are integers with unique digits, none of which is zero (e.g., 81 ...

  4. 院校-美国:美国国立卫生研究院(NIH)

    ylbtech-院校-美国:美国国立卫生研究院(NIH) 美国国立卫生研究院(简称NIH)位于美国马里兰州贝塞斯达(Bethesda),是美国最高水平的医学与行为学研究机构,初创于1887年,任务是探 ...

  5. SparkSQL 与 Spark Core的关系

    不多说,直接上干货! SparkSQL 与 Spark Core的关系 Spark SQL构建在Spark Core之上,专门用来处理结构化数据(不仅仅是SQL). Spark SQL在Spark C ...

  6. js禁止

    很多时候需要用到js禁止相关的代码: function prohibit() { // 禁止右键 $(document).ready(function() { $(document).bind(&qu ...

  7. 50个技巧提高你的PHP网站程序执行效率

    1.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP手册中说echo是语言结构,不是真正的函数,故 把函数加上了双引号). 2.如果能将类的方法定义成static,就尽量定义成static ...

  8. 用私有构造器或枚举类型强化Singleton

    Singleton指只有一个实例的类,只能被创建一次. 在Java1.5之前实现Singleton有两种方式,都是将构造器设为private并导出公有的静态成员实例. 第一种方式将公有的静态成员实例设 ...

  9. js浏览器问题

    前段时间做了个项目,里面关于手机移动端下载的问题 开始是判断微信.ios和android系统的下载 因为微信屏蔽点击事件和链接的缘故,需要通过打开新页面来进行下载 ios和android的下载分别为不 ...

  10. luoguP2742 【模板】二维凸包 / [USACO5.1]圈奶牛 二维凸包

    我们知道,纵坐标最小的点一定在凸包上(如果有多个,那它们都会被取到) 随便找一个纵坐标最小的点,将其他所有点按照这个点为原点极角排序,我们发现极角大的会在极角小的后面加入(感性认知一下) 考虑新(加入 ...