章·十七:2019-07-28:为谁辛苦为谁甜


·昨日小结

颓爆了QAQ,昨天又垫底了。

最简单一道题弃疗的我直接被甩倒了总榜垫底……

我……不想说啥……

我是渣比。

我不能颓废了。

醒来啊麦克白!

·今日计划

1.改完考试题目

2.插头dp:A、B。

3.cpu监控

章·十六:2019-07-27:暂伴月将影,行乐须及春


·昨日小结

新的一天不说啥

·今日进度

[0727模拟赛]A.(数学)

无良可亲可敬出题人我们的学长达哥有一次把他的魔爪充满爱的手将最简单的题目放到了最后一题上……

然而我并没有领会他的恶意好意,于是这道题我弃疗了,然后我就被下达了“病危通知单”……gg掉了……

我没救了……(达哥应该不会他三、四届后的小学弟的博客吧……心虚.jpg。。赶紧%)

章·十五:2019-07-26:江山如此多娇


·昨日小结

昨天颓废致死,今天不能再颓废了……

·今日进度

[线段树进阶和莫队]K.作业(莫队)

这题能炸掉oj。最nb的T到了200秒。不是200毫秒,是两百秒!!

我的AC代码跑了39秒……半分多钟。

初一小学弟懵逼了:woc我的40ms代码为啥跑了这么长时间?

今日头条:震惊!hz众在洛谷上集体被封号,原因是:恶意占用评测资源。

放下我的传奇压行!

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
long long n,m,a[1000005],l,r,t1[1000005],t2[1000005],cnt[1000005],belong[1000005],sum_q;
struct node{long long l,r,id,a,b,ans1,ans2;}que[1000005];
long long lowbit(long long x){return x&(-x);}
bool cmp(node xx,node yy){return belong[xx.l]==belong[yy.l]?xx.r<yy.r:xx.l<yy.l;}
bool cmp_id(node x,node y){return x.id<y.id;}
void update1(long long x,long long num){for(;x<=n;x+=lowbit(x))t1[x]+=num;}
void update2(long long x,long long num){for(;x<=n;x+=lowbit(x))t2[x]+=num;}
long long query1(long long x){long long tot=0;for(;x;x-=lowbit(x))tot+=t1[x];return tot;}
long long query2(long long x){long long tot=0;for(;x;x-=lowbit(x))tot+=t2[x];return tot;}
void add(long long x){if(++cnt[x]==1)update2(x,1);update1(x,1);}
void del(long long x){if(--cnt[x]==0)update2(x,-1);update1(x,-1);}
signed main(){
    scanf("%lld %lld",&n,&m);sum_q=sqrt(1ll*n*n/m);
    for(register long long i=1;i<=n;++i){scanf("%lld",&a[i]);belong[i]=i/sum_q+1;}
    for(register long long i=1;i<=m;++i){scanf("%lld %lld %lld %lld",&que[i].l,&que[i].r,&que[i].a,&que[i].b);que[i].id=i;}
    std::sort(que+1,que+m+1,cmp);l=que[1].l,r=que[1].r;for(register long long i=l;i<=r;++i)add(a[i]);
    que[1].ans1=query1(que[1].b)-query1(que[1].a-1);que[1].ans2=query2(que[1].b)-query2(que[1].a-1);
    for(register long long i=2;i<=m;++i){
        while(l<que[i].l){del(a[l]);l++;}while(l>que[i].l){l--;add(a[l]);}
        while(r<que[i].r){r++;add(a[r]);}while(r>que[i].r){del(a[r]);r--;}
        que[i].ans1=query1(que[i].b)-query1(que[i].a-1);que[i].ans2=query2(que[i].b)-query2(que[i].a-1);
    }std::sort(que+1,que+m+1,cmp_id);
    for(register long long i=1;i<=m;++i)printf("%lld %lld\n",que[i].ans1,que[i].ans2);
}
码量很小^-^

相关文章: