ACM-ICPC 2018 南京赛区网络预赛 G. Lpl and Energy-saving Lamps (弱线段树)
2024-09-01 12:43:30
线段树节点维护区间最小值,查找时优先从左侧的区间寻找.
每一次循环都在树中不停寻找第一个小于等于当前持有数的值,然后抹去,直到找不到为止.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define lson rt<<1
#define rson rt<<1|1
#define Lson l,m,lson
#define Rson m+1,r,rson
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const int maxn=1e5+5;
int val[maxn];
struct Node{
int num;
}tree[maxn<<2];
int n;
void pushup(int rt)
{
tree[rt].num = min(tree[lson].num,tree[rson].num);
}
void build(int l=1,int r=n,int rt=1)
{
if(l==r){
tree[rt].num = val[l];
return ;
}
int m = (l+r)>>1;
build(Lson);
build(Rson);
pushup(rt);
}
bool flag;
int query(int val,int l=1,int r=n,int rt=1)
{
int res=-1,m = (l+r)>>1;
if(tree[rt].num<=val){
if(l==r){
int tmp = tree[rt].num;
tree[rt].num = INF;
return tmp;
}
res = query(val,Lson);
if(res!=-1) {
pushup(rt);
return res;
}
res = query(val,Rson);
if(res!=-1){
pushup(rt);
return res;
}
}
return -1;
}
int ans1[maxn];
int ans2[maxn];
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int m,q;
while(scanf("%d %d",&n,&m)==2){
for(int i=1;i<=n;++i){
scanf("%d",&val[i]);
}
build();
flag = false;
int sum = 0,tot=0;
for(int i=1;i<=100000;++i){
//cout<<tree[1].num<<endl;
if(tree[1].num ==INF) flag = true;
if(!flag) {
sum += m;
int tmp = query(sum);
while(tmp!=-1){
sum-=tmp;
tot++;
tmp = query(sum);
}
}
ans1[i] = tot;
ans2[i] = sum;
}
int id;
scanf("%d",&q);
for(int i=1;i<=q;++i){
scanf("%d",&id);
printf("%d %d\n",ans1[id],ans2[id]);
}
}
return 0;
}
最新文章
- 项目vue2.0仿外卖APP(二)
- IIS HTTP 错误 404.17 - Not Found HTTP 错误 404.2 解决方法
- .NET 程序集与命名空间
- 使用 xsd.exe 命令工具将 xsd 架构生成 类(CS) 文件
- Linux基础命令之cat使用方法大全
- sprint3冲刺第二天
- 关于领域驱动设计(DDD)仓储的思考
- ThinkPHP讲解(二)控制器
- C#→关于System.Data.Linq下的Table<;TEntity>; 泛型类 的问题
- css怎么写链接到图片和地址
- Desert King
- bzoj4003
- ubuntu通过虚拟域名访问不了 502 / 网络错误
- Quart.Net分布式任务管理平台
- Mac电脑配置Apache服务器详细说明
- selenium数据驱动模式实现163邮箱的登录及添加联系人自动化操作
- 尝试dapper和postgresql
- yii2.0 点击验证码图片不刷新
- 爬虫 需要什么样的 CPU,内存 和带宽
- 第二阶段——个人工作总结DAY06
热门文章
- MyBitis(iBitis)系列随笔之一:MyBitis入门实例
- 一些 JS页面的 调用方式init()
- gradlew assembleRelease打包之前的配置
- Angular2 表单(一) 用户输入
- oracle decode处理被除数为0 的情况
- Intent讲解
- Excel宏被禁用解决办法
- fopen与读写的标识r,r+,rb+,rt+,w+.....
- iOS 引导页面启动一次
- ios 让两个tableView同时处于选中状态