Edison UVALive3488
题目大意
有一个0~n-1的序列,有m次操作,操作包含三个元素:pl,len,ti,表示这个操作进行ti次,每次将从pl+1开始的len个元素移到序列头部。
分析
看到题不难想到使用平衡树将需移动部分切出来挂到顶部。本题我使用fhqtreap来实现,但需要注意的是对于挪动部分使用的split不再以节点值为关键字切割而改用它在树中的排名作为关键字。具体实现详见代码。注意输出格式!!!!!!!!
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
int root,son[][],a[],rd[],siz[],cnt,n;
inline void up(int x){siz[x]=siz[son[x][]]+siz[son[x][]]+;}
inline int bnode(int x){
siz[++cnt]=;
a[cnt]=x;
rd[cnt]=rand();
return cnt;
}
inline int gk(int rt,int k){
while(){
if(k<=siz[son[rt][]])rt=son[rt][];
else if(k==siz[son[rt][]]+)return rt;
else k-=siz[son[rt][]]+,rt=son[rt][];
}
}
inline void spt1(int rt,int k,int &x,int &y){
if(!rt)x=y=;
else {
if(a[rt]<=k)x=rt,spt1(son[rt][],k,son[rt][],y);
else y=rt,spt1(son[rt][],k,x,son[rt][]);
up(rt);
}
}
inline int mer(int x,int y){
if(!x||!y)return x+y;
if(rd[x]<rd[y]){
son[x][]=mer(son[x][],y);
up(x);
return x;
}else {
son[y][]=mer(x,son[y][]);
up(y);
return y;
}
}
inline void spt(int sum,int rt,int k,int &x,int &y){
if(!rt)x=y=;
else {
if(sum+siz[son[rt][]]+<=k){
x=rt,spt(sum+siz[son[rt][]]+,
son[rt][],k,son[rt][],y);
}else y=rt,spt(sum,son[rt][],k,x,son[rt][]);
up(rt);
}
}
inline void init(){
root=cnt=;
memset(rd,,sizeof(rd));
memset(a,,sizeof(a));
memset(son,,sizeof(son));
memset(siz,,sizeof(siz));
}
inline long long getans(int n){
long long ans=;
int i;
for(i=;i<=n;i+=)
ans+=(long long)a[gk(root,i)];
return ans;
}
inline void work(int _){
int n,m,i,j,x,y,z,w,pl,len,ti;
scanf("%d%d",&n,&m);
for(i=;i<n;i++){
spt1(root,i,x,y);
root=mer(mer(x,bnode(i)),y);
}
for(i=;i<=m;i++){
scanf("%d%d%d",&pl,&len,&ti);
for(j=;j<=ti;j++){
spt(,root,pl,x,y),spt(,y,len,z,w);
root=mer(z,mer(x,w));
}
}
printf("%lld\n",getans(n));
}
int main(){
srand(time()+);
int t;
scanf("%d",&t);
for(int _=;_<=t;_++){
printf("Case %d:\n",_);
init();
work(_);
if(_!=t)puts("");
}
return ;
}
Edison UVALive3488的更多相关文章
- 什么是英特尔® Edison 模块?
英特尔® Edison 模块 是一种 SD 卡大小的微型计算芯片,专为构建物联网 (IoT) 和可穿戴计算产品而设计. Edison 模块内含一个高速的双核处理单元.集成 Wi-Fi*.蓝牙* 低能耗 ...
- [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信
一.前言 下面是本系列文章的前几篇: [Intel Edison开发板] 01.Edison开发板性能简述 [Intel Edison开发板] 02.Edison开发板入门 [Intel Edison ...
- [Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建
一.前言 intel-iot-examples-datastore 是Intel提供用于所有Edison开发板联网存储DEMO所需要的服务器工程.该工程是基于nodejs和redis写成的一个简单的工 ...
- [Intel Edison开发板] 03、Edison开发IDE入门及跑官方提供的DEMO
一.启动Eclipse爱迪生开发板IDE eclipse开发环境在iss-iot-win_03-14-16中,但是一定每次都是点bat脚本启动,否则就会少东西(windows->preferen ...
- [Intel Edison开发板] 02、Edison开发板入门
一.前言 Start from the link: 开始学习的链接 上面链接是官网的教程,按照教程可以开发板入门: 其中第一步是了解开发板,涉及到如何组装.如何连线.一些主要的接口简单介绍等信息: 第 ...
- Intel Edison 参考链接2
Edison的breakout板子的引脚: http://iotdk.intel.com/docs/master/mraa/java/edison.html Edison的引脚 http://www. ...
- Intel Edison
起步: https://software.intel.com/zh-cn/node/628224 刷机: https://software.intel.com/zh-cn/flashing-firmw ...
- Intel Edison的那些事:修改Edison的HTTP服务的页面
Intel Edison配置好之后,按住PWR键2-7秒(4秒恰到好处),就可以进入AP热点模式(此时,Arduino扩展板上的灯不停闪烁),可以将笔记本接入Edison的热点,然后在浏览器中访问“h ...
- Edison与Arduino通过USB对接通信
虽然Edison本身就装在一块Arduino扩展板上,但当要接的传感器太多了的时候一个扩展板也不够用了.因此需要再用一Arduino板扩展功能.而两者需要通信才能达到一个整体的效果,因此这里介绍如何用 ...
随机推荐
- L119
A big collaboration is trying to understand diseases of the psycheDiseases of the psyche have always ...
- 2018.7.27 wireless charger TX evaluation kit based on STWBC-EP
1 introduced 我们需要设计一个无线充电方案: 功能需求:通用的无线充电平台 参数要求:8-10W step1: 找寻资料 http://www.ti.com/sitesearch/doc ...
- 2018.7.26 学会说NO,拒绝道德绑架。
一.领导交给你一项不属于你工作范围的工作,是否需要拒绝,你可以考虑以下问题: 1.这是与我核心能力相关的工作吗?是,接受:否,进入下一条: 2.它能帮助我拓展我核心能力的边界,或是我感兴趣的吗?是,接 ...
- pdp 的连接方法
<?php $dsn = "mysql:host=127.0.0.1;dbname=blog_edu"; try{ $pdo = new PDO($dsn,'root','' ...
- STL理论基础、容器、迭代器、算法
一.STL基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段 ...
- php写入数据到mysql数据库中出现乱码解决方法
乱码情况: 在选择数据库前加入一句代码即可 mysql_query("set names utf8"); 最后效果
- mysql之 percona-xtrabackup 2.4.7安装(热备工具)
准备:os是centos6.7,提前下载并上传 percona-xtrabackup 安装包,下载网址为: https://www.percona.com/downloads/XtraBackup/L ...
- 使用case语句给字体改变颜色
使用case语句给字体改变颜色 #!/bin/bash color(){ RED_COLOR='\E[1;31m' GREEN_COLOR='\E[1;32m' YELLOW_COLOR='\E[1; ...
- 配置文件的继承与覆盖: Machine.config / Web.config /子目录 Web.config
C#有三种级别的配置文件: 机器级别 machine.config 在 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.c ...
- maven用途、核心概念、用法、常用参数和命令、扩展
设置问题解决. http://trinea.iteye.com/blog/1290898 本文由浅入深,主要介绍maven的用途.核心概念(Pom.Repositories.Artifact.Buil ...