标签: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