不知道为什么一直TLE,用了线段树的数据结构应该不会超时才对。
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; struct Tree { int left,right; Tree *leftchild,*rightchild; int sum; }; Tree* build(int l,int r) { Tree* root=new Tree; root->left=l; root->right=r; root->sum=0; root->leftchild=NULL; root->rightchild=NULL; if (l!=r) { int mid=(l+r)/2; root->leftchild=build(l,mid); root->rightchild=build(mid+1,r); } return root; } void insert(int x,Tree* root) { if (x==root->left && x==root->right) { root->sum++; } else { root->sum++; int mid=(root->left+root->right)/2; if (x<=mid) insert(x,root->leftchild); else insert(x,root->rightchild); } } int getsum(int l,int r,Tree* root) { int total=0; if (l<=root->left && r>=root->right) total+=root->sum; else { int mid=(root->left+root->right)/2; if (l<=mid) total+=getsum(l,r,root->leftchild); if (r>mid) total+=getsum(l,r,root->rightchild); } return total; } int main() { int T; int x,y; int hash[15000]; memset(hash,0,sizeof(hash)); scanf("%d",&T); int n=T; Tree* root=build(1,32001); while (T--) { scanf("%d%d",&x,&y); hash[getsum(1,x+1,root)]++; insert(x+1,root); } int i; for (i=0;i<=n-1;i++) { printf("%d\n",hash[i]); } return 0; }