luoguP3071 [USACO13JAN]座位Seating
https://www.luogu.org/problem/P3071
AC代码:
https://www.luogu.org/blog/user33426/solution-p3071
莫名其妙RE:
#include<cstdio>
#include<iostream>
using namespace std;
#define MAX 500005
#define lson o<<1
#define rson o<<1|1
int n,m,ans,cnt;
int addv[MAX];
struct node{
int lm, rm, xm;
//从左到右的最大空位置的数
//从右到左的
//整个的
}tr[MAX<<2];
inline int max(int x,int y) {
return x>y?x:y;
}
void push_up(int o, int l, int r) {
tr[o].xm = max(max(tr[lson].xm , tr[rson].xm ), tr[lson].rm + tr[rson].lm );
int mid = (l+r)>>1;
if(tr[lson].xm == mid-l+1) tr[o].lm = tr[lson].xm + tr[rson].lm ;
else tr[o].lm = tr[lson].lm ;
if(tr[rson].xm == r-mid) tr[o].rm = tr[rson].xm + tr[lson].rm ;
else tr[o].rm = tr[rson].rm ;
}
void build(int o, int l, int r) {
if(l == r) {
tr[o].lm = tr[o].rm = tr[o].xm = 1;
return ;
}
int mid = (l+r)>>1;
build(lson, l, mid);
build(rson, mid+1, r);
push_up(o, l, r);
}
void pushtag(int o) {
tr[o].lm = tr[o].rm = tr[o].xm = 0;
addv[o] = 1;
}
void push_down(int o, int l, int r) {
if(addv[o] == 0) return ;
int mid = (l+r)>>1;
tr[lson].lm = tr[lson].rm = tr[lson].xm = addv[o]>0 ? 0 : (mid-l+1); //-1为离开
tr[rson].lm = tr[rson].rm = tr[rson].xm = addv[o]>0 ? 0 : (r-mid); //1为坐下
addv[lson] = addv[rson] = addv[o];
addv[o] = 0;
return ;
}
void insert(int o, int l, int r, int a, int op) {//op=1表示前a个改为1,即前a个坐下, op=2表示后a个改为1
// printf("%d %d %d %d %d", o, l, r, a, op);
// printf("\n");
if(a == 0) return ;
if(r-l+1 == a) {pushtag(o); return ;}
int mid = (l+r)>>1;
push_down(o, l, r);
if(op == 1) {
if(tr[lson].xm >= a) insert(lson, l, mid, a, 1);
else if(tr[lson].rm + tr[rson].lm >= a) {
insert(rson, mid+1, r, a-tr[lson].rm , 1); //这个顺序太莫名其妙了....
insert(lson, l, mid+1, tr[lson].rm , 2);//因为是从前往后,所以lson肯定是坐下tr[lson].r个
}
else insert(rson, mid+1, r, a, 1);//
} else {
if(tr[rson].xm >= a) insert(rson, mid+1, r, a, 2);
else if(tr[lson].rm + tr[rson].lm >= a){
insert(lson, l, mid, a-tr[rson].lm , 2);
insert(rson, mid+1, r, tr[rson].lm , 1);
}
else insert(lson, l, mid, a, 2);
}
push_up(o, l, r);
}
void del(int o, int l, int r, int ql, int qr) {
if(qr<l||r<ql) return;
if(ql <= l && r <= qr) {
tr[o].lm = tr[o].rm = tr[o].xm = (r-l+1);
addv[o] = -1;
return ;
}
int mid = (l+r)>>1;
push_down(o, l, r);
del(lson, l, mid, ql, qr);
del(rson, mid+1, r, ql, qr);
push_up(o,l,r);
}
int main() {
scanf("%d%d",&n,&m);
build(1, 1, n);
// int tmp;
// scanf("%d",&tmp);
// printf("o : %d, %d", tmp, tr[tmp].lm);
char cmd;
while(m--) {
cin>>cmd;
if(cmd == 'A') {
int a;
scanf("%d",&a);
if(tr[1].xm < a) ans++;
else insert(1, 1, n, a, 1);
} else {
int x, y;
scanf("%d%d",&x, &y);
del(1, 1, n, x, y);
}
}
printf("%d",ans);
}
luoguP3071 [USACO13JAN]座位Seating的更多相关文章
- 洛谷 P3071 [USACO13JAN]座位Seating(线段树)
P3071 [USACO13JAN]座位Seating 题目链接 思路: 一开始把题给读错了浪费了好多时间呜呜呜. 因为第二个撤离操作是区间修改,所以我们可以想到用线段树来做.对于第一个操作,我们只需 ...
- 洛谷 P3071 [USACO13JAN]座位Seating-线段树区间合并(判断找,只需要最大前缀和最大后缀)+分治+贪心
P3071 [USACO13JAN]座位Seating 题目描述 To earn some extra money, the cows have opened a restaurant in thei ...
- [USACO13JAN] Seating
https://www.luogu.org/problem/show?pid=3071 题目描述 To earn some extra money, the cows have opened a re ...
- 【vijos】1286 座位安排(状压dp)
https://vijos.org/p/1286 这题好神不会捉... 首先我们知道所有情况有C(n*m, k)种,这个好搞.但是两两不相邻这个有点难搞.. 原来是状压dp..sigh. 设状态f[i ...
- Educational Codeforces Round 11B. Seating On Bus 模拟
地址:http://codeforces.com/contest/660/problem/B 题目: B. Seating On Bus time limit per test 1 second me ...
- CSU 1997: Seating Arrangement【构造】
1997: Seating Arrangement Description Mr. Teacher老师班上一共有n个同学,编号为1到n. 在上课的时候Mr. Teacher要求同学们从左至右按1, 2 ...
- Seating Arrangement
1997: Seating Arrangement Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 543 Solved: ...
- 团体程序设计天梯赛-练习集L2-010. 排座位
L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位. ...
- Co-prime Array&&Seating On Bus(两道水题)
Co-prime Array Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Su ...
随机推荐
- Win2003下IIS以FastCGI模式运行PHP
由于PHP5.3 的改进,原有的IIS 通过isapi 方式解析PHP脚本已经不被支持,PHP从5.3.0 以后的版本开始使用微软的 fastcgi 模式,这是一个更先进的方式,运行速度更快,更稳定. ...
- Druid-代码段-3-1
所属文章:池化技术(一)Druid是如何管理数据库连接的? 本代码段对应主流程3,新增连接的守护线程: //DruidDataSource的内部类,对应主流程3,用来补充连接 public class ...
- apache httpd反向代理的用法
代理方式有三种:正向代理.透明代理和反向代理 正向代理 httpd通过ProxyRequests指令配置正向代理的功能.例如: ProxyRequests On ProxyVia On <Pro ...
- Sigma Function (LightOJ - 1336)【简单数论】【算术基本定理】【思维】
Sigma Function (LightOJ - 1336)[简单数论][算术基本定理][思维] 标签: 入门讲座题解 数论 题目描述 Sigma function is an interestin ...
- 第04组 Beta冲刺(5/5)
队名:new game 组长博客 作业博客 组员情况 鲍子涵(队长) 过去两天完成了哪些任务 动画优化 接下来的计划 等待答辩 还剩下哪些任务 让游戏本体运行 遇到了哪些困难 时间太少了 有哪些收获和 ...
- python做中学(二)bool()函数的用法
定义: bool() 函数用于将给定参数转换为布尔类型,如果没有参数,返回 False. bool 是 int 的子类. 语法: 以下是 bool() 方法的语法: class bool([x] 参数 ...
- es6入门7--Set Map数据结构
本文作为ES6入门第十三章的学习整理笔记,可能会包含少部分个人的理解推测,若想阅读更详细的介绍,还请阅读原文ES6入门 一.set数据结构 1.set不接受重复值 ES6新增了Set构造函数用于创建s ...
- ubuntu 16.04无法连接网络;双系统无法上网;连接已断开,你现在处于断开状态
先描述一一下我的问题,若和你的一样,请继续往下看. 我是在原有Windows7系统的台式计算机中安装了ubuntu 16.04,所以目前这台计算机是双系统.打开Windows系统时有线网络正常链接.但 ...
- HTML5 Canvas 为网页添加文字水印
<!DOCTYPE html> <html> <body> <canvas id=" style="border:1px solid #d ...
- nginx: [emerg] unknown directive “ ” in /usr/local/nginx/nginx.conf.conf:xx报错处理
当我们在修改Nginx的配置文件,然后加载配置文件./nginx -s reload 报错类似的错误, nginx: [emerg] unknown directive “ ” in /usr/l ...