当前位置: 首页 > news >正文

CF 896 C Willem, Chtholly and Seniorious(珂朵莉树模板)

CF 896 C. Willem, Chtholly and Seniorious(珂朵莉树模板)

Problem - C - Codeforces

大意:给出一个区间 , 要求进行四种操作 , 区间加 , 区间第k大 , 区间推平 , 区间求和。

珂朵莉树模板题 , 练手即可。

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int N = 1e5 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;struct node{int l , r;mutable int v;node(int l , int r = 0 , int v = 0) : l(l), r(r), v(v){}bool operator < (const node &a) const {return l < a.l;}
};set<node>s;set<node>::iterator split(int pos){set<node>::iterator it = s.lower_bound(node(pos));if(it != s.end() && it->l == pos) {return it;}it--;if (it->r < pos) return s.end();int l = it->l;int r = it->r;int v = it->v;s.erase(it);s.insert(node(l , pos - 1 , v));return s.insert(node(pos , r , v)).first;
}inline int qp(int x , int y , int p){int res = 1 % p;x = x % p; while(y){if(y & 1) res = res * x % p;x = x * x % p;y >>= 1;}return res;
}void assign(int l , int r , int x) {set<node>::iterator itr = split(r + 1) , itl = split(l);s.erase(itl , itr);s.insert(node(l , r , x));
}void add(int l , int r , int x){set<node>::iterator itr = split(r + 1) , itl = split(l);for(auto i = itl ; i != itr ; i ++)  i->v += x;
}inline int kth(int l , int r , int x){vector<PII>v;set<node>::iterator itr = split(r + 1) , itl = split(l);for(auto i = itl ; i != itr ; i ++) v.emplace_back(i->v , i->r - i->l + 1);sort(v.begin() , v.end());for(auto [val , num] : v){if(x > num) x -= num;else return val;}
}inline int sum(int l , int r , int x , int p){int res = 0;set<node>::iterator itr = split(r + 1) , itl = split(l);for(auto i = itl ; i != itr ; i ++){res = (res + qp(i->v , x , p) * (i->r - i->l + 1) % p) % p;}return res;
}int n , m , seed , vmax , op , a[N] , x , y , l , r;inline int rnd(){int res = seed;seed = (seed * 7 + 13) % mod;return res;
}signed main(){IOScin >> n >> m >> seed >> vmax;for(int i = 1 ; i <= n ; i ++){a[i] = (rnd() % vmax) + 1;s.insert(node{i , i , a[i]});}for(int i = 1 ; i <= m ; i ++){op = rnd() % 4 + 1;l = rnd() % n + 1;r = rnd() % n + 1;if(l > r) swap(l , r);if(op == 3){x = rnd() % (r - l + 1) + 1;}else{x = rnd() % vmax + 1;}if(op == 4) y = rnd() % vmax + 1;if(op == 1) add(l , r , x);if(op == 2) assign(l , r , x);if(op == 3) cout << kth(l , r , x) << "\n";if(op == 4) cout << sum(l , r , x , y) << "\n";}return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);
http://www.lryc.cn/news/135706.html

相关文章:

  • Android Jetpack组件的全方位分析
  • Prometheus+Grafana+AlertManager监控SpringBoot项目并发送邮件告警通知
  • 猿辅导Motiff亮相IXDC 2023国际体验设计大会,发布新功能获行业高度关注
  • 【QT】重写QAbstractLIstModel,使用ListView来显示多列数据
  • 【从零学习python 】64. Python正则表达式中re.compile方法的使用详解
  • 【FAQ】视频云存储/安防监控EasyCVR视频汇聚平台如何通过角色权限自行分配功能模块?
  • 基于Spring Boot的社区诊所就医管理系统的设计与实现(Java+spring boot+MySQL)
  • mysql从传统模式切到GTID模式后启动主从,主从异常报错1236
  • Qt+C++串口调试接收发送数据曲线图
  • 【从零学习python 】75. TCP协议:可靠的面向连接的传输层通信协议
  • IPv4 基础概念
  • stm32片内读写项目总结(多字节读写tongxindu)
  • ECMAScript6 简介及拓展
  • 可视化构建包分析报告
  • 统一git使用方法,git状态变迁图,git commit提交规范
  • react与vue的区别
  • 成功解决SQL 错误 [22000]: 第3 行附近出现错误: 试图修改自增列[ID](达梦数据库)
  • 【算法】活用双指针完成复写零操作
  • 【面试高频题】难度 3/5,字典树热门运用题
  • vue base64图片转file流 下载到本地 或者上传
  • 无涯教程-PHP - 简介
  • web基础+HTTP协议+httpd详细配置
  • 【sql】MongoDB的增删改查分页条件等
  • 我的动态归纳(便于搜索)
  • langchain ChatGPT AI私有知识库
  • API接口常用数据格式Json,Json的定义和XML的区别
  • 密码学学习笔记(二十一):SHA-256与HMAC、NMAC、KMAC
  • 操作系统-笔记-第四章-文件管理
  • 【MiniGUI】文字颜色实现透明度变化
  • css中元素加定位之后到一定距离元素会变小