2019.01.19 codeforces896C.Willem, Chtholly and Seniorious(ODT)
传送门
ODTODTODT出处(万恶之源)
题目简述:
- 区间赋值
- 区间加
- 区间所有数k次方和
- 区间第k小
思路:直接上ODTODTODT。
不会的点这里
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
const int N=1e5+5;
typedef long long ll;
typedef pair<ll,int> pli;
vector<pli>q;
struct Node{
int l,r;
mutable ll v;
Node(int l_,int r_=-1,ll v_=0):l(l_),r(r_),v(v_){}
friend inline bool operator<(const Node&a,const Node&b){return a.l<b.l;}
};
set<Node>S;
typedef set<Node>::iterator It;
inline It split(int pos){
It it=S.lower_bound(Node(pos));
if(it!=S.end()&&it->l==pos)return it;
--it;
int l=it->l,r=it->r;
ll v=it->v;
return S.erase(it),S.insert(Node(l,pos-1,v)),S.insert(Node(pos,r,v)).first;
}
inline int ksm(ll a,int p,ll mod){int ret=1;a%=mod;for(;p;p>>=1,a=a*a%mod)if(p&1)ret=a*ret%mod;return ret;}
inline void assign(int l,int r,ll v){
It R=split(r+1),L=split(l);
return S.erase(L,R),(void)S.insert(Node(l,r,v));
}
inline void add(int l,int r,ll v){
It L=split(l),R=split(r+1);
for(It it=L;it!=R;++it)(it->v)+=v;
}
inline ll Rank(int l,int r,int kth){
It R=split(r+1),L=split(l);
q.clear();
for(It it=L;it!=R;++it)q.push_back(pli(it->v,it->r-it->l+1));
sort(q.begin(),q.end());
for(ri i=0;i<q.size();++i){
kth-=q[i].second;
if(kth<=0)return q[i].first;
}
return -1;
}
inline ll query(int l,int r,int k,ll mod){
ll ret=0;
It L=split(l),R=split(r+1);
for(It it=L;it!=R;++it)ret=(ret+(ll)(it->r-it->l+1)*ksm(it->v,k,mod)%mod)%mod;
return ret;
}
int n,m,vmax,seed;
inline int rd(){
int ret=seed;
seed=(7ll*seed+13)%1000000007;
return ret;
}
int main(){
n=read(),m=read(),seed=read(),vmax=read();
for(ri i=1;i<=n;++i)S.insert(Node(i,i,rd()%vmax+1));
for(ri i=1,op,L,R,x,y;i<=m;++i){
op=rd()%4+1,L=rd()%n+1,R=rd()%n+1;
if(L>R)swap(L,R);
if(op==3)x=rd()%(R-L+1)+1;
else x=rd()%vmax+1;
if(op==4)y=rd()%vmax+1;
switch(op){
case 1:add(L,R,x);break;
case 2:assign(L,R,x);break;
case 3:cout<<Rank(L,R,x)<<'\n';break;
default:cout<<query(L,R,x,y)<<'\n';
}
}
return 0;
}
2019.01.19 codeforces896C.Willem, Chtholly and Seniorious(ODT)的更多相关文章
- 2019.01.19 洛谷P2787 语文1(chin1)- 理理思维(ODT)
传送门 ODTODTODT水题. 题意:有一个字母序列,支持区间赋值,查询区间某个字母的数量,区间按字母序排序. 思路: 可以开262626棵线段树搞过去,然而也可以用ODTODTODT秒掉. 如果用 ...
- [Codeforces896C] Willem, Chtholly and Seniorious (ODT-珂朵莉树)
无聊学了一下珂朵莉树 珂朵莉树好哇,是可以维护区间x次方和查询的高效数据结构. 思想大致就是一个暴力(相对而言)的树形数据结构 lxl毒瘤太强了,发明了ODT算法(Old Driver Tree老司机 ...
- 【Cf #449 C】Willem, Chtholly and Seniorious(set维护线段)
这里介绍以个小$trick$,民间流传为$Old Driver Tree$,实质上就是$set$维护线段. 我们将所有连续一段权值相同的序列合并成一条线段,扔到$set$里去,于是$set$里的所有线 ...
- CF896C Willem, Chtholly and Seniorious(珂朵莉树)
中文题面 珂朵莉树的板子……这篇文章很不错 据说还有奈芙莲树和瑟尼欧里斯树…… 等联赛考完去学一下(逃 //minamoto #include<bits/stdc++.h> #define ...
- 2019.01.17 bzoj2753: [SCOI2012]滑雪与时间胶囊(最小生成树)
传送门 最小生成树菜题. 题意:给出一些有向边,问有向的最小生成树. 思路:先dfsdfsdfs一把所有有用的边都存起来,然后按终点点权为第一关键字,边权为第二关键字给边排序保证最小生成树的合法性,排 ...
- 2019.01.02 NOIP训练 三七二十一(生成函数)
传送门 生成函数基础题. 题意简述:求由1,3,5,7,9这5个数字组成的n位数个数,要求其中3和7出现的次数都要是偶数. 考虑对于每个数字构造生成函数. 对于1,5,9:∑nxnn!=ex\sum_ ...
- 【2019.5.19】接口测试及python基础(一)
一.接口 1.什么是接口: 简单的说,接口就是从数据库获取数据. 2.前端和后端: 2.1前端client: 对于web来说,打开的网页,我们所看到的就是前端,前端语言包括html.JS.CSS: ...
- Willem, Chtholly and Seniorious
Willem, Chtholly and Seniorious https://codeforces.com/contest/897/problem/E time limit per test 2 s ...
- CF&&CC百套计划1 Codeforces Round #449 C. Willem, Chtholly and Seniorious (Old Driver Tree)
http://codeforces.com/problemset/problem/896/C 题意: 对于一个随机序列,执行以下操作: 区间赋值 区间加 区间求第k小 区间求k次幂的和 对于随机序列, ...
随机推荐
- 录音器 AudioRecorder
实现录音器有两种方式可以选择: 1.AudioRecord(基于字节流录音) 优点:可以实现语音的实时处理,进行边录边播,对音频的实时处理. 缺点:输出的是PCM的语音数据,如果保存成音频文件是不能被 ...
- ES6之对象的简洁表示法
ES6 允许直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. let name = 'Pirates of the Caribbean', index = 5, captain = { ...
- C语言之栈区、堆区
一 局部变量存放在栈区中,函数调用结束后释放内存空间. #include "stdio.h"; #include "stdlib.h"; int *getNum ...
- 【go】http实验
实验1:上手篇 package main import ( "net/http" //"fmt" "os" ) func proxyFunc ...
- js中json知识点
首先,json是一种数据格式,而不能说是一种对象(object).这一点是非常重要的. 起源是不同的语言中数据对象的形式是不一样的,我们为了在不同的语言中传递数据,发明了一种json格式用于消除这种差 ...
- java_13.2 Object
1.类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法 2.hashCode()方法 返回该对象的哈希值.一般情况下,该方法会根据对象的 ...
- C++命名空间学习笔记
1 模块化和界面 任何实际程序都是有一些部分组成的.通过将程序进行模块化可以使我们的程序更加清晰,有助于多人合作和维护. 将一个程序进行模块化以后,当其中一个模块调用另一个模块时,它不需要知道其具体实 ...
- 多进程copy文件
from multiprocessing import Pool,Manager import os,time def copyFileTask(fileName,oldFolderName,newF ...
- VS“当前上下文中不存在名称“ViewBag”,当前上下文不存在名称“model””-已解决
自己的项目出现了错误提示,却能编译成功,但是有点强迫症,总是想解决这个错误. 上网找了一堆,都是删除缓存等一些方法,但是没有多大用处,我觉得还是版本号不对,没有引用进来相应的配置,所以配置下了Conf ...
- BZOJ2730或洛谷3225 [HNOI2012]矿场搭建
BZOJ原题链接 洛谷原题链接 显然在一个点双连通分量里,无论是哪一个挖煤点倒塌,其余挖煤点就可以互相到达,而对于一个点双连通分量来说,与外界的联系全看割点,所以我们先用\(tarjan\)求出点双连 ...