5-14 数据结构啊poi D.折叠纸片
来源:互联网 发布:windows多线程注意什么 编辑:程序博客网 时间:2024/04/29 05:45
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=78124#problem/D
//想看题目的@willinglive
直接暴力维护就可以了。。。然后折叠超过区间的时候用翻转标记维护一下。【大概直接做也可以过。。?并没有尝试】
#include<cstdio>using namespace std;int n;int tr[100001];inline int lowbit(int x){ return x&(-x);}inline void add(int x,int xx){ int i; for(i=x;i<=n;i+=lowbit(i)) tr[i]+=xx;}inline int sum(int x){ int i; int s=0; for(i=x;i>=1;i-=lowbit(i)) s+=tr[i]; return s;}int main(){ int q; scanf("%d%d",&n,&q); int i,j; for(i=1;i<=n;i++) add(i,1); int x; int s,t; int l=1,r=n; bool rev=false; for(i=1;i<=q;i++) { scanf("%d",&x); if(x==1) { scanf("%d",&s); if(s+s+l-1>r) { rev=!rev; s=(r-l+1)-s; } if(rev) { for(j=r-s+1;j<=r;j++) { int xx=sum(j)-sum(j-1); int loc=r-s+1-(j-(r-s+1)+1); add(loc,xx); add(j,-xx); } r-=s; } else { for(j=l;j<=l+s-1;j++) { int xx=sum(j)-sum(j-1); int loc=l+s-1+(l+s-j); add(loc,xx); add(j,-xx); } l+=s; if(l>n) { l-=n; r-=n; } } } else if(x==2) { scanf("%d%d",&s,&t); if(!rev) { s=s+l-1; t=t+l-1; } else { int tt=s; s=r-t; t=r-tt; } printf("%d\n",sum(t)-sum(s)); } } return 0;}
0 0
- 5-14 数据结构啊poi D.折叠纸片
- JQ彩色3D纸片折叠动画
- C++ 折叠矩形纸片权值相加
- 5-14 数据结构啊poi B.mex
- 5-14 数据结构啊poi F.文化
- 5-14 数据结构啊poi Q.购票
- 5-14 数据结构啊poi C.交错和
- 5-14 数据结构啊poi H.许多的游戏
- 5-14 数据结构啊poi A.暑假作业
- 5-14 数据结构啊poi T.三个数组的故事
- 5-14 数据结构啊poi N.重建计划
- 5-14 数据结构啊poi E.splay上的游戏
- 5-14 数据结构啊poi W.区间对
- 3D 图片折叠
- 碎纸片
- 两张小纸片
- 吹纸片
- 纸片:二分法
- LeetCode-Count Prime
- 迷你扣扣的java实现
- Poi1999基因片段(并查集)
- 关于Android的上下文“Context”
- 一些学习链接
- 5-14 数据结构啊poi D.折叠纸片
- 1.最简单的操作系统(二)makefile
- 写在前面
- Rotate Image - LeetCode 48
- 第三章 第39题
- Unity3D之触摸输入实现在指定地形上拖拽物体
- Laravel5 之 发送邮件
- opencv学习之threshol函数
- iOS7学习点滴-笔记2