【CF】310 Div.1 C. Case of Chocolate
线段树的简单题目,做一个离散化,O(lgn)可以找到id。RE了一晚上,额,后来找到了原因。
/* 555C */
#include <iostream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
//#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 typedef struct {
int x, y;
char op[];
} node_t; const int maxn = 2e5+;
const int maxm = 4e5+;
node_t Q[maxn];
int rn[maxm];
int mxr[maxm<<];
int mxc[maxm<<];
int rL[maxm<<];
int cT[maxm<<];
int L, R; void build(int l, int r, int rt) {
rL[rt] = ;
cT[rt] = ;
if (l == r)
return ; int mid = (l+r)>>;
build(lson);
build(rson);
} inline void PushDownR(int rt) {
int lb = rt<<;
int rb = lb | ; if (mxr[rt]) {
rL[rt] = max(rL[rt], mxr[rt]);
mxr[lb] = max(mxr[lb], mxr[rt]);
mxr[rb] = max(mxr[rb], mxr[rt]);
mxr[rt] = ;
}
} inline void PushDownC(int rt) {
int lb = rt<<;
int rb = lb | ; if (mxc[rt]) {
cT[rt] = max(cT[rt], mxc[rt]);
mxc[lb] = max(mxc[lb], mxc[rt]);
mxc[rb] = max(mxc[rb], mxc[rt]);
mxc[rt] = ;
}
} inline void PushDown(int rt) {
int lb = rt<<;
int rb = lb | ; if (mxr[rt]) {
rL[rt] = max(rL[rt], mxr[rt]);
mxr[lb] = max(mxr[lb], mxr[rt]);
mxr[rb] = max(mxr[rb], mxr[rt]);
mxr[rt] = ;
} if (mxc[rt]) {
cT[rt] = max(cT[rt], mxc[rt]);
mxc[lb] = max(mxc[lb], mxc[rt]);
mxc[rb] = max(mxc[rb], mxc[rt]);
mxc[rt] = ;
}
} void updateR(int delta, int l, int r, int rt) {
if (L<=l && R>=r) {
mxr[rt] = max(mxr[rt], delta);
return ;
} int mid = (l+r)>>; PushDownR(rt);
if (mid >= R) {
updateR(delta, lson);
} else if (mid < L) {
updateR(delta, rson);
} else {
updateR(delta, lson);
updateR(delta, rson);
}
} void updateC(int delta, int l, int r, int rt) {
if (L<=l && R>=r) {
mxc[rt] = max(mxc[rt], delta);
return ;
} int mid = (l+r)>>; PushDownC(rt);
if (mid >= R) {
updateC(delta, lson);
} else if (mid < L) {
updateC(delta, rson);
} else {
updateC(delta, lson);
updateC(delta, rson);
}
} pii query(int l, int r, int rt) {
if (l == r) {
rL[rt] = max(rL[rt], mxr[rt]);
cT[rt] = max(cT[rt], mxc[rt]);
mxr[rt] = ;
mxc[rt] = ; pii p(rL[rt], cT[rt]);
return p;
}
int mid = (l+r)>>; PushDown(rt);
if (mid >= R) {
return query(lson);
} else {
return query(rson);
}
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int n, q;
mpii tb;
sti st; scanf("%d %d", &n, &q);
rep(i, , q) {
scanf("%d %d %s", &Q[i].y, &Q[i].x, Q[i].op);
st.insert(Q[i].x);
st.insert(Q[i].y);
}
st.insert(); int m = ;
int i, j, k; for (sti::iterator siter=st.begin(); siter!=st.end(); ++siter) {
k = *siter;
++m;
rn[m] = k;
tb[k] = m;
} int x, y, idx, idy;
int ans;
pii p; build(, m, );
rep(i, , q) {
x = Q[i].x;
y = Q[i].y;
if (Q[i].op[] == 'U') {
idy = tb[y];
L = R = idy;
p = query(, m, );
updateC(x+, , m, );
ans = x - p.sec + ;
idx = tb[x];
k = lower_bound(rn+, rn++m, p.sec) - rn;
L = k;
R = idx;
if (L <= R)
updateR(y+, , m, );
} else {
idx = tb[x];
L = R = idx;
p = query(, m, );
updateR(y+, , m, );
ans = y - p.fir + ;
idy = tb[y];
k = lower_bound(rn+, rn++m, p.fir) - rn;
L = k;
R = idy;
if (L <= R)
updateC(x+, , m, );
}
#ifndef ONLINE_JUDGE
printf("L = %d, R = %d\n", L, R);
#endif
if (ans < )
ans = ;
printf("%d\n", ans);
} #ifndef ONLINE_JUDGE
printf("time = %d.\n", (int)clock());
#endif return ;
}
【CF】310 Div.1 C. Case of Chocolate的更多相关文章
- Codeforces Round #310 (Div. 1) C. Case of Chocolate set
C. Case of Chocolate Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/555/ ...
- 【CF】121 Div.1 C. Fools and Roads
题意是给定一棵树.同时,给定如下k个查询: 给出任意两点u,v,对u到v的路径所经过的边进行加计数. k个查询后,分别输出各边的计数之和. 思路利用LCA,对cnt[u]++, cnt[v]++,并对 ...
- 【CF】110 Div.1 B. Suspects
这题目乍眼一看还以为是2-sat.其实很水的,O(n)就解了.枚举每个人,假设其作为凶手.观察是否满足条件.然后再对满足的数目分类讨论,进行求解. /* 156B */ #include <io ...
- 【CF】222 Div.1 B Preparing for the Contest
这样类似的题目不少,很多都是一堆优化条件求最优解,这个题的策略就是二分+贪心.对时间二分, 对费用采用贪心. /* 377B */ #include <iostream> #include ...
- 【CF】207 Div.1 B.Xenia and Hamming
这题目一看很牛逼,其实非常easy.求求最小公倍数,最大公约数,均摊复杂度其实就是O(n). /* 356B */ #include <iostream> #include <str ...
- 【CF】142 Div.1 B. Planes
SPFA.注意状态转移条件,ans的求解需要在bfs中间求解.因为只要到了地点n,则无需等待其他tourist.还是蛮简单的,注意细节. /* 229B */ #include <iostrea ...
- 【CF】196 Div.2 D. Book of Evil
显然这个图是一课树,看着题目首先联想到LCA(肯定是可以解的).但是看了一下数据大小,应该会TLE.然后,忽然想到一个前面做过的题目,大概是在一定条件下树中某结点旋转成为根后查询最长路径.结果灵感就来 ...
- 【CF】223 Div.1 C Sereja and Brackets
水线段树. /* 380C */ #include <iostream> #include <string> #include <map> #include < ...
- 【CF】259 Div.1 B Little Pony and Harmony Chest
还蛮有趣的一道状态DP的题目. /* 435B */ #include <iostream> #include <string> #include <map> #i ...
随机推荐
- ACM——A + B Problem (1)
A + B Problem (1) 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交:5907 测试通过:151 ...
- MathType支持64位 WIN 7Office 2013(完美解决)(转载)
经过几次尝试解决了,方法如下: 1. 安装MathType 6.8 (别的版本不知是否适用,本人安装的是该版本) 2. 将以下两个文件拷贝出来 C:\Program Files (x86)\MathT ...
- xcode插件安装完之后无法使用问题解决
1.打开xcode插件所在的目录: 例如: ~/wangdi/library/Application Support/Developer/Shared/Xcode/Plug-ins /Users/su ...
- Flexbox盒子弹性布局
Can I Use? 2. 概念: 当你给一个元素使用了flexbox模块,那么它的子元素就会指定的方向在水平或者纵向方向排列.这些子元素会按照一定的比例进行扩展或收缩来填补容器的可用空间. < ...
- java数据同步陷阱
并发,我的理解就是同时运行多个程序.同时,难以避免的就是数据的同步问题,如果数据同步问题处理不好就很容易造成程序出现bug,当然,对于其造成的危害,不加详述. 首先,来看一个简单的例子,当然,这个例子 ...
- Asp.net Mvc HTTP 404。
asp.net mvc 设置完起始页的时候会出现以下Error 此错误的原因是在MVC中设置完起始页 会改变 的 值 从而使服务器找不到 相对应的路径 解决方案: 通过 路由设置,解决web ...
- YII 开启URL伪静态
1.开启apache的mode_rewrite模块 去掉LoadModule rewrite_module modules/mod_rewrite.so前的“#”符号 确保<Directory ...
- qwt6在Windows下Qt5的编译,安装,初步使用
今晚把qwt的编译,安装,初级使用放上来,以便需要的人,能更快部署好编程环境,不至于每次都像我这样花很多时间. 注意:Qtcreater使用的是什么编译器编译出来的,就要用那个编译器来编译qwt. 我 ...
- winform 两个TreeView间拖拽节点
/// <summary> /// 正在拖拽的节点 /// </summary> private TreeNode DragNode = null; /// <summa ...
- 这 30 类 CSS 选择器,你必须理解!
CSS 选择器是一种模式,用于选择需要添加样式的元素.平时使用最多也是最简单的就是 #id..class 和标签选择器,在 CSS 中还有很多更加强大更加灵活的选择方式,尤其是在 CSS3 中,增加了 ...