zoukankan      html  css  js  c++  java
  • uoj46玄学

    复杂度辣鸡没人权

    疯狂爆oj

    感觉要被众多uoj用户骂了

      1 #include <bits/stdc++.h>
      2 #define ll long long
      3 #define LS ls[now]?ls[now]:(tr[++NODE]=stru(),ls[now]=NODE)
      4 #define RS rs[now]?rs[now]:(tr[++NODE]=stru(),rs[now]=NODE)
      5 #define mid (l+r>>1)
      6 using namespace std;
      7 int MOD,NODE,KEY,n,m,opt,l,r,x,y;
      8 int root[800001];
      9 int ls[20000001],rs[20000001],st[800001],L[800001],R[800001],X[800001],Y[800001];
     10 struct stru
     11 {
     12     long long k,b;
     13     stru()
     14     {
     15         k=1;b=0;
     16     }
     17     stru(int K,int B)
     18     {
     19         k=K;b=B;
     20     }
     21  } tr[20000001],alb[800001];
     22 stru merge(stru x,stru y)
     23 {
     24     return stru(x.k*y.k%MOD,(x.b*y.k+y.b)%MOD);
     25 }
     26 bool is(stru p)
     27 {
     28     return(p.k!=1 || p.b!=0);
     29 }
     30 void add(int now,int l,int r,int x,int y,int p,int q)
     31 {
     32     if(l==x && r==y)
     33     {
     34         tr[now]=merge(tr[now],stru(p,q));
     35         return;
     36     }
     37     if(is(tr[now]))
     38     {
     39         tr[LS]=merge(tr[LS],tr[now]);
     40         tr[RS]=merge(tr[RS],tr[now]);
     41         tr[now]=stru();
     42     }
     43     if(x<=mid) add(LS,l,mid,x,min(mid,y),p,q);
     44     if(y>mid) add(RS,mid+1,r,max(mid+1,x),y,p,q);
     45 }
     46 int read()
     47 {
     48     int x=0;char c=getchar();
     49     while (c<'0'||c>'9')c=getchar();
     50     while (c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
     51     return x;
     52 }
     53 int main()
     54 {
     55     KEY=read();
     56     n=read();MOD=read();
     57     for(int i=1;i<=n;i++)
     58         st[i]=read();
     59     m=read();
     60     int N=5000;
     61     int lastans=0;
     62     for(int i=1,j=0,J=0;i<=m;i++)
     63     {
     64         opt=read();l=read();r=read();x=read();
     65         if(KEY&1)
     66             l^=lastans,r^=lastans;
     67         if(opt==1)
     68         {
     69             y=read();
     70             L[++j]=l;R[j]=r;X[j]=x;Y[j]=y;
     71             if(j%N==1)
     72                 root[++J]=++NODE;
     73             add(root[J],1,n,l,r,x,y);
     74         }
     75         if(opt==2)
     76         {
     77             if(KEY&1)
     78                 x^=lastans;
     79             int k,K;ll ret=st[x];
     80             for(k=l;k%N!=1 && k<=r;k++)
     81             if(L[k]<=x && x<=R[k])
     82                 ret=(ret*X[k]+Y[k])%MOD;
     83             if(k<=r)
     84             {
     85                 for(K=k/N+1;K*N<=r;K++)
     86                 { 
     87                     int now=root[K],l=1,r=n,top=0;
     88                     while(l<r)
     89                     {
     90                         if(is(tr[now])) 
     91                             alb[++top]=tr[now];
     92                         if(x<=mid)
     93                             now=LS,r=mid;
     94                         else
     95                             now=RS,l=mid+1;
     96                     } 
     97                     stru tem=tr[now];
     98                     for(int i=top;i;i--)
     99                         tem=merge(tem,alb[i]);
    100                 //    tem=que(root[])
    101                     ret=(tem.k*ret+tem.b)%MOD;
    102                 } 
    103                 for(k=(K-1)*N+1;k<=r;k++)
    104                 if(L[k]<=x && x<=R[k])
    105                     ret=(ret*X[k]+Y[k])%MOD;    
    106             }
    107             printf("%d
    ",ret);
    108         //    puts("OK");
    109             lastans=ret;
    110          } 
    111     }
    112     return 0;
    113 }
  • 相关阅读:
    pytest文档55-plugins插件开发
    pytest文档54-Hooks函数terminal打印测试结果(pytest_report_teststatus)
    Linux内存占用过高排查过程
    系统日志:/var/log/messages
    win10 安装oracle 11gR2_database(内附下载地址)
    CentOS 7 下 Docker 的离线安装方法
    docker 常用命令
    【docker】如何将服务器加入集群,成为子节点
    Docker管理面板系列——Portainer
    基于Docker的Consul服务发现集群搭建
  • 原文地址:https://www.cnblogs.com/wanglichao/p/7148791.html
Copyright © 2011-2022 走看看