Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <tuple>
- using namespace std;
- const int N=4;
- pair<int, int> mx[N*4];
- void build(int x, int l, int r){
- if (l == r){
- cin >> mx[x].first;
- mx[x].second=l;
- return;
- }
- int mid= (l+r)/2;
- build(x<<1, l, mid);
- build (x<<1|1, mid+1, r);
- mx[x]=max(mx[x<<1], mx[x<<1|1]);
- }
- void update(int x,int l, int r,int p) {
- if(l==r){
- mx[x]={0, 0};
- return;
- }
- int mid=(l+r)/2;
- if(p<=mid)update(x<<1, l, mid, p);
- else update(x<<1|1, mid+1,r, p);
- mx[x]=max(mx[x<<1],mx[x<<1|1]);
- }
- pair<int, int> query (int x, int ql, int qr, int l, int r){
- if(ql==l&&qr==r) return mx[x];
- int mid=(l+r)/2;
- if(qr<=mid)return query(x<<1,ql,qr,l,mid);
- if(ql>mid)return query(x<<1|1, ql,qr,mid+1,r);
- return max(query(x<<1,ql,mid,l,mid),query(x<<1|1,mid+1,qr,mid+1,r));
- }
- int main(){
- build(1, 1, 3);
- int a,b,c,p;
- tie(a, p)=query (1, 1, 3, 1, 3);
- update(1, 1, 3, p);
- tie(b, p)=query (1, 1, 3, 1, 3);
- update(1, 1, 3, p);
- tie(c, p)=query (1, 1, 3, 1, 3);
- update(1, 1, 3, p);
- if(a==b&&b==c) {
- cout<< "3 "<<a<<endl;
- } else if(a==b){
- cout<<"2 "<<a<<" " <<c<<"\n";
- }else if(b-c==0){
- cout<<2<<" "<<a<<" "<<b<<'\n';
- }else {
- cout<<"1 " << a <<' ' <<b<<' '<<c<<endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment