Educational Codeforces Round 41(已补D,E)

D. Pair Of Lines

题目大意:

\(n\)个点,问是否存在两条直线(可以为同一条)能覆盖所有的点。

解题思路:

首先一个或者两个或者三个点都是肯定可以用两条线覆盖的。
如果点的个数大于等于三个,那么我们已经可以确定至少一条线的:
点1和点2可能在一条线上,点2和点3可能在一条线上,点3和点1可能在一条线上。
我们试着确定其中一条线后,去掉在线上的所有点,剩下的点肯定在另一条线上,这样利用剩下的点就可以确定另一条直线。
用到一个公式:\(abc\)三点共线\((c - a)\times(c - b)=0\)

E. Tufurama

题目大意:

\(n\)个数的数列\(a\),问有多少对下标\(x,y(x<y)\),使得\(a[x]\geq y,a[y]\geq x\)

解题思路:

大体思路是先遍历一遍数组,求出\(a[y]\geq x\)中最大的下标\(x\)
然后再遍历一遍数组,用树状数组求出\(a[x]\geq y\)的所有\(x\)
最大可能下标可以这样求:\(x=max\{a[y],y-1\}\)
为什么要求最大呢?因为是为了配合树状数组的求和,这样就不会重复。
每次求到的最大下标\(x\)对应的\(y\)可以用\(vector\)保存。
因为每个\(y\)只能出现一次,所以时间复杂度为\(O(nlogn)\)

#include <bits/stdc++.h>
#define N 200010

int n, a[N];

struct bit {
    static const int maxn = N;
    int f[maxn];
    inline void init() { std::fill(f, f + maxn, 0); }
    bit() { init(); }
    inline void add(int pos, int inc) {
        for (; pos < maxn; pos += (pos & -pos)) f[pos] += inc;
    }
    inline int sum(int rg) {
        if (rg < 1) return 0;
        int ans = 0;
        for(; rg; rg -= (rg & -rg)) ans += f[rg];
        return ans;
    }
    inline int sum(int l, int r) {
        return sum(r) - sum(l - 1);
    }
}mybit;

std::vector<int> mpos[N];

int main() {
    while (std::cin >> n) {
        for (int i = 0; i <= n; i++) mpos[i].clear();
        for (int i = 1; i <= n; i++) {
            std::cin >> a[i];
            a[i] = a[i] > n ? n : a[i];
            mpos[std::min(a[i], i - 1)].push_back(i);
        }
        mybit.init();
        long long ans = 0;
        for (int i = 1; i <= n; i++) {
            mybit.add(a[i], 1);
            for (int x: mpos[i]) ans += mybit.sum(x, n);
        }
        std::cout << ans << '\n';
    }
    return 0;
}

转载于:https://www.cnblogs.com/ZengWangli/p/8804837.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
1. 智慧监狱概述 智慧监狱的建设背景基于监狱信息化的发展历程,从最初的数字化监狱到信息化监狱,最终发展到智慧监狱。智慧监狱强调管理的精细化、监管的一体化、改造的科学化以及办公的无纸化。政策上,自2017年以来,司法部连续发布了多项指导性文件,推动智慧监狱的建设。 2. 内在需求与挑战 智慧监狱的内在需求包括数据应用与共享的不足、安防系统的单一功能、IT架构的复杂性、信息安全建设的薄弱以及IT运维的人工依赖。这些挑战要求监狱系统进行改革,以实现数据的深度利用和业务的智能化。 3. 技术架构与设计 智慧监狱的技术架构包括统一门户、信息安全、综合运维、安防集成平台和大数据平台。设计上,智慧监狱采用云计算、物联网、大数据和人工智能等技术,实现资源的动态分配、业务的快速部署和安全的主动防护。 4. 数据治理与应用 监狱数据应用现状面临数据分散和共享不足的问题。智慧监狱通过构建数据共享交换体系、数据治理工具及服务,以及基于数据仓库的数据分析模型,提升了数据的利用效率和决策支持能力。 5. 安全与运维 智慧监狱的信息安全建设涵盖了大数据应用、安全管理区、业务区等多个层面,确保了数据的安全和系统的稳定运行。同时,综合运维平台的建立,实现了IT系统的统一管理和自动化运维,提高了运维效率和系统的可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值