Codeforces 542A Place Your Ad Here
把没用的第一类区间去掉之后, 排序, 然后枚举第二类区间, 在上面死命二分就好了。
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PLL pair<LL, LL>
#define PLI pair<LL, int>
#define PII pair<int, int>
#define SZ(x) ((int)x.size())
#define ull unsigned long long using namespace std; const int N = 2e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ;
const double eps = 1e-;
const double PI = acos(-); bool chkmax(LL& a, LL b) {
return a < b ? a = b, true : false;
}
bool chkmax(int& a, int b) {
return a < b ? a = b, true : false;
} int Log[N];
struct ST {
PII dp[N][];
void build(int n, PII b[]) {
for(int i = ; i <= n; i++) dp[i][] = b[i];
for(int j = ; j <= Log[n]; j++)
for(int i = ; i+(<<j)- <= n; i++)
dp[i][j] = max(dp[i][j-], dp[i+(<<(j-))][j-]);
}
PII query(int x, int y) {
int k = Log[y - x + ];
return max(dp[x][k], dp[y-(<<k)+][k]);
}
}; int n, m;
PII len[N];
PII gg = mk(, ); pair<PII, int> a[N];
pair<PII, int> b[N];
ST rmq; bool cmp(const pair<PII, int>& a, const pair<PII, int>& b) {
if(a.fi.fi == b.fi.fi) return a.fi.se > b.fi.se;
return a.fi.fi < b.fi.fi;
}
int main() {
for(int i = -(Log[]=-); i < N; i++)
Log[i] = Log[i - ] + ((i & (i - )) == );
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++) scanf("%d%d", &a[i].fi.fi, &a[i].fi.se), a[i].se = i;
for(int i = ; i <= m; i++) scanf("%d%d%d", &b[i].fi.fi, &b[i].fi.se, &b[i].se);
sort(a + , a + + n, cmp);
int up = n; n = ;
for(int i = ; i <= up; i++)
if(a[i].fi.se > a[n].fi.se) a[++n] = a[i];
// for(int i = 1; i <= n; i++) printf("%d %d %d ^^\n", a[i].se, a[i].fi.fi, a[i].fi.se);
for(int i = ; i <= n; i++) len[i].fi = a[i].fi.se - a[i].fi.fi, len[i].se = a[i].se;
rmq.build(n, len);
LL ans = ;
for(int i = ; i <= m; i++) {
int L = b[i].fi.fi, R = b[i].fi.se, c = b[i].se, len = , who = ;
int low = , high = n, p = -;
while(low <= high) {
int mid = low + high >> ;
if(a[mid].fi.fi <= L) p = mid, low = mid + ;
else high = mid - ;
}
if(~p && a[p].fi.se > L && chkmax(len, min(R, a[p].fi.se) - L)) who = a[p].se;
low = , high = n, p = -;
while(low <= high) {
int mid = low + high >> ;
if(a[mid].fi.se >= R) p = mid, high = mid - ;
else low = mid + ;
}
if(~p && a[p].fi.fi < R && chkmax(len, R - max(L, a[p].fi.fi))) who = a[p].se;
int Lb = -, Rb = -;
low = , high = n;
while(low <= high) {
int mid = low + high >> ;
if(a[mid].fi.fi >= L) Lb = mid, high = mid - ;
else low = mid + ;
}
low = , high = n;
while(low <= high) {
int mid = low + high >> ;
if(a[mid].fi.se <= R) Rb = mid, low = mid + ;
else high = mid - ;
}
if(~Lb && ~Rb && Lb <= Rb) {
PII t = rmq.query(Lb, Rb);
if(chkmax(len, t.fi)) who = t.se;
}
if(chkmax(ans, 1LL * c * len)) {
gg.fi = who;
gg.se = i;
}
}
if(ans) {
printf("%lld\n", ans);
printf("%d %d\n", gg.fi, gg.se);
} else {
puts("");
}
return ;
} /*
*/
Codeforces 542A Place Your Ad Here的更多相关文章
- 【codeforces 803D】Magazine Ad
[题目链接]:http://codeforces.com/contest/803/problem/D [题意] 给你一个字符串; 其中的空格和连字符表示可以折叠的部分 (就是说能在那个位置把字符串分成 ...
- Codeforces Global Round 3(A-D)
我凉了..感觉自己啥都不会做,搞不好起床就绿了啊 代码和反思起床补,今天要反了个大思的 A. Another One Bites The Dust 把所有的ab排在一起然后两边叉a和b #includ ...
- Codeforces Edu Round 51 A-D
A. Vasya And Password 模拟题,将所缺的种类依次填入"出现次数$ >1 $"的位置,替换掉Ta即可. #include <iostream> ...
- Codeforces Edu Round 50 A-D
A. Function Height 由于只能提升\(x\)为奇数的点,每个三角形的底一定为\(2\), 则要求我们求: \(2 * (h_1 + h_2 + - + h_n) / 2 = k\),使 ...
- Codeforces Edu Round 48 A-D
A. Death Note 简单模拟,可用\(\%\)和 \(/\)来减少代码量 #include <iostream> #include <cstdio> using nam ...
- Codeforces Edu Round 64 A-D
A. Inscribed Figures 分类讨论打表即可. PS:这道题翻译有歧义. 这样稍微翻转一下,就可以是\(7\)个交点呀...(大概是我没看英文题干导致的惨案) #include < ...
- Codeforces Edu Round 59 A-D
A. Digits Sequence Dividing 注意特殊情况,在\(n = 2\)时除非\(str[1] >= str[2]\),否则可以把第一个数划分下来,剩下的数直接当成一组,一定满 ...
- Codeforces Edu Round 57 A-D
A. Find Divisible 符合条件的区间一定可以选择\(l, l * 2\). 证明\(l * 2 <= r\) 假设存在一组解,\(x, x * d (l <= x <= ...
- Codeforces Edu Round 56 A-D
A. Dice Rolling 把\(x\)分解为\(a * 6 + b\),其中\(a\)是满6数,\(b\)满足\(1 <= b < 6\),即可... #include <io ...
随机推荐
- $Django 路飞学城项目简介
- 基于极验实现动态验证码 - 在线视频播放:cc,HTML用的Flash - 基于Rest Framework实现 API接口 - 自定义rest认证token 认证 - 序列化以及自定义验证对请求 ...
- 【原创】大数据基础之Kerberos(1)简介、安装、使用
kerberos5-1.17 官方:https://kerberos.org/ 一 简介 The Kerberos protocol is designed to provide reliable a ...
- elasticsearch中的java.io.IOException: 远程主机强迫关闭了一个现有的连接
[2018-07-31T14:29:41,289][WARN ][o.e.x.s.t.n.SecurityNetty4HttpServerTransport] [9rTGh-y] caught exc ...
- Oracle 数据库实例简介
回到顶部 一:Oracle 数据库实例简介 1:数据库实例的启动顺序: 使用数据库其实就是访问内存.即:数据库实例.数据库的启动是顺序是 先 nomount ----> mount --- ...
- Confluence 6 在你用户宏中使用参数
你可以为你的用户宏指定参数.这样的话,用户可以使用参数来决定 Confluence 页面的显示情况. 如何在 Confluence 页面中使用你的宏参数 当添加一个宏到 Confluence 页面中的 ...
- js小方法积累,将一个数组按照n个一份,分成若干数组
// 把一个数组按照一定长度分割成若干数组 function group(array, subGroupLength) { let index = 0; let newArray = []; whil ...
- input,select默认颜色修改
input::-webkit-input-placeholder{color: #7f7f7f;} select{color: #7f7f7f} option{color: #7f7f7f;}
- Java的动手动脑(六)
日期:2018.11.8 星期四 博客期:022 --------------------------------------------------------------------------- ...
- Centos下安装软件的常用方法
1.源码安装: 需要手动编译.这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz). tar -zxvf filename.tar.gz 通常在解压缩后产生的文件中,有名为" ...
- 如何修改PDF文件内容,PDF怎么添加背景
很多的情况下,大家都会遇到PDF文件,不管是在学习中还是在工作中,对于PDF文件,文件的修改编辑是需要用到PDF编辑软件的,在编辑文件的时候,发现文件的页面是有背景颜色的,又该如何修改背景颜色呢,不会 ...