CF56E Domino Principle 树状数组 + 简单dp

在这里插入图片描述
一个比较简单的题,但是我还是没做出来(哭。
很容易想到从后往前做,所以我们可以维护一个dp数组ff(i)表示到第i个牌倒下能达到的最远距离。
f直接倒着跑,每次取[x,x+h−1][x,x+h-1][x,x+h1]的最大值即可,可以用线段树比较容易的解决问题。但是看到一个大神直接把f初始值设为**-INF** ,因为是从后往前跑的,所以前面的一直都是**-INF**,所以可以直接用树状数组维护前缀最大值,单点修改即可。
代码写的贼麻烦,离散化的时候完全不需要 x+h-1 的点进行离散化,这样可以直接查找x是第几个,不需要跟我一样多写一个树状数组。

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
#define lowbit(x) ((x)&(-x))
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,se;
int ans[N],tr[N],trr[N];
int f[N];
vector<int>v;
struct Node
{int x,h,id;
}p[N];int find(int x)
{return lower_bound(v.begin(),v.end(),x)-v.begin();
}bool cmp(Node a,Node b)
{return a.x>b.x;
}void mf(int x,int c)
{for(int i=x;i<=se;i+=lowbit(i)) tr[i]=max(tr[i],c);
}int ask(int x)
{int ans=-INF;for(int i=x;i;i-=lowbit(i)) ans=max(ans,tr[i]);return ans;
}void add(int x)
{for(int i=x;i<=se;i+=lowbit(i)) trr[i]+=1;
}int sum(int x)
{int ans=0;for(int i=x;i;i-=lowbit(i)) ans+=trr[i];return ans;
}int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);scanf("%d",&n); memset(tr,-0x3f,sizeof(tr));for(int i=1;i<=n;i++) scanf("%d%d",&p[i].x,&p[i].h),p[i].id=i,v.pb(p[i].x),v.pb(p[i].x+p[i].h-1);sort(p+1,p+1+n,cmp);sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end());se=v.size();for(int i=1;i<=n;i++){int x=p[i].x,h=p[i].h,id=p[i].id;mf(find(x)+1,x+h-1); add(find(x)+1);int pos=find(x+h-1)+1;int mx=ask(pos);mf(find(x)+1,mx);ans[p[i].id]=sum(find(mx))-sum(find(x)+1)+1;}for(int i=1;i<=n;i++) printf("%d ",ans[i]);return 0;
}
/**/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Docker的Consul服务发现集群搭建

在去年的.NET Core微服务系列文章中&#xff0c;初步学习了一下Consul服务发现&#xff0c;总结了两篇文章。本次基于Docker部署的方式&#xff0c;以一个Demo示例来搭建一个Consul的示例集群&#xff0c;最后给出一个HA的架构示范&#xff0c;也会更加贴近于实际应用环境。一、…

Hills And Valleys CodeForces - 1467B 思维

给你一个数组&#xff0c;最多可以修改一个数&#xff0c;问最少的山峰和山谷数量之和。 小菜鸡做了一年。 一上来想猜个结论&#xff0c;让每个数等于其相邻的两个数&#xff0c;看了题解之后也证明的正确性&#xff0c;当时直接写就没后面这么多事了。 但是命运让我分情况讨…

2018 ACM-ICPC World Finals Problem D.Gem Island

2018 ACM-ICPC World Finals Problem D.Gem Island Solution 其实就是求x1x2⋯xnnd,xi∈[1,d1]x_1x_2\dots x_nnd,x_i\in[1,d1]x1​x2​⋯xn​nd,xi​∈[1,d1]的前rrr大的xix_ixi​的和的期望&#xff0c;可以发现每一种不同的序列{xi}\{x_i\}{xi​}的出现概率都是一个定值&a…

[译]使用LazZiya.ExpressLocalization开发多语言支持的ASP.NET Core 2.x项目

介绍开发多语言支持的ASP.NET Core 2.x Web应用程序需要大量的基础架构设置&#xff0c;并且耗费时间和精力。这篇文章&#xff0c;我们将使用LazZiya.ExpressLocalization nuget包一步本地化支持。背景大多数网络应用程序都是基于网址的本地化。因此我们可以在网址中看到所选的…

2019 ICPC World Finals Problem B. Beautiful Bridges

2019 ICPC World Finals Problem B. Beautiful Bridges Solution 太菜了&#xff0c;sbsbsb题调了一个下午。 首先有一个显然的O(n3)O(n^3)O(n3)的dpdpdp&#xff0c;令fif_ifi​表示最后一个桥柱在iii的最小代价&#xff0c;枚举上一个桥柱jjj&#xff0c;因为地面超过桥拱…

ac 梦幻布丁 启发式合并

题意&#xff1a;中文题。 对于每种颜色&#xff0c;我们都可以看成一个集合。让后把一种颜色变成另一种颜色就转换成了把两个集合的合并问题。显然我们有一个复杂度为O(NlogN)O(NlogN)O(NlogN)的启发式合并能完美的解决这个问题。 解决合并问题了&#xff0c;现在需要解决如何…

VS Code 1.35 发布!全新 logo 来临,远程开发进入稳定版

近期&#xff08; 北京时间 2019 年 6 月 6 日 &#xff09;&#xff0c;微软发布了 Visual Studio Code 1.35 版本&#xff0c;带来了众多更新。全新的 logo全新的图标来啦~ 这一次的图标更新历时两个月&#xff0c;VS Code 团队倾听了用户们的反馈。大家对新图标还喜欢吗&…

P2617 Dynamic Rankings 整体二分

树套树板子题&#xff0c;但是整体二分不管是时间复杂度还是空间复杂度都表现更优秀&#xff0c;所以用整体二分来水一波。 普通的整体二分是没有修改操作的。然鹅我们处理修改操作也比较容易&#xff0c;直接减上这个数&#xff0c;让后加上修改之后的数即可。这样按照时间戳来…

2019 ICPC World Finals Problem J. Miniature Golf

2019 ICPC World Finals Problem J. Miniature Golf Solution 设lll为l0l_0l0​时iii的总分为si,l0s_{i,l_0}si,l0​​&#xff0c;si,l0∑kmin(ai,k,l0)s_{i,l_0}\sum_k min(a_{i,k},l_0)si,l0​​∑k​min(ai,k​,l0​)&#xff0c;让lll从小到大依次变化&#xff0c;可以发…

基于Domain Driven Design&Clean Architecture原则分层的新启动模板

本文的内容将在0.18.0中发布. Abp中文网将同步更新框架.敬请期待...MVC应用程序启动模板介绍MVC应用程序启动模板是基于领域驱动设计(DDD)分层(或根据偏好分层)的应用程序结构.在这篇文档中详细介绍了解决方案结构和项目参阅ASP.NET Core MVC 模板入门创建此模板的新解决方案并…

CF 1475 F . Unusual Matrix 思维

传送门 大体题意&#xff1a;给定两个矩阵a和b&#xff0c;给定一个操作&#xff0c;这个操作可以将a矩阵任意一行或者任意一列取反&#xff0c;问能否将a变成b。 乍一看不是一个很难的题&#xff0c;但是想我这样思维不好的还是看不出来什么东西。让后看到了题解前几句话 “ …

NEERC 17 Problem I. Interactive Sort

NEERC 17 Problem I. Interactive Sort Solution 当写了两倍正解的代码使用了两倍于正解的操作步数…… 刚开始的想法是求出一个bbb&#xff0c;再求出一个aaa&#xff0c;依次轮换&#xff0c;分别维护当前知道确定值的a,ba,ba,b的有序序列&#xff0c;然后求aaa就在bbb的有…

.Net Core 微服务容器系列基础目录篇

1.开场白HI&#xff0c;各位老铁&#xff0c;大家端午好&#xff0c;之前写了些关于.net core商城系列的文章&#xff0c;有点乱&#xff0c;今天心血来潮想着整理一下&#xff08;今天只是先把目录列出来&#xff0c;后面的每篇文章这两天会进行重新修改的&#xff0c;目前先将…

CF 1475 D. Cleaning the Phone 思维模型

传送门 题意&#xff1a;一个人有n个程序&#xff0c;每个程序都有占的缓存和价值。现在要释放m及以上的缓存&#xff0c;求失去的价值的最小值。 题解 首先我们知道如果所有缓存加起来 < m 的话&#xff0c;直接输出 - 1 就行啦。 其次呢&#xff0c;我们发现价值只有1和2…

NEERC 17 G.The Great Wall

NEERC 17 G.The Great Wall Solution 这题的第一步tricktricktrick是&#xff1a;我们注意到取a,b,ca,b,ca,b,c的集合两两不交且并集为UUU&#xff0c;因此确定了b,cb,cb,c之后可以简单地唯一确定aaa&#xff0c;于是我们通过让bi−ai,ci−ai,Ans∑aib_i-a_i,c_i-a_i,Ans\sum…

感谢诸君的陪伴,见证微信 SDK 的成长,内含黑科技福利

Senparc.Weixin SDK5000Stars5000 Star5005005000 Stars今天 SDK 已经超过 5000 Stars在此感谢大家的每一份支持和一直以来的关注是你们的信任和陪伴给了我们前行的力量 在未来的日子里也希望大家能够继续支持我们我们将以优秀的产品和服务来回馈你们的支持&#xff01;愿我们携…

NEERC13 Problem H.Hack Protection

NEERC13 Problem H.Hack Protection Solution 注意到题目中的区间与&#xff0c;在左端点lll确定的情况下&#xff0c;对于所有r≥lr\geq lr≥l&#xff0c;ANDl,rAND_{l,r}ANDl,r​只有logloglog种取值&#xff0c;这是一个极为常见的性质。 于是我们从大到小枚举lll&#…

ABC 189 E - Rotate and Flip 矩阵转移

传送门 题意&#xff1a;给定n个点&#xff0c;m个操作&#xff0c;n和m都是1e5级别的。让后每个操作是将这个点绕原点顺时针、逆时针转90&#xff0c;将这个点按照 x p 或着 y p 做对称。再有q个询问&#xff0c;q也是1e5级别的。让后每个询问是问B这个点在第A次操作之后在…

我,宇宙最强编辑器,支持远程开发

Visual Studio Code 五月份更新之 1.35 版本已发布。此次更新的亮点包括更新 Visual Studio Code 图标 - 新版本更新了 logo。改进“转到定义&#xff08;Go to Definition&#xff09;”行为 - 通过多个定义的显示&#xff0c;更快速进行导航&#xff08;Navigation&#xff0…

ARC068C - Snuke Line

ARC068C - Snuke Line Description 其实就是给出nnn个区间[li,ri][l_i,r_i][li​,ri​]对于每一个i∈[1,M]i\in[1,M]i∈[1,M]&#xff0c;求&#xff1a; ∑j1n[⌊rji⌋−⌊lj−1i⌋≥1]\sum_{j1}^n[\lfloor \frac{r_j}{i}\rfloor-\lfloor \frac{l_j-1}{i}\rfloor\geq 1]j1∑…