[51nod1502]苹果曼和纸
苹果曼有很大的一张纸。这张纸的形状是1×n的长方形。你的任务是帮助苹果曼来折叠这一张纸。有一些操作,这些操作有如下两个种形式:
1. 把这张纸在第pi个位置对折。经过对折后,左边的1×pi部分会盖到右边的1×([当前纸片宽度]-pi)上面。
2. 询问在如果把距离左端li以内的剪掉,距离左端ri以外的也剪掉,那么还剩下多少纸片的长度。
看样例,可以更好的解理这个问题。
第一次折叠之后,纸片的宽度变成了4,第二次折叠,纸片的宽度变成了2。
Input
单组测试数据。
第一行有两个整数n和q (1≤n≤10^5; 1≤q≤10^5),表示纸片的宽度和询问数目。
接下来q行的形式是如下之一:
· "1 pi" (1≤pi<[当前纸片宽度]) — 第一类操作。
· "2 li ri" (0≤li<ri≤[当前纸片宽度]) — 第二类操作。
Output
对于第二类操作,输出答案。
Input示例
7 4
1 3
1 2
2 0 1
2 1 2
Output示例
4
3
维护一下每个位置上有多少层纸,每次翻折的时候,只翻较短的一部分(所以得记一下当前的方向),那么总共最多只会有n个位置被翻到别的位置上。
主要是记方向、计算实际位置很麻烦...
我直接分类讨论。。当前维护的是否是翻转后的、当前翻折操作是否是否会导致翻转,总共四类。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#include<cstdlib>
#define ll long long
#define ull unsigned long long
#define ui unsigned int
//#define d double
#define ld long double
const int maxn=,modd=;
int t[maxn];
int i,j,k,n,m; int ra,fh;char rx;
inline int read(){
rx=getchar(),ra=,fh=;
while(rx<''&&rx!='-')rx=getchar();
if(rx=='-')fh=-,rx=getchar();
while(rx>='')ra=ra*+rx-,rx=getchar();return ra*fh;
} inline void add(int x,int V){while(x<=n)t[x]+=V,x+=x&-x;}
inline int get(int x){
int sm=,x1=x-;
while(x)sm+=t[x],x-=x&-x;
while(x1)sm-=t[x1],x1-=x1&-x1;
return sm;
}
inline int query(int l,int r){
int sm=;
while(r)sm+=t[r],r-=r&-r;
l--;while(l)sm-=t[l],l-=l&-l;return sm;
} int main(){
n=read(),m=read();register int i,j;
for(i=;i<=n;i++){t[i]++;if(i+(i&-i)<=n)t[i+(i&-i)]+=t[i];}
int l,r,stpos=,rest=n,p;bool rev=;
while(m--){
if(read()==){
p=read();
if((p<<)<=rest)
if(!rev){
for(i=stpos,j=stpos+(p<<)-;i<j;i++,j--)add(j,get(i));
stpos+=p;rest-=p;
}else{
for(i=stpos-(p<<)+,j=stpos;i<j;i++,j--)add(i,get(j));
stpos-=p;rest-=p;
}
else
if(!rev){
p=rest-p;
for(i=stpos+rest-,j=i-(p<<)+;j<i;j++,i--)add(j,get(i));
rev=,stpos=stpos+rest--p;rest-=p;
}else{
p=rest-p;
for(j=stpos-rest+,i=j+(p<<)-;j<i;j++,i--)add(i,get(j));
rev=,stpos=stpos-rest++p;rest-=p;
}
}else{
l=read(),r=read()-;
if(!rev)printf("%d\n",query(stpos+l,stpos+r));
else printf("%d\n",query(stpos-r,stpos-l));
}
// printf(" rest:%d st:%d rev:%d\n",rest,stpos,rev);
// for(i=1;i<=rest;i++)printf(" %d",get(stpos+(!rev?i-1:-i+1)));puts("");
}
}
[51nod1502]苹果曼和纸的更多相关文章
- 51 Nod 1500 苹果曼和树(树形dp)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1500 思路: 树形dp. 我们考虑当前结点 i ,对于结点 i ,它可以 ...
- 胡小兔的OI日志3 完结版
胡小兔的 OI 日志 3 (2017.9.1 ~ 2017.10.11) 标签: 日记 查看最新 2017-09-02 51nod 1378 夹克老爷的愤怒 | 树形DP 夹克老爷逢三抽一之后,由于采 ...
- 苹果公司CEO乔布斯在斯坦福大学毕业典礼上的演讲
苹果公司CEO乔布斯在斯坦福大学毕业典礼上的演讲 摘要:这是苹果公司CEO乔布斯2005年在斯坦福大学毕业典礼上的演讲,大学途中退学,创业,被解雇,东山再起,死亡威胁,这些他都一一经历了.经营自己与众 ...
- Dfs学习经验(纸上运行理解DFS)【两道题】
首先我想吐槽的是,在CSDN上搞了好久还是不能发博客,就是点下发表丝毫反应都没有的,我稍微百度了几次还是没有找到解决方法,在CSDN的BBS上也求助过管理员但是没有收到答复真是烦躁,导致我新生入学以来 ...
- [视频]产品营销之拍出好电子产品,Peter Belanger是如何为苹果产品拍照的
Peter Belanger –他就是那些颠覆你想象的苹果产品照片的摄影师.作为旧金山的顶级产品图片设计师的 Peter,他还拥有 eBay, Nike, Pixer 和 Square 等客户. 让我 ...
- 与英特尔分道扬镳,苹果的5G业务掉队了吗?
5G概念已经大热,越来越多的厂商推出相关产品,中国骄傲之华为不仅在5G通信标准制定方面参与感非常强,也先于竞争对手推出5G智能终端,连同三星/Vivo等也纷纷推出5G终端,而作为智能手机市场绝对的利润 ...
- iPhone7会点燃苹果内战吗?
苹果第十代手机产品iPhone7或者叫iPhone6 SE注定是设计上的平庸之作,与之前的产品相比,这两款产品只是进行了小幅度地升级,对于一些需要靠苹果logo标榜身份的人来说,几乎是没有吸引力的 ...
- 苹果强制使用HTTPS传输了怎么办?——关于HTTPS,APP开发者必须知道的事
WeTest 导读 2017年1月1日起,苹果公司将强制使用HTTPS协议传输.本文通过对HTTPS基础原理和通信过程内容的讲解,介绍APP开发者在这个背景下的应对办法. 几周前,我们在<htt ...
- 体验报告:微信小程序在安卓机和苹果机上的区别
很多人可能会问:微信小程序和在微信里面浏览一个网页有什么区别? 首先,小程序的运行是全屏的,界面跟进入了一个APP很像,更为沉浸跟在微信里面访问h5不一样:其次,它的浏览体验更为稳定. 不过,这还不够 ...
随机推荐
- canvas 从初级到XX 2# 让我们在之前的基础之上,再迈进一步吧 [中级向] (上)
还是老样子,先啰嗦一点前言. 最近各种事务缠身,所以也就隔了比较长的时间才开始码这篇文.希望不会这么快就过气. 好了,接下来就开始码代码.(写到中途,突然感觉到的.本篇设计大量初中物理知识,请怀念的往 ...
- Python3 学习Python流程--试水中
二.基础语法之后可以搭载服务器练习: 教程 一.1.Python 搭建环境. 初学基本语法 :Python基本语法 2.推荐 IDE : PyCharm CE 下载 菜鸟教程都是基础语法,可以对py ...
- cocoapods使用 swift注意事项
版权声明:本文为博主原创文章,未经博主允许不得转载. 说明:2015年12月2日更新,增加一个可能遇到的问题,优化排版.使用CocoaPods过程中遇到问题,欢迎评论交流. 一.CocoaPods的安 ...
- ABP 用swagger UI测试API报401无权限访问问题
问题描述: 当我们用swagger UI对Web API 进行测试时报401错误 我们点开GET /api/services/app/Role/GetAll,输入参数 点击Try it out!按钮, ...
- C++ 头文件系列(iostream)
1. 简介 这个头文件非常特殊,它只声明了8个常用流对象. 2. 8个对象 2.1 窄字符对象(char) extern istream cin extern ostream cout extern ...
- CP342-5做主站的profibus-dp组态应用
1.CP342-5介绍 2.系统结构图 3.组态DP主站 4.组态DP从站 1)插入DP V0 slaves下的ET200M 2)设置属性 3)添加ET200M的其他模块 4)保存和编译 4.DP通信 ...
- ArcGIS 网络分析[2.3] 最近设施点
什么是最近设施点? 仍然举一个生动形象例子说明. 我在大街的某一个点儿上,我急需上厕所,问:我3分钟内能到的最近的厕所在哪? 这就是最近设施点分析(ClosestFacility)--给定搜索半径,基 ...
- c# 了解c# 面向对象
C#是微软公司发布的一种面向对象的.运行于.NET Framework之上的高级程序设计语言.并定于在微软职业开发者论坛(PDC)上登台亮相.C#是微软公司研究员Anders Hejlsberg的最新 ...
- jquery中attr和prop的区别分析
这篇文章主要介绍了jquery中attr和prop的区别分析的相关资料,需要的朋友可以参考下 在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别 ...
- <转>shell经典,shell十三问
(注:关于变量概念,我们留到下两章才跟大家说明.) 好了,更多的关于 command line 的格式,以及 echo 命令的选项,就请您自行多加练习.运用了... ----------------- ...