2018-04-03 查漏补缺

优雅的暴力-莫队
莫队专题

A 区间不同个数的多少

#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define N 1000005
int n,m;
struct Node{
int a;int b;
int id;
}node[N];
int num[N];
int block;
bool cmp(struct Node a,struct Node b){

   if((a.a/block)==(b.a/block)){
    return a.b<b.b;
    }
return (a.a/block)<(b.a/block);
}
int ans[N];
int vis[N];
int main()
{

   scanf("%d",&n);
   for(int i=1;i<=n;i++){
    scanf("%d",&num[i]);
   }
   scanf("%d",&m);

   block=sqrt(n+0.5);
   for(int i=1;i<=m;i++){
    scanf("%d%d",&node[i].a,&node[i].b);
    node[i].id=i;
   }

 
   sort(node+1,node+1+m,cmp);

   int l,r;
   l=1;r=0;

   int t=0;
   for(int i=1;i<=m;i++){

   while(l<node[i].a){

        vis[num[l]]--;
        if(vis[num[l]]==0)
            t--;
        l++;
    }
    while(l>node[i].a){
            l--;

        vis[num[l]]++;
        if(vis[num[l]]==1)
            t++;
    }

     while(r<node[i].b){
             r++;
        vis[num[r]]++;
        if(vis[num[r]]==1)
            t++;

    }
    while(r>node[i].b){
        vis[num[r]]--;
        if(vis[num[r]]==0)
            t--;
        r--;
    }
    ans[node[i].id]=t;
   }
   for(int i=1;i<=m;i++){

        printf("%d\n",ans[i]);

   }

    return 0;
}

C

因为没有快速读入 超时了。

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<vector>
using namespace std;
#define N 1000005
typedef long long ll;
struct Node{
int a,b,k,id;}node[N];
vector<int>v[N];
int n,m;
int num[N];
int cn[N];
int en[N];
int block;
int c[N];
int mun[N];
int po[N];
int nn=1;
bool vis[N];
int nnum[N];
void add(int x){
   cn[mun[x]]++;
   c[cn[mun[x]]]++;
}
void del(int x){
    c[cn[mun[x]]]--;
    cn[mun[x]]--;
}
bool cmp(struct Node a,struct Node b){
    if(a.a/block==b.a/block)
        return a.b<b.b;
    return a.a/block<b.a/block;
}
int pb[N];
int dfs(int x){
mun[nn]=num[x];
po[x]=nn;
nn++;
vis[x]=1;
nnum[x]=1;
for(int i=0;i<v[x].size();i++){
    if(vis[v[x][i]]==0){
        nnum[x]+=dfs(v[x][i]);
    }
}
pb[x]=nn-1;
return nnum[x];
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<n+1;i++){
        scanf("%d",num+i);
    }
    int u,vv;
    for(int i=1;i<n;i++){
        scanf("%d%d",&u,&vv);
        v[u].push_back(vv);
        v[vv].push_back(u);
    }
    dfs(1);
    for(int i=1;i<=m;i++){
        scanf("%d%d",&node[i].a,&node[i].k);
        node[i].b=pb[node[i].a];
        node[i].a=po[node[i].a];
        node[i].id=i;
    }
    block=sqrt(n+0.5);
    sort(node+1,node+1+m,cmp);
    int l,r;l=1;r=0;
//    for(int i=1;i<nn;i++){
//        cout<<mun[i]<<" ";
//    }
//    cout<<endl;
    for(int i=1;i<=m;i++){
           // cout<<node[i].a<<" "<<node[i].b<<endl;
        while(l<node[i].a){
            del(l);l++;
        }while(l>node[i].a){
            l--;
            add(l);
        } while(r<node[i].b){
            r++;
            add(r);
        }while(r>node[i].b){
            del(r);
             r--;
        }
       en[node[i].id]=c[node[i].k];
    }
    for(int i=1;i<m+1;i++){
        printf("%d\n",en[i]);
    }
return 0;
}

没有强制转换成long long wa了2小时,心口子痛 T T ,以后一定不要犯了
求区间的组合数
I

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;
#define N 100005
typedef long long ll;
struct Node{
int a,b,id;}node[N];
ll gcd(ll a,ll b){
return b==0?a:gcd(b,a%b);
}
int num[N];
int cn[N];
ll ans=0;
ll en[N];
ll ff[N];
int n,m;
void add(int x){
   cn[num[x]]++;
   if(cn[num[x]]>1){
    ans+=cn[num[x]]-1;
   }
}
void del(int x){
    if(cn[num[x]]>1)
    {
        ans-=cn[num[x]]-1;
    }
    cn[num[x]]--;
}
int block;
bool cmp(struct Node a,struct Node b){

    if(a.a/block==b.a/block){
        return a.b<b.b;
    }
    return a.a/block<b.a/block;
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<n+1;i++){
        scanf("%d",num+i);
    }
    for(int i=1;i<=m;i++){
        scanf("%d%d",&node[i].a,&node[i].b);
        node[i].id=i;
    }
    block=sqrt(n+0.5);
    sort(node+1,node+1+m,cmp);
    int l,r;l=1;r=0;
    for(int i=1;i<=m;i++){
        while(l<node[i].a){
            del(l);l++;
        }while(l>node[i].a){
            l--;
            add(l);
        } while(r<node[i].b){
            r++;
            add(r);
        }while(r>node[i].b){
            del(r);
             r--;
        }
        en[node[i].id]=ans;
        ff[node[i].id]=ll(node[i].b-node[i].a+1)*(node[i].b-node[i].a)/2;
    }
    for(int i=1;i<m+1;i++){
        if(en[i]==0){
            printf("0/1\n");
        }else{


        ll temp=gcd(en[i],ff[i]);
        printf("%lld/%lld\n",en[i]/temp,ff[i]/temp);
        }
    }
return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容