写道数据结构练练手哈哈哈

// It is made by XZZ
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#define il inline
#define rg register
#define vd void
#define sta static
#define pr pair<int,int>
typedef long long ll;
using namespace std;
il char gc(){
const int B=10000000;static char b[B+1],*p=b+B;
if(p==b+B)b[fread(b,1,B,stdin)]=0,p=b;
return *p?*p++:0;
}
il int gi(){
rg int x=0;rg bool flg=0;rg char ch=gc();
while(ch<'0'||ch>'9'){if(ch=='-')flg=1;ch=gc();}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=gc();
return flg?-x:x;
}
const int maxn=100001<<1;
int rt,ls[maxn],rs[maxn],ran[maxn],siz[maxn],n,m;
ll sum[maxn],w[maxn],tga[maxn],tgb[maxn],tgc[maxn];
bool tgd[maxn];
il vd Set(int&x,ll y){if(x)w[x]=y,sum[x]=siz[x]*y,tgd[x]=1,tgc[x]=y,tga[x]=tgb[x]=0;}
il vd Adda(int&x,ll y){if(x)w[x]+=y*(siz[ls[x]]+1),sum[x]+=y*(1+siz[x])*siz[x]/2,tga[x]+=y;}
il vd Addb(int&x,ll y){if(x)w[x]+=y,sum[x]+=siz[x]*y,tgb[x]+=y;}
il vd down(int&x){
if(!x)return;
if(tgd[x])tgd[x]=0,Set(ls[x],tgc[x]),Set(rs[x],tgc[x]);
if(tga[x])Adda(ls[x],tga[x]),Adda(rs[x],tga[x]),Addb(rs[x],tga[x]*(siz[ls[x]]+1)),tga[x]=0;
if(tgb[x])Addb(ls[x],tgb[x]),Addb(rs[x],tgb[x]),tgb[x]=0;
}
il vd upd(int&x){
if(!x)return;
down(ls[x]),down(rs[x]);
siz[x]=siz[ls[x]]+siz[rs[x]]+1,sum[x]=sum[ls[x]]+sum[rs[x]]+w[x];
}
il int merge(int x,int y){
if(x==0||y==0)return x|y;
if(ran[x]<ran[y]){down(x),rs[x]=merge(rs[x],y),upd(x);return x;}
else {down(y),ls[y]=merge(x,ls[y]),upd(y);return y;}
}
il pr split(int&x,int k){
if(!x)return make_pair(0,0);
down(x);
pr y=make_pair(ls[x],rs[x]);
if(k==siz[ls[x]]){ls[x]=0,upd(x),y.second=x;return y;}
if(k==siz[ls[x]]+1){rs[x]=0,upd(x),y.first=x;return y;}
if(k<siz[ls[x]]){y=split(ls[x],k);ls[x]=y.second,upd(x),y.second=x;return y;}
else {y=split(rs[x],k-siz[ls[x]]-1);rs[x]=y.first,upd(x),y.first=x;return y;}
}
int main(){
#ifdef xzz
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
#endif
n=gi(),m=gi();
srand(2);ran[0]=rand();
for(rg int i=1;i<=n;++i)ran[i]=(ran[i-1]*19260817ll)&2147483647,w[i]=sum[i]=gi(),siz[i]=1,rt=merge(rt,i);
int l,r,k,opt;
pr a,b;
while(m--){
opt=gi();
if(opt==1){
l=gi(),r=gi(),k=gi();
a=split(rt,l-1),b=split(a.second,r-l+1);
Set(b.first,k);
rt=merge(a.first,merge(b.first,b.second));
}else if(opt==2){
l=gi(),r=gi(),k=gi();
a=split(rt,l-1),b=split(a.second,r-l+1);
Adda(b.first,k);
rt=merge(a.first,merge(b.first,b.second));
}else if(opt==3){
l=gi();a=split(rt,l-1);
++n;ran[n]=(ran[n-1]*19260817ll)&2147483647;
w[n]=sum[n]=gi(),siz[n]=1;
rt=merge(a.first,merge(n,a.second));
}else{
l=gi(),r=gi();
a=split(rt,l-1),b=split(a.second,r-l+1);
printf("%lld\n",sum[b.first]);
rt=merge(a.first,merge(b.first,b.second));
}
}
return 0;
}

Dbzoj#3188. [Coci 2011]Upit的更多相关文章

  1. BZOJ3188: [Coci 2011]Upit

    3188: [Coci 2011]Upit Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 72  Solved: 24[Submit][Status] ...

  2. bzoj3188 [Coci 2011]Upit(分块)

    Time Limit: 10 Sec  Memory Limit: 128 MB Description 你需要维护一个序列,支持以下4种操作.一,将区间(u,v)的数覆盖为C:二,将区间(u,v)的 ...

  3. [SinGuLaRiTy] COCI 2011~2012 #2

    [SinGuLaRiTy-1008] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 测试题目 对于所有的题目:Time Limit:1s   ...

  4. 【BZOJ 3188】【Coci 2011】Upit Splay模板题

    转啊转终于转出来了,然而我的模板跟陈竞潇学长的模板一模一样,还是太弱啊,第一次用指针. #include<cstdio> #include<cstring> #include& ...

  5. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  6. 【vijos】1791 骑士的旅行(特殊的技巧)

    https://vijos.org/p/1791 暴力的话只想到bfs,然后估计是状态超了才得20分. 噗,为啥暴力就不能想得简单点QAQ.....这种思想很好啊. 这一题我看了题解后不得不说我竟然没 ...

  7. TOJ4505: KOSARE

    TOJ4505: KOSARE  Time Limit(Common/Java):10000MS/30000MS     Memory Limit:65536KByteTotal Submit: 11 ...

  8. [C#项目开源] MongoDB 可视化管理工具 (2011年10月-至今)

    正文 该项目从2011年10月开始开发,知道现在已经有整整5年了.MongoDB也从一开始的大红大紫到现在趋于平淡. MongoCola这个工具在一开始定位的时候只是一个Windows版本的工具,期间 ...

  9. BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3028  Solved: 1460[Submit][Sta ...

随机推荐

  1. 超级好用的解析JSON数据的网站

    超级好用的解析JSON数据的网站 网址 http://json.parser.online.fr/beta/ 效果图 测试数据 {,},,,,,,},{,,,,},{,,,,},{,,,,,,,,,, ...

  2. JS DateTime 格式化

    首先看我们在浏览器接收到的DateTime格式的数据: 如果没有在传输的时候把DateTime转成字符串的话,我们只需要在JS中加一段代码即可转换,代码如下: function ChangeDateF ...

  3. Centos7 apache2.4.29(httpd) 安装

    重点参考文章:https://blog.csdn.net/MrDing991124/article/details/78829184  写的很详细了,自己按着改博文走了不遍,不错! 一.配置安装环境 ...

  4. 原生JavaScript可以干那些事情

    1.原生JavaScript实现字符串长度截取 function cutstr(str, len) { var temp; var icount = 0; var patrn = /[^\x00-\x ...

  5. session过期,拦截ajax请求并跳转登录页面

    1.方法一 :1.1使用filter 和ajaxsetup 对ajax进行拦截并跳转登录页面 public void doFilter(ServletRequest request, ServletR ...

  6. 面向对象课程 - 寒假第三次作业 - C++计算器项目初始部分

    C++计算器项目初始部分 零.项目源文件地址 传送门:calculator 一.项目信息相关: 项目:Calculator 版本:1.0 日期:2016.2.16 实现: 基本的操作界面 对四则运算表 ...

  7. Django之模板配置(template)

    Django模板系统 官方文档 jinja2模块中文 jinja2模块官方 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 在Djan ...

  8. grovvy pipeline 部署

    pipeline { agent any stages { stage('Checkout') { steps { echo 'Checkout' checkout([$class: 'GitSCM' ...

  9. koa2怎么自定义一个中间件

    首先定义一个方法 function test(ctx){ global.console.log('m1') } 把这个中间件导出去 module.exports=function(){ return ...

  10. ddt 测试用例UI运用

    import xlrd from selenium import webdriver import ddt import time import unittest class Excel(object ...