这题说的是 给了一张长方形的纸 1*n 然后可以按照不同的做法去折这个纸张 他有两种操作,操作1 给了一个pi 点 然后将左边的纸往右边折,第2种操作是给了一个L 和 R 然后计算出 L和R 之间的纸如果 切成单位长度有多少块, 开一个标记数组记录方向然后枚举将每位的值复制到相对应的地方,然后用树状数组不断地去维护,记得如果切的点在目前的最左区间和最右区间的二分一靠右的地方那么记得折的变成右边方向记得记录一下,然后再同样的用树状数组去维护

#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
const int MAX_N = ;
int C[MAX_N],n;
int lowbit(int x){
return x&(-x);
}
int sum(int x){
int ans =;
while(x>){
ans+= C[x];
x-=lowbit(x);
}
return ans;
}
void add(int x, int d){
while(x<=n){
C[x]+=d;
x+=lowbit(x);
}
}
int main()
{
int q,L,R,turn=;
scanf("%d%d",&n,&q);
R = n,L=;
for(int i= ; i<=n; i++)
add(i,);
for(int cc= ; cc< q; ++cc){ int op,a,b;
scanf("%d",&op);
if(op==){
scanf("%d",&a);
int Len = R -L;
if( ( a>Len/ && turn== ) ){
int LEN = Len-a;
a = R-LEN;
for(int loc = ; loc <= LEN; ++loc ){
int E = sum( a+loc ) - sum(a+loc-);
add(a-loc+,E);
}
turn=;
R = a;
continue;
}
if( (a<=Len/ &&turn == ) ){
int LEN = a;
a = R - LEN;
for(int loc = ;loc <= LEN; ++loc){ int E = sum(a+loc) -sum(a+loc-);
add(a-loc+,E);
}
R=a;
continue;
}
if( (a>(Len/)&& turn==)){
int LEN = Len - a;
a = L+LEN;
for(int loc =; loc < LEN ; ++loc){
int E = sum( a - loc ) -sum(a-loc-);
add(a+loc+,E);
}
L=a;
turn=;
continue;
}
if(a<=Len/ && turn == ){
int LEN = a;
a=L+a;
for(int loc = ; loc <LEN; ++ loc){
int E = sum(a-loc) -sum(a-loc -);
add(a+loc+,E);
}
L=a;
continue;
}
}else{
scanf("%d%d",&a,&b);
int ans;
if(turn==){
ans = sum(L+b)-sum(L+a);
}else {
ans = sum(R-a) -sum(R-b);
}
printf("%d\n",ans);
} } return ;
}

codeforces 461C的更多相关文章

  1. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  2. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  3. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  4. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  5. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  6. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  7. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  8. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

  9. CodeForces - 148D Bag of mice

    http://codeforces.com/problemset/problem/148/D 题目大意: 原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...

随机推荐

  1. thinkCMF----导航高亮显示

    导航高亮显示,有多种方法,这里给出一个简单的表示下: <a href="__ROOT__"> <span class="text db"> ...

  2. RestTemplate异常no suitable HttpMessageConverter found for request type [java.lang.Integer]

    GET方式,参数必须放在URL后面,http://xxx/list?name={name}&age={age} package com.chelizi.xiruo.xframework.uti ...

  3. iptables、防火墙配置、NAT端口映射

    一,配置一个filter表放火墙 (1)查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables -L -n Chain INPUT (policy ACCEPT) targ ...

  4. ubuntu16.04下安装sublime_text

    1 在终端输入: sudo add-apt-repository ppa:webupd8team/sublime-text-3 添加sublime text3的软件源: 2 sudo apt-get ...

  5. stat命令的实现-mysate

    任务详情 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k,grep -r的使用 伪代码 产品代码mystate.c,提交码云链接 测试代码,mysate与stat( ...

  6. PHPExcel exception: “Could not close zip file … ”报错

    Q: PHPExcel exception: “Could not close zip file … ” A:目录没有写权限,chmod 对$phpExcel->save($dir)中报错路径设 ...

  7. postgresql+postgis+pgrouting安装步骤图解

    1.在此(https://www.bigsql.org/postgresql/installers.jsp/)下载postgresql(开源数据库,gis行业推荐使用); 2.在此(http://wi ...

  8. -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

    本人使用mac系统,命令行工具使用的iterm2,登录自己的云主机的时候 每次都要提示如下错误 -bash: warning: setlocale: LC_CTYPE: cannot change l ...

  9. 【linux & &&命令】&后台(并行)命令 &&串行命令

    & 放在一个命令末尾,可以将这个命令放到后台执行.放到后台后主进程将继续向下执行,后台命令将与主进程并行执行. &&  放在一个命令末尾,与什么都没有单纯换行实际效果相同,等待 ...

  10. 带宽bandwidth,也叫频宽

    1.两种意义 (1)在数字设备中,带宽通常以bps(bit per second)或bit/s或b/s表示. (2)在模拟设备中,带宽通常以每秒传送周期或赫兹 (Hz)来表示.如传送模拟信号(连续变化 ...