您的位置:首页 > 其它

poj2299 分治

2015-10-19 09:11 417 查看
惨痛教训。。因为将l写成了1导致TLE十多次
#include<iostream>#include <string>#include<algorithm>#include<fstream>#include<cmath>using namespace std;#define lch(i) ((i)<<1)#define rch(i) ((i)<<1|1)#define sqr(i) ((i)*(i))#define pii pair<int,int>#define mp make_pair#define FOR(i,b,e) for(int i=b;i<=e;i++)#define FORE(i,b,e) for(int i=b;i>=e;i--)#define ms(a)   memset(a,0,sizeof(a))const int maxnum =500005;const int INF = 1000000000;int tol,n,m,newn;long long sum=0;int seq[maxnum];int lef[250003], rig[250003];void puttogether(int l,int r){if(l==r)return;int mid = (l+r)>>1;puttogether(l,mid);puttogether(mid+1,r);int n1 = mid-l+1,n2 =r-mid;FOR(i,0,n1-1){lef[i]=seq[l+i];}FOR(i,0,n2-1){rig[i]=seq[mid+1+i];}lef[n1]=rig[n2]=0x7fffffff;int pl=0,pr=0;FOR(i,l,r){if(rig[pr]<lef[pl]){sum+=mid-l+1-pl;seq[i]=rig[pr++];}elseseq[i]=lef[pl++];}}int main(){/*fstream fin("G:/1.txt");fin>>m;*/while(scanf("%d",&n)&&n){FOR(i,1,n){scanf("%d",&seq[i]);}sum=0;puttogether(1,n);printf("%lld\n",sum);}return 0;}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj 分治