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的更多相关文章

  1. 【codeforces 803D】Magazine Ad

    [题目链接]:http://codeforces.com/contest/803/problem/D [题意] 给你一个字符串; 其中的空格和连字符表示可以折叠的部分 (就是说能在那个位置把字符串分成 ...

  2. Codeforces Global Round 3(A-D)

    我凉了..感觉自己啥都不会做,搞不好起床就绿了啊 代码和反思起床补,今天要反了个大思的 A. Another One Bites The Dust 把所有的ab排在一起然后两边叉a和b #includ ...

  3. Codeforces Edu Round 51 A-D

    A. Vasya And Password 模拟题,将所缺的种类依次填入"出现次数$ >1 $"的位置,替换掉Ta即可. #include <iostream> ...

  4. Codeforces Edu Round 50 A-D

    A. Function Height 由于只能提升\(x\)为奇数的点,每个三角形的底一定为\(2\), 则要求我们求: \(2 * (h_1 + h_2 + - + h_n) / 2 = k\),使 ...

  5. Codeforces Edu Round 48 A-D

    A. Death Note 简单模拟,可用\(\%\)和 \(/\)来减少代码量 #include <iostream> #include <cstdio> using nam ...

  6. Codeforces Edu Round 64 A-D

    A. Inscribed Figures 分类讨论打表即可. PS:这道题翻译有歧义. 这样稍微翻转一下,就可以是\(7\)个交点呀...(大概是我没看英文题干导致的惨案) #include < ...

  7. Codeforces Edu Round 59 A-D

    A. Digits Sequence Dividing 注意特殊情况,在\(n = 2\)时除非\(str[1] >= str[2]\),否则可以把第一个数划分下来,剩下的数直接当成一组,一定满 ...

  8. Codeforces Edu Round 57 A-D

    A. Find Divisible 符合条件的区间一定可以选择\(l, l * 2\). 证明\(l * 2 <= r\) 假设存在一组解,\(x, x * d (l <= x <= ...

  9. Codeforces Edu Round 56 A-D

    A. Dice Rolling 把\(x\)分解为\(a * 6 + b\),其中\(a\)是满6数,\(b\)满足\(1 <= b < 6\),即可... #include <io ...

随机推荐

  1. ThinkPHP框架整合phpqrcode生成二维码DEMO

    ThinkPHP框架发展到今天功能已经变得是非常强大了,但是ThinkPHP框架中没有二维码相关的库,因此我们可以通过整合phpqrcode来完成生成二维码的功能.想使用phpqrcode首先就要把p ...

  2. Socket实现断线重连

    客户端维护一个线程安全的待发送信息队列   开启死循环   判断Socket = null   调用Socket的sendUrgentData(0xFF)发送1个字节的心跳包   捕捉到连接异常后就关 ...

  3. [转]PhpStorm快捷键大全

    1 前言 PhPStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,PhpStorm可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化debug功能.Phpstro ...

  4. iOS weak 内存释放问题

    我们都知道weak 关键字可以解决内存不释放问题,但是使用上有些讲究. 看代码: import UIKit var str = "Hello, playground" class ...

  5. swift 学习- 14 -- 继承

    // 一个类可以继承另一个 类的方法, 属性和其他特征, 当一个类继承其他类时, 继承类叫子类, 被继承类叫父类 或 (超类), 在 Swift 中, 继承是区分 [类] 和其他类型的 一个基本特征 ...

  6. Confluence 6 MySQL 创建数据库和数据库用户

    一旦你成功的安装和配置了 MySQL 数据库服务器,你需要为你的 Confluence 创建数据库和数据库用户: 在 MySQL 中以超级用户运行 'mysql' .默认的用户为 'root' 同时密 ...

  7. Confluence 6 在初始化配置时候的问题

    提交一个 服务器请求(support request) 然后在你的服务请求中同时提供下面的信息. 下载一个 LDAP 浏览器,你可以通过这个确定你的 LDAP 服务器配置正确.Atlassian 推荐 ...

  8. Swift中 @objc 使用介绍

    在swift 中 如果一个按钮添加点击方法 如果定义为Private  或者 定义为 FilePrivate 那么会在Addtaget方法中找不到私有方法 但是又不想把方法暴露出来,避免外界访问 ,那 ...

  9. day10 函数

    函数基础 函数概念 为什么用函数 什么是函数 定义函数 调用函数 返回值详解上节回顾 文件处理 修改文件 1.读取要修改文件内容 read可能导致内存溢出 赋值给变量 修改 将修改后的内容重新写入文件 ...

  10. php回调函数的概念及实例

    php提供了两个内置函数call_user_func()和call_user_func_array()提供对回调函数的支持.这两个函数的区别是call_user_func_array是以数组的形式接收 ...