码队的新桌游

码队的新桌游

树状数组、离散化、二维偏序

#include <bits/stdc++.h>
///即找x.a<y.b<x.c&&y.a<x.b<y.c的组数
using namespace std;

struct Item {
    int a, b, c;
    int id;
    int ans;

    explicit Item(int _a = 0, int _b = 0, int _c = 0) : a(_a), b(_b), c(_c) {}
};

struct cmpa {
    bool operator()(const Item &lhs, const Item &rhs) const {
        return lhs.a > rhs.a || (lhs.a == rhs.a && lhs.b < rhs.b)
               || (lhs.a == rhs.a && lhs.b == rhs.b && lhs.c < rhs.c);
    }
};

struct cmpc {
    bool operator()(const Item &lhs, const Item &rhs) const {
        return lhs.c > rhs.c || (lhs.c == rhs.c && lhs.b < rhs.b)
               || (lhs.c == rhs.c && lhs.b == rhs.b && lhs.a < rhs.a);
    }
};

priority_queue<Item, vector<Item>, cmpa> Qin;
priority_queue<Item, vector<Item>, cmpc> Qout;

const int MAXN = 300100;
int ca[MAXN];
int lsh[MAXN], lsc;
Item za[MAXN];
unordered_map<int, int> lss;

void addZ(int x, int v) {
    while (x <= lsc) {
        ca[x] += v;
        x += (x & -x);
    }
}

int getZ(int x) {
    int ans = 0;
    while (x) {
        ans += ca[x];
        x -= (x & -x);
    }
    return ans;
}

int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; ++i) {
        scanf("%d%d%d", &za[i].a, &za[i].b, &za[i].c);
        Qin.push(za[i]);
        lsh[lsc++] = za[i].a;
        lsh[lsc++] = za[i].b;
        lsh[lsc++] = za[i].c;
        za[i].id = i;
    }
    sort(lsh, lsh + lsc);
    lsc = unique(lsh, lsh + lsc) - lsh;
    for (int i = 0; i < lsc; ++i) {
        lss[lsh[i]] = i + 1;///离散化
    }
    sort(za, za + n, [](const Item &a, const Item &b) { return a.b < b.b; });
    for (int i = 0; i < n; ++i) {
        while (!Qin.empty()) {
            Item xx = Qin.top();
            if (za[i].b > xx.a) {
                Qin.pop();///a小的先出来
                addZ(lss[xx.b], 1);///加入树状数组,若z[a].b<=xx.a,则za[i]必输
                Qout.push(xx);
            } else break;
        }
        while (!Qout.empty()) {
            Item xx = Qout.top();
            if (za[i].b >= xx.c) {
                Qout.pop();///c小的先出来
                addZ(lss[xx.b], -1);///减去,因为xx.c<=Z[a].b,则za[i]必赢
                ///树状数组中元素都满足xx.c>za[i].b
            } else break;
        }
        za[i].ans = getZ(lss[za[i].c]) - getZ(lss[za[i].a]);
    }

    sort(za, za + n, [](const Item &a, const Item &b) { return a.id < b.id; });
    for (int i = 0; i < n; ++i)printf("%d\n", za[i].ans-1);

    return 0;
}

 

转载于:https://www.cnblogs.com/liulex/p/11393412.html

基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计与控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代实现与调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理与实现方法;②学习如何在STM32平台上进行电机控制算法的移植与优化;③为开发高性能、低成本的电机驱动系统提供技术参考与实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型与实际代实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值