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


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. kentico中提示Message: An invalid SQL query was used.

    在调用CMSAbstractWebPart类的GetValue方法的时候出错. namespace CMS.PortalEngine.Web.UI{ /// <summary> /// B ...

  2. Ubuntu+caffe训练cifar-10数据集

    1. 下载cifar-10数据库 ciffar-10数据集包含10种物体分类,50000张训练图片,10000张测试图片. 在终端执行指令下载cifar-10数据集(二进制文件): cd ~/caff ...

  3. Oracle 性能优化的基本方法

    Oracle 性能优化的基本方法概述 1)设立合理的性能优化目标. 2)测量并记录当前性能. 3)确定当前Oracle性能瓶颈(Oracle等待什么.哪些SQL语句是该等待事件的成分). 4)把等待事 ...

  4. Jquery validform

    一.validform是什么?            validform是一款智能的表单验证js插件,它是基于jQuery库与css,我们只需要把表单对象放入,             就可以对整个表 ...

  5. C#对 Json的序列化和反序列化时出现“k_BackingField”

    在C#2.0的项目中,以前经常使用Json.NET实现序列化和反序列化.后来从c#3.0中开始使用新增的DataContractJsonSerializer进行json相关的操作.微软提供的原生类库使 ...

  6. POJ 1155 树形DP

    题意:电视台发送信号给很多用户,每个用户有愿意出的钱,电视台经过的路线都有一定费用,求电视台不损失的情况下最多给多少用户发送信号. 转自:http://www.cnblogs.com/andre050 ...

  7. WebView简单用法

    1.空布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:andr ...

  8. JS中浮点数相加问题

    https://blog.csdn.net/u012937029/article/details/61191512 采用IEEE 754 Floating-point的浮点数编码方式来表示浮点数 按I ...

  9. C++中static和const关键字的作用

    static关键字至少有下列几个作用: 函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: 在模块内的static全局变量 ...

  10. Eclipse中使用GIT更新项目

    GIT更新项目: 右击项目——Team——Pull: