题意

题目链接

Sol

显然整个序列的形态对询问没什么影响

设权值\(>=s\)的有\(k\)个。

我们可以让这些数每次都被选择

那么剩下的数,假设值为\(a_i\)次,则可以\(a_i\)次被选择

一个显然的思路是每次选最大的C个

那么只需要判断\(\sum a_i >=(c - k)*s\)即可

权值线段树维护一下

  1. #include<bits/stdc++.h>
  2. #define Pair pair<int, int>
  3. #define MP(x, y) make_pair(x, y)
  4. #define fi first
  5. #define se second
  6. #define LL long long
  7. #define Fin(x) {freopen(#x".in","r",stdin);}
  8. #define Fout(x) {freopen(#x".out","w",stdout);}
  9. using namespace std;
  10. const int MAXN = 1e6 + 10, mod = 1e9 + 7, INF = 1e9 + 10;
  11. const double eps = 1e-9;
  12. template <typename A, typename B> inline bool chmin(A &a, B b){if(a > b) {a = b; return 1;} return 0;}
  13. template <typename A, typename B> inline bool chmax(A &a, B b){if(a < b) {a = b; return 1;} return 0;}
  14. template <typename A, typename B> inline LL add(A x, B y) {if(x + y < 0) return x + y + mod; return x + y >= mod ? x + y - mod : x + y;}
  15. template <typename A, typename B> inline void add2(A &x, B y) {if(x + y < 0) x = x + y + mod; else x = (x + y >= mod ? x + y - mod : x + y);}
  16. template <typename A, typename B> inline LL mul(A x, B y) {return 1ll * x * y % mod;}
  17. template <typename A, typename B> inline void mul2(A &x, B y) {x = (1ll * x * y % mod + mod) % mod;}
  18. template <typename A> inline void debug(A a){cout << a << '\n';}
  19. template <typename A> inline LL sqr(A x){return 1ll * x * x;}
  20. inline int read() {
  21. char c = getchar(); int x = 0, f = 1;
  22. while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
  23. while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  24. return x * f;
  25. }
  26. int a[MAXN], N, M;
  27. const int SS = MAXN * 10 + 10, Mx = 1e9 + 10;
  28. int ls[SS], rs[SS], num[SS], tot, root;
  29. LL sum[SS];
  30. void update(int k) {
  31. sum[k] = sum[ls[k]] + sum[rs[k]];
  32. num[k] = num[ls[k]] + num[rs[k]];
  33. }
  34. void Modify(int &k, int l, int r, int p, int v) {
  35. if(!k) k = ++tot;
  36. if(l == r) {
  37. num[k] += (v < 0 ? -1 : 1);
  38. sum[k] += v;
  39. return ;
  40. }
  41. int mid = l + r >> 1;
  42. if(p <= mid) Modify(ls[k], l, mid, p, v);
  43. else Modify(rs[k], mid + 1, r, p, v);
  44. update(k);
  45. }
  46. int QueryNum(int k, int l, int r, int ql, int qr) {
  47. if(!k) return 0;
  48. if(ql <= l && r <= qr)
  49. return num[k];
  50. int mid = l + r >> 1;
  51. if(ql > mid) return QueryNum(rs[k], mid + 1, r, ql, qr);
  52. else if(qr <= mid) return QueryNum(ls[k], l, mid, ql, qr);
  53. else return QueryNum(ls[k], l, mid, ql, qr) + QueryNum(rs[k], mid + 1, r, ql, qr);
  54. }
  55. LL QuerySum(int k, int l, int r, int ql, int qr) {
  56. if(!k) return 0;
  57. if(ql <= l && r <= qr) return sum[k];
  58. int mid = l + r >> 1;
  59. if(ql > mid) return QuerySum(rs[k], mid + 1, r, ql, qr);
  60. else if(qr <= mid) return QuerySum(ls[k], l, mid, ql, qr);
  61. else return QuerySum(ls[k], l, mid, ql, qr) + QuerySum(rs[k], mid + 1, r, ql, qr);
  62. }
  63. signed main() {
  64. N = read(); M = read();
  65. while(M--) {
  66. char s[3]; scanf("%s", s);
  67. int x = read(), y = read();
  68. if(s[0] == 'U') {//a[x] = y
  69. if(a[x]) Modify(root, 1, Mx, a[x], -a[x]);
  70. a[x] = y;
  71. if(y) Modify(root, 1, Mx, y, y);
  72. } else {//choose x = c turn y = s
  73. int k = QueryNum(1, 1, Mx, y, Mx);
  74. LL sum = QuerySum(1, 1, Mx, 1, y - 1);
  75. puts((sum >= 1ll * (x - k) * y) ? "TAK" : "NIE");
  76. }
  77. }
  78. return 0;
  79. }
  80. /*
  81. 7
  82. -1 160 -2000
  83. 14 82 61 85 41 10 34
  84. */

洛谷P3586 [POI2015]LOG(贪心 权值线段树)的更多相关文章

  1. 洛谷P4848 崂山白花蛇草水 权值线段树+KDtree

    题目描述 神犇 \(Aleph\) 在 \(SDOI\ Round2\) 前立了一个 \(flag\):如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇 \(Aleph\) 的实力,他轻松地进了山 ...

  2. 洛谷 P3586 [POI2015]LOG

    P3586 [POI2015]LOG 题目描述 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它 ...

  3. 【BZOJ3065】带插入区间K小值 替罪羊树+权值线段树

    [BZOJ3065]带插入区间K小值 Description 从前有n只跳蚤排成一行做早操,每只跳蚤都有自己的一个弹跳力a[i].跳蚤国王看着这些跳蚤国欣欣向荣的情景,感到非常高兴.这时跳蚤国王决定理 ...

  4. 【洛谷P3586】LOG

    题目大意:维护一个集合,支持单点修改.查询小于 X 的数的个数.查询小于 X 的数的和. 题解:学习到了动态开点线段树.对于一棵未经离散化的权值线段树来说,对于静态开点来说,过大的值域会导致不能承受的 ...

  5. 洛谷P1908 逆序对 [权值线段树]

    题目传送门 逆序对 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为“逆序对”的 ...

  6. 2019牛客训练赛第七场 C Governing sand 权值线段树+贪心

    Governing sand 题意 森林里有m种树木,每种树木有一定高度,并且砍掉他要消耗一定的代价,问消耗最少多少代价可以使得森林中最高的树木大于所有树的一半 分析 复杂度分析:n 1e5种树木,并 ...

  7. 线段树(单标记+离散化+扫描线+双标记)+zkw线段树+权值线段树+主席树及一些例题

    “队列进出图上的方向 线段树区间修改求出总量 可持久留下的迹象 我们 俯身欣赏” ----<膜你抄>     线段树很早就会写了,但一直没有总结,所以偶尔重写又会懵逼,所以还是要总结一下. ...

  8. 权值线段树&&可持久化线段树&&主席树

    权值线段树 顾名思义,就是以权值为下标建立的线段树. 现在让我们来考虑考虑上面那句话的产生的三个小问题: 1. 如果说权值作为下标了,那这颗线段树里存什么呢? ----- 这颗线段树中, 记录每个值出 ...

  9. 主席树 【权值线段树】 && 例题K-th Number POJ - 2104

    一.主席树与权值线段树区别 主席树是由许多权值线段树构成,单独的权值线段树只能解决寻找整个区间第k大/小值问题(什么叫整个区间,比如你对区间[1,8]建立一颗对应权值线段树,那么你不能询问区间[2,5 ...

随机推荐

  1. js获取n分钟(或n小时或n个月)后(或前)的时间(日期)

    标题有点绕,其实意思就是根据系统当前时间,获取n分钟或n小时或n个月后的时间. 例如:当前时间下,获取10分钟后的时间. var date=new Date(); //1. js获取当前时间 var ...

  2. main函数中如何等待协程运行完毕

    使用channel同步 package main import ( "fmt" ) func printNumber(num int, c chan struct{}) { fmt ...

  3. C++:运算符重载

    运算符重载是一种形式的C++多态.运算符重载将重载的概念扩展到运算符上,允许赋予C++运算符多种含义.实际上,很多C++运算符已经被重载.eg:将*运算符用于地址,将得到存储在这个地址中的值,将他用于 ...

  4. java项目日志写到logstash-TCP/UDP

    好处:项目日志写到logstash,然后发送到ElasticSearch,可以方便查看搜索日志,还可以做报表分析. logstash是一个数据采集工具,有多种渠道,比如文件,tcp,udp等,如果是采 ...

  5. .Net 鉴权授权

    在这里总结一下工作中遇到的鉴权和授权的方法 ① 固定token的方案 通过在nginx或者代码中写死token,或者通过在限制外网访问的方式已来达到安全授权的方式 ② session方案 分布式会话方 ...

  6. tensorflow进阶篇-5(反向传播2)

    上面是一个简单的回归算法,下面是一个简单的二分值分类算法.从两个正态分布(N(-1,1)和N(3,1))生成100个数.所有从正态分布N(-1,1)生成的数据目标0:从正态分布N(3,1)生成的数据标 ...

  7. Spring Boot + Redis

    启动redis docker run --name redisServer -P -d redis redis自带客户端,启动客户端 docker run -it --link redisServer ...

  8. StreamSets学习系列之StreamSets的Create New Pipeline(图文详解)

    不多说,直接上干货! 前期博客 StreamSets学习系列之StreamSets支持多种安装方式[Core Tarball.Cloudera Parcel .Full Tarball .Full R ...

  9. ubuntu-12.04.5下编译openjdk8

    bash ./configure --with-target-bits=64 --with-boot-jdk=/usr/java/jdk1.7.0_80/ --with-debug-level=slo ...

  10. 【Java初探02】——Java语言基础

    本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...