头像

高数




离线:4个月前


问题 找bug中

高数
6个月前

正确代码。找bug中

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define M 100009
#define INF (1e18)-1
int n,m;
int l[M],r[M],p[M];
int laz[M<<2],val[M<<2];
void pushup(int rt)
{
    val[rt] = val[rt<<1] & val[rt<<1|1];
}
void pushdown(int rt)
{
    if(laz[rt])
    {
        val[rt<<1] |= laz[rt];
        val[rt<<1|1] |= laz[rt];
        laz[rt<<1] |= laz[rt];
        laz[rt<<1|1] |= laz[rt];
        laz[rt] = 0;
    }
}
void build(int l,int r,int rt)
{
    laz[rt] = 0;
    if(l == r)
    {
        val[rt] = 0;
        return ;
    }
    int m = (l+r)>>1;
    build(l,m,rt<<1);
    build(m+1,r,rt<<1|1);
    pushup(rt);
}
void update(int a,int b,int c,int l,int r,int rt)
{
    if(a <= l && r <= b)
    {
        val[rt] |= c;
        laz[rt] |= c;
        return ;
    }
    pushdown(rt);
    int m = (l+r)>>1;
    if(a <= m) update(a,b,c,l,m,rt<<1);
    if(b > m) update(a,b,c,m+1,r,rt<<1|1);
    pushup(rt);
}
int query(int a,int b,int l,int r,int rt)
{
    if(a <= l && r <= b)
    {
        return val[rt];
    }
    pushdown(rt);
    int m = (l+r)>>1;
    int ret = INF;
    if(a <= m) ret &= query(a,b,l,m,rt<<1);
    if(b > m) ret &= query(a,b,m+1,r,rt<<1|1);
    return ret;
}
bool judge()
{
    for(int i=1;i<=n;i++) cout<<query(i,i,1,n,1)<<" ";
    cout<<endl;
    for(int i = 0;i < m;i++)
    {
        cout<<query(l[i],r[i],1,n,1)<<" "<<p[i]<<endl;
        if(query(l[i],r[i],1,n,1) != p[i])
            return true;
    }
    printf("YES\n");
    for(int i = 1;i < n;i++)
    {
        printf("%d ",query(i,i,1,n,1));
    }
    printf("%d\n",query(n,n,1,n,1));
    return false;
}
int main()
{
    while(scanf("%d %d",&n,&m)==2)
    {
        build(1,n,1);
        for(int i = 0;i < m;i++)
        {
            scanf("%d %d %d",&l[i],&r[i],&p[i]);
            update(l[i],r[i],p[i],1,n,1);
            cout<<query(l[i],r[i],1,n,1)<<" "<<p[i]<<endl;
        }
        if(judge())
            printf("NO\n");
    }
    return 0;
}

编译器报了什么错误?Compile Error? Runtime Error?



新鲜事 原文

高数
6个月前
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define M 100009 #define INF (1e18)-1 int n,m; int l[M],r[M],p[M]; int laz[M<<2],val[M<<2]; void pushup(int rt) { val[rt] = val[rt<<1] & val[rt<<1|1]; } void pushdown(int rt) { if(laz[rt]) { val[rt<<1] |= laz[rt]; val[rt<<1|1] |= laz[rt]; laz[rt<<1] |= laz[rt]; laz[rt<<1|1] |= laz[rt]; laz[rt] = 0; } } void build(int l,int r,int rt) { laz[rt] = 0; if(l == r) { val[rt] = 0; return ; } int m = (l+r)>>1; build(l,m,rt<<1); build(m+1,r,rt<<1|1); pushup(rt); } void update(int a,int b,int c,int l,int r,int rt) { if(a <= l && r <= b) { val[rt] |= c; laz[rt] |= c; return ; } pushdown(rt); int m = (l+r)>>1; if(a <= m) update(a,b,c,l,m,rt<<1); if(b > m) update(a,b,c,m+1,r,rt<<1|1); pushup(rt); } int query(int a,int b,int l,int r,int rt) { if(a <= l && r <= b) { return val[rt]; } pushdown(rt); int m = (l+r)>>1; int ret = INF; if(a <= m) ret &= query(a,b,l,m,rt<<1); if(b > m) ret &= query(a,b,m+1,r,rt<<1|1); return ret; } bool judge() { for(int i=1;i<=n;i++) cout<<query(i,i,1,n,1)<<" "; cout<<endl; for(int i = 0;i < m;i++) { cout<<query(l[i],r[i],1,n,1)<<" "<<p[i]<<endl; if(query(l[i],r[i],1,n,1) != p[i]) return true; } printf("YES\n"); for(int i = 1;i < n;i++) { printf("%d ",query(i,i,1,n,1)); } printf("%d\n",query(n,n,1,n,1)); return false; } int main() { while(scanf("%d %d",&n,&m)==2) { build(1,n,1); for(int i = 0;i < m;i++) { scanf("%d %d %d",&l[i],&r[i],&p[i]); update(l[i],r[i],p[i],1,n,1); cout<<query(l[i],r[i],1,n,1)<<" "<<p[i]<<endl; } if(judge()) printf("NO\n"); } return 0; }



高数
7个月前
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=2020;
typedef int LL;
LL cake[55],eatmouth[maxn];
LL eatsum[maxn];
LL n,m,l,r,mid;
LL total;//蛋糕总面积 
LL chi;//吃的总数 
LL dfs(LL peoide,LL pieces)//人数数目下标,蛋糕数量下标 
{
    if(peoide<1) return 1;//  蛋糕够吃了 人少了  上调 
    //像填瓶子,先填嘴巴最大的,反之若先填小的,那么像填瓶子一下没有先填快的更容易填满,在程序中就是更快判断二分答案的可行性 
    for(LL i=pieces;i<=n;i++)
    {
        if(total<chi) return 0;//  蛋糕不够吃 -->人多了 下调 
        if(peoide<1) return 1;//  蛋糕够吃 -->人少了 上调 
        //记得回溯 
        if(cake[i]>=eatmouth[peoide])  
        {
            cake[i]-=eatmouth[peoide];
            total-=eatmouth[peoide];
            chi-=eatmouth[peoide];  
            //剪枝 

            if(total<eatmouth[1]&&peoide!=1) return 0;//1 蛋糕不够吃 -->人多了  下降 
            if(cake[i]<eatmouth[1]) total-=cake[i];

            if(eatmouth[peoide]==eatmouth[peoide-1]) 
            {
                dfs(peoide-1,pieces);
            }
            else 
            {
                dfs(peoide-1,1);
            }
            //回溯
             if(cake[i]<eatmouth[1])    total+=cake[i];
             chi+=eatmouth[peoide];
             total+=eatmouth[peoide];
             cake[i]+=eatmouth[peoide];
        }
    }
return 1;
}
int main(void)
{
 // cin.tie(0);std::ios::sync_with_stdio(false);
  cin>>n;
  for(LL i=1;i<=n;i++)  {cin>>cake[i];total+=cake[i];}
  cin>>m;
  for(LL i=1;i<=m;i++) {cin>>eatmouth[i];}

  sort(cake+1,cake+n+1);
  sort(eatmouth+1,eatmouth+1+m);

  while(eatmouth[m]>total) m--;//减少二分枚举范围,就是减少dfs的过程 

  for(LL i=1;i<=m;i++)
  eatsum[i]=eatsum[i-1]+eatmouth[i];
  l=0,r=m;
  //<=x的 前面的数 
  while(l<r)
  {
     mid=(l+r+1)>>1;
     chi=eatsum[mid];
     if(dfs(mid,1)) l=mid;//上调人数 
     else r=mid-1;  //下降人数 
  } 
  if(l==0) cout<<0<<endl;
  else cout<<l<<endl;
return 0;
}





新鲜事 原文

高数
8个月前
斐波那契多少的时候要高精阿,,...我心态炸了..我这学期就是个废物



高数
8个月前

因为怕明天C语言机考锁语言卡c++,所以晚上看下O(n^2)的排序,看看自己板子有没有错。等下复习快排防止锁语言数据范围卡O(n^2)

C 代码

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e5;
typedef long long LL;
LL a[maxn];
LL b[maxn];
void xzsort(LL a[],LL l,LL r)
{
    LL i,j;//从小到大排 
    for(LL i=l;i<=r;i++)
        {
            LL k=i;
            for(LL j=i+1;j<=r;j++)
            {
                if(a[k]>a[j]) k=j; 
            }
            LL t=a[k];
            a[k]=a[i];
            a[i]=t;
        }
}
int main(void)
{
    LL n,l,r;cin>>n>>l>>r;
    for(LL i=0;i<n;i++) cin>>a[i];
    xzsort(a,l,r);
    for(LL i=0;i<n;i++) cout<<a[i]<<' '; 
return 0;
}


新鲜事 原文

高数
8个月前
高数离散翻车了0.0


新鲜事 原文

高数
8个月前
离散数学有个地方算错了55555..好多人考完在群里说满分了555555


新鲜事 原文

高数
8个月前
明天就要考试了5555大佬带带我


新鲜事 原文

高数
8个月前
A不熟的人找B帮忙,B找不熟的我帮忙...期末考本来就烦躁..差点想祖安你


新鲜事 原文

高数
8个月前
差点谈崩