codechef Many Lists(树状数组 set)
题意

Sol
直接做肯定不好搞(反正我不会。。)
直接开\(n\)个Pair类型的set,维护每个数的出现位置
每次在set中二分后暴力合并即可
然后就是树状数组的基本操作了
时间复杂度:\(O(nlog^2n)\)
#include<bits/stdc++.h>
#define Pair pair<int, int>
#define MP make_pair
#define fi first
#define se second
#define lb(x) (x & (-x))
using namespace std;
const int MAXN = 1e6 + 10, INF = 2147483646;
inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int N, M, T[MAXN];
void Add(int x, int v) {
while(x <= N) T[x] += v, x += lb(x);
}
void AddInt(int l, int r, int val) {
Add(l, val); Add(r + 1, -val);
}
int Query(int x) {
int ans = 0;
while(x) ans += T[x], x -= lb(x);
return ans;
}
set<Pair> S[MAXN];
#define sit set<Pair>::iterator
void Add(int l, int r, int x) {
set<Pair> &s = S[x];
sit it = s.lower_bound(MP(l, r));
if(it != s.begin()) {
it--;
if(it -> se > r) return ;
if(it -> se >= l ) {
l = min(l, it -> fi); r = max(r, it -> se);
AddInt(it -> fi, it -> se, -1);
s.erase(it++);
}
}
it = s.lower_bound(MP(l, r));
while((it -> se >= l && it -> se <= r) || (it -> fi >= l && it -> fi <= r)) {
l = min(l, it -> fi); r = max(r, it -> se);
AddInt(it -> fi, it -> se, -1);
s.erase(it++);
}
s.insert(MP(l, r));
AddInt(l, r, 1);
}
int main() {
// freopen("a.in", "r", stdin); freopen("b.out", "w", stdout);
N = read(); M = read();
for(int i = 1; i <= N; i++) S[i].insert(MP(INF, INF));
while(M--) {
int opt = read();
if(opt == 0) {int l = read(), r = read(), val = read(); Add(l, r, val);}
else printf("%d\n", Query(read()));
}
return 0;
}
/*
5 5
0 2 4 4
0 3 5 5
0 1 5 5
1 5
1 3
5 12
0 1 1 1
1 1
0 1 2 1
1 1
0 1 3 1
1 1
0 2 3 1
1 1
0 4 5 1
1 1
0 1 5 1
1 1
*/
codechef Many Lists(树状数组 set)的更多相关文章
- 【分块+树状数组】codechef November Challenge 2014 .Chef and Churu
https://www.codechef.com/problems/FNCS [题意] [思路] 把n个函数分成√n块,预处理出每块中各个点(n个)被块中函数(√n个)覆盖的次数 查询时求前缀和,对于 ...
- 【xsy2111】 【CODECHEF】Chef and Churus 分块+树状数组
题目大意:给你一个长度为$n$的数列$a_i$,定义$f_i=\sum_{j=l_i}^{r_i} num_j$. 有$m$个操作: 操作1:询问一个区间$l,r$请你求出$\sum_{i=l}^{r ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- bzoj1878--离线+树状数组
这题在线做很麻烦,所以我们选择离线. 首先预处理出数组next[i]表示i这个位置的颜色下一次出现的位置. 然后对与每种颜色第一次出现的位置x,将a[x]++. 将每个询问按左端点排序,再从左往右扫, ...
- codeforces 597C C. Subsequences(dp+树状数组)
题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1399 Solved: 694[Submit][Status] ...
- BZOJ 3289: Mato的文件管理[莫队算法 树状数组]
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 2399 Solved: 988[Submit][Status][Di ...
- 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组
E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...
随机推荐
- navicat for oracle 创建表ID字段的自动递增
Oracle数据库创建表ID字段的自动递增 将表t_uaer的字段ID设置为自增:(用序列sequence的方法来实现) ----创建表 Create table t_user( Id numbe ...
- 「PKUWC2018」Slay the Spire
题目链接 题意分析 这个题其实不是期望 就是一共有\(C_{2n}^m\)种情况 每一种情况选择\(k\)张牌 然后求最大攻击值的总和 我们考虑 当前抽出了选出了\(i\)张强化牌 \(m-i\)张攻 ...
- FlowPortal-BPM——验证控件
自上而下依次是: 非空验证.范围验证.规则表达式验证.比较验证.自定义验证 非空验证的使用: 1.ControlToValidate - 监控的控件 2.ErrorMessage - 为空时提示信息
- JQ 文件上传
var formData = new FormData(); var name = $("input").val(); formData.append("file&quo ...
- [原创] Trie树 php 实现敏感词过滤
目录 背景 简介 存储结构 PHP 其他语言 字符串分割 示例代码 php 优化 缓存字典树 常驻服务 参考文章 背景 项目中需要过滤用户发送的聊天文本, 由于敏感词有将近2W条, 如果用 str_r ...
- SpringBoot 整合 中国移动 MAS HTTP1.0 实现短信发送服务
因为客户需要,本身使用的 阿里云的短信服务改为了中国移动MAS HTTP 1.0 短信通知,因为看到网络上关于此类的博客知识很少,再趟完坑后特地写下这篇博客,提醒后来人. 特别感谢 中国移动MAS ...
- 10. JavaScript学习笔记——JSON
10. JSON ///[JSON是一种数据格式,不是JS 独有的] ///[JSON语法] /* 1.数据书写格式:"name":value,JSON要求给属性名加上[双引号], ...
- 【性能调优】:记录一次数据库sql语句性能调优过程
一,依旧很简单的一个接口,查询列表接口,发现10并发单交易场景下,数据库表4w铺底数据,每次查询2000条数据进行orderby显示,平均响应时间2秒以上,数据库的cpu使用率高达95%: 二,抓到这 ...
- ospf基础理论
OSPF简介 OSPF(Open Shortest Path First 开放式最短路径优先)协议是IETF为IP网络开发的IGP路由选择协议.它是一种典型的链路状态(link-state)路由协议. ...
- 测试Servlet生命周期例子程序
写一个类TestLifeCycleServlet,生成构造器TestLifeCycleServlet();重写HttpServlet的doGet();重写GenericServlet的destroy( ...