标签:des style http color os io ar for art
每次只把短的部分往长的部分折叠,直接用树状数组爆搞就可以了。
每次长度都缩小一些暴力的复杂度不是太高,启发式暴力????
Appleman has a very big sheet of paper. This sheet has a form of rectangle with dimensions 1?×?n. Your task is help Appleman with folding of such a sheet. Actually, you need to perform q queries. Each query will have one of the following types:
Please look at the explanation of the first test example for better understanding of the problem.
The first line contains two integers: n and q (1??≤?n?≤?105; 1?≤?q?≤?105) — the width of the paper and the number of queries.
Each of the following q lines contains one of the described queries in the following format:
For each query of the second type, output the answer.
7 4 1 3 1 2 2 0 1 2 1 2
4 3
10 9 2 2 9 1 1 2 0 1 1 8 2 0 8 1 2 2 1 3 1 4 2 2 4
7 2 10 4 5
The pictures below show the shapes of the paper during the queries of the first example:

After the first fold operation the sheet has width equal to 4, after the second one the width of the sheet equals to 2.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=101000;
int a[maxn],n,q;
inline int lowbit(int x)
{
return x&(-x);
}
void add(int p,int v)
{
for(int i=p;i<=n;i+=lowbit(i))
a[i]+=v;
}
int sum(int p)
{
int sum=0;
for(int i=p;i;i-=lowbit(i))
sum+=a[i];
return sum;
}
int main()
{
scanf("%d%d",&n,&q);
int flag=0;
for(int i=1;i<=n;i++) add(i,1);
int beg=1,end=n;
while(q--)
{
int k,p,l,r;
scanf("%d",&k);
if(k==1)
{
scanf("%d",&p);
if(p<=(end-beg+1)/2)
{
if(flag==0)
{
for(int i=p+beg-1,j=p+beg;i>=beg;i--,j++)
{
add(j,sum(i)-sum(i-1));
}
beg=beg+p;
}
else
{
for(int i=end-p,j=end-p+1;j<=end;i--,j++)
{
add(i,sum(j)-sum(j-1));
}
end=end-p;
}
}
else
{
if(flag==0)
{
for(int i=beg+p-1,j=p+beg;j<=end;j++,i--)
{
add(i,sum(j)-sum(j-1));
}
end=beg+p-1;
}
else
{
for(int i=end-p,j=end-p+1;i>=beg;i--,j++)
{
add(j,sum(i)-sum(i-1));
}
beg=end-p+1;
}
flag=flag^1;
}
}
else if(k==2)
{
scanf("%d%d",&l,&r);
l++;
if(flag==0)
{
l=beg+l-1; r=beg+r-1;
printf("%d\n",sum(r)-sum(l-1));
}
else
{
l=end-l+1; r=end-r+1;
printf("%d\n",sum(l)-sum(r-1));
}
}
}
return 0;
}
Codeforces 461C. Appleman and a Sheet of Paper
标签:des style http color os io ar for art
原文地址:http://blog.csdn.net/ck_boss/article/details/38944007