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 200010int 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

Educational Codeforces Round 41(已补D,E)相关推荐

  1. Educational Codeforces Round 41 (Rated for Div. 2)

    这个D可以参考这个B的思路 A. Tetris time limit per test 1 second memory limit per test 256 megabytes input stand ...

  2. Educational Codeforces Round 41 (Rated for Div. 2) F. k-substrings

    F. k-substrings time limit per test 4 seconds memory limit per test 256 megabytes input standard inp ...

  3. Educational Codeforces Round 41 (Rated for Div. 2) ABCDEF

    最近打的比较少...就只有这么点题解了. A. Tetris time limit per test 1 second memory limit per test 256 megabytes inpu ...

  4. Educational Codeforces Round 41 E. Tufurama (961E)

    [题解] 第一眼看题飞快地想到一种做法,然后假掉了. 这道题其实是主席树的模板题来着.但是也有别的水法. 我们可以发现每个位置的查询区间是[1,min(a[i],i-1)],所以我们可以把查询区间按照 ...

  5. Educational Codeforces Round 61 (Rated for Div. 2)(A、B、C、D、E、F)

    欢迎访问本菜鸡的独立博客:Codecho 比赛名称 Educational Codeforces Round 61 (Rated for Div. 2) 比赛链接 https://codeforces ...

  6. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  7. Educational Codeforces Round 112 (Rated for Div. 2)

    Educational Codeforces Round 112 (Rated for Div. 2) 题号 题目 知识点 A PizzaForces B Two Tables C Coin Rows ...

  8. Educational Codeforces Round 24 E. Card Game Again(双指针)

    题目链接:Educational Codeforces Round 24 E. Card Game Again 题意: 给你n个数和一个数k. 现在每次可以拿掉前x个数,后y个数,剩下的数的乘积要能被 ...

  9. Educational Codeforces Round 126 (Rated for Div. 2)(A-E)

    A-Array Balancing 题意:给定两个数组a,b,a数组第i个数可以和b数组的第i个数交换,最终求 a1−a2|+|a2−a3|+⋯+|an−1−an||a1−a2|+|a2−a3|+⋯+ ...

最新文章

  1. 数据库中INFORMATION_SCHEMA的说明及使用
  2. flink的web ui中五颜六色的方块是什么意思?
  3. Django(part51)--自定义User模型
  4. 【要闻】Kubernetes安全问题严峻、Linux v5.4安全性浅谈
  5. matlab练习程序(构造简单多边形)
  6. lenet5卷积神经网络_tensorflow图像识别入门实战:使用LeNet5模型实现猫狗分类
  7. 归并排序(java实现)
  8. macos 设置内外网同时访问
  9. PLSQL使用常用技巧
  10. Lattice Diamond软件使用
  11. 主板诊断卡代码含义及处理方法
  12. python数字转英文_GitHub - Ailln/en2an: 快速转化「英文数字」和「阿拉伯数字」
  13. 强化学习经典算法笔记(六):深度Q值网络 Deep Q Network
  14. 网络共享计算机无法登录,局域网共享文件夹访问无法出现用户登陆窗口怎么办?...
  15. 用python turtle画人_家里蹲太孤单?用 Python 画一只单身狗
  16. 手机经常收到回复TD退订,回还是不回?今天总算是弄清楚了
  17. Apache Calcite 简介
  18. 算法的本质是什么?程序员如何学好算法?
  19. 以终为始,向死而生——5月份英语总结
  20. oracle开机启动监听,配置Oracle数据库和监听随Linux系统自启动

热门文章

  1. cuda第一次计算耗时_CUDA优化的冷知识10 | GPU卡和Jetson上显存优化的特色
  2. 从零点五开始用Unity做半个2D战棋小游戏(九)
  3. 美术师关于自己的报酬与工作的看法
  4. 制作精良、意犹未尽的异色推理小剧场《Tangle Tower 缠结塔》
  5. 再见IE浏览器(IE之死2021 年 8 月 17 日)
  6. 数据库面试题【一、事务四大特性】
  7. MemSQL初体验 - (3)性能测试
  8. error while loading shared libraries: xxx.so.x错误的原因和解决办法
  9. 批处理如何清除文本文档里面的重复行
  10. Flashback Data Archive(转)