[树状数组]poj2481 Cows

poj2481 Cows, 题目链接

题意:

好吧又是熟悉的牛,一条河岸,每只牛都有吃草范围[S,E],它们或强壮或虚弱。我们这样定义强壮:牛i和牛j,它们的吃草范围分别是[Si,Ei]和[Sj,Ej],如果Si<=Sj && Ei>=Ej && Ei-Ej>Ej-Sj,这样我们就说牛i比牛j强壮,注意如果吃草范围完全一样那么它们之间不存在强弱之分,本题求的是每只牛比他们强壮的牛的数量

思路:

和我在模板中引之为例的hdu2352 Stars一样还是降维,只不过这次改成求左上角
y降序排列,y一样则x升序排列,注意不能是同一个点

代码:

#include 
#include 
#include 
#include 
using namespace std;

#define lowbit(x) (x&(-x))
const int N = 1e5+5;
int tree[N];
int f[N];
int n, s, e;
struct node{
    int s;
    int e;
    int id;
}tot[N];
bool cmp(const node &x, const node &y){
    if(x.e==y.e)
        return x.sy.e;
}
void update(int k){
    while(k <= n){
        tree[k]++;
        k += lowbit(k);
    }
}
int sum(int k){
    int re=0;
    while(k>0){
        re += tree[k];
        k -= lowbit(k);
    }
    return re;
}
int main(){
    while(scanf("%d", &n) && n){
        memset(tree,0,sizeof(tree));
        memset(f,0,sizeof(f));
        for(int i=0; i


反思:

我的代码 2640K 2235MS,真是渣呀,看到第一是2300K 204MS,很好奇同样是G++怎么可以这么快……

看discuss中说试一试快速读入/读入优化?搜了一下也不是很懂,先贴上代码日后再看……

//输入外挂
void nextInt(int &x)
{
    do
        c=getchar();
    while (c<'0'||c>'9');
    x=c-'0';
    while('0'<=(c=getchar())&&c<='9')
        x=x*10+c-'0';
}
inline void scan_d(int &ret) {  
    char c; ret=0;  
    while((c=getchar())<'0'||c>'9');  
    while(c>='0'&&c<='9') ret=ret*10+(c-'0'),c=getchar();  
}



你可能感兴趣的:(树状数组)