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;}
相关文章推荐
- 初学ACM - 组合数学基础题目PKU 1833
- POJ ACM 1001
- POJ ACM 1002
- 对分治算法的几点思考
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers
- POJ 2773 HAPPY 2006
- POJ 3090 Visible Lattice Points
- POJ-2409-Let it Bead&&NYOJ-280-LK的项链
- POJ-1695-Magazine Delivery-dp
- POJ1523 SPF dfs
- POJ-1001 求高精度幂-大数乘法系列
- POJ-1003 Hangover
- POJ-1004 Financial Management
- 用单调栈解决最大连续矩形面积问题
- 2632 Crashing Robots的解决方法
- 1573 Robot Motion (简单题)
- POJ 1200 Crazy Search(简单哈希)
- 【高手回避】poj3268,一道很水的dijkstra算法题
- POJ 1088 滑雪