CF377D Developing Game [扫描线]

2024-01-30 01:58

本文主要是介绍CF377D Developing Game [扫描线],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

传送门

挺好的一道题...

我们考虑每一个点对哪一些答案有贡献

那么就是左端点在li-xi的区间, 右端点在xi-ri的区间有贡献

放到二维平面上, 就是一个矩形, 扫描线看什么时候最大就可以了


#include<bits/stdc++.h>
#define N 300050
using namespace std;
int read(){int cnt = 0; char ch = 0;while(!isdigit(ch)) ch = getchar();while(isdigit(ch)) cnt = cnt*10 + (ch-'0'), ch = getchar();return cnt;
}
struct Node{int x,l,r,val;friend bool operator < (const Node &a,const Node &b){return a.x == b.x ? a.val < b.val : a.x < b.x;}
}a[N]; int tot; 
struct Pos{int l,x,r;}p[N];
struct Segmentree{ int Pos,val,tag;}t[N<<2];
int n,ans,L,R; 
void Pushup(int x){ if(t[x<<1].val > t[x<<1|1].val){t[x].val = t[x<<1].val;t[x].Pos = t[x<<1].Pos;}else{t[x].val = t[x<<1|1].val;t[x].Pos = t[x<<1|1].Pos;}
}
void Pushdown(int x){if(t[x].tag){t[x<<1].val += t[x].tag; t[x<<1].tag += t[x].tag;t[x<<1|1].val += t[x].tag; t[x<<1|1].tag += t[x].tag;t[x].tag = 0;} 
}
void Build(int x,int l,int r){if(l==r){ t[x].Pos = l; return;}int mid = (l+r) >> 1; Build(x<<1,l,mid); Build(x<<1|1,mid+1,r);Pushup(x);
}
void Modify(int x,int l,int r,int L,int R,int v){if(L<=l && r<=R){ t[x].val += v, t[x].tag += v; return;}Pushdown(x); int mid = (l+r) >> 1;if(L<=mid) Modify(x<<1, l, mid, L, R, v);if(R>mid) Modify(x<<1|1, mid+1, r, L, R, v);Pushup(x);
}
int main(){n = read(); Build(1,1,N-50);for(int i=1;i<=n;i++){int l = read(), x = read(), r = read();a[++tot] = (Node){l, x, r, 1};a[++tot] = (Node){x+1, x, r, -1};p[i] = (Pos){l,x,r};} sort(a+1, a+tot+1);for(int i=1;i<=tot;i++){Modify(1,1,N-50, a[i].l, a[i].r, a[i].val);if(t[1].val > ans){ans = t[1].val; L = a[i].x; R = t[1].Pos;}} printf("%d\n",ans); for(int i=1;i<=n;i++)if(p[i].x >= L && p[i].x <= R && p[i].l<=L && p[i].r>=R)printf("%d ",i);return 0;
}

 

这篇关于CF377D Developing Game [扫描线]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/658774

相关文章

fzu 2275 Game KMP

Problem 2275 Game Time Limit: 1000 mSec    Memory Limit : 262144 KB  Problem Description Alice and Bob is playing a game. Each of them has a number. Alice’s number is A, and Bob’s number i

10400 -Game Show Math

这道题的话利用了暴力深搜,尽管给了20S,但是这样还会超时,所以就需要利用回溯进行减枝,因为是DFS,所以用一个数组vis[i][j]记录是否在状态i时候取到过j值,如果取到过的话,那么直接回溯(往后搜索已经没有意义了,之前到达这个状态的时候是无法得到结果的) 还有需要注意的地方就是题目的要求,每一步的结构都在(-32000,32000)之间,所以需要一步判断,如果在这个范围外直接回溯 最后一

洛谷P5490扫描线

0是最小的数字,将一个线段看成一个区间,对于一个矩形,从下扫到上,入边为1,而出边为-1,意思是将这个区间上的所有点加1(区间修改).把线段表示为Line[i],其中记录了l,r,h,tag,左右端点,高度,入边还是出边(1或-1) 那么每次区间修改后不为0的区间它的值可能是1,2,3或者是其它数字,这不好统计,可以将它转化一下,0是不是表示没有被覆盖过的地方,我们只要统计0的个数然后用总长减去

Zxing扫描二维码精简(竖屏、拉伸处理、扫描框大小和扫描线移动、开灯)

自己在简版zxing的基础上美化了下,给大家分享下,直接扫描功能没问题。 就是从相册导入图片,解码一直不成功,导入图片解码 我引入了一个解码类  RGBLuminanceSource(百度网上二维码图片解码都是这个,我还把这个类编译了,导到core.jar包里面了), 好像是hity类型有问题,反正一直不成功。 有大神解决了,回复告诉我!谢谢! 分享 暂时没做效

【POJ】1733 Parity game 并查集

传送门:【POJ】1733 Parity game 题目大意:给你一个长度为n的01序列,再给你m句话,每句话是一个区间【L,R】,告诉你区间【L,R】中1的个数,现在你的任务是找到从第几句话开始说的和前面矛盾,出现第一次假话的时候前面有多少是真话。 题目分析:一开始看几乎没思路啊。后来没办法了,只能跑别人的博客去看看了。。。一看到说把一个区间【L,R】拆成两个区间【0,L-1】,

【HDU】5426 Rikka with Game【DP】

题目链接:【HDU】5426 Rikka with Game #include <bits/stdc++.h>using namespace std ;typedef long long LL ;#define clr( a , x ) memset ( a , x , sizeof a )const int MAXN = 100005 ;const int MAXE = 200005 ;

LeetCode 45 Jump Game II

题意: 给出一个步长数组nums,如果一个人站在i这个点上那么他可以向右最多走nums[i]步,求从左端点走到右端点的最少步数。 思路: 如果点x可以用dp[x]步到达,那么[ x + 1, x + nums[x] ]区间内的点都可以用dp[x] + 1步到达。 利用这个想法,可以O(n)的求出走一步可以到达哪些位置,走两步可以到达哪些位置,以此类推。 代码: clas

扫描线Sweep Line算法总结

扫描线算法,推荐还是用标准的模板去写,treemap只适合于求最大的overlap个数的题目,其余的不能用treemap来解,所以推荐还是用event的思想去+1, -1然后排序扫描的方法可以用来解所有的题型; Number of Airplanes in the Sky 思路:经典扫描线算法:把interval起飞和降落做为event,全部打散,按照时间排列,同时时间相等的,按照降落在前面,起

【论文笔记】Multi-Task Learning as a Bargaining Game

Abstract 本文将多任务学习中的梯度组合步骤视为一种讨价还价式博弈(bargaining game),通过游戏,各个任务协商出共识梯度更新方向。 在一定条件下,这种问题具有唯一解(Nash Bargaining Solution),可以作为多任务学习中的一种原则方法。 本文提出Nash-MTL,推导了其收敛性的理论保证。 1 Introduction 大部分MTL优化算法遵循一个通用方

android-Intent,Injector,Template,Adapter,Validation,Gesture,Game,Game Engine,Bluetooth...

Intent Intent PhotoPicker 图片选择 & 图片预览https://github.com/donglua/PhotoPicker Injector AndroidAnnotations Fast Android Development. Easy maintainance. https://github.com/excilys/androidannotations