ZOJ Problem Set - 3635
题目大意
有n个从1..n标号的座位,按时间顺序给出每个客人来的时候是坐在第几个空座位,最后给若干个询问问第i号客人坐在哪里
分析
线段树+二分
- // Fast Sequence Operations II
- // Rujia Liu
- // 输入格式:
- // n m 数组范围是a[1]~a[n],初始化为0。操作有m个
- // 1 L R v 表示设a[L]=a[L+1]=...=a[R] = v。其中v > 0
- // 2 L R 查询a[L]~a[R]的sum, min和max
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int maxnode = <<;
- int _sum, _min, _max, op, qL, qR, v;
- int vist[maxnode];
- struct IntervalTree {
- int sumv[maxnode], minv[maxnode], maxv[maxnode], setv[maxnode];
- // 维护信息
- void maintain(int o, int L, int R) {
- int lc = o*, rc = o*+;
- if(R > L) {
- sumv[o] = sumv[lc] + sumv[rc];
- minv[o] = min(minv[lc], minv[rc]);
- maxv[o] = max(maxv[lc], maxv[rc]);
- }
- if(setv[o] >= ) { minv[o] = maxv[o] = setv[o]; sumv[o] = setv[o] * (R-L+); }
- }
- // 标记传递
- void pushdown(int o) {
- int lc = o*, rc = o*+;
- if(setv[o] >= ) { //本结点有标记才传递。注意本题中set值非负,所以-1代表没有标记
- setv[lc] = setv[rc] = setv[o];
- setv[o] = -; // 清除本结点标记
- }
- }
- void update(int o, int L, int R) {
- int lc = o*, rc = o*+;
- if(qL <= L && qR >= R) { // 标记修改
- setv[o] = v;
- } else {
- pushdown(o);
- int M = L + (R-L)/;
- if(qL <= M) update(lc, L, M); else maintain(lc, L, M);
- if(qR > M) update(rc, M+, R); else maintain(rc, M+, R);
- }
- maintain(o, L, R);
- }
- void query(int o, int L, int R) {
- if(setv[o] >= ) { // 递归边界1:有set标记
- _sum += setv[o] * (min(R,qR)-max(L,qL)+);
- _min = min(_min, setv[o]);
- _max = max(_max, setv[o]);
- } else if(qL <= L && qR >= R) { // 递归边界2:边界区间
- _sum += sumv[o]; // 此边界区间没有被任何set操作影响
- _min = min(_min, minv[o]);
- _max = max(_max, maxv[o]);
- } else { // 递归统计
- int M = L + (R-L)/;
- if(qL <= M) query(o*, L, M);
- if(qR > M) query(o*+, M+, R);
- }
- }
- };
- const int INF = ;
- IntervalTree tree;
- int main() {
- int n, m,num;
- while(scanf("%d", &n) !=EOF){
- memset(&tree, , sizeof(tree));
- memset(tree.setv, -, sizeof(tree.setv));
- tree.setv[] = ;
- v=;
- qL=;
- qR=n;
- tree.update(,,n);
- tree.query(,,n);
- for(int i=;i<=n;i++)
- {
- scanf("%d",&num);
- qL=;qR=n;
- _sum = ;
- int l=,r=n,mid;
- while(l<r)
- {
- mid=(l+r)/;
- qR=mid;
- tree.query(, , n);
- if(_sum>=num)
- r=mid;
- else
- l=mid+;
- _sum = ;
- }
- vist[i]=l;
- v=;
- qL=l;
- qR=l;
- tree.update(,,n);
- }
- scanf("%d",&m);
- for(int i=;i<=m;i++)
- {
- scanf("%d",&num);
- printf("%d",vist[num]);
- if(i!=m)
- printf(" ");
- }
- printf("\n");
- }
- return ;
- }
ZOJ Problem Set - 3635的更多相关文章
- ZOJ Problem Set - 1394 Polar Explorer
这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...
- ZOJ Problem Set - 1025解题报告
ZOJ Problem Set - 1025 题目分类:基础题 原题地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=10 ...
- ZOJ Problem Set - 3829Known Notation(贪心)
ZOJ Problem Set - 3829Known Notation(贪心) 题目链接 题目大意:给你一个后缀表达式(仅仅有数字和符号),可是这个后缀表达式的空格不幸丢失,如今给你一个这种后缀表达 ...
- ZOJ Problem Set - 2563 Long Dominoes 【如压力dp】
称号:ZOJ Problem Set - 2563 Long Dominoes 题意:给出1*3的小矩形.求覆盖m*n的矩阵的最多的不同的方法数? 分析:有一道题目是1 * 2的.比較火.链接:这里 ...
- ZOJ Problem Set - 3593 拓展欧几里得 数学
ZOJ Problem Set - 3593 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3593 One Person ...
- ZOJ Problem Set - 2297 Survival 【状压dp】
题目:ZOJ Problem Set - 2297 Survival 题意:给出一些怪,有两个值,打他花费的血和能够添加的血,然后有一个boss,必须把小怪全部都打死之后才干打boss,血量小于0会死 ...
- ZOJ Problem Set - 3820 Building Fire Stations 【树的直径 + 操作 】
题目:problemId=5374" target="_blank">ZOJ Problem Set - 3820 Building Fire Stations 题 ...
- ZOJ Problem Set - 3229 Shoot the Bullet 【有上下界网络流+流量输出】
题目:problemId=3442" target="_blank">ZOJ Problem Set - 3229 Shoot the Bullet 分类:有源有汇 ...
- ZOJ Problem Set - 3822Domination(DP)
ZOJ Problem Set - 3822Domination(DP) problemCode=3822">题目链接 题目大意: 给你一个n * m的棋盘,每天都在棋盘上面放一颗棋子 ...
随机推荐
- wordpress 中禁止更新提示
前言: 在此之前每每打开blog的时候总是有那么个数字在那边显示,如果是很重要的更新显示在那也就算了,有时候就算一个破主题他还一直在那边,很是让小猪纠结.最关键的是要是更新了主题,那么之前所有自定义的 ...
- ssh localhost “Permission denied (publickey)
再次遇到 SSH Server And "Permission denied (publickey) 用这个关键词搜索才找到howtogeek上答案: sshd : Authenticati ...
- list集合的遍历3种方法
package com.sort; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** ...
- Hibernate 错误处理
1. 在处理映射 1 对 n 时,Customer类为 1, Order类为 n,对象关系映射文件中没有错误,<many to one> 也正确,表名通类名. 但是,在执行插入时,发生两个 ...
- wp8.1 Study7: ListView 和GridView应用
对于列表控件,WP8.1常用的是ListView.GridView.ListBox控件.其中前两个是从第三个继承来的. 1.ListView控件 它是展示垂直列表的,如下图所示.它十分适合展示数据. ...
- Windows平台下的读写锁
Windows平台下的读写锁简单介绍Windows平台下的读写锁以及实现.背景介绍Windows在Vista 和 Server2008以后才开始提供读写锁API,即SRW系列函数(Initialize ...
- Bootstrap非常简单实用的web前端开发框架
今天无意间用firebug看网站的代码发现了Bootstrap,之前从来没有听说过这个东东,于是对它产生了好奇感,通过百度我了解到了Bootstrap是一款非常简单,强悍,实用,移动设备端优先使用的这 ...
- Volatile vs VolatileRead/Write?
You should never use Thread.VolatileRead/Write(). It was a design mistake in .NET 1.1, it uses a ful ...
- JDK的下载与安装
一.下载 在Oracle公司的官方网站(www.oracle.com)下载. 二.安装 1.双击运行JDK程序,弹出JDK安装导向窗口,点击“下一步” 2.点击“更改",将安装地址修改为 C ...
- (转)HTML文档头部信息
原文:http://www.cnblogs.com/sunyunh/archive/2012/07/25/2609199.html HTML(3)HTML文档头部信息 <!DOCTYPE h ...