POJ 2352 Stars (线段树)

本文介绍了一种使用线段树进行区间动态和查询的方法,适用于处理一系列离散点(如星星位置)的区间操作问题。通过递归构建线段树,并采用插入和查找操作来维护区间内的元素数量。
线段树,区间动态和,区间划分[l, mid], [mid+1, r] 直到单个点如[0,0],每个区间记录点的个数,每个星星看作线段[x,x],插入时直接从树根更新到叶节点。
/*===============================================================
*   Copyright (C) 2012 All rights reserved.
*   
*   file: 2352_Stars.cpp
*   author: ivapple
*   date: 2012-05-14
*   description: 
*   using segment tree
*
*   update log: 
*
================================================================*/
#include <cstdlib>
#include <cstdio>

#include <iostream>

#define out(x) (cout<<#x<<": "<<x<<endl)

#define FOR(i,s,t) for(i=s; i<t; i++)

using namespace std;

template<class T>void show(T a, int n){int i; for(i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;}

template<class T>void show(T a, int r, int l){int i; for(i=0;i<r;i++)show(a[i],l);cout<<endl;}

const int MAX_STARS = 15000;
const int MAX_X = 32000;
const int MAX_NODE = 2*(MAX_X+1);

struct SegTree
{
	int s, e;
	int lc, rc;
	int sum;
};
SegTree tree[MAX_NODE];
int id;

void build(int l, int r)
{
	int root = id;
	int mid;
	tree[root].s = l;
	tree[root].e = r;
	id++;
	if (l < r)
	{
		mid = (l+r)/2;
	//	cout << l<<" " << r << endl;
		tree[root].lc = id;
		build(l, mid);
		tree[root].rc = id;
		build(mid+1, r);
	}
}

void insert(int l, int r, int root)
{
	int mid;
	tree[root].sum++;
	if (tree[root].s == tree[root].e)
		return;
	mid = (tree[root].s+tree[root].e)/2;
	if (l<=mid)
		insert(l, r, tree[root].lc);
	if (r>=mid+1)
		insert(l, r, tree[root].rc);
}

int search(int l, int r, int root)
{
	int mid;
	int re = 0;
	if (l<=tree[root].s && tree[root].e<=r)
		return tree[root].sum;
	mid = (tree[root].s+tree[root].e)/2;
	if (l<=mid)
		re += search(l, r, tree[root].lc);
	if (r>=mid+1)
		re += search(l, r, tree[root].rc);
	return re;
}


int N;
int level[MAX_STARS+1]; 

int main()
{
	int x, y;
	int l;
	int i;
#ifndef ONLINE_JUDGE
	freopen("test.txt", "r", stdin);
#endif
	scanf("%d", &N);
	//cout << N;
	build(0, MAX_X);
	FOR(i,0,N)
	{
		scanf("%d%d", &x, &y);
	//	cout << x << " " << y << endl;
		l = search(0, x, 0);
		level[l]++;
		insert(x, x, 0);
	}
	//cout << "dd" << endl;
	for (i=0; i<N; i++)
		printf("%d\n", level[i]);
}



带开环升压转换器和逆变器的太阳能光伏系统 太阳能光伏系统驱动开环升压转换器和SPWM逆变器提供波形稳定、设计简单的交流电的模型 Simulink模型展示了一个完整的基于太阳能光伏的直流到交流电力转换系统,该系统由简单、透明、易于理解的模块构建而成。该系统从配置为提供真实直流输出电压的光伏阵列开始,然后由开环DC-DC升压转换器进行处理。升压转换器将光伏电压提高到适合为单相全桥逆变器供电的稳定直流链路电平。 逆变器使用正弦PWM(SPWM)开关来产生干净的交流输出波形,使该模型成为研究直流-交流转换基本操作的理想选择。该设计避免了闭环和MPPT的复杂性,使用户能够专注于光伏接口、升压转换和逆变器开关的核心概念。 此模型包含的主要功能: •太阳能光伏阵列在标准条件下产生~200V电压 •具有固定占空比操作的开环升压转换器 •直流链路电容器,用于平滑和稳定转换器输出 •单相全桥SPWM逆变器 •交流负载,用于观察实际输出行为 •显示光伏电压、升压输出、直流链路电压、逆变器交流波形和负载电流的组织良好的范围 •完全可编辑的结构,适合分析、实验和扩展 该模型旨在为太阳能直流-交流转换提供一个干净高效的仿真框架。布局简单明了,允许用户快速了解信号流,检查各个阶段,并根据需要修改参数。 系统架构有意保持模块化,因此可以轻松扩展,例如通过添加MPPT、动态负载行为、闭环升压控制或并网逆变器概念。该模型为进一步开发或整合到更大的可再生能源模拟中奠定了坚实的基础。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值