【LGR-059】洛谷7月月赛题解
比赛的时候正在大巴上,笔记本没网又没电(不过就算有我估计也不会打就是了)
\(A\)
咕咕
const int N=(1<<10)+5;
int a[N][N],n;
void solve(int x,int y,int p){
if(p==1)return a[x][y]=1,void();
p>>=1;
solve(x+p,y,p),solve(x,y+p,p),solve(x+p,y+p,p);
}
int main(){
cin>>n,n=(1<<n);
solve(1,1,n);
fp(i,1,n)fp(j,1,n)printf("%d%c",a[i][j]," \n"[j==n]);
return 0;
}
\(B\)
咕咕
const int N=1e5+5;
int a[N],b[N],nxt[N],Pre[N],vis[N],n;
inline void del(R int x){Pre[nxt[x]]=Pre[x],nxt[Pre[x]]=nxt[x];}
int main(){
scanf("%d",&n);
fp(i,1,n)scanf("%d",&a[i]),b[a[i]]=i,Pre[i]=i-1,nxt[i]=i+1;
fd(i,n,1)if(!vis[i]&&nxt[b[i]]!=n+1){
printf("%d %d ",i,a[nxt[b[i]]]),vis[i]=vis[a[nxt[b[i]]]]=1;
del(b[i]),del(nxt[b[i]]);
}
return 0;
}
\(C\)
对于每一对逆序对\((i,j)\)要加上\(i\times (n-j+1)\),树状数组维护即可,注意这个会爆\(long\ long\)所以得开\(\_\_int128\)
//quming
#include<bits/stdc++.h>
#define R register
#define ll __int128
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
using namespace std;
//typedef long long ll;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
R int res,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
inline void print(R ll x){if(x>9)print(x/10);putchar(x%10+48);}
const int N=1e6+5;
ll c[N],res;int a[N],b[N],n,m;
inline void add(R int x,R int y){for(;x<=m;x+=x&-x)c[x]+=y;}
inline ll query(R int x){R ll res=0;for(;x;x-=x&-x)res+=c[x];return res;}
int main(){
// freopen("testdata.in","r",stdin);
n=read();
fp(i,1,n)a[i]=b[i]=read();
sort(b+1,b+1+n),m=unique(b+1,b+1+n)-b-1;
fd(i,n,1){
a[i]=lower_bound(b+1,b+1+m,a[i])-b;
res+=query(a[i]-1)*i,
add(a[i],n-i+1);
}
// printf("%lld\n",res);
print(res);
return 0;
}
\(D\)
转移方程推出来之后暴力都写不对可海星……
先把所有区间按右端点排序,发现不允许存在一个位置被覆盖三次及以上,且为了不是森林每个节点必须和其他节点中的至少一个有交
设\(f_{i,j}\)表示考虑到第\(i\)个区间,且选择的上一个区间为\(j\)的方案数,边界条件为\(f_{i,0}=1\)
转移分两种情况,一种是\(r[j]\geq l[i]\)且\(l[j]<l[i]\),那么假设此时从\(f_{j,k}\)转移过来,则必须满足的条件是\(r[k]<l[i]\),即可以写成
\]
另一种情况是\(r[j]\geq l[i]\)且\(l[j]\geq l[i]\),那么就不能从\(f[j][k]\)转移而是应该从\(f[i][k]\)进行转移,且需要满足\(r[k]<l[i]\),即
\]
这两个都可以用树状数组维护
//quming
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
using namespace std;
const int P=1e9+7;
inline void upd(R int &x,R int y){(x+=y)>=P?x-=P:0;}
inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}
inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
int ksm(R int x,R int y){
R int res=1;
for(;y;y>>=1,x=mul(x,x))(y&1)?res=mul(res,x):0;
return res;
}
const int N=4005;
int l[N],r[N],las[N],id[N],f[N][N],n,mx,res;
struct BIT{
int c[N];
inline void ins(R int x,R int y){for(++x;x<=mx;x+=x&-x)upd(c[x],y);}
inline int query(R int x){R int res=0;for(++x;x;x-=x&-x)upd(res,c[x]);return res;}
}bi[N];
inline bool cmp(const int &x,const int &y){return r[x]==r[y]?l[x]<l[y]:r[x]<r[y];}
int main(){
// freopen("testdata.in","r",stdin);
scanf("%d",&n);
fp(i,1,n)scanf("%d%d",&l[i],&r[i]),id[i]=i,cmax(mx,r[i]+1);
sort(id+1,id+1+n,cmp);
las[1]=1;
for(R int i=2,ql,qr,qm,ans;i<=n;++i){
ql=1,qr=i-1,ans=i;
while(ql<=qr){
qm=(ql+qr)>>1;
r[id[qm]]>=l[id[i]]?(ans=qm,qr=qm-1):ql=qm+1;
}
las[i]=ans;
}
fp(i,1,n)f[i][0]=1,bi[i].ins(0,1),++res;
fp(i,2,n)fp(j,las[i],i-1){
f[i][j]=(l[id[i]]<=l[id[j]]?bi[i].query(l[id[j]]-1):bi[j].query(l[id[i]]-1));
if(f[i][j])bi[i].ins(r[id[j]],f[i][j]),upd(res,f[i][j]);
// printf("%d %d %d\n",i,j,f[i][j]);
}
printf("%d\n",res);
return 0;
}
【LGR-059】洛谷7月月赛题解的更多相关文章
- 洛谷11月月赛题解(A-C)
心路历程 辣鸡T3卡我1.5h题意,要不是最后nlh跟我解释了一下大样例估计这次是真凉透了.. A P4994 终于结束的起点 打出暴力来发现跑的过最大数据?? 保险起见还是去oeis了一波,然后被告 ...
- 【LGR-070】洛谷 3 月月赛-官方题解
本次免费为大家提供[LGR-070]洛谷 3 月月赛的官方题解,点个赞再走呗! 代码就不上了,大家可以到别的博客上去找找!希望这篇博客能对你有所帮助!
- 【洛谷5月月赛】玩游戏(NTT,生成函数)
[洛谷5月月赛]玩游戏(NTT,生成函数) 题面 Luogu 题解 看一下要求的是什么东西 \((a_x+b_y)^i\)的期望.期望显然是所有答案和的平均数. 所以求出所有的答案就在乘一个逆元就好了 ...
- 「P4996」「洛谷11月月赛」 咕咕咕(数论
题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...
- 「P4994」「洛谷11月月赛」 终于结束的起点(枚举
题目背景 终于结束的起点终于写下句点终于我们告别终于我们又回到原点…… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演.如果这次 NO ...
- 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心
题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi,地面的高度是 h_0 = 0 ...
- 洛谷4月月赛R2
洛谷4月月赛R2 打酱油... A.koishi的数学题 线性筛约数和就可以\(O(N)\)了... #include <iostream> #include <cstdio> ...
- 洛谷3月月赛 R1 Step! ZERO to ONE
洛谷3月月赛 R1 Step! ZERO to ONE 普及组难度 290.25/310滚粗 t1 10分的日语翻译题....太难了不会... t2 真·普及组.略 注意长为1的情况 #include ...
- 【LGR-054】洛谷10月月赛II
[LGR-054]洛谷10月月赛II luogu 成功咕掉Codeforces Round #517的后果就是,我\(\mbox{T4}\)依旧没有写出来.\(\mbox{GG}\) . 浏览器 \( ...
随机推荐
- [BZOJ3681]Arietta(可持久化线段树合并优化建图+网络流)
暴力建图显然就是S->i连1,i->j'连inf(i为第j个力度能弹出的音符),j'->T连T[j]. 由于是“某棵子树中权值在某区间内的所有点”都向某个力度连边,于是线段树优化建图 ...
- robot framework 怎么验证搜索无记录,页面元素不存在
假设你要验证搜索无记录,页面元素不存在,假设我搜索的文本为你好 页面展示为如下 搜索:你好 假设页面搜索有结果: 你好 class=vtext 你好1 class=vtext 你好2 class ...
- 前端编译原理 笔记 -- BISON
前面总结的差不多了,这边记录下,零碎的相关阅读可以备忘的一些知识点 Bsion文档,下面是中文的地址 https://blog.csdn.net/chinamming/article/details ...
- ios 日常开发常用宏定义
#pragma mark - 字体.颜色相关 #define kFONT_SIZE(f) [UIFont systemFontOfSize:(f)] #define kFONT_BOLD_SIZE ...
- orangepi设置vnc开机自启动
首先需要创建一个文件,执行以下命令,自动打开空白文件,在里面编辑内容即可 sudo gedit /etc/init.d/tightvncserver 把以下内容粘贴进去,然后点击保存即可. #!/bi ...
- redis重命名flushall和flushdb重启失败
redis重命名flushall和flushdb,将使用中的redis重命名redis会启动失败并且log中有报错 # Unknown command 'flushall' reading the a ...
- AD19新功能之跟随走线
跟随走线 AD19新增跟随走线,比如需要按照特定的轨迹进行走线,比如要绕着一个圆进行走线,或者靠着边框走线,普通模式下的效果如下图所示,线会跟着指针跑: 在走线模式下,按住 shift + f ,然后 ...
- 【转】通过BeanNameAutoProxyCreator改变臃肿代码
https://www.cnblogs.com/zdd-java/p/7861824.html 前言: 最近接手了一个项目,大概过了下需求,然后打开项目准备开搞的时候发现一个问题,这个项目是提供res ...
- LearnOpenGL学习笔记(二)纹理
开始学习OpenGL,参考的是著名的LearnOpenGL这个网站,在这里做一些总结性的记录,只是方便自己日后查找或者记录自己的一些拓展思考,关于OpenGL的具体内容请移步: https://lea ...
- 【BZOJ3691】游行 最小可相交路径覆盖转化
因为C是不断变化的而且C是和点权相关和边权无关 所以我们可以MCMF但是MCMF的时候不能与C相关 再分析问题 我们可以认为每条路径S->T只覆盖T这个终点 因为题目中说了如果Si != Ti ...