Submission #1229540

#TimeUsernameProblemLanguageResultExecution timeMemory
1229540ivazivaWall (IOI14_wall)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; #define MAXN 2000001 struct Segtree{ int sum;int maksi,mini; int drugimaksi,drugimini; int brojmaksi,brojmini; }; Segtree seg[MAXN*4]; Segtree mergee(Segtree seg1,Segtree seg2) { Segtree ans;ans.sum=seg1.sum+seg2.sum; if (seg1.maksi==seg2.maksi) {ans.maksi=seg1.maksi;ans.drugimaksi=max(seg1.drugimaksi,seg2.drugimaksi);ans.brojmaksi=seg1.brojmaksi+seg2.brojmaksi;} else if (seg1.maksi>seg2.maksi) {ans.maksi=seg1.maksi;ans.drugimaksi=max(seg1.drugimaksi,seg2.maksi);ans.brojmaksi=seg1.brojmaksi;} else {ans.maksi=seg2.maksi;ans.drugimaksi=max(seg1.maksi,seg2.drugimaksi);ans.brojmaksi=seg2.brojmaksi;} if (seg1.mini==seg2.mini) {ans.mini=seg1.mini;ans.drugimini=min(seg1.drugimini,seg2.drugimini);ans.brojmini=seg1.brojmini+seg2.brojmini;} else if (seg1.mini<seg2.mini) {ans.mini=seg1.mini;ans.drugimini=min(seg1.drugimini,seg2.mini);ans.brojmini=seg1.brojmini;} else {ans.mini=seg2.mini;ans.drugimini=min(seg1.mini,seg2.drugimini);ans.brojmini=seg2.brojmini;} return ans; } void build(int node,int l,int r) { if (l==r) seg[node]={0,0,0,-INT_MAX,INT_MAX,1,1}; else {int mid=(l+r)/2;build(2*node,l,mid);build(2*node+1,mid+1,r);seg[node]=mergee(seg[2*node],seg[2*node+1]);} } void pushmin(int node,int l,int r,int x) { if (seg[node].maksi<=x) return; seg[node].sum+=(long long)seg[node].brojmaksi*(x-seg[node].maksi);seg[node].maksi=x; if (seg[node].mini>x) seg[node].mini=x; if (l!=r) {int mid=(l+r)/2;pushmin(2*node,l,mid,x);pushmin(2*node+1,mid+1,r,x);} } void pushmax(int node,int l,int r,int x) { if (seg[node].mini>=x) return; seg[node].sum+=(long long)seg[node].brojmini*(x-seg[node].mini);seg[node].mini=x; if (seg[node].maksi<x) seg[node].maksi=x; if (l!=r) {int mid=(l+r)/2;pushmax(2*node,l,mid,x);pushmax(2*node+1,mid+1,r,x);} } void updatemin(int node,int l,int r,int a,int b,int x) { if (a>b or seg[node].maksi<=x) return; if (l==a and r==b and seg[node].drugimaksi<x) {pushmin(node,l,r,x);return;} int mid=(l+r)/2;updatemin(2*node,l,mid,a,min(b,mid),x);updatemin(2*node+1,mid+1,r,max(a,mid+1),b,x); seg[node]=mergee(seg[2*node],seg[2*node+1]); } void updatemax(int node,int l,int r,int a,int b,int x) { if (a>b or seg[node].mini>=x) return; if (l==a and r==b and seg[node].drugimini>x) {pushmax(node,l,r,x);return;} int mid=(l+r)/2;updatemax(2*node,l,mid,a,min(b,mid),x);updatemax(2*node+1,mid+1,r,max(a,mid+1),b,x); seg[node]=mergee(seg[2*node],seg[2*node+1]); } int query(int node,int l,int r,int a,int b) { if (a>b) return 0; if (l==a and r==b) return seg[node].sum; int mid=(l+r)/2;return query(2*node,l,mid,a,min(b,mid))+query(2*node+1,mid+1,r,max(a,mid+1),b); } int main() { int n,k;cin>>n>>k;build(1,1,n); for (int i=1;i<=k;i++) { int type;cin>>type;int l,r;cin>>l>>r;l++;r++;int h;cin>>h; if (type==1) updatemax(1,1,n,l,r,h); else updatemin(1,1,n,l,r,h); } for (int i=1;i<=n;i++) cout<<query(1,1,n,i,i)<<" "; cout<<endl; }

Compilation message (stderr)

/usr/bin/ld: /tmp/cc3hqsOM.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cc7W4DCq.o:wall.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/cc3hqsOM.o: in function `main':
grader.cpp:(.text.startup+0x133): undefined reference to `buildWall(int, int, int*, int*, int*, int*, int*)'
collect2: error: ld returned 1 exit status